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