IopStartNextPacketByKey

VOID __stdcall IopStartNextPacketByKey(_DEVICE_OBJECT *DeviceObject, UINT64 Cancelable, UINT8 *Key){
  UINT8 v3; 
  unsigned int v4; 
  int v5; 
  __int64 v7; 
  _IRP *v8; 

  v3 = 0;
  v4 = (unsigned int)Key;
  v5 = Cancelable;
  if( (_DWORD)Cancelable )
    v3 = KeAcquireQueuedSpinLock(7i64, Cancelable, (INT64)Key);
  DeviceObject->CurrentIrp = 0i64;
  LODWORD(v7) = KeRemoveByKeyDeviceQueue((INT64)&DeviceObject->DeviceQueue, v4);
  if( v7 )
  {
    v8 = (_IRP *)(v7 - 120);
    DeviceObject->CurrentIrp = (_IRP *)(v7 - 120);
    if( v5 )
    {
      if( (DeviceObject->DeviceObjectExtension->StartIoFlags & 0x200) != 0 )
        v8->CancelRoutine = 0i64;
      KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v3);
    }
    DeviceObject->DriverObject->DriverStartIo(DeviceObject, v8);
  }
  else if( v5 )
  {
    KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v3);
  }
}

Referenced by:

IoStartNextPacketByKey
IopStartNextPacketByKeyEx