KeInsertPriQueue

UINT8 __stdcall KeInsertPriQueue(_KPRIQUEUE *Queue, _LIST_ENTRY *Entry, INT64 Priority, INT64 Increment, UINT64 Flags){
  __int64 v5; 
  _LIST_ENTRY *p_WaitListHead; 
  UINT8 v8; 
  UINT8 OldIrql; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v11; 
  unsigned int v12; 
  unsigned int *p_MaximumCount; 
  __int64 v14; 
  int v15; 
  unsigned int MaximumCount; 
  _LIST_ENTRY *v17; 
  unsigned int v18; 
  _LIST_ENTRY *v20; 
  _LIST_ENTRY *Blink; 
  v5 = (int)Priority;
  p_WaitListHead = &Queue->Header.WaitListHead;
  v8 = 0;
  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  v11 = *((_QWORD *)CurrentPrcb + 1);
  KiAcquireKobjectLockSafe(Queue);
  if( p_WaitListHead->Flink != p_WaitListHead && (*(_KPRIQUEUE **)(v11 + 232) != Queue || *(_BYTE *)(v11 + 643) != 15) )
  {
    v12 = 0;
    p_MaximumCount = &Queue->MaximumCount;
    v14 = 32i64;
    while( 1 )
    {
      v15 = *--p_MaximumCount;
      v12 += v15;
      --v14;
      MaximumCount = Queue->MaximumCount;
      if( v12 >= MaximumCount )
        break;
      if( v14 <= v5 )
      {
        if( v12 >= MaximumCount )
          break;
        v17 = Entry;
        v8 = KiWakePriQueueWaiter(CurrentPrcb, Queue, (INT64)Entry, (unsigned int)v5);
        if( !v8 )
          goto LABEL_13;
        goto LABEL_8;
      }
    }
  }
  v17 = Entry;
LABEL_13:
  if( (Flags & 2) == 0 )
  {
    ++Queue->Header.SignalState;
    v20 = &Queue->EntryListHead[v5];
    Blink = v20->Blink;
    if( Blink->Flink != v20 )
      __fastfail(3u);
    v17->Flink = v20;
    v17->Blink = Blink;
    Blink->Flink = v17;
    v20->Blink = v17;
  }
LABEL_8:
  _InterlockedAnd(&Queue->Header.Lock, 0xFFFFFF7F);
  if( (Flags & 1) != 0 )
    v18 = 3;
  else
    v18 = 0;
  KiExitDispatcher(CurrentPrcb, v18, AdjustUnwait, 0i64, OldIrql);
  return v8;
}

Referenced by:

ExpTryQueueWorkItem