MiZeroPhysicalPage
VOID __fastcall MiZeroPhysicalPage(UINT64 PageFrameIndex, UINT64 Flags, _MI_PFN_CACHE_ATTRIBUTE FinalAttribute){
char v4;
_MMPFN *v6;
__int64 v7;
unsigned int v8;
INT64 v9;
char v10;
int ProtectionPfnCompatible;
v4 = Flags;
v6 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * PageFrameIndex);
v7 = *((unsigned __int8 *)v6 + 34) >> 6;
v8 = *((unsigned __int8 *)v6 + 34) >> 6;
if( (Flags & 2) == 0 )
{
v8 = dword_140C4DCD8[4 * v7 + (int)FinalAttribute];
if( v8 != (_DWORD)v7 )
MiChangePageAttribute((INT64)v6, v8, 0);
}
v9 = 0i64;
v10 = -2;
if( !*((_QWORD *)KeGetCurrentPrcb() + 4160) )
v10 = v4;
if( (v10 & 1) != 0 && (v9 = MiReservePtes((INT64)&qword_140C4EC80, 1ui64)) != 0 )
{
ProtectionPfnCompatible = MiMakeProtectionPfnCompatible(4ui64, v6);
*(_QWORD *)v9 = MiMakeValidPte(v9, PageFrameIndex, ProtectionPfnCompatible | 0xA0000000);
KeZeroPages((PVOID)(((v9 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16), 0x1000ui64);
MiReleasePtes((INT64)&qword_140C4EC80, v9, 1ui64);
}
else
{
if( *((_QWORD *)KeGetCurrentPrcb() + 4160) )
v9 = 1i64;
MiFillPhysicalPages((PVOID)PageFrameIndex);
}
if( v8 != (_DWORD)v7 && v8 != FinalAttribute )
{
if( v9 )
MiChangePageAttribute((INT64)v6, (unsigned int)v7, 0);
}
}Referenced by:
MiComputeOptimalZeroPath
MiGetLargePage
MiGetPage
MiGetPageChain
MiInitializeCacheFlushing
MiIssueHardFault
MiMakePageAvoidRead
MiPerformFinalZeroing
MiPfPutPagesInTransition
MiWaitForInPageComplete
MiZeroAndConvertPage
MiZeroLargePage
MiZeroWithSystemPtes
MmCheckCachedPageStates