KeInsertByKeyDeviceQueue

UINT8 __stdcall KeInsertByKeyDeviceQueue(
        _KDEVICE_QUEUE *DeviceQueue,
        _KDEVICE_QUEUE_ENTRY *DeviceQueueEntry,
        UINT64 SortKey){
  unsigned int v5; 
  unsigned __int8 v6; 
  unsigned __int8 Busy; 
  _LIST_ENTRY *p_DeviceListHead; 
  _LIST_ENTRY *Blink; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  DeviceQueueEntry->SortKey = SortKey;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v5 = SortKey;
  v6 = 0;
  KeAcquireInStackQueuedSpinLockForDpc(&DeviceQueue->Lock, &LockHandle);
  Busy = DeviceQueue->Busy;
  DeviceQueue->Busy = 1;
  if( Busy == 1 )
  {
    p_DeviceListHead = &DeviceQueue->DeviceListHead;
    if( p_DeviceListHead->Flink != p_DeviceListHead && v5 < LODWORD(DeviceQueue->DeviceListHead.Blink[1].Flink) )
    {
      do
        p_DeviceListHead = p_DeviceListHead->Flink;
      while( v5 >= LODWORD(p_DeviceListHead[1].Flink) );
    }
    Blink = p_DeviceListHead->Blink;
    if( Blink->Flink != p_DeviceListHead )
      __fastfail(3u);
    DeviceQueueEntry->DeviceListEntry.Flink = p_DeviceListHead;
    v6 = 1;
    DeviceQueueEntry->DeviceListEntry.Blink = Blink;
    Blink->Flink = &DeviceQueueEntry->DeviceListEntry;
    p_DeviceListHead->Blink = &DeviceQueueEntry->DeviceListEntry;
  }
  DeviceQueueEntry->Inserted = v6;
  KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
  return v6;
}

Referenced by:

IoStartPacket