KeSelectIdealProcessor
UINT64 __stdcall KeSelectIdealProcessor(_KNODE *Node, _GROUP_AFFINITY *Affinity, UINT64 *AltSeed){
unsigned int *v3;
_WORD *p_ThreadSeed;
unsigned __int64 v5;
__int64 v6;
unsigned __int64 v7;
UINT64 result;
p_ThreadSeed = AltSeed;
if( !AltSeed )
p_ThreadSeed = &Node->ThreadSeed;
v5 = Affinity->Mask & Node->Affinity.Mask;
if( v3 )
{
if( (KiCacheAwareScheduling & 4) != 0 )
{
v6 = (__int64)*(&KiProcessorBlock + *v3);
if( *(_KNODE **)(v6 + 192) == Node )
{
v7 = *(_QWORD *)(v6 + 33896);
if( (v5 & v7) != 0
&& (unsigned int)((0x101010101010101i64
* ((((v7 - ((v7 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v7 - ((v7 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((v7 - ((v7 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v7 - ((v7 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24 >= 2 )
{
v5 &= v7;
}
}
}
}
result = KiSelectIdealProcessor(Node, (unsigned __int16)*p_ThreadSeed, (_GROUP_AFFINITY *)v5);
*p_ThreadSeed = result;
return result;
}Referenced by:
ExpNodeCreateSystemThread
ExpWorkQueueManagerInitialize
KeStartThread
KiComputeThreadAffinity
KiSetAffinityThread
PspAllocateThread