RawCheckForDeleteVolume

UINT8 __stdcall RawCheckForDeleteVolume(_VCB *Vcb){
  INT64 v1; 
  INT64 v2; 
  UINT8 v3; 
  UINT8 v5; 
  __int64 v6; 
  _VCB **v7; 

  v3 = 0;
  if( !Vcb[28] )
  {
    v5 = KeAcquireQueuedSpinLock(9i64, v1, v2);
    if( *(_DWORD *)(*((_QWORD *)Vcb + 23) + 28i64) )
    {
      KeReleaseQueuedSpinLock(LockQueueIoVpbLock, v5);
    }
    else
    {
      KeReleaseQueuedSpinLock(LockQueueIoVpbLock, v5);
      v6 = *((_QWORD *)Vcb + 20);
      if( *(_VCB **)(v6 + 8) != Vcb + 40 || (v7 = (_VCB **)*((_QWORD *)Vcb + 21), *v7 != Vcb + 40) )
        __fastfail(3u);
      *v7 = (_VCB *)v6;
      *(_QWORD *)(v6 + 8) = v7;
      KeReleaseGuardedMutex((PKGUARDED_MUTEX)Vcb + 4);
      RawCleanupVcb(Vcb);
      RawDeleteVcb(Vcb);
      return 1;
    }
  }
  return v3;
}

Referenced by:

RawScanDeletedList