IoStartPacket

VOID __stdcall IoStartPacket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PULONG Key, PDRIVER_CANCEL CancelFunction){
  KIRQL v8; 
  unsigned __int8 CurrentIrql; 
  _KDEVICE_QUEUE_ENTRY *v10; 
  _KDEVICE_QUEUE *v11; 
  UINT8 inserted; 
  v8 = 0;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  if( CancelFunction )
  {
    v8 = KeAcquireQueuedSpinLock(7ui64);
    *((_QWORD *)Irp + 13) = CancelFunction;
  }
  v10 = (_KDEVICE_QUEUE_ENTRY *)((char *)Irp + 120);
  v11 = (_KDEVICE_QUEUE *)((char *)DeviceObject + 160);
  if( Key )
    inserted = KeInsertByKeyDeviceQueue(v11, v10, *Key);
  else
    inserted = KeInsertDeviceQueue(v11, v10);
  if( inserted )
  {
    if( CancelFunction )
    {
      if( *((_BYTE *)Irp + 68) )
      {
        *((_QWORD *)Irp + 13) = 0i64;
        *((_BYTE *)Irp + 69) = v8;
        ((void(__fastcall *)(PDEVICE_OBJECT, PIRP))CancelFunction)(DeviceObject, Irp);
      }
      else
      {
        KeReleaseQueuedSpinLock(7ui64, v8);
      }
    }
  }
  else
  {
    *((_QWORD *)DeviceObject + 4) = Irp;
    if( CancelFunction )
    {
      if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
        *((_QWORD *)Irp + 13) = 0i64;
      KeReleaseQueuedSpinLock(7ui64, v8);
    }
    (*(void(__fastcall **)(PDEVICE_OBJECT, PIRP))(*((_QWORD *)DeviceObject + 1) + 96i64))(DeviceObject, Irp);
  }
  __writecr8(CurrentIrql);
}

Referenced by:

No references.