MiConvertHiberPhasePte
INT64 __fastcall MiConvertHiberPhasePte(INT64 a1, INT64 *a2, INT64 a3){
unsigned __int64 PteShadow;
int v4;
__int64 v7;
__int64 v9;
unsigned __int64 v10;
UINT64 v11;
PteShadow = *a2;
v4 = a3;
if( a2 >= (INT64 *)MmGetPml4eBase() && a2 <= (INT64 *)MmGetPxeUserLimit() )
PteShadow = MiReadPteShadow((UNICODE_STRING *)a2, (UNICODE_STRING *)*a2, a3, (WCHAR *)(unsigned int)a3);
v7 = *(_QWORD *)(a1 + 168);
v11 = PteShadow;
if( v7 )
{
if( (PteShadow & 1) != 0 && !v4 )
{
v9 = (PteShadow >> 12) & 0xFFFFFFFFFi64;
if( (unsigned int)MiIsPfn(v9) )
{
if( v9 != qword_140C4EAC0
&& v9 != qword_140C4EAA8
&& !_bittest64(*(const signed __int64 **)(v7 + 8), (unsigned int)(PteShadow >> 12)) )
{
v10 = PteShadow & 0xFFFFFFFFFFFFFBFAui64 | 0x404;
v11 = v10;
goto LABEL_17;
}
}
}
}
else if( (PteShadow & 1) == 0 && (PteShadow & 0x400) != 0 && (PteShadow & 4) != 0 )
{
v10 = PteShadow & 0xFFFFFFFFFFFFFBFAui64 | 1;
v11 = v10;
LABEL_17:
*a2 = v10;
}
return 0i64;
}Referenced by:
No references.