PspRemoveQuotaBlock
void __fastcall PspRemoveQuotaBlock(__int64 a1){
_ETHREAD *CurrentThread;
__int64 *v2;
__int64 v3;
__int64 v4;
void *v6;
unsigned int v7;
UINT64 v8;
__int64 v9;
__int64 **v10;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = (__int64 *)(a1 + 520);
v3 = *(_QWORD *)(a1 + 520);
v4 = a1 + 576;
v6 = 0i64;
if( v3 != 1 )
v6 = (void *)v4;
v7 = PspHashKeyValue(v6, 0i64);
--*((_WORD *)CurrentThread + 242);
v8 = PspQuotaBlockTable + 24i64 * v7;
ExAcquirePushLockExclusiveEx(v8, 0i64);
if( v3 == 1 )
{
if( a1 == PspDefaultQuotaBlock )
PspDefaultQuotaBlock = 0i64;
}
else
{
v9 = *v2;
if( *v2 )
{
if( *(__int64 **)(v9 + 8) != v2 || (v10 = (__int64 **)v2[1], *v10 != v2) )
__fastfail(3u);
*v10 = (__int64 *)v9;
*(_QWORD *)(v9 + 8) = v10;
}
}
PspUnlockQuotaListExclusive((__int64)CurrentThread, v8);
}Referenced by:
ObpFreeObject
PspDereferenceQuotaBlock