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