MiBeginProcessClean
__int64 __fastcall MiBeginProcessClean(__int64 a1, __int64 a2){
INT64 v2;
INT64 *SharedVm;
KIRQL v6;
unsigned int v7;
void *v8;
void *v9;
v2 = a2 + 1664;
if( (*(_DWORD *)(a2 + 1124) & 0x20) != 0 )
return 1i64;
--*(_WORD *)(a1 + 486);
ExAcquirePushLockExclusiveEx(a2 + 1224, 0i64);
*(_BYTE *)(a1 + 1304) |= 1u;
SharedVm = MiGetSharedVm(v2);
v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)SharedVm);
v7 = 0;
*((_DWORD *)SharedVm + 1) = 0;
_InterlockedOr((volatile signed __int32 *)(a2 + 1124), 0x20u);
if( (*(_BYTE *)(v2 + 187) & 0x60) != 96 )
*(_BYTE *)(v2 + 187) &= 0x9Fu;
MiUnlockWorkingSetExclusive(v2, v6);
UNLOCK_ADDRESS_SPACE(a1, a2);
v8 = (void *)MiOutlawInswaps(a2);
v9 = v8;
if( (unsigned __int64)v8 > 2 )
MiFreeWorkingSetSwapContext(*(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a2 + 1838)), v8);
LOBYTE(v7) = v9 != 0i64;
return v7;
}Referenced by:
MiReAcquireOutSwappedProcessCommit
MmCleanProcessAddressSpace