[ros-diffs] [fireball] 32216: - Implement one more hack to obtain LaskKrnlPhysAddr (not really a solution for reactos, since ntldr allows kernel+drivers+hal to not be continuous in memory), when booting via ntldr/winldr.
fireball at svn.reactos.org
fireball at svn.reactos.org
Fri Feb 8 14:11:02 CET 2008
Author: fireball
Date: Fri Feb 8 16:11:01 2008
New Revision: 32216
URL: http://svn.reactos.org/svn/reactos?rev=32216&view=rev
Log:
- Implement one more hack to obtain LaskKrnlPhysAddr (not really a solution for reactos, since ntldr allows kernel+drivers+hal to not be continuous in memory), when booting via ntldr/winldr.
Modified:
trunk/reactos/ntoskrnl/mm/mminit.c
Modified: trunk/reactos/ntoskrnl/mm/mminit.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/mminit.c?rev=32216&r1=32215&r2=32216&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/mminit.c (original)
+++ trunk/reactos/ntoskrnl/mm/mminit.c Fri Feb 8 16:11:01 2008
@@ -319,8 +319,31 @@
/* Get the addresses */
FirstKrnlPhysAddr = (ULONG_PTR)LdrEntry->DllBase - KSEG0_BASE;
-
- /* FIXME: How do we get the last address? */
+ }
+
+ /* Get the last kernel address */
+ if (!LastKrnlPhysAddr)
+ {
+ PLIST_ENTRY NextEntry;
+ PMEMORY_ALLOCATION_DESCRIPTOR Md;
+
+ for (NextEntry = KeLoaderBlock->MemoryDescriptorListHead.Flink;
+ NextEntry != &KeLoaderBlock->MemoryDescriptorListHead;
+ NextEntry = NextEntry->Flink)
+ {
+ Md = CONTAINING_RECORD(NextEntry, MEMORY_ALLOCATION_DESCRIPTOR, ListEntry);
+ if (Md->MemoryType == LoaderBootDriver ||
+ Md->MemoryType == LoaderSystemCode ||
+ Md->MemoryType == LoaderHalCode)
+ {
+ if (Md->BasePage+Md->PageCount > LastKrnlPhysAddr)
+ LastKrnlPhysAddr = Md->BasePage+Md->PageCount;
+ }
+ }
+
+ /* Convert to a physical address */
+ LastKrnlPhysAddr = LastKrnlPhysAddr << PAGE_SHIFT;
+ LastKernelAddress = LastKrnlPhysAddr | KSEG0_BASE;
}
/* Set memory limits */
More information about the Ros-diffs
mailing list