PfpMemoryRangesQuery
NTSTATUS __stdcall PfpMemoryRangesQuery(_SUPERFETCH_INFORMATION *Info, INT8 PreviousMode, UINT64 *OutSize){
VOID **v5;
_DWORD *v6;
int v7;
NTSTATUS v8;
INT64 v9;
VOID **PhysicalMemoryRangesEx2;
VOID **i;
unsigned __int64 v12;
unsigned __int64 v13;
__int64 v15;
unsigned __int64 j;
__int64 v17;
v5 = 0i64;
v6 = (_DWORD *)*((_QWORD *)Info + 2);
if( PreviousMode )
ProbeForWrite(*((_QWORD *)Info + 2), (unsigned int)Info[6], 8i64);
if( *v6 == 2 )
{
v7 = v6[1];
if( (v7 & 0xFFFFFFFE) != 0 )
{
v8 = -1073741811;
}
else
{
v9 = 0i64;
if( (v7 & 1) != 0 )
v9 = 3i64;
PhysicalMemoryRangesEx2 = MmGetPhysicalMemoryRangesEx2(0i64, v9);
v5 = PhysicalMemoryRangesEx2;
if( !PhysicalMemoryRangesEx2 )
goto LABEL_25;
for( i = PhysicalMemoryRangesEx2; (__int64)i[1] > 0; i += 2 )
;
v12 = ((char *)i - (char *)PhysicalMemoryRangesEx2) >> 4;
if( v12 <= 0xFFFFFFFF && (v13 = 16 * (v12 + 1), v13 <= 0xFFFFFFFF) )
{
if( Info[6] >= (unsigned int)v13 )
{
v15 = *((_QWORD *)Info + 2);
*(_DWORD *)(v15 + 8) = v12;
for( j = 0i64; j < v12; ++j )
{
v17 = 2 * j;
*(_QWORD *)(v15 + 8 * v17 + 16) = (__int64)PhysicalMemoryRangesEx2[2 * j] / 4096;
*(_QWORD *)(v15 + 8 * v17 + 24) = (__int64)PhysicalMemoryRangesEx2[2 * j + 1] / 4096;
}
*(_DWORD *)OutSize = v13;
v8 = 0;
}
else
{
v8 = -1073741789;
*(_DWORD *)OutSize = v13;
}
}
else
{
LABEL_25:
v8 = -1073741670;
}
}
}
else
{
v8 = -1073741811;
}
if( v5 )
ExFreePoolWithTag(v5, 0);
return v8;
}Referenced by:
PfQuerySuperfetchInformation