MiGetFileOnlyRanges

char *__fastcall MiGetFileOnlyRanges(__int16 *a1, VOID *a2, _QWORD *a3){
  char v3; 
  char *v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  CHAR v10; 
  CHAR v11; 
  __int64 v12; 
  UINT64 v13; 
  __int64 v14; 
  _MMPFN *PfnDb; 
  __int64 v16; 
  unsigned __int64 v17; 
  UINT64 v18; 
  __int64 v19; 
  unsigned __int64 EntireField; 
  __int64 v21; 
  char *Pool; 
  char *v23; 
  UINT64 v24; 
  _MMPFN *v25; 
  __int64 v26[9]; 
  char v27; 
  __int16 v28; 
  _MMSUPPORT_INSTANCE *Vm; 

  v27 = (char)a2;
  v3 = MiFlags;
  v4 = 0i64;
  *a3 = 0i64;
  v5 = 0i64;
  v6 = 0i64;
  v7 = -1i64;
  if( (v3 & 0x30) == 0 )
    return 0i64;
  v28 = *a1;
  v26[0] = 0i64;
  Vm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemViews, a2);
LABEL_4:
  while( 1 )
  {
    MiLockWorkingSetShared();
    v24 = 0i64;
    v11 = v10;
    LODWORD(v12) = MiGetNextNonGapPfnPage((UINT64 *)v26, &v24, v10, 0i64);
    LOBYTE(v13) = v11;
    v14 = v12;
    MiUnlockWorkingSetShared(Vm, v13);
    if( !v14 )
      break;
    PfnDb = MmGetPfnDb();
    v16 = (v14 - (__int64)PfnDb) / 48;
    v17 = (unsigned __int64)&PfnDb[v16];
    v25 = &PfnDb[v16];
    v18 = (UINT64)&PfnDb[(__int64)(v14 + v24 - (_QWORD)PfnDb) / 48];
    v24 = v18;
    if( (unsigned __int64)&PfnDb[v16] < v18 )
    {
      v19 = 16 * v6;
      while( 1 )
      {
        EntireField = MmGetPfnDb()[v16].u4.EntireField;
        if( (EntireField & 0x2000000000000i64) != 0 && ((v27 & 2) != 0 || ((EntireField >> 39) & 0x3FF) == v28) )
        {
          v21 = v16 * 48 / 48;
          if( v7 == -1 || v7 + 1 != v21 )
          {
            if( v6 == v5 )
            {
              if( v5 )
                v5 *= 2i64;
              else
                v5 = 16i64;
              Pool = (char *)MiAllocatePool(64i64, 16 * v5, 0x66506D4Dui64);
              v23 = Pool;
              if( !Pool && v4 )
              {
                ExFreePoolWithTag(v4, 0);
                return 0i64;
              }
              if( v6 )
              {
                memmove(Pool, v4, v19);
                ExFreePoolWithTag(v4, 0);
              }
              v17 = (unsigned __int64)v25;
              v4 = v23;
              v18 = v24;
            }
            *(_QWORD *)&v4[v19 + 8] = 4096i64;
            ++v6;
            *(_QWORD *)&v4[v19] = v21 << 12;
            v19 += 16i64;
          }
          else
          {
            *(_QWORD *)&v4[v19 - 8] += 4096i64;
          }
          v7 = v16 * 48 / 48;
        }
        v17 += 48i64;
        ++v16;
        v25 = (_MMPFN *)v17;
        if( v17 >= v18 )
          goto LABEL_4;
      }
    }
  }
  *a3 = v6;
  return v4;
}

Referenced by:

MiGetPhysicalMemoryRanges