KiRemoveThreadFromSharedReadyQueue
VOID __stdcall KiRemoveThreadFromSharedReadyQueue(
_KSHARED_READY_QUEUE *SharedReadyQueue,
_ETHREAD *Thread,
UINT64 QueueIndex){
__int64 v3;
_ETHREAD **v4;
if( (*(&Thread->Tcb.MiscFlags + 1) & 0x400000) != 0 )
_InterlockedAnd((volatile signed __int32 *)Thread->Tcb.SchedulerAssist, 0xFFFBFFFF);
v3 = *(_QWORD *)Thread->Tcb.gapD8;
v4 = *(_ETHREAD ***)&Thread->Tcb.gapD8[8];
if( *(_ETHREAD **)(v3 + 8) != (_ETHREAD *)Thread->Tcb.gapD8 || *v4 != (_ETHREAD *)Thread->Tcb.gapD8 )
__fastfail(3u);
*v4 = (_ETHREAD *)v3;
*(_QWORD *)(v3 + 8) = v4;
if( v4 == (_ETHREAD **)v3 )
SharedReadyQueue->ReadySummary ^= 1 << QueueIndex;
--SharedReadyQueue->ReadyThreadCount;
SharedReadyQueue->ReadyQueueExpectedRunTime -= Thread->LastExpectedRunTime;
}Referenced by:
KiFindReadyThread
KiQuantumEnd
KiRemoveThreadFromAnyReadyQueue
KiSetThreadSchedulingGroup