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