KeBuildLogicalProcessorSystemInformation
VOID __fastcall KeBuildLogicalProcessorSystemInformation(UINT64 a1, UINT64 a2, UINT64 a3, UINT64 a4){
_DWORD *v4;
unsigned int v5;
__int16 v7;
unsigned int v8;
unsigned int v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
bool v14;
unsigned int v15;
_QWORD *v16;
__int64 v17;
__int64 v18;
__int64 v19;
unsigned int v20;
unsigned int v21;
_QWORD *v22;
UINT8 *v23;
__int64 v24;
GROUP_AFFINITY GroupAffinity;
__int16 v26;
unsigned int v27;
unsigned int v28;
v28 = a3;
v26 = a1;
GroupAffinity = 0i64;
v4 = (_DWORD *)a4;
v27 = 0;
v5 = a3;
v7 = a1;
v8 = 0;
v9 = 0;
if( (_DWORD)KeNumberProcessors_0 )
{
do
{
v10 = (__int64)*(&KiProcessorBlock + v9);
v11 = *(unsigned __int8 *)(v10 + 208);
if( (_WORD)v11 == v7 )
{
v12 = *(_QWORD *)(v10 + 8 * v11 + 33688);
GroupAffinity.Mask = v12;
GroupAffinity.Group = v11;
if( *(_DWORD *)(v10 + 36) == (unsigned int)KeFindFirstSetLeftGroupAffinity(&GroupAffinity) )
{
v8 += 32;
if( v8 <= v5 )
{
*(_QWORD *)a2 = v12;
*(_DWORD *)(a2 + 8) = 3;
*(_QWORD *)(a2 + 24) = 0i64;
*(_QWORD *)(a2 + 16) = 0i64;
a2 += 32i64;
}
}
v13 = *(_QWORD *)(v10 + 33880);
GroupAffinity.Mask = v13;
if( *(_DWORD *)(v10 + 36) == (unsigned int)KeFindFirstSetLeftGroupAffinity(&GroupAffinity) )
{
v14 = *(_QWORD *)(v10 + 200) != v13;
v8 += 32;
if( v8 <= v5 )
{
*(_QWORD *)(a2 + 16) = 0i64;
*(_BYTE *)(a2 + 16) = v14;
*(_QWORD *)a2 = v13;
*(_DWORD *)(a2 + 8) = 0;
*(_QWORD *)(a2 + 24) = 0i64;
a2 += 32i64;
}
}
v15 = 0;
if( *(_DWORD *)(v10 + 33556) )
{
v16 = (_QWORD *)(a2 + 16);
while( 1 )
{
v17 = *(_QWORD *)(v10 + 200);
v18 = v15;
v19 = *(_QWORD *)(v10 + 8i64 * v15 + 33904);
if( !v19 )
goto LABEL_23;
GroupAffinity.Mask = *(_QWORD *)(v10 + 8i64 * v15 + 33904);
v17 = v19;
if( *(_DWORD *)(v10 + 36) == (unsigned int)KeFindFirstSetLeftGroupAffinity(&GroupAffinity) )
break;
LABEL_11:
if( ++v15 >= *(_DWORD *)(v10 + 33556) )
{
v9 = v27;
v5 = v28;
goto LABEL_13;
}
}
v18 = v15;
LABEL_23:
v8 += 32;
if( v8 <= v28 )
{
*(_QWORD *)a2 = v17;
*((_DWORD *)v16 - 2) = 2;
v16[1] = 0i64;
a2 += 32i64;
*v16 = 0i64;
*v16 = *(_QWORD *)(v10 + 12 * v18 + 33496);
*((_DWORD *)v16 + 2) = *(_DWORD *)(v10 + 12 * v18 + 33504);
v16 += 4;
}
goto LABEL_11;
}
LABEL_13:
v7 = v26;
}
v27 = ++v9;
}
while( v9 < (unsigned int)KeNumberProcessors_0 );
v4 = (_DWORD *)a4;
}
v20 = (unsigned __int16)KeNumberNodes;
v21 = 0;
if( KeNumberNodes )
{
v22 = (_QWORD *)(a2 + 16);
v23 = &KeNodeBlock;
do
{
v24 = *(_QWORD *)(*(_QWORD *)v23 + 136i64);
if( v24 )
{
if( *(_WORD *)(*(_QWORD *)v23 + 144i64) == v7 )
{
v8 += 32;
if( v8 <= v5 )
{
*v22 = 0i64;
*(_DWORD *)v22 = v21;
*(v22 - 2) = v24;
*((_DWORD *)v22 - 2) = 1;
v22[1] = 0i64;
v22 += 4;
}
}
}
++v21;
v23 += 8;
}
while( v21 < v20 );
}
*v4 = v8;
}Referenced by:
ExpQuerySystemInformation