KiRemoveThreadFromReadyQueue
VOID __stdcall KiRemoveThreadFromReadyQueue(_KPRCB *Prcb, _LIST_ENTRY *ThreadEntry, UINT64 QueueIndex){
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
if( ((__int64)ThreadEntry[-6].Flink & 0x400000) != 0 )
_InterlockedAnd((volatile signed __int32 *)ThreadEntry[47].Flink, 0xFFFBFFFF);
Flink = ThreadEntry->Flink;
Blink = ThreadEntry->Blink;
if( ThreadEntry->Flink->Blink != ThreadEntry || Blink->Flink != ThreadEntry )
__fastfail(3u);
Blink->Flink = Flink;
Flink->Blink = Blink;
if( Blink == Flink )
Prcb->ReadySummary ^= 1 << QueueIndex;
--Prcb->ReadyThreadCount;
Prcb->ReadyQueueExpectedRunTime -= LODWORD(ThreadEntry[84].Blink);
}Referenced by:
KiFindReadyThread
KiQuantumEnd
KiRemoveThreadFromAnyReadyQueue
KiSelectReadyThread