MiInitializeNumaGraph
VOID __stdcall MiInitializeNumaGraph(_LOADER_PARAMETER_BLOCK *LoaderBlock){
unsigned int v1;
unsigned int *v2;
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;
size_t v16;
unsigned int v17;
int *p_Base;
int v19;
__int64 v20;
int Base;
__int64 v22[127];
v1 = 0;
v2 = *(unsigned int **)(*((_QWORD *)LoaderBlock + 30) + 296i64);
if( v2 )
{
v7 = *v2;
v8 = (unsigned __int16)KeNumberNodes;
v9 = (unsigned __int16)KeNumberNodes;
if( *v2 <= (unsigned __int16)KeNumberNodes )
v9 = *v2;
v10 = &v2[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]) = 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((WCHAR *)&Base, v16, (const WCHAR *)0x10, MiNodeCostSort);
v8 = (unsigned __int16)KeNumberNodes;
v17 = 0;
if( KeNumberNodes )
{
p_Base = &Base;
do
{
v19 = *p_Base;
v20 = v1 * v8 + v17;
p_Base += 4;
++v17;
*(_DWORD *)(qword_140C4DBD8 + 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 *)(qword_140C4DBD8 + 4 * v5) = (v6 % v3) & 0x3F )
{
v5 = v1 * (v3 - 1) + j;
v6 = j++;
}
++v1;
}
}Referenced by:
MiCreatePfnDatabase