MiDeleteFinalPageTables

NTSTATUS __stdcall MiDeleteFinalPageTables(_EPROCESS *Process){
  unsigned __int64 v1; 
  __int64 v3; 
  _MMPFN *PfnDb; 
  _ETHREAD *CurrentThread; 
  int i; 
  unsigned __int64 v7; 
  __int64 v8; 
  INT64 v9; 
  bool v10; 
  NTSTATUS result; 
  _MI_DELETE_VA_INFO *BugCheckParameter4; 
  UINT8 WsIrql[16]; 
  __int128 v14; 
  __int128 v15; 
  _KAPC_STATE ApcState; 

  v1 = Process->Pcb.DirectoryTableBase >> 12;
  memset(&ApcState, 0, sizeof(ApcState));
  v3 = v1;
  *(_OWORD *)WsIrql = 0i64;
  v14 = 0i64;
  v15 = 0i64;
  PfnDb = MmGetPfnDb();
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  KiStackAttachProcess(Process, 0i64, &ApcState);
  for( i = 0; i < 2; ++i )
  {
    if( i )
    {
      v7 = *(&stru_140C4DB30 + 11);
      if( !*(&stru_140C4DB30 + 11) )
        continue;
    }
    else
    {
      v7 = (unsigned __int64)&UKUSER_SHARED_DATA;
    }
    LODWORD(v8) = MI_READ_PTE_LOCK_FREE((INT64)&MmGetPml4eBase()[(v7 >> 39) & 0x1FF]);
    if( v8 )
    {
      --CurrentThread->Tcb.SpecialApcDisable;
      ExAcquirePushLockExclusiveEx(&Process->AddressCreationLock, 0i64);
      CurrentThread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 1u;
      MiDeleteVirtualAddresses((VOID *)v7, (VOID *)v7, 0i64, (UINT8)WsIrql, BugCheckParameter4);
      UNLOCK_ADDRESS_SPACE(CurrentThread, Process);
    }
  }
  MiDeleteVadBitmap(Process);
  if( (PfnDb[v3].u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64) != 2 )
    KeBugCheckEx(
      0x1Au,
      (PVOID)0x3453,
      Process,
      (PVOID)(v3 * 48 / 48),
      (PVOID)(PfnDb[v3].u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64));
  MiDeleteProcessShadow();
  KiUnstackDetachProcess(&ApcState, 0i64);
  _interlockedbittestandset(&Process->Pcb.ProcessFlags, 0xAu);
  MiUnlinkProcessFromSession(Process);
  KeFlushProcessTb(Process->Pcb.DirectoryTableBase);
  v10 = MiDeleteTopLevelPage(v9, Process->Pcb.DirectoryTableBase >> 12) == 3;
  result = *(_DWORD *)&WsIrql[8];
  if( v10 )
    return *(_DWORD *)&WsIrql[8] + 1;
  return result;
}

Referenced by:

MmDeleteProcessAddressSpace