IopStartNextPacketByKey

VOID __stdcall IopStartNextPacketByKey(DEVICE_OBJECT *DeviceObject, UINT64 Cancelable, UINT64 Key){
  KIRQL v3; 
  unsigned int v4; 
  int v5; 
  _KDEVICE_QUEUE_ENTRY *v7; 
  _KDEVICE_QUEUE_ENTRY *v8; 
  v3 = 0;
  v4 = Key;
  v5 = Cancelable;
  if( (_DWORD)Cancelable )
    v3 = KeAcquireQueuedSpinLock(7ui64);
  *((_QWORD *)DeviceObject + 4) = 0i64;
  v7 = KeRemoveByKeyDeviceQueue((_KDEVICE_QUEUE *)DeviceObject + 4, v4);
  if( v7 )
  {
    v8 = v7 - 5;
    *((_QWORD *)DeviceObject + 4) = v7 - 5;
    if( v5 )
    {
      if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
        v8[4].DeviceListEntry.Blink = 0i64;
      KeReleaseQueuedSpinLock(7ui64, v3);
    }
    (*(void(__fastcall **)(DEVICE_OBJECT *, _KDEVICE_QUEUE_ENTRY *))(*((_QWORD *)DeviceObject + 1) + 96i64))(
      DeviceObject,
      v8);
  }
  else if( v5 )
  {
    KeReleaseQueuedSpinLock(7ui64, v3);
  }
}

Referenced by:

IoStartNextPacketByKey
IopStartNextPacketByKeyEx