MiDeleteEmptyPageTables

VOID __fastcall MiDeleteEmptyPageTables(UINT64 a1, UINT64 a2, CHAR a3){
  _ETHREAD *CurrentThread; 
  __int64 v7; 
  __int64 v8; 
  RTL_BALANCED_NODE *Address; 
  int v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  int v13; 
  __int128 v14[3]; 
  __int16 v15; 
  char v16; 
  UINT8 v17; 
  int v18; 
  int *p_result; 
  __int64 v20; 
  UINT64 v21; 
  UINT64 v22; 
  INT64(__fastcall *v23)(_QWORD *, UINT64); 
  INT64(__fastcall *v24)(INT64 *); 
  INT64 *v25; 
  INT64 v26[13]; 
  int v27; 
  int result; 
  __int16 result_4; 
  int v30; 
  __int64 v31; 
  __int64 v32; 
  memset((INT64)&result, 0i64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v7 = *((_QWORD *)CurrentThread + 23);
  if( (a3 & 1) != 0 )
  {
    v8 = 0i64;
LABEL_15:
    memset(v14, 0, sizeof(v14));
    memset((INT64)v26, 0i64);
    memset((INT64)&v15, 0i64);
    v26[12] = v8;
    v26[2] = (INT64)v14;
    v27 = 128;
    v13 = MiTbFlushType(v7 + 1664);
    result_4 = 0;
    v31 = 0i64;
    v32 = 0i64;
    result = v13;
    p_result = &result;
    v30 = 20;
    v18 = 0;
    v21 = a1;
    v22 = a2;
    v16 = v16 & 0xE3 | 4;
    v25 = v26;
    v15 = 7;
    v20 = v7 + 1664;
    v23 = MiDeleteEmptyPageTable;
    v24 = MiDeleteEmptyPageTableTail;
    v17 = MiLockWorkingSetShared(v7 + 1664);
    MiWalkPageTables((INT64)&v15);
    MiUnlockWorkingSetShared(v7 + 1664, v17);
    if( !v8 )
      return;
    UNLOCK_PAGE_TABLE_COMMITMENT((__int64)CurrentThread, v7);
    goto LABEL_17;
  }
  LOCK_ADDRESS_SPACE((__int64)CurrentThread, *((_QWORD *)CurrentThread + 23));
  if( (*(_DWORD *)(v7 + 1124) & 0x20) != 0 )
    goto LABEL_18;
  Address = MiLocateAddress(a1);
  v8 = (__int64)Address;
  if( !Address || a2 >> 12 > (HIDWORD(Address[1].Left) | ((unsigned __int64)BYTE1(Address[1].Right) << 32)) )
    goto LABEL_18;
  MiLockVad((__int64)CurrentThread, (__int64)Address);
  if( (*(_DWORD *)(v8 + 48) & 0x100000) != 0
    && (unsigned int)MiVadPureReserve(v8)
    && ((v10 & 0x1000000) != 0 || (v10 & 0x2000000) == 0) )
  {
    v11 = *(unsigned int *)(v8 + 52);
    LODWORD(v11) = v11 & 0x7FFFFFFF;
    v12 = v11 | ((unsigned __int64)*(unsigned __int8 *)(v8 + 34) << 31);
    if( v12 != 0x7FFFFFFFDi64 && (v10 & 4) == 0 && (v12 < 0x7FFFFFFFDi64 || v12 == 0x7FFFFFFFEi64) )
    {
      LOCK_PAGE_TABLE_COMMITMENT(CurrentThread, (_EPROCESS *)v7);
      goto LABEL_15;
    }
  }
LABEL_17:
  MiUnlockVad((__int64)CurrentThread, v8);
LABEL_18:
  UNLOCK_ADDRESS_SPACE((__int64)CurrentThread, v7);
}

Referenced by:

MiWriteAwePtes
MmFreeVirtualMemory