MxRelocatePageTables
VOID __stdcall MxRelocatePageTables(_LOADER_PARAMETER_BLOCK *LoaderBlock){
_MMPTE *PteBase;
unsigned __int64 v3;
unsigned __int64 v4;
__int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
__int64 v8;
UINT64 v9;
__int128 v10;
UINT64 v11;
v10 = 0i64;
MiInitializePageColorBase(0i64, 0i64, (INT64)&v10);
PteBase = MmGetPteBase();
v3 = (unsigned __int64)PteBase + 0x4000000000i64;
v4 = (unsigned __int64)PteBase + (((unsigned __int64)MmPfnDatabase >> 9) & 0x7FFFFFFFF8i64);
v5 = 3i64;
do
{
v3 = (unsigned __int64)PteBase + ((v3 >> 9) & 0x7FFFFFFFF8i64);
v4 = (unsigned __int64)PteBase + ((v4 >> 9) & 0x7FFFFFFFF8i64);
--v5;
}
while( v5 );
if( v3 < v4 )
MxMovePageTables(v3, v4 - 8, 3, (__int64)LoaderBlock, (__int64)&v10);
v6 = (unsigned __int64)PteBase
+ (((unsigned __int64)(MmPfnDatabase + (MxPfnAllocation << 12)) >> 9) & 0x7FFFFFFFF8i64);
v7 = (unsigned __int64)PteBase + 0x7FFFFFFFF8i64;
v8 = 3i64;
do
{
v6 = (unsigned __int64)PteBase + ((v6 >> 9) & 0x7FFFFFFFF8i64);
v7 = (unsigned __int64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64);
--v8;
}
while( v8 );
if( v6 < v7 )
MxMovePageTables(v6 + 8, v7, 3, (__int64)LoaderBlock, (__int64)&v10);
MxSwapPages((__int64)&v10, (__int64)PteBase + 0x7BC0000000i64);
v11 = MI_READ_PTE_LOCK_FREE((INT64)PteBase + 0x7BC0000000i64);
v9 = v11;
MiPteInShadowRange((UINT64)&v11);
MiIncrementPfn((INT64)MmGetPfnDb() + 48 * ((v9 >> 12) & 0xFFFFFFFFFi64));
}Referenced by:
MiInitNucleus