MxZeroBootMappings
VOID __stdcall MxZeroBootMappings(_MMPTE *PointerPxe, _MMPTE *EndPxe, UINT64 PagingLevel){
int v3;
unsigned __int64 v5;
UINT64 v6;
UINT64 v7;
unsigned __int64 Long;
int v9;
_MMPTE *v10;
UINT64 v11;
if( PointerPxe < EndPxe )
{
v3 = PagingLevel;
v5 = (unsigned __int64)PointerPxe;
do
{
LODWORD(v6) = MI_READ_PTE_LOCK_FREE(v5);
v11 = v6;
v7 = v6;
if( v6 )
{
if( (v6 & 1) != 0 && (v6 & 0x80u) == 0i64 )
{
if( v3 > 1 )
{
v10 = (_MMPTE *)((__int64)((v5 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
MxZeroBootMappings(v10, v10 + 512, (unsigned int)(v3 - 1));
}
MiPteInShadowRange((UINT64)&v11);
MiFreeBootPageTable((v7 >> 12) & 0xFFFFFFFFFi64);
}
Long = ZeroPte.u.Long;
LOBYTE(v9) = MiPteInShadowRange(v5);
if( v9 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
Long = ZeroPte.u.Long | 0x8000000000000000ui64;
*(_QWORD *)v5 = Long;
}
v5 += 8i64;
}
while( v5 < (unsigned __int64)EndPxe );
}
}Referenced by:
MiZeroBootMappings
MxZeroBootMappings