XTLDR Rewrite #7
@ -172,13 +172,20 @@ typedef struct _XTBL_LOADER_PROTOCOL
|
||||
} Util;
|
||||
} XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL;
|
||||
|
||||
/* XTLDR Module dependencies data */
|
||||
typedef struct _XTBL_MODULE_DEPS
|
||||
{
|
||||
LIST_ENTRY Flink;
|
||||
PWCHAR ModuleName;
|
||||
} XTBL_MODULE_DEPS, *PXTBL_MODULE_DEPS;
|
||||
|
||||
/* XTLDR Module information data */
|
||||
typedef struct _XTBL_MODULE_INFO
|
||||
{
|
||||
LIST_ENTRY Flink;
|
||||
PWCHAR ModuleName;
|
||||
PWCHAR ModuleDescription;
|
||||
WCHAR Dependencies[1024];
|
||||
LIST_ENTRY Dependencies;
|
||||
} XTBL_MODULE_INFO, *PXTBL_MODULE_INFO;
|
||||
|
||||
/* XTLDR Status data */
|
||||
|
@ -31,5 +31,5 @@ EFI_STATUS
|
||||
XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
IN PEFI_SYSTEM_TABLE SystemTable)
|
||||
{
|
||||
return STATUS_EFI_SUCCESS;
|
||||
return STATUS_EFI_SUCCESS;
|
||||
}
|
||||
|
@ -8,9 +8,6 @@
|
||||
|
||||
#include <xtblapi.h>
|
||||
|
||||
#define XTBL_MODDEP SEGMENT(".moddeps") CONST WCHAR XtBlpDeps[][8]
|
||||
|
||||
//XTBL_MODDEP = {L""};
|
||||
|
||||
/**
|
||||
* This routine is the entry point of the XT EFI boot loader module.
|
||||
@ -30,5 +27,5 @@ EFI_STATUS
|
||||
XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
IN PEFI_SYSTEM_TABLE SystemTable)
|
||||
{
|
||||
return STATUS_EFI_SUCCESS;
|
||||
return STATUS_EFI_SUCCESS;
|
||||
}
|
||||
|
@ -213,9 +213,10 @@ BlLoadModule(IN PWCHAR ModuleName)
|
||||
PPECOFF_IMAGE_SECTION_HEADER SectionHeader;
|
||||
PPECOFF_IMAGE_DOS_HEADER DosHeader;
|
||||
PPECOFF_IMAGE_PE_HEADER PeHeader;
|
||||
PXTBL_MODULE_DEPS ModuleDependencies;
|
||||
PXTBL_MODULE_INFO ModuleInfo;
|
||||
PLIST_ENTRY ModuleListEntry;
|
||||
WCHAR ModuleFileName[1024];
|
||||
WCHAR ModuleFileName[12];
|
||||
USHORT SectionIndex;
|
||||
SIZE_T ModuleSize;
|
||||
EFI_STATUS Status;
|
||||
@ -285,8 +286,9 @@ BlLoadModule(IN PWCHAR ModuleName)
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Zero module information block */
|
||||
/* Zero module information block and initialize dependencies list */
|
||||
RtlZeroMemory(ModuleInfo, sizeof(XTBL_MODULE_INFO));
|
||||
RtlInitializeListHead(&ModuleInfo->Dependencies);
|
||||
|
||||
/* Setup PE/COFF EFI image headers */
|
||||
DosHeader = (PPECOFF_IMAGE_DOS_HEADER)ModuleData;
|
||||
@ -317,9 +319,14 @@ BlLoadModule(IN PWCHAR ModuleName)
|
||||
return STATUS_EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/* Add dependency module name to the list */
|
||||
RtlConcatenateWideString(ModuleInfo->Dependencies, DepsData, RtlWideStringLength(DepsData, 0));
|
||||
RtlConcatenateWideString(ModuleInfo->Dependencies, L" ", 1);
|
||||
/* Allocate memory for module dependency */
|
||||
Status = BlMemoryAllocatePool(sizeof(XTBL_MODULE_DEPS), (PVOID*)&ModuleDependencies);
|
||||
if(Status == STATUS_EFI_SUCCESS)
|
||||
{
|
||||
/* Memory allocated successfully, store module's dependency */
|
||||
ModuleDependencies->ModuleName = DepsData;
|
||||
RtlInsertTailList(&ModuleInfo->Dependencies, &ModuleDependencies->Flink);
|
||||
}
|
||||
|
||||
/* Get next dependency module name */
|
||||
DepsData += 8;
|
||||
@ -521,9 +528,15 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
|
||||
BlConsolePrint(L" (%S)", ModuleInfo->ModuleDescription);
|
||||
}
|
||||
|
||||
if(ModuleInfo->Dependencies[0] != 0)
|
||||
PLIST_ENTRY DepsListEntry;
|
||||
PXTBL_MODULE_DEPS DepsInfo;
|
||||
BlConsolePrint(L"\n - Uses: ");
|
||||
DepsListEntry = ModuleInfo->Dependencies.Flink;
|
||||
while(DepsListEntry != &ModuleInfo->Dependencies)
|
||||
{
|
||||
BlConsolePrint(L"\n - Uses: %S", ModuleInfo->Dependencies);
|
||||
DepsInfo = CONTAIN_RECORD(DepsListEntry, XTBL_MODULE_DEPS, Flink);
|
||||
BlConsolePrint(L"%S ", DepsInfo->ModuleName);
|
||||
DepsListEntry = DepsListEntry->Flink;
|
||||
}
|
||||
|
||||
/* Move to the module */
|
||||
|
Loading…
Reference in New Issue
Block a user