Skip to content

Commit fe82808

Browse files
committed
[FREELDR] Split LoaderBlock and Extension into sub-blocks
1 parent 7fdb8b5 commit fe82808

File tree

7 files changed

+378
-177
lines changed

7 files changed

+378
-177
lines changed

boot/freeldr/freeldr/ntldr/arch/amd64/winldr.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -378,14 +378,14 @@ WinLdrSetProcessorContext(
378378
TRACE("leave WinLdrSetProcessorContext\n");
379379
}
380380

381-
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
381+
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK2 LoaderBlock2)
382382
{
383383
ULONG_PTR Pcr = 0;
384384
ULONG_PTR Tss = 0;
385385
ULONG BlockSize, NumPages;
386386

387-
LoaderBlock->u.I386.CommonDataArea = (PVOID)DbgPrint; // HACK
388-
LoaderBlock->u.I386.MachineType = MACHINE_TYPE_ISA;
387+
LoaderBlock2->u.I386.CommonDataArea = (PVOID)DbgPrint; // HACK
388+
LoaderBlock2->u.I386.MachineType = MACHINE_TYPE_ISA;
389389

390390
/* Allocate 2 pages for PCR */
391391
Pcr = (ULONG_PTR)MmAllocateMemoryWithType(2 * MM_PAGE_SIZE, LoaderStartupPcrPage);

boot/freeldr/freeldr/ntldr/arch/i386/winldr.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -368,16 +368,16 @@ void WinLdrSetupSpecialDataPointers(VOID)
368368
}
369369
}
370370

371-
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
371+
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK2 LoaderBlock2)
372372
{
373373
ULONG TssSize;
374374
//ULONG TssPages;
375375
ULONG_PTR Pcr = 0;
376376
ULONG_PTR Tss = 0;
377377
ULONG BlockSize, NumPages;
378378

379-
LoaderBlock->u.I386.CommonDataArea = NULL; // Force No ABIOS support
380-
LoaderBlock->u.I386.MachineType = MACHINE_TYPE_ISA;
379+
LoaderBlock2->u.I386.CommonDataArea = NULL; // Force No ABIOS support
380+
LoaderBlock2->u.I386.MachineType = MACHINE_TYPE_ISA;
381381

382382
/* Allocate 2 pages for PCR: one for the boot processor PCR and one for KI_USER_SHARED_DATA */
383383
Pcr = (ULONG_PTR)MmAllocateMemoryWithType(2 * MM_PAGE_SIZE, LoaderStartupPcrPage);

boot/freeldr/freeldr/ntldr/setupldr.c

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@ DBG_DEFAULT_CHANNEL(WINDOWS);
1919
VOID
2020
AllocateAndInitLPB(
2121
IN USHORT VersionToBoot,
22-
OUT PLOADER_PARAMETER_BLOCK* OutLoaderBlock);
22+
OUT PVOID* OutLoaderBlock,
23+
OUT PLOADER_PARAMETER_BLOCK1* OutLoaderBlock1,
24+
OUT PLOADER_PARAMETER_BLOCK2* OutLoaderBlock2,
25+
OUT PSETUP_LOADER_BLOCK** SetupBlockPtr,
26+
OUT PLOADER_PARAMETER_EXTENSION1* OutExtension1,
27+
OUT PLOADER_PARAMETER_EXTENSION2* OutExtension2);
2328

2429
static VOID
2530
SetupLdrLoadNlsData(
26-
_Inout_ PLOADER_PARAMETER_BLOCK LoaderBlock,
31+
_Inout_ PLOADER_PARAMETER_BLOCK1 LoaderBlock1,
2732
_In_ HINF InfHandle,
2833
_In_ PCSTR SearchPath)
2934
{
@@ -76,7 +81,7 @@ SetupLdrLoadNlsData(
7681
&AnsiFileName, &OemFileName, &LangFileName, &OemHalFileName);
7782

7883
/* Load NLS data */
79-
Success = WinLdrLoadNLSData(LoaderBlock,
84+
Success = WinLdrLoadNLSData(LoaderBlock1,
8085
SearchPath,
8186
&AnsiFileName,
8287
&OemFileName,
@@ -95,7 +100,7 @@ SetupLdrLoadNlsData(
95100
static
96101
BOOLEAN
97102
SetupLdrInitErrataInf(
98-
IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
103+
IN OUT PLOADER_PARAMETER_EXTENSION2 Extension2,
99104
IN HINF InfHandle,
100105
IN PCSTR SystemRoot)
101106
{
@@ -128,8 +133,8 @@ SetupLdrInitErrataInf(
128133
return FALSE;
129134
}
130135

131-
LoaderBlock->Extension->EmInfFileImage = PaToVa(PhysicalBase);
132-
LoaderBlock->Extension->EmInfFileSize = FileSize;
136+
Extension2->EmInfFileImage = PaToVa(PhysicalBase);
137+
Extension2->EmInfFileSize = FileSize;
133138

134139
return TRUE;
135140
}
@@ -488,8 +493,13 @@ LoadReactOSSetup(
488493
HINF InfHandle;
489494
INFCONTEXT InfContext;
490495
ULONG i, ErrorLine;
491-
PLOADER_PARAMETER_BLOCK LoaderBlock;
496+
PVOID LoaderBlock;
497+
PLOADER_PARAMETER_BLOCK1 LoaderBlock1;
498+
PLOADER_PARAMETER_BLOCK2 LoaderBlock2;
499+
PSETUP_LOADER_BLOCK* SetupBlockPtr;
492500
PSETUP_LOADER_BLOCK SetupBlock;
501+
PLOADER_PARAMETER_EXTENSION1 Extension1;
502+
PLOADER_PARAMETER_EXTENSION2 Extension2;
493503
CHAR BootPath[MAX_PATH];
494504
CHAR FilePath[MAX_PATH];
495505
CHAR UserBootOptions[256];
@@ -773,18 +783,19 @@ LoadReactOSSetup(
773783
UiResetForSOS();
774784

775785
/* Allocate and minimally-initialize the Loader Parameter Block */
776-
AllocateAndInitLPB(_WIN32_WINNT_WS03, &LoaderBlock);
786+
AllocateAndInitLPB(_WIN32_WINNT_WS03, &LoaderBlock,
787+
&LoaderBlock1, &LoaderBlock2, &SetupBlockPtr, &Extension1, &Extension2);
777788

778789
/* Allocate and initialize the setup loader block */
779790
SetupBlock = &WinLdrSystemBlock->SetupBlock;
780-
LoaderBlock->SetupLdrBlock = SetupBlock;
791+
*SetupBlockPtr = SetupBlock;
781792

782793
/* Set textmode setup flag */
783794
SetupBlock->Flags = SETUPLDR_TEXT_MODE;
784795

785796
/* Load the "setupreg.hiv" setup system hive */
786797
UiUpdateProgressBar(15, "Loading setup system hive...");
787-
Success = WinLdrInitSystemHive(LoaderBlock, BootPath, TRUE);
798+
Success = WinLdrInitSystemHive(LoaderBlock1, BootPath, TRUE);
788799
TRACE("Setup SYSTEM hive %s\n", (Success ? "loaded" : "not loaded"));
789800
/* Bail out if failure */
790801
if (!Success)
@@ -793,17 +804,17 @@ LoadReactOSSetup(
793804
/* Load NLS data, they are in the System32 directory of the installation medium */
794805
RtlStringCbCopyA(FilePath, sizeof(FilePath), BootPath);
795806
RtlStringCbCatA(FilePath, sizeof(FilePath), "system32\\");
796-
SetupLdrLoadNlsData(LoaderBlock, InfHandle, FilePath);
807+
SetupLdrLoadNlsData(LoaderBlock1, InfHandle, FilePath);
797808

798809
/* Load the Firmware Errata file from the installation medium */
799-
Success = SetupLdrInitErrataInf(LoaderBlock, InfHandle, BootPath);
810+
Success = SetupLdrInitErrataInf(Extension2, InfHandle, BootPath);
800811
TRACE("Firmware Errata file %s\n", (Success ? "loaded" : "not loaded"));
801812
/* Not necessarily fatal if not found - carry on going */
802813

803814
// UiDrawStatusText("Press F6 if you need to install a 3rd-party SCSI or RAID driver...");
804815

805816
/* Get a list of boot drivers */
806-
SetupLdrScanBootDrivers(&LoaderBlock->BootDriverListHead, InfHandle, BootPath);
817+
SetupLdrScanBootDrivers(&LoaderBlock1->BootDriverListHead, InfHandle, BootPath);
807818

808819
/* Close the inf file */
809820
InfCloseFile(InfHandle);
@@ -813,6 +824,11 @@ LoadReactOSSetup(
813824
/* Finish loading */
814825
return LoadAndBootWindowsCommon(_WIN32_WINNT_WS03,
815826
LoaderBlock,
827+
LoaderBlock1,
828+
LoaderBlock2,
829+
SetupBlockPtr,
830+
Extension1,
831+
Extension2,
816832
BootOptions,
817833
BootPath);
818834
}

0 commit comments

Comments
 (0)