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