MiReleaseCommitForResetPages
VOID __stdcall MiReleaseCommitForResetPages(_EPROCESS *Process){
INT64 *SharedVm;
_ETHREAD *CurrentThread;
INT64 *v4;
INT64 v5;
_QWORD *v6;
unsigned __int64 i;
int v8;
_QWORD **v9;
unsigned __int64 v10;
_QWORD *v11;
UINT64 v12;
INT64 *v13;
KIRQL v14;
struct _KEVENT *v15;
unsigned __int64 v16;
UINT64 v17;
KeForceAttachProcess(Process);
SharedVm = MiGetSharedVm((INT64)Process + 1664);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = SharedVm;
v5 = SharedVm[4];
if( (*(_DWORD *)(v5 + 48) & 1) != 0 )
{
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx((UINT64)Process + 1224, 0i64);
*((_BYTE *)CurrentThread + 1304) |= 1u;
v6 = (_QWORD *)*((_QWORD *)Process + 251);
i = 0i64;
while( v6 )
{
i = (unsigned __int64)v6;
v6 = (_QWORD *)*v6;
}
while( i )
{
--*((_WORD *)CurrentThread + 243);
ExAcquirePushLockExclusiveEx(i + 40, 0i64);
*((_BYTE *)CurrentThread + 1304) |= 0x80u;
MiIsVadEligibleForCommitRelease((_MMVAD_SHORT *)i);
if( v8 )
MiWalkResetCommitPages(i);
MiUnlockVad((__int64)CurrentThread, i);
v9 = *(_QWORD ***)(i + 8);
v10 = i;
if( v9 )
{
v11 = *v9;
for( i = *(_QWORD *)(i + 8); v11; v11 = (_QWORD *)*v11 )
i = (unsigned __int64)v11;
}
else
{
while( 1 )
{
i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
if( !i || *(_QWORD *)i == v10 )
break;
v10 = i;
}
}
}
UNLOCK_ADDRESS_SPACE((__int64)CurrentThread, (__int64)Process);
}
v12 = _InterlockedExchange64((volatile __int64 *)Process + 234, 0i64);
if( v12 )
MiReturnCommit(*(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *((unsigned __int16 *)Process + 919)), v12);
v13 = MiGetSharedVm((INT64)Process + 1664);
v14 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)v13);
*((_DWORD *)v13 + 1) = 0;
v15 = *(struct _KEVENT **)(v5 + 40);
*(_QWORD *)(v5 + 40) = 0i64;
v16 = *(_QWORD *)(v5 + 32);
if( v16 <= v12 )
v17 = 0i64;
else
v17 = v16 - v12;
*(_QWORD *)(v5 + 32) = v17;
v4[1] += v12;
MiUnlockWorkingSetExclusive((INT64)Process + 1664, v14);
MiLogResetPagesCommitRelease();
KeForceDetachProcess(0i64, 0);
KeSetEvent(v15, 0);
}Referenced by:
MmOutSwapProcess