MmGetNodeChannelRanges

INT64 __fastcall MmGetNodeChannelRanges(_QWORD *a1, UINT64 *a2){
  PHYSICAL_MEMORY_DESCRIPTOR *v4; 
  UINT64 v5; 
  __int64 v6; 
  unsigned int v7; 
  __int64 v8; 
  _PHYSICAL_MEMORY_RUN *Run; 
  __int64 v10; 
  unsigned int v11; 
  __int64 NumberOfRuns; 
  _PHYSICAL_MEMORY_RUN *v13; 
  unsigned __int64 BasePage; 
  __int64 BasePage_low; 
  __int64 PageCount_high; 
  INT64 result; 
  v4 = MiReferencePageRuns((_MI_PARTITION *)&MiSystemPartition, 1ui64);
  v5 = 32i64 * (v4->NumberOfRuns - 1) + 48;
  LODWORD(v6) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v7 = 0;
  v8 = v6;
  if( v6 )
  {
    Run = v4->Run;
    *(_QWORD *)v6 = v4->NumberOfRuns;
    v10 = v6 + 16;
    v11 = 0;
    *(_DWORD *)(v6 + 8) = (unsigned __int16)KeNumberNodes;
    *(_DWORD *)(v6 + 12) = MmNumberOfChannels;
    NumberOfRuns = v4->NumberOfRuns;
    v13 = &v4->Run[NumberOfRuns];
    if( (_DWORD)NumberOfRuns )
    {
      do
      {
        BasePage = Run->BasePage;
        ++Run;
        *(_QWORD *)(v10 + 8) = BasePage;
        *(_QWORD *)(v10 + 16) = Run[-1].PageCount;
        BasePage_low = LODWORD(v13->BasePage);
        v13 = (_PHYSICAL_MEMORY_RUN *)((char *)v13 + 8);
        *(_DWORD *)v10 = BasePage_low;
        v10 += 32i64;
        PageCount_high = HIDWORD(v13[-1].PageCount);
        *(_DWORD *)(v10 - 28) = PageCount_high;
        ++v11;
        *(_QWORD *)(v10 - 8) = *(_BYTE *)(PageCount_high + qword_140C50AD0 + 4544 * BasePage_low + 4321) == 1;
      }
      while( v11 < v4->NumberOfRuns );
    }
  }
  else
  {
    v7 = -1073741670;
  }
  MiDereferencePageRuns(v4);
  result = v7;
  *a1 = v8;
  *a2 = v5;
  return result;
}

Referenced by:

ExpQueryMemoryTopologyInformation