KiAddThreadToReadyQueue
VOID __stdcall KiAddThreadToReadyQueue(
_KPRCB *Prcb,
PVOID Scb,
_ETHREAD *Thread,
UINT8 ReadyTransition,
UINT64 Preempted){
char v5;
_KSCB *v7;
__int64 v9;
int v10;
UINT8 ShareRankNonZero;
v5 = 0;
v7 = (_KSCB *)Scb;
if( !ReadyTransition )
*((_DWORD *)Thread + 109) = KUSER_SHARED_DATA.TickCount.LowPart;
if( !Scb )
{
v7 = (_KSCB *)*((_QWORD *)Thread + 13);
if( v7 )
v7 = (_KSCB *)((char *)v7 + *((unsigned int *)Prcb + 54));
}
v9 = *((_QWORD *)Prcb + 4247);
if( v9 )
*(_BYTE *)(v9 + 16) = 0;
*((_BYTE *)Thread + 388) = 1;
ShareRankNonZero = 0;
if( v7 && (*((_DWORD *)Thread + 30) & 0xC00) == 0 )
{
KiGetThreadEffectiveRankNonZero(Thread, v7, (_KPRCB *)Thread, 0, &ShareRankNonZero);
if( v10 )
{
KiAddThreadToScbQueue(Prcb, v7, (_KTHREAD *)Thread, (unsigned int)Preempted);
return;
}
v5 = ShareRankNonZero;
}
KiAddThreadToPrcbQueue((__int64)Prcb, (__int64)Thread, *((char *)Thread + 195), Preempted, v5);
}Referenced by:
KiSelectNextThread