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