PspExpandQuota

UINT8 __stdcall PspExpandQuota(
        _PS_RESOURCE_TYPE ResourceType,
        _PSP_QUOTA_ENTRY *QuotaEntry,
        UINT64 Usage,
        UINT64 Amount,
        UINT64 *pLimit){
  int *v7; 
  UINT64 v10; 
  UINT64 v11; 
  UINT64 v12; 
  UINT8 OldIrql; 
  __int64 v15; 

  v15 = 0i64;
  OldIrql = 0;
  v7 = &PspQuotaExpansionDescriptors[14 * ResourceType];
  PspLockQuotaExpansion(v7, &OldIrql);
  v10 = *(_QWORD *)&QuotaEntry->Limit;
  if( Usage + Amount <= v10 )
  {
    PspUnlockQuotaExpansion(v7, OldIrql);
    *pLimit = v10;
    return 1;
  }
  if( (*((unsigned __int8(__fastcall **)(_QWORD, _QWORD, _QWORD, __int64 *))v7 + 3))(
         (unsigned int)ResourceType,
         *(_QWORD *)&QuotaEntry->Limit,
         0i64,
         &v15)
    || PspReleaseReturnedQuota(ResourceType, v7)
    && (*((unsigned __int8(__fastcall **)(_QWORD, UINT64, _QWORD, __int64 *))v7 + 3))(
         (unsigned int)ResourceType,
         v10,
         0i64,
         &v15) )
  {
    v11 = v15 - v10;
    v12 = v11 + _InterlockedExchangeAdd64((volatile signed __int64 *)&QuotaEntry->Limit, v15 - v10);
    PspUnlockQuotaExpansion(v7, OldIrql);
    *pLimit = v12;
    return 1;
  }
  PspUnlockQuotaExpansion(v7, OldIrql);
  *pLimit = v10;
  return 0;
}

Referenced by:

ExAllocatePoolWithQuotaTag
IopVerifierExAllocatePoolWithQuota_1
PspChargeQuota