MiWaitForVadDeletion

VOID __stdcall MiWaitForVadDeletion(_MMVAD_SHORT *Vad){
  _ETHREAD *CurrentThread; 
  CHAR v3; 
  __int64 v4[10]; 

  memset(v4, 0i64, 0x48u);
  if( Vad->VadNode.ParentValue != -1i64 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    HIDWORD(v4[1]) = 0;
    v4[3] = (__int64)&v4[2];
    LODWORD(v4[8]) = 1;
    v4[2] = (__int64)&v4[2];
    LOWORD(v4[1]) = 263;
    BYTE2(v4[1]) = 6;
    MiInsertVadEvent((__int64)Vad, v4, 1);
    MiUnlockVad(CurrentThread, Vad);
    KeWaitForGate((_KGATE *)&v4[1], WrVirtualMemory, v3);
    --CurrentThread->Tcb.SpecialApcDisable;
    ExAcquirePushLockExclusiveEx(&Vad->PushLock, 0i64);
    CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 0x80u;
  }
}

Referenced by:

MiCleanVad
MiLockVadRange
MiObtainReferencedSecureVad
MiObtainReferencedVadEx
MmQueryVirtualMemory