MiChargeProcessCommitment
VOID __fastcall MiChargeProcessCommitment(_EPROCESS *Process, UINT64 QuotaCharge){
volatile unsigned __int64 CommitCharge;
unsigned __int64 CommitChargePeak;
unsigned __int64 v4;
unsigned __int64 v5;
signed __int64 v6;
unsigned __int64 v7;
if( Process->CommitChargeLimit )
{
CommitCharge = Process->CommitCharge;
while( 1 )
{
v6 = CommitCharge;
v7 = QuotaCharge + CommitCharge;
if( v7 > Process->CommitChargeLimit )
break;
CommitCharge = _InterlockedCompareExchange64((volatile signed __int64 *)&Process->CommitCharge, v7, v6);
if( v6 == CommitCharge )
goto LABEL_3;
}
if( Process->Job )
PsReportProcessMemoryLimitViolation();
}
else
{
CommitCharge = _InterlockedExchangeAdd64((volatile signed __int64 *)&Process->CommitCharge, QuotaCharge);
LABEL_3:
CommitChargePeak = Process->CommitChargePeak;
v4 = QuotaCharge + CommitCharge;
do
{
v5 = CommitChargePeak;
if( v4 <= CommitChargePeak )
break;
CommitChargePeak = _InterlockedCompareExchange64(
(volatile signed __int64 *)&Process->CommitChargePeak,
v4,
CommitChargePeak);
}
while( CommitChargePeak != v5 );
}
}Referenced by:
MiAllocateUserPhysicalPages
MiChargeFullProcessCommitment