MiLegitimatePageForDriversToMap
INT64 __fastcall MiLegitimatePageForDriversToMap(INT64 a1){
UNICODE_STRING *v1;
UINT8 v2;
WCHAR *v3;
int v4;
INT64 v5;
__int64 v6;
bool v7;
unsigned __int64 PteBase;
unsigned __int64 v10;
char v11;
INT64 v12;
INT64 v13;
LOBYTE(v4) = MI_PFN_IS_PROTO((UNICODE_STRING *)a1, v1, v2, v3);
if( !v4 )
{
v6 = *(_QWORD *)(v5 + 40);
if( (v6 & 0x1000000000i64) != 0 )
{
LODWORD(v12) = 0;
LODWORD(v13) = 0;
if( (unsigned int)MiGetPfnPageSizeIndexUnsynchronized(v5, &v12, &v13) == 3 )
return 3221225496i64;
v7 = (_DWORD)v12 == 6;
}
else
{
PteBase = (unsigned __int64)MmGetPteBase();
v10 = (__int64)((*(_QWORD *)(v5 + 8) << 25) - (PteBase << 25)) >> 16;
if( v10 < PteBase )
return 0i64;
if( v10 > (unsigned __int64)MmGetPteLimit() )
return 0i64;
if( (v6 & 0xFFFFFFFFFi64) == 0xFFFFFFFFDi64 )
return 0i64;
v11 = *(_BYTE *)(v5 + 34);
if( (v11 & 0x20) != 0 && (*(_QWORD *)(v5 + 24) & 0x3FFFFFFFFFFFFFFFi64) == 0 && *(_WORD *)(v5 + 32) )
return 0i64;
if( (v11 & 8) != 0 )
return 0i64;
v7 = ((*(_QWORD *)v5 >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64) == 0xFFFF800000000030ui64;
}
if( !v7 )
return 3221225496i64;
}
return 0i64;
}Referenced by:
MiMapLockedPagesInUserSpace
MiSetProbePagesAhead
MmMapLockedPagesWithReservedMapping
MmRotatePhysicalView