diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index 00bf5436883..108699b6e92 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -1076,18 +1076,18 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) { ULONG StartOffset, EndOffset, Offset; PULONG Pde; - + if (Address < MmSystemRangeStart) { KeBugCheck(MEMORY_MANAGEMENT); } - + StartOffset = ADDR_TO_PDE_OFFSET(Address); EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size)); - + if (Process != NULL && Process != PsGetCurrentProcess()) { - Pde = MiMapPageToZeroInHyperSpace(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); + Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); } else { @@ -1100,6 +1100,10 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) InterlockedCompareExchangePte(&Pde[Offset], MmGlobalKernelPageDirectory[Offset], 0); } } + if (Pde != (PULONG)PAGEDIRECTORY_MAP) + { + MmDeleteHyperspaceMapping(Pde); + } } extern MMPTE HyperTemplatePte; diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 04ef3db244c..cba0cedec2a 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -691,7 +691,8 @@ MiReadPage(PMEMORY_AREA MemoryArea, return Status; } } - PageAddr = MiMapPageToZeroInHyperSpace(*Page); + + PageAddr = MmCreateHyperspaceMapping(*Page); CacheSegOffset = BaseOffset + CacheSeg->Bcb->CacheSegmentSize - FileOffset; Length = RawLength - SegOffset; if (Length <= CacheSegOffset && Length <= PAGE_SIZE) @@ -705,6 +706,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, else { memcpy(PageAddr, (char*)BaseAddress + FileOffset - BaseOffset, CacheSegOffset); + MmDeleteHyperspaceMapping(PageAddr); CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE); Status = CcRosGetCacheSegment(Bcb, FileOffset + CacheSegOffset, @@ -729,6 +731,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, return Status; } } + PageAddr = MmCreateHyperspaceMapping(*Page); if (Length < PAGE_SIZE) { memcpy((char*)PageAddr + CacheSegOffset, BaseAddress, Length - CacheSegOffset); @@ -738,6 +741,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, memcpy((char*)PageAddr + CacheSegOffset, BaseAddress, PAGE_SIZE - CacheSegOffset); } } + MmDeleteHyperspaceMapping(PageAddr); CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE); } return(STATUS_SUCCESS);