MiLocateLowestConflictingVad

INT64 **__fastcall MiLocateLowestConflictingVad(INT64 a1, UINT64 a2, UINT64 a3){
  INT64 **result; 
  unsigned __int64 v4; 
  INT64 **v5; 
  INT64 *v6; 
  void *v7; 
  INT64 i; 
  result = MiCheckForConflictingVad(a1, a2, a3);
  v5 = result;
  if( result )
  {
    while( 1 )
    {
      v6 = *v5;
      v7 = v5;
      if( *v5 )
      {
        for( ; v6[1]; v6 = (INT64 *)v6[1] )
          ;
      }
      else
      {
        for( i = (INT64)v5[2]; ; i = v6[2] )
        {
          v6 = (INT64 *)(i & 0xFFFFFFFFFFFFFFFCui64);
          if( !v6 || (void *)v6[1] == v7 )
            break;
          v7 = v6;
        }
      }
      if( !v6
        || (((*((unsigned int *)v6 + 7) | ((unsigned __int64)*((unsigned __int8 *)v6 + 33) << 32)) << 12) | 0xFFF) < v4 )
      {
        break;
      }
      v5 = (INT64 **)v6;
    }
    return v5;
  }
  return result;
}

Referenced by:

MiUpdateVadBits