MmInitializeMemoryLimits

_PHYSICAL_MEMORY_DESCRIPTOR *__stdcall MmInitializeMemoryLimits(
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        UINT8 *IncludeType){
  _LIST_ENTRY *p_MemoryDescriptorListHead; 
  unsigned int v3; 
  _LIST_ENTRY *Flink; 
  __int64 v6; 
  _PHYSICAL_MEMORY_DESCRIPTOR *Pool; 
  _PHYSICAL_MEMORY_DESCRIPTOR *v8; 
  unsigned int v9; 
  _LIST_ENTRY *v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  __int64 Flink_low; 
  _PHYSICAL_MEMORY_DESCRIPTOR *v14; 
  _PHYSICAL_MEMORY_DESCRIPTOR *v15; 
  _PHYSICAL_MEMORY_DESCRIPTOR *result; 
  _LIST_ENTRY *v17; 
  unsigned __int64 Blink; 
  __int64 v19; 
  unsigned __int64 v20; 

  p_MemoryDescriptorListHead = &LoaderBlock->MemoryDescriptorListHead;
  v3 = 0;
  Flink = LoaderBlock->MemoryDescriptorListHead.Flink;
  if( Flink == &LoaderBlock->MemoryDescriptorListHead )
    return 0i64;
  do
  {
    Flink = Flink->Flink;
    v6 = v3++;
  }
  while( Flink != p_MemoryDescriptorListHead );
  if( !v3 )
    return 0i64;
  Pool = (_PHYSICAL_MEMORY_DESCRIPTOR *)MiAllocatePool(64i64, 16 * (v6 + 2), 0x6C4D6D4Dui64);
  v8 = Pool;
  if( !Pool )
    return 0i64;
  Pool->NumberOfRuns = v3;
  v9 = 0;
  v10 = p_MemoryDescriptorListHead->Flink;
  v11 = 0i64;
  v12 = -1i64;
  if( p_MemoryDescriptorListHead->Flink == p_MemoryDescriptorListHead )
    goto LABEL_19;
  do
  {
    Flink_low = SLODWORD(v10[1].Flink);
    if( (int)Flink_low < 41 && IncludeType[Flink_low] )
    {
      v17 = v10[2].Flink;
      Blink = (unsigned __int64)v10[1].Blink;
      v11 += (unsigned __int64)v17;
      if( Blink == v12 && v9 )
      {
        v8->Run[v9 - 1].PageCount += (unsigned __int64)v17;
        v12 += (__int64)v10[2].Flink;
      }
      else
      {
        v19 = v9++;
        v8->Run[v19].BasePage = Blink;
        v20 = (unsigned __int64)v10[2].Flink;
        v8->Run[v19].PageCount = v20;
        v12 = v20 + Blink;
      }
    }
    v10 = v10->Flink;
  }
  while( v10 != p_MemoryDescriptorListHead );
  if( !v9 )
  {
LABEL_19:
    v8->Run[0].BasePage = 0i64;
    v8->Run[0].PageCount = 0i64;
  }
  else if( v3 > v9 )
  {
    v14 = (_PHYSICAL_MEMORY_DESCRIPTOR *)MiAllocatePool(64i64, 16 * (v9 - 1 + 2i64), 0x6C4D6D4Dui64);
    v15 = v14;
    if( v14 )
    {
      memmove(v14->Run, v8->Run, 16 * v9);
      ExFreePoolWithTag(v8, 0);
      v8 = v15;
    }
  }
  v8->NumberOfRuns = v9;
  result = v8;
  v8->NumberOfPages = v11;
  return result;
}

Referenced by:

IopInitCrashDumpDuringSysInit
IopInitializeResourceMap
MiInitNucleus