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