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