mirror of https://github.com/acidanthera/audk.git
ShellPkg/HandleParsingLib: Show LoadedImageProtocol file name
This patch adds support for showing the file name associated with a LoadedImageProtocol file path. This is a behavior that was present in the old shell but has been lost in the new shell. For example, using 'dh -v' in the old shell: Handle D3 (3A552218) Image (3A54C918) File:MicrocodeUpdate ParentHandle..: 3A666398 vs. the new shell: D3: 3A552218 LoadedImage Revision......: 0x00001000 ParentHandle..: 3A666398 Here's what the output of 'dh -v' looks like after this patch: D3: 3A552218 LoadedImage Name..........: MicrocodeUpdate Revision......: 0x00001000 ParentHandle..: 3A666398 This seems like useful information for the shell to display. Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Jaben Carsey <jaben.carsey@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Westfahl <jeff.westfahl@ni.com> Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
parent
bbb212afa0
commit
f4ac435465
|
@ -16,11 +16,73 @@
|
|||
|
||||
#include "UefiHandleParsingLib.h"
|
||||
#include "IndustryStandard/Acpi10.h"
|
||||
#include <PiDxe.h>
|
||||
#include <Protocol/FirmwareVolume2.h>
|
||||
|
||||
EFI_HANDLE mHandleParsingHiiHandle = NULL;
|
||||
HANDLE_INDEX_LIST mHandleList = {{{NULL,NULL},0,0},0};
|
||||
GUID_INFO_BLOCK *mGuidList;
|
||||
UINTN mGuidListCount;
|
||||
|
||||
/**
|
||||
Function to find the file name associated with a LoadedImageProtocol.
|
||||
|
||||
@param[in] LoadedImage An instance of LoadedImageProtocol.
|
||||
|
||||
@retval A string representation of the file name associated
|
||||
with LoadedImage, or NULL if no name can be found.
|
||||
**/
|
||||
CHAR16*
|
||||
FindLoadedImageFileName (
|
||||
IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage
|
||||
)
|
||||
{
|
||||
EFI_GUID *NameGuid;
|
||||
EFI_STATUS Status;
|
||||
EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
|
||||
VOID *Buffer;
|
||||
UINTN BufferSize;
|
||||
UINT32 AuthenticationStatus;
|
||||
|
||||
if ((LoadedImage == NULL) || (LoadedImage->FilePath == NULL)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)LoadedImage->FilePath);
|
||||
|
||||
if (NameGuid == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Get the FirmwareVolume2Protocol of the device handle that this image was loaded from.
|
||||
//
|
||||
Status = gBS->HandleProtocol (LoadedImage->DeviceHandle, &gEfiFirmwareVolume2ProtocolGuid, (VOID**) &Fv);
|
||||
|
||||
//
|
||||
// FirmwareVolume2Protocol is PI, and is not required to be available.
|
||||
//
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Read the user interface section of the image.
|
||||
//
|
||||
Buffer = NULL;
|
||||
Status = Fv->ReadSection(Fv, NameGuid, EFI_SECTION_USER_INTERFACE, 0, &Buffer, &BufferSize, &AuthenticationStatus);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// ReadSection returns just the section data, without any section header. For
|
||||
// a user interface section, the only data is the file name.
|
||||
//
|
||||
return Buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
Function to translate the EFI_MEMORY_TYPE into a string.
|
||||
|
||||
|
@ -169,6 +231,7 @@ LoadedImageProtocolDumpInformation(
|
|||
EFI_STATUS Status;
|
||||
CHAR16 *RetVal;
|
||||
CHAR16 *Temp;
|
||||
CHAR16 *FileName;
|
||||
CHAR16 *FilePath;
|
||||
CHAR16 *CodeType;
|
||||
CHAR16 *DataType;
|
||||
|
@ -192,6 +255,20 @@ LoadedImageProtocolDumpInformation(
|
|||
|
||||
HandleParsingHiiInit();
|
||||
|
||||
FileName = FindLoadedImageFileName(LoadedImage);
|
||||
|
||||
RetVal = NULL;
|
||||
if (FileName != NULL) {
|
||||
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_NAME), NULL);
|
||||
|
||||
if (Temp != NULL) {
|
||||
RetVal = CatSPrint(NULL, Temp, FileName);
|
||||
}
|
||||
|
||||
SHELL_FREE_NON_NULL(Temp);
|
||||
SHELL_FREE_NON_NULL(FileName);
|
||||
}
|
||||
|
||||
Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_LI_DUMP_MAIN), NULL);
|
||||
if (Temp == NULL) {
|
||||
return NULL;
|
||||
|
@ -203,7 +280,7 @@ LoadedImageProtocolDumpInformation(
|
|||
CodeType = ConvertMemoryType(LoadedImage->ImageCodeType);
|
||||
|
||||
RetVal = CatSPrint(
|
||||
NULL,
|
||||
RetVal,
|
||||
Temp,
|
||||
LoadedImage->Revision,
|
||||
LoadedImage->ParentHandle,
|
||||
|
|
|
@ -348,6 +348,8 @@
|
|||
|
||||
|
||||
|
||||
#string STR_LI_DUMP_NAME #language en-US " Name..........: %%H%s%%N\r\n"
|
||||
|
||||
#string STR_LI_DUMP_MAIN #language en-US " Revision......: %%H0x%08x%%N\r\n"
|
||||
" ParentHandle..: %%H%x%%N\r\n"
|
||||
" SystemTable...: %%H%x%%N\r\n"
|
||||
|
|
Loading…
Reference in New Issue