MxCopyPage

_EXCEPTION_DISPOSITION __stdcall MxCopyPage(){
  void *v0; 
  void *v1; 
  unsigned __int64 Phase0Mapping; 
  void *v3; 
  _XSTATE_CONFIGURATION *v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  int v7; 
  __int64 v8; 
  int v9; 
  unsigned __int64 Long; 

  v1 = v0;
  Phase0Mapping = (unsigned __int64)MxGetPhase0Mapping();
  v3 = (void *)Phase0Mapping;
  if( !Phase0Mapping )
    KeBugCheckEx(0x1Au, (PVOID)0x3030305, v1, 0i64, 0i64);
  v4 = (_XSTATE_CONFIGURATION *)((char *)MmGetPteBase() + ((Phase0Mapping >> 9) & 0x7FFFFFFFF8i64));
  LODWORD(v5) = MiMakeValidPte(v4, (INT64)v1, 2684354564i64);
  v6 = v5;
  LOBYTE(v7) = MiPteInShadowRange((UINT64)v4);
  v9 = v7;
  if( v7 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v6 & 1) != 0 )
    v6 |= v8;
  v4->EnabledFeatures = v6;
  KeCopyPage(v3);
  Long = ZeroPte.u.Long;
  if( v9 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
    Long = ZeroPte.u.Long | 0x8000000000000000ui64;
  v4->EnabledFeatures = Long;
  return KeFlushSingleTb((UINT64)v3, FlushKernel, 1i64);
}

Referenced by:

MiCreateSystemPageTable