KeRemoveByKeyDeviceQueueIfBusy

_KDEVICE_QUEUE_ENTRY *__stdcall KeRemoveByKeyDeviceQueueIfBusy(_KDEVICE_QUEUE *DeviceQueue, UINT64 SortKey){
  unsigned int v2; 
  _KDEVICE_QUEUE_ENTRY *v4; 
  _LIST_ENTRY *p_DeviceListHead; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *v10; 
  $18E3EACC1E717291AA7C720ECCD5C45C v11; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v2 = SortKey;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v4 = 0i64;
  KeAcquireInStackQueuedSpinLockForDpc(&DeviceQueue->Lock, &LockHandle);
  if( !DeviceQueue->Busy )
    goto LABEL_4;
  p_DeviceListHead = &DeviceQueue->DeviceListHead;
  Flink = DeviceQueue->DeviceListHead.Flink;
  if( Flink == &DeviceQueue->DeviceListHead )
  {
    DeviceQueue->Busy = 0;
    goto LABEL_4;
  }
  do
  {
    v4 = (_KDEVICE_QUEUE_ENTRY *)Flink;
    if( v2 <= LODWORD(Flink[1].Flink) )
      break;
    Flink = Flink->Flink;
  }
  while( Flink != p_DeviceListHead );
  if( Flink != p_DeviceListHead )
  {
    v8 = v4->DeviceListEntry.Flink;
    if( (_KDEVICE_QUEUE_ENTRY *)v4->DeviceListEntry.Flink->Blink == v4 )
    {
      Blink = v4->DeviceListEntry.Blink;
      if( (_KDEVICE_QUEUE_ENTRY *)Blink->Flink == v4 )
      {
        Blink->Flink = v8;
        v8->Blink = Blink;
        goto LABEL_14;
      }
    }
LABEL_16:
    __fastfail(3u);
  }
  v4 = (_KDEVICE_QUEUE_ENTRY *)p_DeviceListHead->Flink;
  if( p_DeviceListHead->Flink->Blink != p_DeviceListHead )
    goto LABEL_16;
  v10 = v4->DeviceListEntry.Flink;
  if( (_KDEVICE_QUEUE_ENTRY *)v4->DeviceListEntry.Flink->Blink != v4 )
    goto LABEL_16;
  p_DeviceListHead->Flink = v10;
  v10->Blink = p_DeviceListHead;
LABEL_14:
  v4->Inserted = 0;
  v11 = DeviceQueue->1;
  if( v4 == (_KDEVICE_QUEUE_ENTRY *)(*(__int64 *)&v11 >> 8) )
    DeviceQueue->1 = v11;
LABEL_4:
  KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
  return v4;
}

Referenced by:

No references.