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