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