KiComputeCpuSetAffinity
__int64 __fastcall KiComputeCpuSetAffinity(__int64 a1){
__int64 v1;
__int64 v3;
_QWORD *v4;
_QWORD *v5;
int v6;
__int64 v7;
__int64 v8;
_QWORD *v9;
__int64 v10;
__int64 result;
__int64 v12;
__int64 v13;
int v14;
unsigned __int64 v15;
v1 = *(_QWORD *)(a1 + 544);
v3 = *(unsigned __int16 *)(a1 + 584);
v4 = (_QWORD *)(v1 + 2376);
v5 = (_QWORD *)(v1 + 2384);
if( (*(_DWORD *)(v1 + 2172) & 0x80u) != 0 )
{
v4 = (_QWORD *)*v4;
v5 = (_QWORD *)*v5;
}
v6 = 1;
v7 = KiSystemAllowedCpuSets[2 * v3] | KiSystemAllowedCpuSets[2 * v3
+ (((unsigned __int64)*(unsigned int *)(a1 + 1300) >> 11) & 1)];
if( (*(_DWORD *)(v1 + 1120) & 0x8000000) != 0 && (v8 = v4[v3]) != 0 )
{
v7 = v4[v3];
v6 = 0;
}
else
{
v8 = v7 | v4[v3];
}
if( !v8 )
return 0i64;
v9 = (_QWORD *)(a1 + 1536);
if( (*(_DWORD *)(a1 + 1296) & 0x20000) != 0 )
v9 = (_QWORD *)*v9;
v10 = v9[v3];
if( !v10 )
{
v10 = v5[v3];
if( !v10 )
{
if( !KiRestrictedSystemCpuSetsActive && v6 )
return 0i64;
v10 = v7;
}
}
v12 = v8 & v10;
if( v12 )
v8 = v12;
v13 = v8 & KiNonParkedCpuSets[v3];
if( !v13 )
v13 = v8;
result = 0i64;
v14 = (_DWORD)v3 << 6;
do
{
_BitScanForward64(&v15, v13);
result |= *(_QWORD *)&KiCpuSetAffinities[8 * (unsigned int)(v14 + v15)];
v13 &= ~(1i64 << v15);
}
while( v13 );
return result;
}Referenced by:
KiComputeThreadAffinity