FsRtlpRemoveAndCompleteWaitingIrp
VOID __stdcall FsRtlpRemoveAndCompleteWaitingIrp(_WAITING_IRP *WaitingIrp){
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
_IRP *Irp;
Flink = WaitingIrp->Links.Flink;
if( (_WAITING_IRP *)Flink->Blink != WaitingIrp
|| (Blink = WaitingIrp->Links.Blink, (_WAITING_IRP *)Blink->Flink != WaitingIrp) )
{
__fastfail(3u);
}
Blink->Flink = Flink;
Flink->Blink = Blink;
Irp = WaitingIrp->Irp;
if( Irp )
{
*((_BYTE *)Irp + 69) = KeAcquireQueuedSpinLock(7ui64);
_InterlockedExchange64((volatile __int64 *)Irp + 13, 0i64);
KeReleaseQueuedSpinLock(7ui64, *((_BYTE *)Irp + 69));
*((_QWORD *)Irp + 7) = WaitingIrp->Information;
*((_DWORD *)Irp + 12) = *((_BYTE *)Irp + 68) != 0 ? 0xC0000120 : 0;
}
WaitingIrp->CompletionRoutine(WaitingIrp->Context, Irp);
ExFreePoolWithTag(WaitingIrp, 0);
}Referenced by:
FsRtlpAcknowledgeOplockBreak
FsRtlpAcknowledgeOplockBreakByCacheFlags
FsRtlpCancelExclusiveIrp
FsRtlpCancelWaitingIrp
FsRtlpOpBatchBreakClosePending
FsRtlpOplockBreakByCacheFlags
FsRtlpOplockBreakToII
FsRtlpOplockBreakToNone
FsRtlpOplockCleanup
FsRtlpReleaseIrpsWaitingForRH
FsRtlpRequestExclusiveOplock
FsRtlpRequestShareableOplock
FsRtlpWaitOnIrp