- Don't store memory allocation descriptors inside the bootloader, since this memory is unmapped in kernelmode. Fixes a pagefault after switching to paged mode.

- Store the configuration data in the LPB.

svn path=/trunk/; revision=31983
This commit is contained in:
Aleksey Bragin 2008-01-25 11:19:11 +00:00
parent d5a5554fcd
commit 7cd6896619
2 changed files with 1481 additions and 1478 deletions

View file

@ -28,6 +28,7 @@
extern ULONG reactos_disk_count; extern ULONG reactos_disk_count;
extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; extern ARC_DISK_SIGNATURE reactos_arc_disk_info[];
extern char reactos_arc_strings[32][256]; extern char reactos_arc_strings[32][256];
extern char reactos_arc_hardware_data[HW_MAX_ARC_HEAP_SIZE];
BOOLEAN BOOLEAN
WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock,
@ -429,11 +430,10 @@ LoadAndBootWindows(PCSTR OperatingSystemName, WORD OperatingSystemVersion)
AllocateAndInitLPB(&LoaderBlock); AllocateAndInitLPB(&LoaderBlock);
/* Detect hardware */ /* Detect hardware */
#if WHEN_MERGE_COMPLETE
MachHwDetect(&LoaderBlock->ConfigurationRoot);
#else
MachHwDetect(); MachHwDetect();
#endif LoaderBlock->ConfigurationRoot = MmHeapAlloc(16 * 1024);
RtlCopyMemory(LoaderBlock->ConfigurationRoot,
(PVOID)reactos_arc_hardware_data, 16 * 1024);
/* Load kernel */ /* Load kernel */
strcpy(FileName, BootPath); strcpy(FileName, BootPath);

View file

@ -107,7 +107,7 @@ PUCHAR KernelPageTablesBuffer;
ULONG PhysicalPageTables; ULONG PhysicalPageTables;
ULONG KernelPageTables; ULONG KernelPageTables;
MEMORY_ALLOCATION_DESCRIPTOR Mad[1024]; MEMORY_ALLOCATION_DESCRIPTOR *Mad;
ULONG MadCount = 0; ULONG MadCount = 0;
@ -428,6 +428,9 @@ WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
if (MempAllocatePageTables() == FALSE) if (MempAllocatePageTables() == FALSE)
return FALSE; return FALSE;
// Allocate memory for memory allocation descriptors
Mad = MmHeapAlloc(sizeof(MEMORY_ALLOCATION_DESCRIPTOR) * 1024);
// Setup an entry for each descriptor // Setup an entry for each descriptor
MemoryMap = MmGetMemoryMap(&NoEntries); MemoryMap = MmGetMemoryMap(&NoEntries);
if (MemoryMap == NULL) if (MemoryMap == NULL)