KiFindRankBiasedIdleSmtSet

char __fastcall KiFindRankBiasedIdleSmtSet(__int64 a1, _QWORD *a2){
  __int64 v2; 
  unsigned __int64 v3; 
  int v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 

  v2 = 0i64;
  v3 = *a2 & *(_QWORD *)(*(_QWORD *)(a1 + 192) + 24i64);
  if( !v3 )
    return 0;
  v4 = *(unsigned __int8 *)(a1 + 208) << 6;
  do
  {
    _BitScanForward64(&v5, v3);
    v6 = 1i64 << v5;
    v3 ^= 1i64 << v5;
    v7 = (__int64)*(&KiProcessorBlock + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)(v4 + v5)]);
    v8 = *(_QWORD *)(v7 + 33880) & ~*(_QWORD *)(v7 + 200);
    if( (v3 & v8) == v8 )
    {
      v3 ^= v8;
    }
    else
    {
      _BitScanForward64(&v9, v8);
      if( ((*(&KiProcessorBlock + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)(v4 + v9)]))->PrcbFlags._bf_0 & 0x400) != 0 )
        v2 |= v6;
    }
  }
  while( v3 );
  if( !v2 )
    return 0;
  *a2 = v2;
  return 1;
}

Referenced by:

KiChooseTargetProcessor
KiSelectIdleProcessor
KiTryLocalThreadSchedule