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