From 8782e641b67a030152ea2a089fccf5aee32cee36 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 19 Jan 2007 22:23:58 +0000 Subject: [PATCH] Unmap accessible, but completely unneeded by kernel memory too svn path=/branches/winldr/; revision=25538 --- windows/wlmemory.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/windows/wlmemory.c b/windows/wlmemory.c index e21ba2e1193..88808832a92 100644 --- a/windows/wlmemory.c +++ b/windows/wlmemory.c @@ -273,24 +273,32 @@ MempDisablePages() for (i=0; i LOADER_HIGH_ZONE) - EndPage = LOADER_HIGH_ZONE; + if (Mad[i].MemoryType == LoaderFirmwarePermanent || + Mad[i].MemoryType == LoaderSpecialMemory) + { + if (StartPage < 0x100) + StartPage = 0x100; + if (EndPage > LOADER_HIGH_ZONE) + EndPage = LOADER_HIGH_ZONE; + } for (Page = StartPage; Page < EndPage; Page++) { @@ -301,9 +309,12 @@ MempDisablePages() { KernelPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); - KernelPT[Page & 0x3ff].PageFrameNumber = 0; - KernelPT[Page & 0x3ff].Valid = 0; - KernelPT[Page & 0x3ff].Write = 0; + if (KernelPT) + { + KernelPT[Page & 0x3ff].PageFrameNumber = 0; + KernelPT[Page & 0x3ff].Valid = 0; + KernelPT[Page & 0x3ff].Write = 0; + } } } }