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; + } } } }