MiUpdateVadBits

VOID __stdcall MiUpdateVadBits(VOID *UserVa, VOID *LastUserVa){
  bool v2; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v5; 
  _MMVAD_SHORT *LowestConflictingVad; 
  _MMVAD_SHORT **ExtraCreateInfo; 
  _MMVAD_SHORT *v8; 
  _MMVAD_SHORT *NextVad; 

  v2 = LastUserVa < UserVa;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v5 = 0x7FFFFFFEFFFFi64;
  if( !v2 )
    v5 = (unsigned __int64)LastUserVa;
  LowestConflictingVad = (_MMVAD_SHORT *)MiLocateLowestConflictingVad(
                                           (INT64)CurrentThread->Tcb.ApcState.Process,
                                           (UINT64)UserVa,
                                           v5 - 1);
  if( LowestConflictingVad )
  {
    do
    {
      MiSetVadBits(LowestConflictingVad);
      ExtraCreateInfo = (_MMVAD_SHORT **)LowestConflictingVad->ExtraCreateInfo;
      v8 = LowestConflictingVad;
      if( ExtraCreateInfo )
      {
        NextVad = *ExtraCreateInfo;
        for( LowestConflictingVad = (_MMVAD_SHORT *)LowestConflictingVad->ExtraCreateInfo;
              NextVad;
              NextVad = NextVad->NextVad )
        {
          LowestConflictingVad = NextVad;
        }
      }
      else
      {
        while( 1 )
        {
          LowestConflictingVad = (_MMVAD_SHORT *)(LowestConflictingVad->VadNode.ParentValue & 0xFFFFFFFFFFFFFFFCui64);
          if( !LowestConflictingVad || LowestConflictingVad->NextVad == v8 )
            break;
          v8 = LowestConflictingVad;
        }
      }
    }
    while( LowestConflictingVad
         && (LowestConflictingVad->StartingVpn | ((unsigned __int64)LowestConflictingVad->StartingVpnHigh << 32)) << 12 < v5 );
  }
}

Referenced by:

MiExpandVadBitMap
MiExpandVadBitMapDown