FsRtlpCancelWaitingIrp
VOID __stdcall FsRtlpCancelWaitingIrp(_IRP *Irp, UINT8 CallerAcquiredMutex){
__int64 v3;
_WAITING_IRP *i;
_WAITING_IRP *v5;
_IRP *v6;
v3 = *((_QWORD *)Irp + 7);
_InterlockedExchange64((volatile __int64 *)Irp + 13, 0i64);
KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)Irp + 69));
if( !CallerAcquiredMutex )
ExAcquireFastMutex(*(FAST_MUTEX **)(v3 + 152));
for( i = *(_WAITING_IRP **)(v3 + 88); i != (_WAITING_IRP *)(v3 + 88); i = (_WAITING_IRP *)i->Links.Flink )
{
v5 = i;
v6 = i->Irp;
if( v6 )
{
if( *((_BYTE *)v6 + 68) )
{
i = (_WAITING_IRP *)i->Links.Blink;
FsRtlpRemoveAndCompleteWaitingIrp(v5);
}
}
}
if( !CallerAcquiredMutex )
KeReleaseGuardedMutex(*(_FAST_MUTEX **)(v3 + 152));
}Referenced by:
FsRtlpWaitOnIrp
FsRtlpWaitingIrpCancelRoutine