- 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
This commit is contained in:
Aleksey Bragin 2008-01-25 15:08:27 +00:00
parent 486430a6fa
commit 90c012403c
2 changed files with 20 additions and 7 deletions

View file

@ -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)

View file

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