KiAddThreadToReadyQueue

VOID __stdcall KiAddThreadToReadyQueue(
        _KPRCB *Prcb,
        VOID *Scb,
        _ETHREAD *Thread,
        UINT8 ReadyTransition,
        UINT64 Preempted){
  UINT8 v5; 
  _KSCB *SchedulingGroup; 
  _BYTE *SchedulerAssist; 
  int v10; 
  UINT8 ShareRankNonZero; 

  v5 = 0;
  SchedulingGroup = (_KSCB *)Scb;
  if( !ReadyTransition )
    Thread->Tcb.WaitBlock[2].SpareLong = KUSER_SHARED_DATA.TickCount.LowPart;
  if( !Scb )
  {
    SchedulingGroup = (_KSCB *)Thread->Tcb.SchedulingGroup;
    if( SchedulingGroup )
      SchedulingGroup = (_KSCB *)((char *)SchedulingGroup + Prcb->ScbOffset);
  }
  SchedulerAssist = Prcb->SchedulerAssist;
  if( SchedulerAssist )
    SchedulerAssist[16] = 0;
  Thread->Tcb.WaitBlockFill6[68] = 1;
  ShareRankNonZero = 0;
  if( SchedulingGroup && (*(&Thread->Tcb.MiscFlags + 1) & 0xC00) == 0 )
  {
    KiGetThreadEffectiveRankNonZero(Thread, SchedulingGroup, (_KPRCB *)Thread, 0, &ShareRankNonZero);
    if( v10 )
    {
      KiAddThreadToScbQueue(Prcb, SchedulingGroup, &Thread->Tcb, (unsigned int)Preempted);
      return;
    }
    v5 = ShareRankNonZero;
  }
  KiAddThreadToPrcbQueue(Prcb, &Thread->Tcb, (unsigned int)Thread->Tcb.Priority, (unsigned int)Preempted, v5);
}

Referenced by:

KiSelectNextThread