MmGetNodeChannelRanges

__int64 __fastcall MmGetNodeChannelRanges(_QWORD *a1, UINT64 *a2){
  PHYSICAL_MEMORY_DESCRIPTOR *v4; 
  UINT64 v5; 
  _DWORD *Pool; 
  unsigned int v7; 
  _DWORD *v8; 
  _PHYSICAL_MEMORY_RUN *Run; 
  char *v10; 
  unsigned int v11; 
  __int64 NumberOfRuns; 
  _PHYSICAL_MEMORY_RUN *v13; 
  unsigned __int64 BasePage; 
  __int64 BasePage_low; 
  __int64 PageCount_high; 
  __int64 result; 

  v4 = MiReferencePageRuns((ULONG_PTR *)&Irp.Core.PartitionId, 1ui64);
  v5 = 32i64 * (v4->NumberOfRuns - 1) + 48;
  Pool = MiAllocatePool(64i64, v5, 0x68506D4Dui64);
  v7 = 0;
  v8 = Pool;
  if( Pool )
  {
    Run = v4->Run;
    *(_QWORD *)Pool = v4->NumberOfRuns;
    v10 = (char *)(Pool + 4);
    v11 = 0;
    Pool[2] = (unsigned __int16)KeNumberNodes;
    Pool[3] = MmNumberOfChannels;
    NumberOfRuns = v4->NumberOfRuns;
    v13 = &v4->Run[NumberOfRuns];
    if( (_DWORD)NumberOfRuns )
    {
      do
      {
        BasePage = Run->BasePage;
        ++Run;
        *((_QWORD *)v10 + 1) = BasePage;
        *((_QWORD *)v10 + 2) = Run[-1].PageCount;
        BasePage_low = LODWORD(v13->BasePage);
        v13 = (_PHYSICAL_MEMORY_RUN *)((char *)v13 + 8);
        *(_DWORD *)v10 = BasePage_low;
        v10 += 32;
        PageCount_high = HIDWORD(v13[-1].PageCount);
        *((_DWORD *)v10 - 7) = PageCount_high;
        ++v11;
        *((_QWORD *)v10 - 1) = *(_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