MxZeroPageTablePfns
INT64 __stdcall MxZeroPageTablePfns(WCHAR *ServiceName, UINT8 *BootStart, UINT64 *PnpFlags){
INT64 result;
int v4;
unsigned __int64 v6;
unsigned __int64 v7;
_OWORD *v8;
UINT64 v9;
__int64 v10;
__int64 v11;
UINT64 v12;
UINT64 v13;
if( ServiceName <= (WCHAR *)BootStart )
{
v4 = (int)PnpFlags;
v6 = (unsigned __int64)ServiceName;
do
{
result = MI_READ_PTE_LOCK_FREE(v6);
v12 = result;
v7 = result;
if( (result & 1) != 0 )
{
MiPteInShadowRange((UINT64)&v12);
v8 = (_OWORD *)((char *)MmGetPfnDb() + 48 * ((v7 >> 12) & 0xFFFFFFFFFi64));
v13 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v6 >> 9) & 0x7FFFFFFFF8i64));
v9 = v13;
MiPteInShadowRange((UINT64)&v13);
result = (INT64)MmGetPfnDb();
v10 = 6 * ((v9 >> 12) & 0xFFFFFFFFFi64);
*(_OWORD *)(result + 8 * v10) = 0i64;
*(_OWORD *)(result + 8 * v10 + 16) = 0i64;
*(_OWORD *)(result + 8 * v10 + 32) = 0i64;
if( !v4 || (v12 & 0x80u) == 0i64 )
{
*v8 = 0i64;
v8[1] = 0i64;
v8[2] = 0i64;
result = (INT64)MmGetPxeSelfRef();
if( v4 > 1 && v6 != result )
{
v11 = (__int64)((v6 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
result = MxZeroPageTablePfns((WCHAR *)v11, (UINT8 *)(v11 + 4088), (UINT64 *)(unsigned int)(v4 - 1));
}
}
}
v6 += 8i64;
}
while( v6 <= (unsigned __int64)BootStart );
}
return result;
}Referenced by:
MiInitializePfnsForValidMappings
MxZeroPageTablePfns