MiGetFileOnlyRanges

CHAR *__stdcall MiGetFileOnlyRanges(INT16 *rcx0, CHAR dl0, _QWORD *a3){
  char v3; 
  UINT8 *v4; 
  __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  CHAR *AnyMultiplexedVm; 
  CHAR v11; 
  UINT8 v12; 
  INT64 NextNonGapPfnPage; 
  _MMPFN *PfnDb; 
  __int64 v15; 
  unsigned __int64 v16; 
  UINT64 v17; 
  UINT64 v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  UINT8 *v21; 
  UINT8 *v22; 
  UINT64 v23; 
  unsigned __int64 v24; 
  __int64 v25[9]; 
  INT16 v27; 
  INT64 v28; 
  v3 = MiFlags;
  v4 = 0i64;
  *a3 = 0i64;
  v5 = 0i64;
  v6 = 0i64;
  v7 = -1i64;
  if( (v3 & 0x30) == 0 )
    return 0i64;
  v27 = *rcx0;
  AnyMultiplexedVm = MiGetAnyMultiplexedVm(1i64);
  v25[0] = 0i64;
  v28 = (INT64)AnyMultiplexedVm;
LABEL_4:
  while( 1 )
  {
    v11 = MiLockWorkingSetShared((INT64)AnyMultiplexedVm);
    v23 = 0i64;
    v12 = v11;
    NextNonGapPfnPage = MiGetNextNonGapPfnPage((UINT64 *)v25, &v23, v11, 0i64);
    MiUnlockWorkingSetShared(v28, v12);
    if( !NextNonGapPfnPage )
      break;
    PfnDb = MmGetPfnDb();
    v15 = 48 * ((NextNonGapPfnPage - (__int64)PfnDb) / 48);
    v16 = (unsigned __int64)PfnDb + v15;
    v24 = (unsigned __int64)PfnDb + v15;
    v17 = (UINT64)PfnDb + 48 * ((__int64)(NextNonGapPfnPage + v23 - (_QWORD)PfnDb) / 48);
    AnyMultiplexedVm = (CHAR *)v28;
    v23 = v17;
    if( (unsigned __int64)PfnDb + v15 < v17 )
    {
      v18 = 16 * v6;
      while( 1 )
      {
        v19 = *(_QWORD *)((char *)MmGetPfnDb() + v15 + 40);
        if( (v19 & 0x2000000000000i64) != 0 && ((dl0 & 2) != 0 || ((v19 >> 39) & 0x3FF) == v27) )
        {
          v20 = v15 / 48;
          if( v7 == -1 || v7 + 1 != v20 )
          {
            if( v6 == v5 )
            {
              if( v5 )
                v5 *= 2i64;
              else
                v5 = 16i64;
              LODWORD(v21) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
              v22 = v21;
              if( !v21 && v4 )
              {
                ExFreePoolWithTag(v4, 0);
                return 0i64;
              }
              if( v6 )
              {
                memmove(v21, v4, v18);
                ExFreePoolWithTag(v4, 0);
              }
              v16 = v24;
              v4 = v22;
              v17 = v23;
            }
            *(_QWORD *)&v4[v18 + 8] = 4096i64;
            ++v6;
            *(_QWORD *)&v4[v18] = v20 << 12;
            v18 += 16i64;
          }
          else
          {
            *(_QWORD *)&v4[v18 - 8] += 4096i64;
          }
          v7 = v15 / 48;
        }
        v16 += 48i64;
        v15 += 48i64;
        v24 = v16;
        if( v16 >= v17 )
        {
          AnyMultiplexedVm = (CHAR *)v28;
          goto LABEL_4;
        }
      }
    }
  }
  *a3 = v6;
  return(CHAR *)v4;
}

Referenced by:

MiGetPhysicalMemoryRanges