PfpVirtualQuery
NTSTATUS __fastcall PfpVirtualQuery(INT64 a1, CHAR a2, _DWORD *a3){
unsigned int v4;
unsigned __int64 v5;
int v6;
NTSTATUS result;
UINT64 Flags;
UINT8 dst[16];
HANDLE Handle[2];
*(_OWORD *)dst = 0i64;
*(_OWORD *)Handle = 0i64;
if( *(_DWORD *)(a1 + 24) != 32 )
return -1073741306;
v4 = 32;
if( a2 )
{
v5 = *(_QWORD *)(a1 + 16);
if( (v5 & 7) != 0 )
ExRaiseDatatypeMisalignment();
if( v5 + 32 > 0x7FFFFFFF0000i64 || (v4 = 32, v5 + 32 < v5) )
{
MEMORY[0x7FFFFFFF0000] = 0;
v4 = *(_DWORD *)(a1 + 24);
}
}
memmove(dst, *(UINT8 **)(a1 + 16), v4);
if( *(_DWORD *)dst != 1 )
return -1073741811;
v6 = 2;
if( (dst[4] & 1) != 0 && (dst[4] & 2) != 0 )
return -1073741811;
if( (*(_DWORD *)&dst[4] & 0xFFFFFFFC) != 0 )
return -1073741811;
if( (dst[4] & 1) == 0 )
v6 = (dst[4] & 2) != 0;
LODWORD(Flags) = v6;
result = MmQueryVirtualMemory(
Handle[1],
0i64,
MemoryWorkingSetExList,
*(PVOID *)&dst[8],
(UINT64)Handle[0],
0i64,
Flags);
if( result >= 0 )
*a3 = 32;
return result;
}Referenced by:
PfQuerySuperfetchInformation