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