From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00010702.pphosted.com (mx0a-00010702.pphosted.com [148.163.156.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 70A9E21959D2A for ; Thu, 4 May 2017 14:53:21 -0700 (PDT) Received: from pps.filterd (m0098780.ppops.net [127.0.0.1]) by mx0a-00010702.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v44Lp7Fe032153; Thu, 4 May 2017 16:53:20 -0500 Received: from ni.com (skprod2.natinst.com [130.164.80.23]) by mx0a-00010702.pphosted.com with ESMTP id 2a72m508wd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 May 2017 16:53:20 -0500 Received: from us-aus-exhub2.ni.corp.natinst.com (us-aus-exhub2.ni.corp.natinst.com [130.164.68.32]) by us-aus-skprod2.natinst.com (8.16.0.17/8.16.0.17) with ESMTPS id v44LrJBk001532 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 4 May 2017 16:53:19 -0500 Received: from us-aus-exhub1.ni.corp.natinst.com (130.164.68.41) by us-aus-exhub2.ni.corp.natinst.com (130.164.68.32) with Microsoft SMTP Server (TLS) id 15.0.1156.6; Thu, 4 May 2017 16:53:19 -0500 Received: from jmw-lm181.ni.corp.natinst.com (130.164.49.7) by us-aus-exhub1.ni.corp.natinst.com (130.164.68.41) with Microsoft SMTP Server id 15.0.1156.6 via Frontend Transport; Thu, 4 May 2017 16:53:19 -0500 From: Jeff Westfahl To: CC: Jeff Westfahl , Ruiyu Ni , Jaben Carsey Date: Thu, 4 May 2017 16:53:04 -0500 Message-ID: <1493934784-30012-4-git-send-email-jeff.westfahl@ni.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493934784-30012-1-git-send-email-jeff.westfahl@ni.com> References: <1493934784-30012-1-git-send-email-jeff.westfahl@ni.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-05-04_14:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_policy_notspam policy=outbound_policy score=30 priorityscore=1501 malwarescore=0 suspectscore=13 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=30 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1705040308 Subject: [PATCH 3/3] ShellPkg/HandleParsingLib: Show LoadedImageProtocol file name X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 May 2017 21:53:21 -0000 Content-Type: text/plain 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 Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Westfahl --- .../UefiHandleParsingLib/UefiHandleParsingLib.c | 90 +++++++++++++++++++++- .../UefiHandleParsingLib/UefiHandleParsingLib.uni | 2 + 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c index c96f6dd..74934f8 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.c @@ -16,12 +16,85 @@ #include "UefiHandleParsingLib.h" #include "IndustryStandard/Acpi10.h" +#include "Pi/PiFirmwareFile.h" +#include "Pi/PiFirmwareVolume.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; + + // + // Only subtype MEDIA_PIWG_FW_FILE_DP of type MEDIA_DEVICE_PATH is supported. + // + if ( (LoadedImage == NULL) + || (LoadedImage->FilePath == NULL) + || (LoadedImage->FilePath->Type != MEDIA_DEVICE_PATH) + || (LoadedImage->FilePath->SubType != MEDIA_PIWG_FW_FILE_DP) + ) { + 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. @param[in] Memory The memory type. @@ -169,6 +242,7 @@ LoadedImageProtocolDumpInformation( EFI_STATUS Status; CHAR16 *RetVal; CHAR16 *Temp; + CHAR16 *FileName; CHAR16 *FilePath; CHAR16 *CodeType; CHAR16 *DataType; @@ -192,6 +266,20 @@ LoadedImageProtocolDumpInformation( HandleParsingHiiInit(); + FileName = FindLoadedImageFileName(LoadedImage); + + RetVal = NULL; + if (FileName) { + 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 +291,7 @@ LoadedImageProtocolDumpInformation( CodeType = ConvertMemoryType(LoadedImage->ImageCodeType); RetVal = CatSPrint( - NULL, + RetVal, Temp, LoadedImage->Revision, LoadedImage->ParentHandle, diff --git a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni index 7b3711d..e07c9a1 100644 --- a/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni +++ b/ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.uni @@ -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" -- 2.7.4