MiDeleteEmptyPageTables

VOID __fastcall MiDeleteEmptyPageTables(VOID *VirtualAddress, UINT64 a2, CHAR a3){
  _ETHREAD *CurrentThread; 
  _EPROCESS *Process; 
  _MMVAD_SHORT *p_Core; 
  _MMVAD *Address; 
  int v10; 
  __int64 LongFlags1; 
  unsigned __int64 v12; 
  _KTBFLUSH_TYPE v13; 
  char v14; 
  UINT64 v15; 
  __int128 v16[3]; 
  INT64 v17[22]; 
  __int64 v18[20]; 
  __int64 v19[24]; 

  memset(v19, 0i64, 0xB8u);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Process = CurrentThread->Tcb.ApcState.Process;
  if( (a3 & 1) != 0 )
  {
    p_Core = 0i64;
LABEL_15:
    memset(v16, 0, sizeof(v16));
    memset(v18, 0i64, 0x98u);
    memset(v17, 0i64, sizeof(v17));
    v18[12] = (__int64)p_Core;
    v18[2] = (__int64)v16;
    LODWORD(v18[13]) = 128;
    v13 = MiTbFlushType(&Process->Vm.Instance);
    WORD2(v19[0]) = 0;
    v19[2] = 0i64;
    v19[3] = 0i64;
    LODWORD(v19[0]) = v13;
    v17[2] = (INT64)v19;
    LODWORD(v19[1]) = 20;
    LODWORD(v17[1]) = 0;
    v17[4] = (INT64)VirtualAddress;
    v17[5] = a2;
    BYTE2(v17[0]) = BYTE2(v17[0]) & 0xE3 | 4;
    v17[21] = (INT64)v18;
    LOWORD(v17[0]) = 7;
    v17[3] = (INT64)&Process->Vm;
    v17[19] = (INT64)MiDeleteEmptyPageTable;
    v17[20] = (INT64)MiDeleteEmptyPageTableTail;
    MiLockWorkingSetShared();
    BYTE6(v17[0]) = v14;
    MiWalkPageTables((INT64)v17);
    LOBYTE(v15) = BYTE6(v17[0]);
    MiUnlockWorkingSetShared(&Process->Vm.Instance, v15);
    if( !p_Core )
      return;
    UNLOCK_PAGE_TABLE_COMMITMENT(CurrentThread, Process);
    goto LABEL_17;
  }
  LOCK_ADDRESS_SPACE(CurrentThread, CurrentThread->Tcb.ApcState.Process);
  if( (Process->Flags & 0x20) != 0 )
    goto LABEL_18;
  Address = MiLocateAddress(VirtualAddress);
  p_Core = &Address->Core;
  if( !Address || a2 >> 12 > (Address->Core.EndingVpn | ((unsigned __int64)Address->Core.EndingVpnHigh << 32)) )
    goto LABEL_18;
  MiLockVad(CurrentThread, &Address->Core);
  if( (p_Core->u.LongFlags & 0x100000) != 0
    && MiVadPureReserve(p_Core)
    && ((v10 & 0x1000000) != 0 || (v10 & 0x2000000) == 0) )
  {
    LongFlags1 = p_Core->u1.LongFlags1;
    LODWORD(LongFlags1) = LongFlags1 & 0x7FFFFFFF;
    v12 = LongFlags1 | ((unsigned __int64)p_Core->CommitChargeHigh << 31);
    if( v12 != 0x7FFFFFFFDi64 && (v10 & 4) == 0 && (v12 < 0x7FFFFFFFDi64 || v12 == 0x7FFFFFFFEi64) )
    {
      LOCK_PAGE_TABLE_COMMITMENT(CurrentThread, Process);
      goto LABEL_15;
    }
  }
LABEL_17:
  MiUnlockVad(CurrentThread, p_Core);
LABEL_18:
  UNLOCK_ADDRESS_SPACE(CurrentThread, Process);
}

Referenced by:

MiWriteAwePtes
MmFreeVirtualMemory