MxZeroPageTablePfns
VOID __stdcall MxZeroPageTablePfns(
_MMPTE *PointerPxe,
_MMPTE *EndPxe,
UINT64 PagingLevel,
_LOADER_PARAMETER_BLOCK *LoaderBlock){
int v5;
unsigned __int64 v7;
UINT64 v8;
UINT64 v9;
_MMPFN *v10;
UINT64 v11;
UINT64 v12;
_MMPFN *PfnDb;
__int64 v14;
_MMPTE *PxeSelfRef;
_MMPTE *v16;
UINT64 v17;
UINT64 v18;
if( PointerPxe <= EndPxe )
{
v5 = PagingLevel;
v7 = (unsigned __int64)PointerPxe;
do
{
LODWORD(v8) = MI_READ_PTE_LOCK_FREE(v7);
v17 = v8;
v9 = v8;
if( (v8 & 1) != 0 )
{
MiPteInShadowRange((UINT64)&v17);
v10 = &MmGetPfnDb()[(v9 >> 12) & 0xFFFFFFFFFi64];
LODWORD(v11) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v7 >> 9) & 0x7FFFFFFFF8i64));
v18 = v11;
v12 = v11;
MiPteInShadowRange((UINT64)&v18);
PfnDb = MmGetPfnDb();
v14 = (v12 >> 12) & 0xFFFFFFFFFi64;
PfnDb[v14].ListEntry = 0i64;
*((_OWORD *)&PfnDb[v14].3 + 1) = 0i64;
*(_OWORD *)&PfnDb[v14].u3.ReferenceCount = 0i64;
if( !v5 || (v17 & 0x80u) == 0i64 )
{
v10->ListEntry = 0i64;
*((_OWORD *)&v10->3 + 1) = 0i64;
*(_OWORD *)&v10->u3.ReferenceCount = 0i64;
PxeSelfRef = MmGetPxeSelfRef();
if( v5 > 1 && (_MMPTE *)v7 != PxeSelfRef )
{
v16 = (_MMPTE *)((__int64)((v7 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
MxZeroPageTablePfns(v16, v16 + 511, (unsigned int)(v5 - 1), LoaderBlock);
}
}
}
v7 += 8i64;
}
while( v7 <= (unsigned __int64)EndPxe );
}
}Referenced by:
MiInitializePfnsForValidMappings
MxZeroPageTablePfns