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