MiMarkPfnVerified
VOID __stdcall MiMarkPfnVerified(PVOID Pfn1, UINT64 VerifyType){
wchar_t *v2;
unsigned int v3;
signed __int64 v5;
_PREFIX_TABLE *v6;
UINT8 v7;
int v8;
char v9;
int v10;
INT16 v11;
_STRING FullName;
v3 = VerifyType;
FullName = 0i64;
v5 = (_BYTE *)Pfn1 - (_BYTE *)MmGetPfnDb();
v6 = (_PREFIX_TABLE *)(v5 / 48);
if( (VerifyType & 4) != 0 )
v7 = 17;
else
v7 = MiLockPageInline((_MMPFN *)Pfn1);
if( (v3 & 2) != 0 && ((*((_QWORD *)Pfn1 + 5) >> 60) & 7) == 3 )
v3 &= ~2u;
if( (v3 & 2) != 0 && (MiFlags & 0x10000) != 0 )
{
LOBYTE(v8) = MI_PFN_IS_PROTO((_UNICODE_STRING *)Pfn1, (_UNICODE_STRING *)v3, v5, v2);
if( !v8 && (MiFlags & 0x8000) != 0 )
*(_QWORD *)&FullName.Length = (__int64)((*((_QWORD *)Pfn1 + 1) << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
v10 = v3 & 1;
LOBYTE(v3) = v9 & 0xFE;
if( !v10 )
LOBYTE(v3) = v9;
v11 = 4 * v10 + 2;
if( (v3 & 0x20) != 0 )
{
v11 |= 0x40u;
if( (*((_BYTE *)Pfn1 + 34) & 0x10) == 0 && (*((_DWORD *)Pfn1 + 4) & 4) == 0 )
v11 |= 0x800u;
}
if( (int)KeSetPagePrivilege(v6, &FullName, v11) < 0 )
KeBugCheckEx(0x1Au, (PVOID)0x5150C, v6, 0i64, 0i64);
}
if( ((*((_QWORD *)Pfn1 + 5) >> 60) & 7) != 3 )
*((_QWORD *)Pfn1 + 5) = *((_QWORD *)Pfn1 + 5) & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
if( (v3 & 1) != 0 && (MiFlags & 0x10000) != 0 )
{
MiGetPagePrivilege((ULONG_PTR)Pfn1, 1ui64, (_KE_PRIVILEGED_PAGE_IDENTITY *)&FullName);
KeSetPagePrivilege(v6, &FullName, 4);
}
if( v7 != 17 )
{
_InterlockedAnd64((volatile signed __int64 *)Pfn1 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v7);
}
}Referenced by:
MiAllocateWsle
MiCompleteSecureProcessFault
MiCopyPage
MiFillPerSessionProtos
MiGatherMappedPages
MiInitializeBootLoadedDriverPfns
MiRevertValidPte
MiSetSystemCodeProtection
MiSwitchToPfns
MiValidateImagePfn
MiValidateInPage
MiValidateKernelHalLargePageRange