MxRelocatePageTables

VOID __stdcall MxRelocatePageTables(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  _MMPTE *PteBase; 
  _MMPTE *v3; 
  unsigned __int64 v4; 
  __int64 v5; 
  _MMPTE *v6; 
  _MMPTE *v7; 
  __int64 v8; 
  UINT64 v9; 
  UINT64 v10; 
  _MI_COLOR_BASE ColorBase[6]; 
  UINT64 v12; 

  *(_OWORD *)ColorBase = 0i64;
  MiInitializePageColorBase(0i64, 0i64, ColorBase);
  PteBase = MmGetPteBase();
  v3 = PteBase + 0x800000000i64;
  v4 = (unsigned __int64)PteBase + (((unsigned __int64)MmPfnDatabase >> 9) & 0x7FFFFFFFF8i64);
  v5 = 3i64;
  do
  {
    v3 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)v3 >> 9) & 0x7FFFFFFFF8i64));
    v4 = (unsigned __int64)PteBase + ((v4 >> 9) & 0x7FFFFFFFF8i64);
    --v5;
  }
  while( v5 );
  if( (unsigned __int64)v3 < v4 )
    MxMovePageTables(v3, (_MMPTE *)(v4 - 8), 3ui64, LoaderBlock, ColorBase);
  v6 = (_MMPTE *)((char *)PteBase + ((((unsigned __int64)MmPfnDatabase + 4096 * MxPfnAllocation) >> 9) & 0x7FFFFFFFF8i64));
  v7 = PteBase + 0xFFFFFFFFFi64;
  v8 = 3i64;
  do
  {
    v6 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)v6 >> 9) & 0x7FFFFFFFF8i64));
    v7 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)v7 >> 9) & 0x7FFFFFFFF8i64));
    --v8;
  }
  while( v8 );
  if( v6 < v7 )
    MxMovePageTables(v6 + 1, v7, 3ui64, LoaderBlock, ColorBase);
  MxSwapPages(ColorBase, PteBase + 0xF78000000i64);
  LODWORD(v9) = MI_READ_PTE_LOCK_FREE((INT64)&PteBase[0xF78000000i64]);
  v12 = v9;
  v10 = v9;
  MiPteInShadowRange((UINT64)&v12);
  MiIncrementPfn(&MmGetPfnDb()[(v10 >> 12) & 0xFFFFFFFFFi64]);
}

Referenced by:

MiInitNucleus