KeQueryCpuSetInformation
INT64 __fastcall KeQueryCpuSetInformation(INT64 result, INT64 a2, INT64 a3, INT64 a4){
INT64 v5;
_QWORD *v6;
unsigned int v7;
_DWORD *v8;
unsigned int v9;
__int64 v10;
unsigned int v11;
unsigned __int64 v12;
unsigned __int64 v13;
int v14;
__int64 v15;
INT64 CpuSetData;
int v17;
char v18;
__int64 v19;
char v20;
char v22;
__int64 TickLock;
v5 = result;
if( a4 )
{
v6 = (_QWORD *)(a4 + 2376);
if( (*(_DWORD *)(a4 + 2172) & 0x80u) != 0 )
v6 = (_QWORD *)*v6;
}
else
{
v6 = 0i64;
}
do
{
TickLock = RtlBeginReadTickLock(&KiCpuSetSequence);
v7 = KiTotalCpuSetCount;
*v8 = 32 * KiTotalCpuSetCount;
if( v9 < 32 * v7 )
return 3221225507i64;
memset(v5, 0i64);
LODWORD(v10) = 0;
v11 = 0;
v12 = KiGroupBlock[0];
while( v12 )
{
_BitScanForward64(&v13, v12);
v12 &= ~(1i64 << v13);
CpuSetData = KiGetCpuSetData((unsigned int)v10, (unsigned int)v13);
*(_DWORD *)v15 = 32;
*(_DWORD *)(v15 + 4) = 0;
*(_DWORD *)(v15 + 8) = v17 | ((_DWORD)v10 << 16) | 0x100;
*(_WORD *)(v15 + 12) = v10;
*(_BYTE *)(v15 + 14) = *(_BYTE *)(CpuSetData + 1);
*(_BYTE *)(v15 + 15) = *(_BYTE *)(CpuSetData + 2);
*(_BYTE *)(v15 + 16) = *(_BYTE *)(CpuSetData + 3);
*(_BYTE *)(v15 + 17) = *(_BYTE *)(CpuSetData + 4);
*(_BYTE *)(v15 + 18) = *(_BYTE *)(CpuSetData + 5);
*(_BYTE *)(v15 + 20) = *(_BYTE *)(CpuSetData + 6);
v18 = 0;
v19 = 1i64 << v17;
v20 = 0;
if( (KiNonParkedCpuSets[v10] & v19) == 0 )
{
v18 = 1;
*(_BYTE *)(v15 + 19) |= 1u;
v20 = 1;
}
if( (KiSystemAllowedCpuSets[2 * (unsigned int)v10] & v19) != 0 )
{
if( !a4 || (*(_DWORD *)(a4 + 1120) & 0x8000000) == 0 )
goto LABEL_10;
v22 = v20;
}
else
{
v22 = v20;
if( v6 && (v19 & v6[v10]) != 0 )
v22 = v20 | 4;
}
v18 = v22 | 0xA;
LABEL_10:
*(_BYTE *)(v15 + 19) = v18;
*(_QWORD *)(v15 + 24) = *(_QWORD *)(CpuSetData + 8);
v11 = v14 + 1;
v5 = result;
LABEL_11:
if( v11 >= v7 )
goto LABEL_22;
}
LODWORD(v10) = v10 + 1;
if( (unsigned int)v10 < (unsigned __int16)KiActiveGroups )
{
v12 = KiGroupBlock[2 * (unsigned int)v10];
goto LABEL_11;
}
LABEL_22:
;
}
while( !RtlTryEndReadTickLock(&KiCpuSetSequence, TickLock) );
return 0i64;
}Referenced by:
ExpQuerySystemInformation