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