From d7abe40e5d5ca46e9afd792251c437669ffb3495 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Thu, 4 Jan 2024 22:42:27 +0100 Subject: [PATCH] Add temporary solution for mapping modules code --- sdk/xtdk/bltypes.h | 2 ++ xtldr2/includes/xtldr.h | 4 ++++ xtldr2/protocol.c | 20 +++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index 657b561..be432d2 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -74,6 +74,7 @@ typedef EFI_STATUS (*PBL_FIND_BOOT_PROTOCOL)(IN PWCHAR SystemType, OUT PEFI_GUID typedef EFI_STATUS (*PBL_FREE_PAGES)(IN UINT64 Size, IN EFI_PHYSICAL_ADDRESS Memory); typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory); typedef EFI_STATUS (*PBL_GET_MEMORY_MAP)(OUT PEFI_MEMORY_MAP MemoryMap); +typedef PLIST_ENTRY (*PBL_GET_MODULES_LIST)(); typedef INT_PTR (*PBL_GET_SECURE_BOOT_STATUS)(); typedef EFI_STATUS (*PBL_INVOKE_BOOT_PROTOCOL)(IN PLIST_ENTRY OptionsList); typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle); @@ -244,6 +245,7 @@ typedef struct _XTBL_LOADER_PROTOCOL } Memory; struct { + PBL_GET_MODULES_LIST GetModulesList; PBL_OPEN_XT_PROTOCOL Open; PBL_REGISTER_XT_PROTOCOL Register; } Protocol; diff --git a/xtldr2/includes/xtldr.h b/xtldr2/includes/xtldr.h index bebc8ca..b7aaaf3 100644 --- a/xtldr2/includes/xtldr.h +++ b/xtldr2/includes/xtldr.h @@ -106,6 +106,10 @@ XTCDECL EFI_STATUS BlGetMemoryMap(OUT PEFI_MEMORY_MAP MemoryMap); +XTCDECL +PLIST_ENTRY +BlGetModulesList(); + XTCDECL INT_PTR BlGetSecureBootStatus(); diff --git a/xtldr2/protocol.c b/xtldr2/protocol.c index 6878005..98ededc 100644 --- a/xtldr2/protocol.c +++ b/xtldr2/protocol.c @@ -52,6 +52,23 @@ BlFindBootProtocol(IN PWCHAR SystemType, return STATUS_EFI_NOT_FOUND; } +/** + * Returns a linked list of all loaded modules. + * + * @return This routine returns a pointer to a linked list of all loaded modules. + * + * @since XT 1.0 + * + * @todo This is a temporary solution and it should be replaced by a complex API allowing to map modules. + */ +XTCDECL +PLIST_ENTRY +BlGetModulesList() +{ + /* Return a pointer to a list of all loaded modules */ + return &BlpLoadedModules; +} + /** * Loads a specified XTLDR module from disk. * @@ -404,7 +421,7 @@ BlOpenProtocol(OUT PVOID *ProtocolHandler, */ XTCDECL VOID -BlRegisterBootMenu(PVOID BootMenuRoutine) +BlRegisterBootMenu(IN PVOID BootMenuRoutine) { /* Set boot menu routine */ BlpStatus.BootMenu = BootMenuRoutine; @@ -529,6 +546,7 @@ BlpRegisterXtLoaderProtocol() BlpLdrProtocol.Memory.FreePages = BlMemoryFreePages; BlpLdrProtocol.Memory.FreePool = BlMemoryFreePool; BlpLdrProtocol.Memory.GetMemoryMap = BlGetMemoryMap; + BlpLdrProtocol.Protocol.GetModulesList = BlGetModulesList; BlpLdrProtocol.Protocol.Open = BlOpenProtocol; BlpLdrProtocol.Protocol.Register = BlRegisterProtocol; BlpLdrProtocol.Tui.DisplayErrorDialog = BlDisplayErrorDialog;