KiConfigureNodeSchedulingInformation
INT64 __fastcall KiConfigureNodeSchedulingInformation(INT64 a1){
unsigned __int64 v1;
char v2;
__int64 v3;
int v4;
__int64 v6;
unsigned __int64 i;
__int64 v8;
__int64 v9;
unsigned __int64 v10;
INT64 result;
__int64 v12;
unsigned __int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
__int64 v16;
v1 = *(_QWORD *)(a1 + 136);
v2 = HalpInterruptHyperThreading;
v3 = 0i64;
v4 = *(unsigned __int16 *)(a1 + 144);
v6 = 0i64;
for( i = v1; i; i &= ~v10 )
{
_BitScanForward64((unsigned __int64 *)&v8, i);
v9 = (__int64)*(&KiProcessorBlock
+ (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v8)]);
if( v2 )
{
v10 = *(_QWORD *)(v9 + 33880);
if( v10 != *(_QWORD *)(v9 + 200) )
*(_BYTE *)(a1 + 181) |= 0x20u;
}
else
{
v10 = v1 & *(_QWORD *)(v9 + 8i64 * *(unsigned __int8 *)(v9 + 208) + 33688);
}
result = (unsigned int)v8;
v6 |= 1i64 << v8;
}
v12 = 0i64;
v13 = v1;
if( v1 )
{
do
{
_BitScanForward64(&v14, v13);
v12 |= 1i64 << v14;
v13 &= ~*((_QWORD *)*(&KiProcessorBlock
+ (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v14)])
+ 4237);
}
while( v13 );
do
{
_BitScanForward64(&v15, v1);
v16 = *((_QWORD *)*(&KiProcessorBlock
+ (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v15)])
+ 4232);
v3 |= v16;
result = (unsigned int)v15;
v1 &= ~v16 & ~(1i64 << v15);
}
while( v1 );
}
*(_QWORD *)(a1 + 160) = v6;
*(_QWORD *)(a1 + 376) = v12;
*(_QWORD *)(a1 + 152) = v3;
return result;
}Referenced by:
KiConfigureAllSchedulingInformation