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