MiInitializeSlowPte
VOID __stdcall MiInitializeSlowPte(_MMPTE *MappingPte, UINT64 PageFrameIndex, _MEMORY_CACHING_TYPE CacheType){
INT64 v4;
int v6;
int v7;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v8;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v9;
int v10;
v4 = PageFrameIndex;
v6 = 4;
if( PageFrameIndex <= 0xFFFFFFFFFi64 && (((unsigned __int64)MmGetPfnDb()[PageFrameIndex].u4._bf_0 >> 50) & 1) != 0 )
{
MiMakeProtectionPfnCompatible((_BYTE *)4, &MmGetPfnDb()[PageFrameIndex]);
v6 = v7;
}
else if( CacheType )
{
if( CacheType == MmWriteCombined )
v6 = 28;
}
else
{
v6 = 12;
}
LODWORD(v8.Long) = MiMakeValidPte((_XSTATE_CONFIGURATION *)MappingPte, v4, v6 | 0xA0000000);
v9.Long = v8.Long;
LOBYTE(v10) = MiPteInShadowRange((UINT64)MappingPte);
if( v10 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v9.Long & 1) != 0 )
v9.Long |= 0x8000000000000000ui64;
MappingPte->u.Long = v9.Long;
}Referenced by:
MiSlowRotateCopy