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