PsChargeSharedPoolQuota
VOID *__stdcall PsChargeSharedPoolQuota(_EPROCESS *Process, UINT64 PagedAmount, UINT64 NonPagedAmount){
struct _EPROCESS_QUOTA_BLOCK *QuotaBlock;
if( Process == PsInitialSystemProcess )
return(VOID *)1;
QuotaBlock = Process->QuotaBlock;
if( !PagedAmount || PspChargeQuota(Process->QuotaBlock, 0i64, PsResourcePagedPool, PagedAmount) >= 0 )
{
if( !NonPagedAmount || PspChargeQuota(QuotaBlock, 0i64, PsResourceNonPagedPool, NonPagedAmount) >= 0 )
{
_InterlockedIncrement((volatile signed __int32 *)&QuotaBlock->ReferenceCount);
return QuotaBlock;
}
if( PagedAmount )
PspReturnQuota((char *)QuotaBlock, 0i64, PsResourcePagedPool, PagedAmount);
}
return 0i64;
}Referenced by:
NtSetInformationJobObject
ObAdjustSecurityQuota
ObpChargeQuotaForObject
PspAllocateRateControl
RtlpAllocateAtom