KiAddThreadToScbQueue

VOID __stdcall KiAddThreadToScbQueue(_KPRCB *Prcb, _KSCB *Scb, _ETHREAD *Thread, UINT64 Preempted){
  _KSCB *v4; 
  int Priority; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  _KSCB *Parent; 

  v4 = Scb;
  Priority = Thread->Tcb.Priority;
  if( !Scb->Rank )
  {
    do
    {
      Parent = v4->Parent;
      if( !Parent )
        break;
      v4 = v4->Parent;
    }
    while( !Parent->Rank );
  }
  v7 = (_LIST_ENTRY *)Thread->Tcb.gapD8;
  v8 = &v4->ReadyListHead[Priority];
  if( !(_DWORD)Preempted )
  {
    Blink = v8->Blink;
    if( Blink->Flink == v8 )
    {
      v7->Flink = v8;
      *(_QWORD *)&Thread->Tcb.gapD8[8] = Blink;
      Blink->Flink = v7;
      v8->Blink = v7;
      goto LABEL_5;
    }
LABEL_8:
    __fastfail(3u);
  }
  Flink = v8->Flink;
  if( v8->Flink->Blink != v8 )
    goto LABEL_8;
  v7->Flink = Flink;
  *(_QWORD *)&Thread->Tcb.gapD8[8] = v8;
  Flink->Blink = v7;
  v8->Flink = v7;
LABEL_5:
  Thread->Tcb._bf_0 |= 0x2000u;
  Thread->Tcb.QueuedScb = v4;
  v4->ReadySummary |= 1 << Priority;
  KiInsertNonMaxOverQuotaScb(v4, Prcb, 1u);
}

Referenced by:

KiAddThreadToReadyQueue
KiDeferGroupSchedulingPreemption
KiDeferredReadySingleThread
KiGroupSchedulingQuantumEnd
KiQueueReadyThread
KiSelectReadyThread