PspInitializeQuotaBlock
NTSTATUS __stdcall PspInitializeQuotaBlock(
_QUOTA_LIMITS_EX *QuotaLimits,
PS_QUOTA_LIMIT *LimitList,
_EPROCESS_QUOTA_BLOCK *NewQuotaBlock){
UINT64 v6;
int v7;
unsigned int *p_Limit;
__int64 v9;
PS_QUOTA_LIMIT *i;
char v11;
UINT64 v12;
UINT64 NewLimit;
NewLimit = 0i64;
memset(NewQuotaBlock, 0i64, sizeof(_EPROCESS_QUOTA_BLOCK));
NewQuotaBlock->ProcessCount = 1;
NewQuotaBlock->ReferenceCount = 1;
if( QuotaLimits && (QuotaLimits[1].TimeLimit.anonymous_0.LowPart & 0x10) != 0 )
{
if( *(_QWORD *)&QuotaLimits->PagedPoolLimit
|| *(_QWORD *)&QuotaLimits->WorkingSetLimit
|| *(_QWORD *)&QuotaLimits->MinimumWorkingSetSize
|| *(_QWORD *)&QuotaLimits->Flags )
{
return -1073741811;
}
QuotaLimits = 0i64;
LimitList = PspDefaultResourceLimits;
}
v7 = 0;
p_Limit = &NewQuotaBlock->QuotaEntry[0].Limit;
v9 = 0i64;
for( i = LimitList; ; ++i )
{
v11 = PspResourceFlags[v9 * 2];
if( (v11 & 2) != 0 )
goto LABEL_9;
v12 = LimitList ? *i : *(_QWORD *)((char *)&QuotaLimits->PagedPoolLimit + *(_QWORD *)&PspQuotaLimitOffsets[v9]);
*(_QWORD *)p_Limit = v12;
if( (v11 & 1) == 0 )
goto LABEL_9;
if( v12 != -1i64 )
break;
*(_QWORD *)p_Limit = 0i64;
PspInsertExpansionEntry(&PspQuotaExpansionDescriptors[14 * v7]);
LABEL_9:
++v7;
p_Limit += 32;
v9 += 4i64;
if( v7 >= 4 )
return 0;
}
if( !v12 )
goto LABEL_9;
NewLimit = 0i64;
if( (unsigned __int8)PspExpandLimit((PS_RESOURCE_TYPE)v7, v6, v12, &NewLimit) )
{
if( !v7 )
IoEnableIrpCredits();
goto LABEL_9;
}
return -1073741670;
}Referenced by:
PspAssignProcessQuotaBlock