KeRemoveDeviceQueue

_KDEVICE_QUEUE_ENTRY *__stdcall KeRemoveDeviceQueue(_KDEVICE_QUEUE *DeviceQueue){
  UINT8 v1; 
  _KDEVICE_QUEUE_ENTRY *v3; 
  _LIST_ENTRY *p_DeviceListHead; 
  _KDEVICE_QUEUE *Flink; 
  __int64 v6; 
  __int64 bf_0; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v3 = 0i64;
  KeAcquireInStackQueuedSpinLockForDpc(&DeviceQueue->Lock, &LockHandle, v1);
  p_DeviceListHead = &DeviceQueue->DeviceListHead;
  Flink = (_KDEVICE_QUEUE *)DeviceQueue->DeviceListHead.Flink;
  if( Flink == (_KDEVICE_QUEUE *)&DeviceQueue->DeviceListHead )
  {
    DeviceQueue->Busy = 0;
  }
  else
  {
    v3 = (_KDEVICE_QUEUE_ENTRY *)DeviceQueue->DeviceListHead.Flink;
    if( Flink->DeviceListHead.Flink != p_DeviceListHead
      || (v6 = *(_QWORD *)&Flink->Type, *(_KDEVICE_QUEUE_ENTRY **)(v6 + 8) != v3) )
    {
      __fastfail(3u);
    }
    p_DeviceListHead->Flink = (_LIST_ENTRY *)v6;
    *(_QWORD *)(v6 + 8) = p_DeviceListHead;
    v3->Inserted = 0;
    bf_0 = DeviceQueue->_bf_0;
    if( v3 == (_KDEVICE_QUEUE_ENTRY *)(bf_0 >> 8) )
      DeviceQueue->_bf_0 = (unsigned __int8)bf_0;
  }
  KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
  return v3;
}

Referenced by:

IoFreeAdapterChannelV2
IoFreeController
IopStartNextPacket