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 */