FsRtlpRemoveAndCompleteWaitingIrp

VOID __stdcall FsRtlpRemoveAndCompleteWaitingIrp(_WAITING_IRP *WaitingIrp){
  INT64 v1; 
  INT64 v2; 
  _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 )
  {
    Irp->CancelIrql = KeAcquireQueuedSpinLock(7i64, v1, v2);
    _InterlockedExchange64((volatile __int64 *)&Irp->CancelRoutine, 0i64);
    KeReleaseQueuedSpinLock(LockQueueIoCancelLock, Irp->CancelIrql);
    Irp->IoStatus.Information = WaitingIrp->Information;
    Irp->IoStatus.Status = Irp->Cancel != 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