KiGetThreadEffectiveRankNonZero

VOID __stdcall KiGetThreadEffectiveRankNonZero(
        _ETHREAD *Thread,
        _KSCB *Scb,
        _KPRCB *Prcb,
        UINT8 CheckPreemptionDeferral,
        UINT8 *ShareRankNonZero){
  bool v5; 
  int v6; 
  int v7; 
  _KSCB *v8; 
  v5 = ShareRankNonZero && Scb->ShareRank;
  v6 = 0;
  v7 = 0;
  if( *((char *)Thread + 195) < 16
    && (*((_DWORD *)Thread + 30) & 0x200) == 0
    && (!CheckPreemptionDeferral || !*((_DWORD *)Thread + 121) && *((_BYTE *)Thread + 390) != 1) )
  {
    v8 = Scb;
    while( (*((_BYTE *)v8 + 112) & 2) == 0 )
    {
      v8 = v8->Parent;
      if( !v8 )
      {
        do
        {
          v6 += Scb->Rank;
          if( v5 )
          {
            v7 += *Scb->ShareRank;
          }
          else if( v6 )
          {
            goto LABEL_12;
          }
          Scb = Scb->Parent;
        }
        while( Scb );
        break;
      }
    }
  }
LABEL_12:
  if( ShareRankNonZero )
    *ShareRankNonZero = v7 != 0;
}

Referenced by:

KeAccumulateTicks
KiAddThreadToReadyQueue
KiChooseLowestRankedThread
KiDeferGroupSchedulingPreemption
KiDeferredReadySingleThread
KiDirectSwitchThread
KiEvaluateGroupSchedulingPreemption
KiGroupSchedulingQuantumEnd
KiIsThreadRankNonZero
KiMoveScbThreadsToNewReadylist
KiQueueReadyThread
KiRemoveBoostThread
KiSelectReadyThread
KiSelectReadyThreadEx
KiTransitionSchedulingGroupGeneration