MiBeginProcessClean

NTSTATUS __stdcall MiBeginProcessClean(_ETHREAD *Thread, _EPROCESS *Process){
  _MMSUPPORT_FULL *p_Vm; 
  _MMSUPPORT_SHARED *SharedVm; 
  UINT8 v6; 
  NTSTATUS v7; 
  VOID *v8; 
  VOID *v9; 

  p_Vm = &Process->Vm;
  if( (Process->Flags & 0x20) != 0 )
    return 1;
  --Thread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx(&Process->AddressCreationLock, 0i64);
  Thread->$84F33738BEE95ACDF5C5BF1C8FDC7C8C::_bf_0 |= 1u;
  SharedVm = MiGetSharedVm(&p_Vm->Instance);
  v6 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
  v7 = 0;
  SharedVm->GoodCitizenWaiting = 0;
  _InterlockedOr((volatile signed __int32 *)&Process->1124, 0x20u);
  if( (p_Vm->Instance.Flags._bf_0 & 0x60) != 96 )
    p_Vm->Instance.Flags._bf_0 &= 0x9Fu;
  MiUnlockWorkingSetExclusive(&p_Vm->Instance, v6);
  UNLOCK_ADDRESS_SPACE(Thread, Process);
  v8 = MiOutlawInswaps(Process);
  v9 = v8;
  if( (unsigned __int64)v8 > 2 )
    MiFreeWorkingSetSwapContext(
      *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * Process->Vm.Instance.PartitionId),
      v8);
  LOBYTE(v7) = v9 != 0i64;
  return v7;
}

Referenced by:

MiReAcquireOutSwappedProcessCommit
MmCleanProcessAddressSpace