MiStoreCheckCandidatePage
INT64 __fastcall MiStoreCheckCandidatePage(UINT64 a1, UINT64 a2, UINT64 *a3, _OWORD *a4, INT64 a5){
unsigned int v5;
unsigned __int64 v9;
int v10;
unsigned __int64 v11;
__int64 v12;
unsigned __int64 v13;
int v14;
UINT64 TopLevelPfn;
__int64 v16;
char PfnPriority;
char v18;
int v19;
_QWORD *v20;
__int128 v22;
__int64 v23;
v5 = 0;
*(_QWORD *)&v22 = 0i64;
v9 = (unsigned int)a2 | ((unsigned __int64)*(unsigned int *)(*(_QWORD *)(qword_140C4E388
+ 8 * ((*(_QWORD *)(a1 + 40) >> 39) & 0x3FFi64))
+ 1156i64) << 60);
LOBYTE(v10) = MI_PFN_IS_PROTO((UNICODE_STRING *)a1, (UNICODE_STRING *)a2, (UINT8)a3, (PWCHAR)a4);
if( v10 )
{
*(_QWORD *)&v22 = *(_QWORD *)(a1 + 8) | 0x8000000000000000ui64;
*((_QWORD *)&v22 + 1) = 3i64;
goto LABEL_22;
}
v11 = *(_QWORD *)(a1 + 8) | 0x8000000000000000ui64;
v12 = (_QWORD)MmGetPteBase() << 25;
if( (unsigned int)MiGetSystemRegionType(v11) == 5 )
{
*(_QWORD *)&v22 = v11 - 1432;
*((_QWORD *)&v22 + 1) = ((((_QWORD)MmGetPxeSelfRef() << 25) - v12) >> 16) & 0xFFFFFFFFFFFFFFFCui64;
LABEL_22:
v23 = *(_QWORD *)a5;
PfnPriority = MiGetPfnPriority(a1);
v18 = (*(_BYTE *)(a1 + 34) & 0xC0) - 64;
*a3 = v9;
LODWORD(v23) = v19 | v23 & 0xFFF90C00 | (v18 != 0 ? 0x20000 : 0) | ((PfnPriority & 7) << 13) | 0xC00;
*v20 = v23;
*a4 = v22;
return v5;
}
v13 = (__int64)((v11 << 25) - v12) >> 16;
HIDWORD(v22) = HIDWORD(v13);
if( (unsigned int)MiGetSystemRegionType(v13) != 1
&& v13 > 0x7FFFFFFEFFFFi64
&& (v13 < qword_140C4F878 || v13 > qword_140C4E0A8)
&& (v13 < (unsigned __int64)MmGetPteBase() || v13 > (unsigned __int64)MmGetPteLimit()) )
{
v14 = v13 & 0xFFFFFFFC | 2;
goto LABEL_21;
}
TopLevelPfn = MiGetTopLevelPfn(a1);
if( TopLevelPfn != a1 )
{
v16 = (*(_QWORD *)TopLevelPfn >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64;
*(_QWORD *)&v22 = v16;
_InterlockedAnd64((volatile signed __int64 *)(TopLevelPfn + 24), 0x7FFFFFFFFFFFFFFFui64);
if( (unsigned int)MiGetSystemRegionType(v13) == 1 )
{
v14 = v13 & 0xFFFFFFFC | 1;
}
else
{
if( (unsigned int)MiIsStoreProcess(v16) )
return(unsigned int)-1073741401;
v14 = v13 & 0xFFFFFFFC;
}
LABEL_21:
DWORD2(v22) = v14;
goto LABEL_22;
}
return(unsigned int)-1073741253;
}Referenced by:
MiStoreWriteModifiedPages