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