MmQueryCommitReleaseState
VOID __stdcall MmQueryCommitReleaseState(
_EPROCESS *Process,
UINT64 *EligibleOut,
UINT64 *CommitDebtOut,
UINT64 *MemResetCommittedPagesOut,
UINT64 *RepurposedMemResetPagesOut){
_MMSUPPORT_FULL *p_Vm;
_MMSUPPORT_SHARED *SharedVm;
UINT64 *v8;
UINT64 *v9;
UINT64 *v10;
UINT64 *v11;
_MMSUPPORT_FLAGS Flags;
int v13;
_MMSUPPORT_SHARED *v14;
UINT64 v15;
unsigned __int64 ReleasedCommitDebt;
UINT64 ResetPagesRepurposedCount;
__int8 bf_0;
char v19;
UINT64 CommitReleaseContext;
_MMSUPPORT_FLAGS v21;
NTSTATUS v22;
_KLOCK_QUEUE_HANDLE LockHandle;
_KAPC_STATE ApcState;
p_Vm = &Process->Vm;
memset(&ApcState, 0, sizeof(ApcState));
memset(&LockHandle, 0, sizeof(LockHandle));
SharedVm = MiGetSharedVm(&Process->Vm.Instance);
Flags = p_Vm->Instance.Flags;
v13 = 0;
v14 = SharedVm;
v21.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0 = Flags.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0;
v15 = 0i64;
ReleasedCommitDebt = SharedVm->ReleasedCommitDebt;
ResetPagesRepurposedCount = 0i64;
if( dword_140CFA1D0 == 1 )
{
bf_0 = Flags.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0;
ReleasedCommitDebt = 0i64;
}
else
{
if( (Flags.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0 & 0x60) == 64 )
{
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 522, &LockHandle);
v22 = MiPrepareAttachThread(Process, &p_Vm->Instance);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( v22 )
{
KeForceAttachProcess(Process);
MiLockWorkingSetShared();
v21 = p_Vm->Instance.Flags;
CommitReleaseContext = HIBYTE(*(unsigned int *)&v21);
if( (v21.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0 & 0x60) == 64 )
{
CommitReleaseContext = (UINT64)v14->CommitReleaseContext;
ResetPagesRepurposedCount = v14->ResetPagesRepurposedCount;
v15 = *(_QWORD *)(CommitReleaseContext + 32);
}
LOBYTE(CommitReleaseContext) = v19;
MiUnlockWorkingSetShared(&p_Vm->Instance, CommitReleaseContext);
KeForceDetachProcess(&ApcState, 0);
MiAttachThreadDone(&p_Vm->Instance);
}
v11 = RepurposedMemResetPagesOut;
v10 = MemResetCommittedPagesOut;
v9 = CommitDebtOut;
v8 = EligibleOut;
}
bf_0 = v21.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0;
if( (v21.$2436257948A9E417F8C1432C685A007E::$56A022E0416FA8F0D143F219D5D8FA21::_bf_0 & 0x60u) < 0x40 )
ReleasedCommitDebt = 0i64;
}
LOBYTE(v13) = (bf_0 & 0x60u) >= 0x20;
*(_DWORD *)v8 = v13;
*v9 = ReleasedCommitDebt;
*v10 = v15;
*v11 = ResetPagesRepurposedCount;
}Referenced by:
NtQueryInformationProcess