From 90c012403c1cb4619c4bc6ad310366a8e35ae440 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 25 Jan 2008 15:08:27 +0000 Subject: [PATCH] - Add a runtime switch between using freeldr-embedded configuration tree heap, or using a real heap allocation (for NT-way). - Use that in winldr. svn path=/trunk/; revision=31996 --- .../boot/freeldr/freeldr/reactos/archwsup.c | 24 +++++++++++++------ reactos/boot/freeldr/freeldr/windows/winldr.c | 3 +++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/reactos/archwsup.c b/reactos/boot/freeldr/freeldr/reactos/archwsup.c index e481d6a1cd2..75be54ae812 100644 --- a/reactos/boot/freeldr/freeldr/reactos/archwsup.c +++ b/reactos/boot/freeldr/freeldr/reactos/archwsup.c @@ -18,6 +18,8 @@ extern CHAR reactos_arc_hardware_data[]; ULONG FldrpHwHeapLocation; PCONFIGURATION_COMPONENT_DATA FldrArcHwTreeRoot; +BOOLEAN UseRealHeap = FALSE; + /* FUNCTIONS ******************************************************************/ PVOID @@ -25,13 +27,21 @@ NTAPI FldrpHwHeapAlloc(IN ULONG Size) { PVOID Buffer; - - /* Return a block of memory from the ARC Hardware Heap */ - Buffer = &reactos_arc_hardware_data[FldrpHwHeapLocation]; - - /* Increment the heap location */ - FldrpHwHeapLocation += Size; - if (FldrpHwHeapLocation > HW_MAX_ARC_HEAP_SIZE) Buffer = NULL; + + if (UseRealHeap) + { + /* Allocate memory from generic bootloader heap */ + Buffer = MmHeapAlloc(Size); + } + else + { + /* Return a block of memory from the ARC Hardware Heap */ + Buffer = &reactos_arc_hardware_data[FldrpHwHeapLocation]; + + /* Increment the heap location */ + FldrpHwHeapLocation += Size; + if (FldrpHwHeapLocation > HW_MAX_ARC_HEAP_SIZE) Buffer = NULL; + } /* Clear it */ if (Buffer) diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c index 2ce1cdec342..3b046c714bd 100644 --- a/reactos/boot/freeldr/freeldr/windows/winldr.c +++ b/reactos/boot/freeldr/freeldr/windows/winldr.c @@ -29,6 +29,8 @@ extern ULONG reactos_disk_count; extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; extern char reactos_arc_strings[32][256]; +extern BOOLEAN UseRealHeap; + BOOLEAN WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, IN PCH DllName, @@ -429,6 +431,7 @@ LoadAndBootWindows(PCSTR OperatingSystemName, WORD OperatingSystemVersion) AllocateAndInitLPB(&LoaderBlock); /* Detect hardware */ + UseRealHeap = TRUE; LoaderBlock->ConfigurationRoot = MachHwDetect(); /* Load kernel */