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