PspHardDereferenceSiloWorker

VOID __stdcall PspHardDereferenceSiloWorker(_EJOB *Job){
  signed __int64 v2; 
  bool v3; 
  signed __int64 v4; 

  if( !Job )
    __int2c();
  if( (*((_DWORD *)Job + 330) & 0x40000000) == 0 )
    __int2c();
  v2 = _InterlockedExchangeAdd64((volatile signed __int64 *)Job + 190, 0xFFFFFFFFFFFFFFFFui64);
  v3 = v2 <= 1;
  v4 = v2 - 1;
  if( v3 )
  {
    if( v4 )
      __fastfail(0xEu);
    ObfReferenceObjectWithTag(Job, 0x746C6644ui64);
    *((_QWORD *)Job + 191) = 0i64;
    *((_QWORD *)Job + 193) = PspCompleteHardDereferenceSiloDeferred;
    *((_QWORD *)Job + 194) = Job;
    ExQueueWorkItem((PWORK_QUEUE_ITEM)((char *)Job + 1528), DelayedWorkQueue);
  }
}

Referenced by:

PsReleaseSiloHardReference
PspBeginSiloTeardown
PspEvaluateAndNotifyEmptyJob