https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9849f7cc4801be3a42972449174aac736caf14b

commit f9849f7cc4801be3a42972449174aac736caf14b
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Sat Oct 5 12:14:59 2024 +0200
Commit:     Timo Kreuzer <timo.kreu...@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)
 {

Reply via email to