IopCheckListForCancelableIrp

UINT8 __stdcall IopCheckListForCancelableIrp(
        _LIST_ENTRY *IrpListHead,
        _EPROCESS *Process,
        _IO_STATUS_BLOCK *IoRequestToCancel,
        _ETHREAD *Thread,
        _LIST_ENTRY *hintEntry,
        _IRP **Irp){
  _LIST_ENTRY *Flink; 
  UINT8 v7; 
  _LIST_ENTRY *v8; 

  Flink = hintEntry;
  v7 = 1;
  *Irp = 0i64;
  if( !hintEntry )
    Flink = IrpListHead->Flink;
  while( IrpListHead != Flink )
  {
    v8 = Flink - 2;
    if( (_EPROCESS *)((unsigned __int64)Flink[3].Blink & 0xFFFFFFFFFFFFFFF9ui64) == Process
      && (!IoRequestToCancel || (_IO_STATUS_BLOCK *)v8[4].Blink == IoRequestToCancel)
      && (!Thread || (_ETHREAD *)v8[9].Blink == Thread) )
    {
      if( SBYTE3(v8[4].Flink) < SBYTE2(v8[4].Flink) + 2 && !BYTE4(v8[4].Flink) )
      {
        v7 = 0;
        IopInterlockedAdd((UINT64 *)&v8[5].Blink, 1i64);
        *Irp = (_IRP *)v8;
        return v7;
      }
      v7 &= -(((__int64)v8[1].Flink & 0x10000) != 0);
    }
    Flink = Flink->Flink;
  }
  return v7;
}

Referenced by:

IopCancelIrpsInFileObjectList