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