MxCopyPage
VOID __stdcall MxCopyPage(UINT64 PageFrameIndex, PVOID SourceVa){
unsigned __int64 Phase0Mapping;
void *v4;
UINT64 *v5;
UINT64 ValidPte;
__int64 v7;
BOOL v8;
unsigned __int64 v9;
Phase0Mapping = (unsigned __int64)MxGetPhase0Mapping();
v4 = (void *)Phase0Mapping;
if( !Phase0Mapping )
KeBugCheckEx(0x1Au, 0x3030305ui64, PageFrameIndex, 0i64, 0i64);
v5 = (UINT64 *)((char *)MmGetPteBase() + ((Phase0Mapping >> 9) & 0x7FFFFFFFF8i64));
ValidPte = MiMakeValidPte((UINT64)v5, PageFrameIndex, 2684354564i64);
v8 = MiPteInShadowRange((UINT64)v5);
if( v8 && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0 && (ValidPte & 1) != 0 )
ValidPte |= v7;
*v5 = ValidPte;
KeCopyPage(v4);
v9 = ZeroPte;
if( v8 && (*(_DWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2172i64) & 0x1000) != 0 && (ZeroPte & 1) != 0 )
v9 = ZeroPte | 0x8000000000000000ui64;
*v5 = v9;
KeFlushSingleTb(v4, 0i64, 1i64);
}Referenced by:
MiCreateSystemPageTable