MiUpdateVadBits

VOID __stdcall MiUpdateVadBits(PVOID UserVa, PVOID LastUserVa){
  bool v2; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v5; 
  __int64 LowestConflictingVad; 
  _QWORD **v7; 
  __int64 v8; 
  _QWORD *v9; 
  v2 = LastUserVa < UserVa;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v5 = 0x7FFFFFFEFFFFi64;
  if( !v2 )
    v5 = (unsigned __int64)LastUserVa;
  LowestConflictingVad = (__int64)MiLocateLowestConflictingVad(*((_QWORD *)CurrentThread + 23), (UINT64)UserVa, v5 - 1);
  if( LowestConflictingVad )
  {
    do
    {
      MiSetVadBits(LowestConflictingVad);
      v7 = *(_QWORD ***)(LowestConflictingVad + 8);
      v8 = LowestConflictingVad;
      if( v7 )
      {
        v9 = *v7;
        for( LowestConflictingVad = *(_QWORD *)(LowestConflictingVad + 8); v9; v9 = (_QWORD *)*v9 )
          LowestConflictingVad = (__int64)v9;
      }
      else
      {
        while( 1 )
        {
          LowestConflictingVad = *(_QWORD *)(LowestConflictingVad + 16) & 0xFFFFFFFFFFFFFFFCui64;
          if( !LowestConflictingVad || *(_QWORD *)LowestConflictingVad == v8 )
            break;
          v8 = LowestConflictingVad;
        }
      }
    }
    while( LowestConflictingVad
         && (*(unsigned int *)(LowestConflictingVad + 24) | ((unsigned __int64)*(unsigned __int8 *)(LowestConflictingVad
                                                                                                  + 32) << 32)) << 12 < v5 );
  }
}

Referenced by:

MiExpandVadBitMap
MiExpandVadBitMapDown