PspRemoveQuotaBlock
VOID __stdcall PspRemoveQuotaBlock(_EPROCESS_QUOTA_BLOCK *QuotaBlock){
_ETHREAD *CurrentThread;
__int64 *QuotaList;
__int64 v3;
_EPROCESS_QUOTA_BLOCK *v4;
_EPROCESS_QUOTA_BLOCK *v6;
unsigned int v7;
_EX_PUSH_LOCK *v8;
__int64 v9;
__int64 **v10;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
QuotaList = (__int64 *)QuotaBlock->QuotaList;
v3 = *(_QWORD *)QuotaBlock->QuotaList;
v4 = QuotaBlock + 1;
v6 = 0i64;
if( v3 != 1 )
v6 = v4;
v7 = PspHashKeyValue(v6, 0i64);
--CurrentThread->Tcb.KernelApcDisable;
v8 = &PspQuotaBlockTable[3 * v7];
ExAcquirePushLockExclusiveEx(v8, 0i64);
if( v3 == 1 )
{
if( QuotaBlock == PspDefaultQuotaBlock )
PspDefaultQuotaBlock = 0i64;
}
else
{
v9 = *QuotaList;
if( *QuotaList )
{
if( *(__int64 **)(v9 + 8) != QuotaList || (v10 = (__int64 **)QuotaList[1], *v10 != QuotaList) )
__fastfail(3u);
*v10 = (__int64 *)v9;
*(_QWORD *)(v9 + 8) = v10;
}
}
PspUnlockQuotaListExclusive(CurrentThread, (UINT64)v8);
}Referenced by:
ObpFreeObject
PspDereferenceQuotaBlock