forked from xt-sys/exectos
Add a way to check PE/COFF image machine type
This commit is contained in:
@@ -22,6 +22,7 @@ typedef struct _XT_PECOFFF_IMAGE_PROTOCOL XT_PECOFF_IMAGE_PROTOCOL, *PXT_PECOFF_
|
||||
/* Pointers to the routines provided by the modules */
|
||||
typedef EFI_STATUS (*PXT_BOOTPROTO_BOOT_SYSTEM)(IN PXT_BOOT_PROTOCOL_PARAMETERS Parameters);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_ENTRY_POINT)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PVOID *EntryPoint);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_MACHINE_TYPE)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PUSHORT MachineType);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_GET_SUBSYSTEM)(IN PPECOFF_IMAGE_CONTEXT Image, OUT PUSHORT SubSystem);
|
||||
typedef EFI_STATUS (*PXT_PECOFF_LOAD_IMAGE)(IN PEFI_FILE_HANDLE FileHandle, IN LOADER_MEMORY_TYPE MemoryType,
|
||||
IN PVOID VirtualAddress, OUT PPECOFF_IMAGE_CONTEXT *Image);
|
||||
@@ -50,6 +51,7 @@ typedef struct _XT_BOOT_PROTOCOL_PARAMETERS
|
||||
typedef struct _XT_PECOFFF_IMAGE_PROTOCOL
|
||||
{
|
||||
PXT_PECOFF_GET_ENTRY_POINT GetEntryPoint;
|
||||
PXT_PECOFF_GET_MACHINE_TYPE GetMachineType;
|
||||
PXT_PECOFF_GET_SUBSYSTEM GetSubSystem;
|
||||
PXT_PECOFF_LOAD_IMAGE Load;
|
||||
PXT_PECOFF_RELOCATE_IMAGE Relocate;
|
||||
|
@@ -17,6 +17,10 @@ EFI_STATUS
|
||||
PeGetEntryPoint(IN PPECOFF_IMAGE_CONTEXT Image,
|
||||
OUT PVOID *EntryPoint);
|
||||
|
||||
EFI_STATUS
|
||||
PeGetMachineType(IN PPECOFF_IMAGE_CONTEXT Image,
|
||||
OUT PUSHORT MachineType);
|
||||
|
||||
EFI_STATUS
|
||||
PeGetSubSystem(IN PPECOFF_IMAGE_CONTEXT Image,
|
||||
OUT PUSHORT SubSystem);
|
||||
|
@@ -50,6 +50,19 @@ PeGetEntryPoint(IN PPECOFF_IMAGE_CONTEXT Image,
|
||||
return STATUS_EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
PeGetMachineType(IN PPECOFF_IMAGE_CONTEXT Image,
|
||||
OUT PUSHORT MachineType)
|
||||
{
|
||||
if(!Image || !Image->PeHeader)
|
||||
{
|
||||
return STATUS_EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
*MachineType = Image->PeHeader->FileHeader.Machine;
|
||||
return STATUS_EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an information about subsystem that is required to run PE/COFF image.
|
||||
*
|
||||
@@ -548,6 +561,7 @@ BlXtLdrModuleMain(IN EFI_HANDLE ImageHandle,
|
||||
|
||||
/* Set routines available via PE/COFF image protocol */
|
||||
XtPeCoffProtocol.GetEntryPoint = PeGetEntryPoint;
|
||||
XtPeCoffProtocol.GetMachineType = PeGetMachineType;
|
||||
XtPeCoffProtocol.GetSubSystem = PeGetSubSystem;
|
||||
XtPeCoffProtocol.Load = PeLoadImage;
|
||||
XtPeCoffProtocol.Relocate = PeRelocateImage;
|
||||
|
Reference in New Issue
Block a user