IopCancelIrpsInCurrentThreadList

VOID __fastcall IopCancelIrpsInCurrentThreadList(
        _FILE_OBJECT *FileObject,
        _ETHREAD *CurrentThread,
        _IO_STATUS_BLOCK *IoRequestToCancel,
        UINT8 SynchronousOnly){
  unsigned __int64 *p_IrpListLock; 
  unsigned __int8 v8; 
  _LIST_ENTRY *i; 
  PVOID v10; 
  PVOID v11; 
  PVOID v12; 
  int Flink; 

  p_IrpListLock = &CurrentThread->IrpListLock;
  v8 = KeAcquireSpinLockRaiseToDpc(&CurrentThread->IrpListLock);
  for( i = CurrentThread->IrpList.Flink; &CurrentThread->IrpList != i; i = i->Flink )
  {
    if( SBYTE3(i[2].Flink) < SBYTE2(i[2].Flink) + 2 )
    {
      if( SynchronousOnly )
      {
        if( FileObject && (_FILE_OBJECT *)i[10].Flink != FileObject )
          continue;
        if( IoRequestToCancel && (_IO_STATUS_BLOCK *)i[2].Blink != IoRequestToCancel )
          continue;
        Flink = (int)i[-1].Flink;
        if( (Flink & 0x402) != 0 || (Flink & 0x84) == 0 && (HIBYTE(i[2].Flink) & 2) == 0 )
          continue;
      }
      else if( ((__int64)i[-1].Flink & 2) != 0
             || FileObject && (_FILE_OBJECT *)i[10].Flink != FileObject
             || IoRequestToCancel && (_IO_STATUS_BLOCK *)i[2].Blink != IoRequestToCancel )
      {
        continue;
      }
      KxReleaseSpinLock(p_IrpListLock);
      __writecr8(1ui64);
      IoCancelIrp((_KDPC *)&i[-2], v10, v11, v12);
      KeGetCurrentIrql();
      __writecr8(2ui64);
      KxAcquireSpinLock(p_IrpListLock);
    }
  }
  KxReleaseSpinLock(p_IrpListLock);
  __writecr8(v8);
}

Referenced by:

IopCancelIrpsInCurrentThreadListApcRoutine
IopCancelIrpsInThreadList