https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9849f7cc4801be3a4297…
commit f9849f7cc4801be3a42972449174aac736caf14b
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sat Oct 5 12:14:59 2024 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Sat Nov 2 17:31:57 2024 +0200
[FREELDR] Initialize a global module list head for freeldr
---
boot/freeldr/freeldr/freeldr.c | 7 +++++++
boot/freeldr/freeldr/include/peloader.h | 3 +++
boot/freeldr/freeldr/lib/peloader.c | 25 +++++++++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/boot/freeldr/freeldr/freeldr.c b/boot/freeldr/freeldr/freeldr.c
index bbed7a4139a..d533061fb5d 100644
--- a/boot/freeldr/freeldr/freeldr.c
+++ b/boot/freeldr/freeldr/freeldr.c
@@ -64,6 +64,13 @@ VOID __cdecl BootMain(IN PCCH CmdLine)
/* Initialize I/O subsystem */
FsInit();
+ /* Initialize the module list */
+ if (!PeLdrInitializeModuleList())
+ {
+ UiMessageBoxCritical("Unable to initialize module list.");
+ goto Quit;
+ }
+
RunLoader();
Quit:
diff --git a/boot/freeldr/freeldr/include/peloader.h
b/boot/freeldr/freeldr/include/peloader.h
index 4e7901e8b89..a2bf617463d 100644
--- a/boot/freeldr/freeldr/include/peloader.h
+++ b/boot/freeldr/freeldr/include/peloader.h
@@ -26,6 +26,9 @@ typedef VOID
extern PELDR_IMPORTDLL_LOAD_CALLBACK PeLdrImportDllLoadCallback;
+BOOLEAN
+PeLdrInitializeModuleList(VOID);
+
BOOLEAN
PeLdrLoadImage(
_In_ PCSTR FilePath,
diff --git a/boot/freeldr/freeldr/lib/peloader.c b/boot/freeldr/freeldr/lib/peloader.c
index 7d404b09a0b..0511738164c 100644
--- a/boot/freeldr/freeldr/lib/peloader.c
+++ b/boot/freeldr/freeldr/lib/peloader.c
@@ -25,6 +25,8 @@ DBG_DEFAULT_CHANNEL(PELOADER);
/* GLOBALS *******************************************************************/
+LIST_ENTRY FrLdrModuleList;
+
PELDR_IMPORTDLL_LOAD_CALLBACK PeLdrImportDllLoadCallback = NULL;
#ifdef _WIN64
@@ -518,6 +520,29 @@ PeLdrpScanImportAddressTable(
/* FUNCTIONS *****************************************************************/
+BOOLEAN
+PeLdrInitializeModuleList(VOID)
+{
+ PLDR_DATA_TABLE_ENTRY FreeldrDTE;
+
+ InitializeListHead(&FrLdrModuleList);
+
+ /* Allocate a data table entry for freeldr.sys.
+ The base name is scsiport.sys for imports from ntbootdd.sys */
+ if (!PeLdrAllocateDataTableEntry(&FrLdrModuleList,
+ "scsiport.sys",
+ "freeldr.sys",
+ &__ImageBase,
+ &FreeldrDTE))
+ {
+ /* Cleanup and bail out */
+ ERR("Failed to allocate DTE for freeldr\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
PVOID
PeLdrInitSecurityCookie(PLDR_DATA_TABLE_ENTRY LdrEntry)
{