IopStartNextPacket

VOID __stdcall IopStartNextPacket(_DEVICE_OBJECT *DeviceObject, UINT64 Cancelable){
  KIRQL v2; 
  int v3; 
  _KDEVICE_QUEUE_ENTRY *v5; 
  _KDEVICE_QUEUE_ENTRY *v6; 
  v2 = 0;
  v3 = Cancelable;
  if( (_DWORD)Cancelable )
    v2 = KeAcquireQueuedSpinLock(7ui64);
  *((_QWORD *)DeviceObject + 4) = 0i64;
  v5 = KeRemoveDeviceQueue((_KDEVICE_QUEUE *)DeviceObject + 4);
  if( v5 )
  {
    v6 = v5 - 5;
    *((_QWORD *)DeviceObject + 4) = v5 - 5;
    if( v3 )
    {
      if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
        v6[4].DeviceListEntry.Blink = 0i64;
      KeReleaseQueuedSpinLock(7ui64, v2);
    }
    (*(void(__fastcall **)(_DEVICE_OBJECT *, _KDEVICE_QUEUE_ENTRY *))(*((_QWORD *)DeviceObject + 1) + 96i64))(
      DeviceObject,
      v6);
  }
  else if( v3 )
  {
    KeReleaseQueuedSpinLock(7ui64, v2);
  }
}

Referenced by:

IoStartNextPacket
IopStartNextPacketByKeyEx