MiInitializeNumaGraph
VOID __stdcall MiInitializeNumaGraph(_LOADER_PARAMETER_BLOCK *LoaderBlock){
unsigned int v1;
unsigned int *NumaLocalityInfo;
unsigned int v3;
unsigned int j;
__int64 v5;
unsigned int v6;
unsigned int v7;
unsigned int v8;
unsigned int v9;
unsigned int *v10;
__int64 *v11;
unsigned int i;
unsigned __int16 v13;
__int64 v14;
__int64 *v15;
UINT64 v16;
unsigned int v17;
INT64 **p_Base;
int v19;
__int64 v20;
INT64 *Base;
__int64 v22[127];
v1 = 0;
NumaLocalityInfo = (unsigned int *)LoaderBlock->Extension->NumaLocalityInfo;
if( NumaLocalityInfo )
{
v7 = *NumaLocalityInfo;
v8 = (unsigned __int16)KeNumberNodes;
v9 = (unsigned __int16)KeNumberNodes;
if( *NumaLocalityInfo <= (unsigned __int16)KeNumberNodes )
v9 = *NumaLocalityInfo;
v10 = &NumaLocalityInfo[v7 + 1];
if( v9 > 0x40 )
v9 = 64;
if( v9 )
{
v11 = v22;
do
{
for( i = 0; i < v7; v22[v14] = v13 )
{
if( i >= 0x40 )
break;
v13 = *((_WORD *)v10 + v1 * v7 + i);
if( !v13 )
v13 = 1;
v14 = 2i64 * i;
LODWORD(v22[v14 - 1]) = i++;
}
if( i < v8 )
{
v15 = &v22[2 * i];
do
{
if( i >= 0x40 )
break;
*v15 = -1i64;
*((_DWORD *)v15 - 2) = i++;
v15 += 2;
}
while( i < v8 );
}
v16 = (unsigned __int16)KeNumberNodes;
*v11 = 0i64;
qsort((UINT64)&Base, v16, 0x10ui64, (INT64)MiNodeCostSort, Base, v22[0], v22[1]);
v8 = (unsigned __int16)KeNumberNodes;
v17 = 0;
if( KeNumberNodes )
{
p_Base = &Base;
do
{
v19 = *(_DWORD *)p_Base;
v20 = v1 * v8 + v17;
p_Base += 2;
++v17;
*(_DWORD *)(*(&stru_140C4DB30 + 21) + 4 * v20) = v19;
}
while( v17 < v8 );
}
++v1;
v11 += 2;
}
while( v1 < v9 );
}
}
v3 = (unsigned __int16)KeNumberNodes;
while( v1 < v3 )
{
for( j = v1; j < v3 + v1; *(_DWORD *)(*(&stru_140C4DB30 + 21) + 4 * v5) = (v6 % v3) & 0x3F )
{
v5 = v1 * (v3 - 1) + j;
v6 = j++;
}
++v1;
}
}Referenced by:
MiCreatePfnDatabase