From 58669d3074530332cf1d128538b26765f8bdd804 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Thu, 29 Jan 2026 22:10:26 +0100 Subject: [PATCH] Refactor memory layout structure --- sdk/xtdk/mmtypes.h | 34 +++++++++++++++++++++++++++++++--- xtoskrnl/mm/amd64/mmgr.cc | 12 ++++-------- xtoskrnl/mm/amd64/pfn.cc | 10 +++++----- xtoskrnl/mm/amd64/pte.cc | 2 +- xtoskrnl/mm/colors.cc | 2 +- xtoskrnl/mm/i686/mmgr.cc | 12 ++++-------- xtoskrnl/mm/i686/pfn.cc | 8 ++++---- xtoskrnl/mm/i686/pte.cc | 2 +- xtoskrnl/mm/pfn.cc | 24 ++++++++++++------------ xtoskrnl/mm/pte.cc | 8 ++++---- 10 files changed, 67 insertions(+), 47 deletions(-) diff --git a/sdk/xtdk/mmtypes.h b/sdk/xtdk/mmtypes.h index 4c9620d..bae2fb4 100644 --- a/sdk/xtdk/mmtypes.h +++ b/sdk/xtdk/mmtypes.h @@ -76,17 +76,45 @@ typedef struct _MMCOLOR_TABLES /* Memory layout structure definition */ typedef struct _MMMEMORY_LAYOUT { - PMMPFN PfnDatabaseAddress; + PMMPFN PfnDatabase; + PFN_NUMBER PfnDatabaseSize; PVOID SelfMapAddress; + PVOID HardwarePoolStart; + PVOID HardwarePoolEnd; PVOID HyperSpaceStart; PVOID HyperSpaceEnd; + PVOID LoaderMappingsStart; + PVOID LoaderMappingsEnd; + PFN_NUMBER LoaderMappingsSize; + PVOID NonCanonicalStart; + PVOID NonCanonicalEnd; PVOID NonPagedPoolStart; PVOID NonPagedPoolEnd; + PFN_NUMBER NonPagedPoolSize; + PVOID NonPagedExpansionPoolStart; + PVOID NonPagedExpansionPoolEnd; + PFN_NUMBER NonPagedExpansionPoolSize; + PVOID NonPagedSystemPoolStart; + PVOID NonPagedSystemPoolEnd; + PFN_NUMBER NonPagedSystemPoolSize; PVOID PagedPoolStart; PVOID PagedPoolEnd; - PVOID SystemSpaceStart; - PVOID SystemSpaceEnd; + PFN_NUMBER PagedPoolSize; + PVOID ReservedSystemPoolStart; + PVOID ReservedSystemPoolEnd; + PVOID SessionSpaceStart; + PVOID SessionSpaceEnd; + PFN_NUMBER SessionSpaceSize; + PVOID SharedSystemPageStart; + PVOID SharedSystemPageEnd; + PVOID SystemCacheStart; + PVOID SystemCacheEnd; + PVOID SystemWorkingSetStart; + PVOID SystemWorkingSetEnd; + PVOID UserSpaceStart; PVOID UserSpaceEnd; + PVOID PteSpaceStart; + PVOID PteSpaceEnd; } MMMEMORY_LAYOUT, *PMMMEMORY_LAYOUT; /* Page Frame Entry structure definition */ diff --git a/xtoskrnl/mm/amd64/mmgr.cc b/xtoskrnl/mm/amd64/mmgr.cc index b2c98bd..843039b 100644 --- a/xtoskrnl/mm/amd64/mmgr.cc +++ b/xtoskrnl/mm/amd64/mmgr.cc @@ -39,11 +39,11 @@ MM::Manager::InitializeMemoryLayout(VOID) if(MM::Paging::GetXpaStatus()) { /* Configure memory layout for 5-level paging, using 57bit address space and providing a 128 PB address space */ - MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xFFFEFA8000000000ULL; + MemoryLayout.PfnDatabase = (PMMPFN)0xFFFEFA8000000000ULL; MemoryLayout.SelfMapAddress = (PVOID)MM_P5E_LA57_BASE; /* Define the non-paged and paged pool regions */ - MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE); + MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE); MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFFEFFFFFFBFFFFFULL; MemoryLayout.PagedPoolStart = (PVOID)0xFFFEF8A000000000ULL; MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1); @@ -51,18 +51,16 @@ MM::Manager::InitializeMemoryLayout(VOID) /* Define hyperspace, system PTE space, and the user space limit */ MemoryLayout.HyperSpaceStart = (PVOID)0xFFFEF70000000000ULL; MemoryLayout.HyperSpaceEnd = (PVOID)0xFFFEF77FFFFFFFFFULL; - MemoryLayout.SystemSpaceStart = (PVOID)0xFFFEF88000000000ULL; - MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE); MemoryLayout.UserSpaceEnd = (PVOID)0x07FFFFFFFFFFFFFULL; } else { /* Configure memory layout for 4-level paging, using 48bit address space and providing a 128 TB address space */ - MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xFFFFFA8000000000ULL; + MemoryLayout.PfnDatabase = (PMMPFN)0xFFFFFA8000000000ULL; MemoryLayout.SelfMapAddress = (PVOID)MM_PXE_BASE; /* Define the non-paged and paged pool regions */ - MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE); + MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE); MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFFFFFFFFFBFFFFFULL; MemoryLayout.PagedPoolStart = (PVOID)0xFFFFF8A000000000ULL; MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1); @@ -70,8 +68,6 @@ MM::Manager::InitializeMemoryLayout(VOID) /* Define hyperspace, system PTE space, and the user space limit */ MemoryLayout.HyperSpaceStart = (PVOID)0xFFFFF70000000000ULL; MemoryLayout.HyperSpaceEnd = (PVOID)0xFFFFF77FFFFFFFFFULL; - MemoryLayout.SystemSpaceStart = (PVOID)0xFFFFF88000000000ULL; - MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE); MemoryLayout.UserSpaceEnd = (PVOID)0x000007FFFFFEFFFFULL; } } diff --git a/xtoskrnl/mm/amd64/pfn.cc b/xtoskrnl/mm/amd64/pfn.cc index c858beb..d9bbc7f 100644 --- a/xtoskrnl/mm/amd64/pfn.cc +++ b/xtoskrnl/mm/amd64/pfn.cc @@ -40,14 +40,14 @@ MM::Pfn::InitializePfnDatabase(VOID) MemoryLayout = MM::Manager::GetMemoryLayout(); /* Get the PFN database size and calculate the end of the PFN database virtual address space */ - PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabaseAddress + (PfnDatabaseSize * MM_PAGE_SIZE) - 1; + PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabase + (PfnDatabaseSize * MM_PAGE_SIZE) - 1; /* Get a template PTE for mapping the PFN database pages */ ValidPte = MM::Pte::GetValidPte(); /* Map the Page Directory and Page Directory Pointer tables for the PFN database */ - MM::Pte::MapPPE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte); - MM::Pte::MapPDE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte); + MM::Pte::MapPPE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); + MM::Pte::MapPDE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); /* Initialize the color tables */ MM::Colors::InitializeColorTables(); @@ -80,8 +80,8 @@ MM::Pfn::InitializePfnDatabase(VOID) } /* Map PFN database entries for this physical range */ - MM::Pte::MapPTE(&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[BasePage], - (PUCHAR)&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[BasePage + PageCount] - 1, + MM::Pte::MapPTE(&((PMMPFN)MemoryLayout->PfnDatabase)[BasePage], + (PUCHAR)&((PMMPFN)MemoryLayout->PfnDatabase)[BasePage + PageCount] - 1, ValidPte); /* Split PFN database allocation out of the free descriptor */ diff --git a/xtoskrnl/mm/amd64/pte.cc b/xtoskrnl/mm/amd64/pte.cc index 80742d0..2ebc9ff 100644 --- a/xtoskrnl/mm/amd64/pte.cc +++ b/xtoskrnl/mm/amd64/pte.cc @@ -68,7 +68,7 @@ MM::Pte::GetSystemPteBaseAddress(VOID) if(MM::Paging::GetXpaStatus()) { /* For 5-level paging, system PTEs start at the beginning of system space */ - return MM::Paging::GetPteAddress((PVOID)MemoryLayout->SystemSpaceStart); + return MM::Paging::GetPteAddress((PVOID)MemoryLayout->NonPagedSystemPoolStart); } else { diff --git a/xtoskrnl/mm/colors.cc b/xtoskrnl/mm/colors.cc index 2607ee4..45f2fc9 100644 --- a/xtoskrnl/mm/colors.cc +++ b/xtoskrnl/mm/colors.cc @@ -131,7 +131,7 @@ MM::Colors::InitializeColorTables(VOID) MemoryLayout = MM::Manager::GetMemoryLayout(); /* Set the base address of the color tables to start right after the PFN database */ - FreePages[0] = (PMMCOLOR_TABLES)&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[MM::Pfn::GetHighestPhysicalPage() + 1]; + FreePages[0] = (PMMCOLOR_TABLES)&((PMMPFN)MemoryLayout->PfnDatabase)[MM::Pfn::GetHighestPhysicalPage() + 1]; /* Calculate the virtual address range for both color tables */ PointerPte = MM::Paging::GetPteAddress(&FreePages[0][0]); diff --git a/xtoskrnl/mm/i686/mmgr.cc b/xtoskrnl/mm/i686/mmgr.cc index a064930..c51b4db 100644 --- a/xtoskrnl/mm/i686/mmgr.cc +++ b/xtoskrnl/mm/i686/mmgr.cc @@ -54,11 +54,11 @@ MM::Manager::InitializeMemoryLayout(VOID) if(MM::Paging::GetXpaStatus()) { /* Configure memory layout for 3-level paging, using 36bit address space and providing a 64 GB address space */ - MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xB0000000; + MemoryLayout.PfnDatabase = (PMMPFN)0xB0000000; MemoryLayout.SelfMapAddress = (PVOID)MM_PTE_BASE; /* Define the non-paged and paged pool regions */ - MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE); + MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE); MemoryLayout.NonPagedPoolEnd = (PVOID)0xEEFFFFFF; MemoryLayout.PagedPoolStart = (PVOID)0xE2000000; MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1); @@ -66,18 +66,16 @@ MM::Manager::InitializeMemoryLayout(VOID) /* Define hyperspace, system PTE space, and the user space limit */ MemoryLayout.HyperSpaceStart = (PVOID)0xC0800000; MemoryLayout.HyperSpaceEnd = (PVOID)0xC0BFFFFF; - MemoryLayout.SystemSpaceStart = (PVOID)0xC0C00000; - MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE); MemoryLayout.UserSpaceEnd = (PVOID)0x7FFEFFFF; } else { /* Configure memory layout for 2-level paging, using 32bit address space and providing a 4 GB address space */ - MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xB0000000; + MemoryLayout.PfnDatabase = (PMMPFN)0xB0000000; MemoryLayout.SelfMapAddress = (PVOID)MM_PTE_BASE; /* Define the non-paged and paged pool regions */ - MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE); + MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE); MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFBE0000; MemoryLayout.PagedPoolStart = (PVOID)0xE1000000; MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1); @@ -85,8 +83,6 @@ MM::Manager::InitializeMemoryLayout(VOID) /* Define hyperspace, system PTE space, and the user space limit */ MemoryLayout.HyperSpaceStart = (PVOID)0xC0400000; MemoryLayout.HyperSpaceEnd = (PVOID)0xC07FFFFF; - MemoryLayout.SystemSpaceStart = (PVOID)0xC0800000; - MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE); MemoryLayout.UserSpaceEnd = (PVOID)0x7FFEFFFF; } } diff --git a/xtoskrnl/mm/i686/pfn.cc b/xtoskrnl/mm/i686/pfn.cc index 9218e36..840066d 100644 --- a/xtoskrnl/mm/i686/pfn.cc +++ b/xtoskrnl/mm/i686/pfn.cc @@ -39,17 +39,17 @@ MM::Pfn::InitializePfnDatabase(VOID) MemoryLayout = MM::Manager::GetMemoryLayout(); /* Get the PFN database size and calculate the end of the PFN database virtual address space */ - PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabaseAddress + (PfnDatabaseSize * MM_PAGE_SIZE) - 1; + PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabase + (PfnDatabaseSize * MM_PAGE_SIZE) - 1; /* Get a template PTE for mapping the PFN database pages */ ValidPte = MM::Pte::GetValidPte(); /* Map the Page Directory and Page Directory Pointer tables for the PFN database */ - MM::Pte::MapPDE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte); - MM::Pte::MapPTE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte); + MM::Pte::MapPDE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); + MM::Pte::MapPTE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); /* Zero PFN database virtual space */ - RTL::Memory::ZeroMemory(MemoryLayout->PfnDatabaseAddress, PfnDatabaseSize * MM_PAGE_SIZE); + RTL::Memory::ZeroMemory(MemoryLayout->PfnDatabase, PfnDatabaseSize * MM_PAGE_SIZE); /* Initialize the color tables */ MM::Colors::InitializeColorTables(); diff --git a/xtoskrnl/mm/i686/pte.cc b/xtoskrnl/mm/i686/pte.cc index a348d81..0ed63bd 100644 --- a/xtoskrnl/mm/i686/pte.cc +++ b/xtoskrnl/mm/i686/pte.cc @@ -98,7 +98,7 @@ MM::Pte::InitializePageTable(VOID) MM::Paging::SetPte(&TemplatePte, 0, MM_PTE_READWRITE | MM_PTE_CACHE_ENABLE); /* Map the kernel's PD entries */ - MM::Pte::MapPDE(MemoryLayout->SystemSpaceStart, (PVOID)MM_HIGHEST_SYSTEM_ADDRESS, &TemplatePte); + MM::Pte::MapPDE(MemoryLayout->NonPagedSystemPoolStart, (PVOID)MM_HIGHEST_SYSTEM_ADDRESS, &TemplatePte); } /** diff --git a/xtoskrnl/mm/pfn.cc b/xtoskrnl/mm/pfn.cc index 5372154..6ce37be 100644 --- a/xtoskrnl/mm/pfn.cc +++ b/xtoskrnl/mm/pfn.cc @@ -415,7 +415,7 @@ MM::Pfn::GetPfnEntry(IN PFN_NUMBER Pfn) MemoryLayout = MM::Manager::GetMemoryLayout(); /* Calculate the address of the PFN entry by indexing into the PFN database array and return it */ - return &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[Pfn]; + return &((PMMPFN)MemoryLayout->PfnDatabase)[Pfn]; } /** @@ -531,7 +531,7 @@ MM::Pfn::LinkFreePage(IN PFN_NUMBER PageFrameIndex) /* Link with the previous last page */ MM::Paging::SetPte(&ColoredPfn->OriginalPte, PageFrameIndex); - PfnEntry->u4.PteFrame = ColoredPfn - (PMMPFN)MemoryLayout->PfnDatabaseAddress; + PfnEntry->u4.PteFrame = ColoredPfn - (PMMPFN)MemoryLayout->PfnDatabase; } /* Set the page as the new tail of the colored list */ @@ -570,7 +570,7 @@ MM::Pfn::LinkPage(IN PMMPFNLIST ListHead, PMMMEMORY_LAYOUT MemoryLayout = MM::Manager::GetMemoryLayout(); /* Get the PFN database entry for the target page */ - PageFrame = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[PageFrameIndex]; + PageFrame = &((PMMPFN)MemoryLayout->PfnDatabase)[PageFrameIndex]; /* Get the list name */ ListName = ListHead->ListName; @@ -598,7 +598,7 @@ MM::Pfn::LinkPage(IN PMMPFNLIST ListHead, if(ListHead->Blink != MAXULONG_PTR) { /* Update the previous tail to point to this page */ - (&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[ListHead->Blink])->u1.Flink = PageFrameIndex; + (&((PMMPFN)MemoryLayout->PfnDatabase)[ListHead->Blink])->u1.Flink = PageFrameIndex; } else { @@ -661,7 +661,7 @@ MM::Pfn::LinkPage(IN PMMPFNLIST ListHead, if(ListHead->Flink != MAXULONG_PTR) { /* Fix up the backward link of the old head */ - (&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[ListHead->Flink])->u2.Blink = PageFrameIndex; + (&((PMMPFN)MemoryLayout->PfnDatabase)[ListHead->Flink])->u2.Blink = PageFrameIndex; } else { @@ -675,7 +675,7 @@ MM::Pfn::LinkPage(IN PMMPFNLIST ListHead, if(ListHead->Blink != MAXULONG_PTR) { /* Link the current tail to the new page */ - (&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[ListHead->Blink])->u1.Flink = PageFrameIndex; + (&((PMMPFN)MemoryLayout->PfnDatabase)[ListHead->Blink])->u1.Flink = PageFrameIndex; } else { @@ -714,7 +714,7 @@ MM::Pfn::LinkPage(IN PMMPFNLIST ListHead, if(ColorHead->Flink != MAXULONG_PTR) { /* Fix up the PTE frame of the previous entry */ - (&((PMMPFN)MemoryLayout->PfnDatabaseAddress)[ColorHead->Flink])->u4.PteFrame = PageFrameIndex; + (&((PMMPFN)MemoryLayout->PfnDatabase)[ColorHead->Flink])->u4.PteFrame = PageFrameIndex; } else { @@ -817,7 +817,7 @@ MM::Pfn::LinkPfnToPte(IN PFN_NUMBER PageFrameIndex, MemoryLayout = MM::Manager::GetMemoryLayout(); /* Point the PFN to its PTE */ - Pfn = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[PageFrameIndex]; + Pfn = &((PMMPFN)MemoryLayout->PfnDatabase)[PageFrameIndex]; Pfn->PteAddress = PointerPte; /* Check if the page is already mapped and in use */ @@ -860,7 +860,7 @@ MM::Pfn::LinkPfnToPte(IN PFN_NUMBER PageFrameIndex, Pfn->u4.PteFrame = PageFrameIndex; /* Pin the page table in memory by incrementing its PFN share count */ - Pfn = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[PageFrameIndex]; + Pfn = &((PMMPFN)MemoryLayout->PfnDatabase)[PageFrameIndex]; Pfn->u2.ShareCount++; } @@ -887,7 +887,7 @@ MM::Pfn::LinkStandbyPage(IN PFN_NUMBER PageFrameIndex) MemoryLayout = MM::Manager::GetMemoryLayout(); /* Get the PFN database entry for the target page */ - CurrentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[PageFrameIndex]; + CurrentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabase)[PageFrameIndex]; /* Check if the page is part of a ROM image */ if(CurrentPageFrame->u3.e1.Rom == 1) @@ -899,7 +899,7 @@ MM::Pfn::LinkStandbyPage(IN PFN_NUMBER PageFrameIndex) if(RomPagesList.Blink != (ULONG_PTR)-1) { /* Update the old tail to point to the new page */ - AdjacentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[RomPagesList.Blink]; + AdjacentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabase)[RomPagesList.Blink]; AdjacentPageFrame->u1.Flink = PageFrameIndex; } else @@ -933,7 +933,7 @@ MM::Pfn::LinkStandbyPage(IN PFN_NUMBER PageFrameIndex) if(Flink != MAXULONG_PTR) { /* Update the old head to point to the new page */ - AdjacentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabaseAddress)[Flink]; + AdjacentPageFrame = &((PMMPFN)MemoryLayout->PfnDatabase)[Flink]; AdjacentPageFrame->u2.Blink = PageFrameIndex; } else diff --git a/xtoskrnl/mm/pte.cc b/xtoskrnl/mm/pte.cc index 98c5ebc..6a47c48 100644 --- a/xtoskrnl/mm/pte.cc +++ b/xtoskrnl/mm/pte.cc @@ -199,15 +199,15 @@ MM::Pte::InitializeSystemPteSpace(VOID) /* Retrieve the system's memory layout */ MemoryLayout = MM::Manager::GetMemoryLayout(); - NonPagedSystemPoolEnd = ((ULONGLONG)MemoryLayout->SystemSpaceStart + + NonPagedSystemPoolEnd = ((ULONGLONG)MemoryLayout->NonPagedSystemPoolStart + MM::Manager::GetNumberOfSystemPtes() * MM_PAGE_SIZE); /* Map the page table hierarchy for the entire system PTE space */ - MM::Pte::MapPPE(MemoryLayout->SystemSpaceStart, (PVOID)NonPagedSystemPoolEnd, &ValidPte); - MM::Pte::MapPDE(MemoryLayout->SystemSpaceStart, (PVOID)NonPagedSystemPoolEnd, &ValidPte); + MM::Pte::MapPPE(MemoryLayout->NonPagedSystemPoolStart, (PVOID)NonPagedSystemPoolEnd, &ValidPte); + MM::Pte::MapPDE(MemoryLayout->NonPagedSystemPoolStart, (PVOID)NonPagedSystemPoolEnd, &ValidPte); /* Format the main block of system PTEs into a free list pool */ - PointerPte = MM::Paging::GetPteAddress(MemoryLayout->SystemSpaceStart); + PointerPte = MM::Paging::GetPteAddress(MemoryLayout->NonPagedSystemPoolStart); InitializeSystemPtePool(PointerPte, MM::Manager::GetNumberOfSystemPtes(), SystemPteSpace);