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