[edk2] [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode

Ruiyu Ni posted 2 patches 7 years, 4 months ago
[edk2] [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Posted by Ruiyu Ni 7 years, 4 months ago
From: Huajing Li <huajing.li@intel.com>

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Huajing Li <huajing.li@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
---
 .../Library/UefiShellDriver1CommandsLib/Drivers.c  | 99 +++++++++++++++++++++-
 .../UefiShellDriver1CommandsLib.h                  |  4 +
 .../UefiShellDriver1CommandsLib.uni                |  2 +-
 3 files changed, 100 insertions(+), 5 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
index ffdef04352..f3c1476872 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
@@ -2,7 +2,7 @@
   Main file for Drivers shell Driver1 function.
 
   (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
   which accompanies this distribution.  The full text of the license may be found at
@@ -161,6 +161,92 @@ ReturnDriverVersion(
 }
 
 /**
+  Get image name from Image Handle.
+
+  @param[in] Handle      Image Handle
+
+  @return         A pointer to the image name as a string.
+**/
+CHAR16 *
+GetImageNameFromHandle (
+  IN CONST EFI_HANDLE Handle
+  )
+{
+  EFI_STATUS                        Status;
+  EFI_DRIVER_BINDING_PROTOCOL       *DriverBinding;
+  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;
+  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;
+  EFI_GUID                          *NameGuid;
+  CHAR16                            *ImageName;
+  UINTN                             BufferSize;
+  UINT32                            AuthenticationStatus;
+  EFI_FIRMWARE_VOLUME2_PROTOCOL     *Fv2;
+
+  LoadedImage   = NULL;
+  DriverBinding = NULL;
+  ImageName     = NULL;
+
+  Status = gBS->OpenProtocol (
+                  Handle,
+                  &gEfiDriverBindingProtocolGuid,
+                  (VOID **) &DriverBinding,
+                  NULL,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+  if (EFI_ERROR (Status)) {
+      return NULL;
+  }
+  Status = gBS->OpenProtocol (
+                  DriverBinding->ImageHandle,
+                  &gEfiLoadedImageProtocolGuid,
+                  (VOID**)&LoadedImage,
+                  gImageHandle,
+                  NULL,
+                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
+                  );
+  if (!EFI_ERROR (Status)) {
+    DevPathNode = LoadedImage->FilePath;
+    if (DevPathNode == NULL) {
+      return NULL;
+    }
+    while (!IsDevicePathEnd (DevPathNode)) {
+      NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);
+      if (NameGuid != NULL) {
+        Status = gBS->HandleProtocol (
+                        LoadedImage->DeviceHandle,
+                        &gEfiFirmwareVolume2ProtocolGuid,
+                        &Fv2
+                        );
+        if (!EFI_ERROR (Status)) {
+          Status = Fv2->ReadSection (
+                          Fv2,
+                          NameGuid,
+                          EFI_SECTION_USER_INTERFACE,
+                          0,
+                          (VOID **)&ImageName,
+                          &BufferSize,
+                          &AuthenticationStatus
+                          );
+          if (!EFI_ERROR (Status)) {
+            break;
+          }
+          ImageName = NULL;
+        }
+      }
+      //
+      // Next device path node
+      //
+      DevPathNode = NextDevicePathNode (DevPathNode);
+    }
+    if (ImageName == NULL) {
+      ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);
+    }
+  }
+  return ImageName;
+}
+
+/**
   Function for 'drivers' command.
 
   @param[in] ImageHandle  Handle to the Image (NULL if Internal).
@@ -186,6 +272,7 @@ ShellCommandRunDrivers (
   CHAR16              *Temp2;
   CONST CHAR16        *FullDriverName;
   CHAR16              *TruncatedDriverName;
+  CHAR16              *ImageName;
   CHAR16              *FormatString;
   UINT32              DriverVersion;
   BOOLEAN             DriverConfig;
@@ -274,6 +361,7 @@ ShellCommandRunDrivers (
         DriverConfig   = ReturnDriverConfig(*HandleWalker);
         DriverDiag     = ReturnDriverDiag  (*HandleWalker);
         FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);
+        ImageName      = GetImageNameFromHandle (*HandleWalker);
 
         TruncatedDriverName = NULL;
         if (!SfoFlag && (FullDriverName != NULL)) {
@@ -293,15 +381,18 @@ ShellCommandRunDrivers (
           DeviceCount,
           ChildCount,
           SfoFlag?FullDriverName:TruncatedDriverName,
-          Temp2==NULL?L"":Temp2
-         );
+          SfoFlag ? (Temp2 == NULL ? L"" : Temp2) : (ImageName == NULL ? L"" : ImageName)
+          );
         if (TruncatedDriverName != NULL) {
           FreePool (TruncatedDriverName);
         }
         if (Temp2 != NULL) {
           FreePool(Temp2);
         }
-        
+        if (ImageName != NULL) {
+          FreePool (ImageName);
+        }
+
         if (ShellGetExecutionBreakFlag ()) {
           ShellStatus = SHELL_ABORTED;
           break;
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
index b061243af7..fa51677aa2 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
@@ -24,6 +24,10 @@
 
 #include <IndustryStandard/Pci.h>
 
+#include <Pi/PiFirmwareVolume.h>
+#include <Pi/PiFirmwareFile.h>
+#include <Protocol/FirmwareVolume2.h>
+
 #include <Protocol/Shell.h>
 #include <Protocol/ShellParameters.h>
 #include <Protocol/DevicePath.h>
diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
index 7a3e61e5fc..5ca548d9f6 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
@@ -93,7 +93,7 @@
 "             T   D\r\n"
 "             Y C I\r\n"
 "             P F A\r\n"
-"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE PATH\r\n"
+"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE NAME\r\n"
 "=== ======== = = = === === =================================== ==========\r\n"
 #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"
 #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"
-- 
2.12.2.windows.2

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Posted by Ard Biesheuvel 7 years, 4 months ago
This patch is breaking the GCC build:

ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c:
 In function 'GetImageNameFromHandle':
220:25: error: passing argument 3 of 'gBS->HandleProtocol' from
incompatible pointer type [-Werror]
220:25: note: expected 'void **' but argument is of type 'struct
EFI_FIRMWARE_VOLUME2_PROTOCOL **'

Please fix.

Regards,
Ard.


On 9 August 2017 at 08:49, Ruiyu Ni <ruiyu.ni@intel.com> wrote:
> From: Huajing Li <huajing.li@intel.com>
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Huajing Li <huajing.li@intel.com>
> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
> ---
>  .../Library/UefiShellDriver1CommandsLib/Drivers.c  | 99 +++++++++++++++++++++-
>  .../UefiShellDriver1CommandsLib.h                  |  4 +
>  .../UefiShellDriver1CommandsLib.uni                |  2 +-
>  3 files changed, 100 insertions(+), 5 deletions(-)
>
> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> index ffdef04352..f3c1476872 100644
> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> @@ -2,7 +2,7 @@
>    Main file for Drivers shell Driver1 function.
>
>    (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>
> -  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD License
>    which accompanies this distribution.  The full text of the license may be found at
> @@ -161,6 +161,92 @@ ReturnDriverVersion(
>  }
>
>  /**
> +  Get image name from Image Handle.
> +
> +  @param[in] Handle      Image Handle
> +
> +  @return         A pointer to the image name as a string.
> +**/
> +CHAR16 *
> +GetImageNameFromHandle (
> +  IN CONST EFI_HANDLE Handle
> +  )
> +{
> +  EFI_STATUS                        Status;
> +  EFI_DRIVER_BINDING_PROTOCOL       *DriverBinding;
> +  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;
> +  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;
> +  EFI_GUID                          *NameGuid;
> +  CHAR16                            *ImageName;
> +  UINTN                             BufferSize;
> +  UINT32                            AuthenticationStatus;
> +  EFI_FIRMWARE_VOLUME2_PROTOCOL     *Fv2;
> +
> +  LoadedImage   = NULL;
> +  DriverBinding = NULL;
> +  ImageName     = NULL;
> +
> +  Status = gBS->OpenProtocol (
> +                  Handle,
> +                  &gEfiDriverBindingProtocolGuid,
> +                  (VOID **) &DriverBinding,
> +                  NULL,
> +                  NULL,
> +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> +                  );
> +  if (EFI_ERROR (Status)) {
> +      return NULL;
> +  }
> +  Status = gBS->OpenProtocol (
> +                  DriverBinding->ImageHandle,
> +                  &gEfiLoadedImageProtocolGuid,
> +                  (VOID**)&LoadedImage,
> +                  gImageHandle,
> +                  NULL,
> +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> +                  );
> +  if (!EFI_ERROR (Status)) {
> +    DevPathNode = LoadedImage->FilePath;
> +    if (DevPathNode == NULL) {
> +      return NULL;
> +    }
> +    while (!IsDevicePathEnd (DevPathNode)) {
> +      NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);
> +      if (NameGuid != NULL) {
> +        Status = gBS->HandleProtocol (
> +                        LoadedImage->DeviceHandle,
> +                        &gEfiFirmwareVolume2ProtocolGuid,
> +                        &Fv2
> +                        );
> +        if (!EFI_ERROR (Status)) {
> +          Status = Fv2->ReadSection (
> +                          Fv2,
> +                          NameGuid,
> +                          EFI_SECTION_USER_INTERFACE,
> +                          0,
> +                          (VOID **)&ImageName,
> +                          &BufferSize,
> +                          &AuthenticationStatus
> +                          );
> +          if (!EFI_ERROR (Status)) {
> +            break;
> +          }
> +          ImageName = NULL;
> +        }
> +      }
> +      //
> +      // Next device path node
> +      //
> +      DevPathNode = NextDevicePathNode (DevPathNode);
> +    }
> +    if (ImageName == NULL) {
> +      ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);
> +    }
> +  }
> +  return ImageName;
> +}
> +
> +/**
>    Function for 'drivers' command.
>
>    @param[in] ImageHandle  Handle to the Image (NULL if Internal).
> @@ -186,6 +272,7 @@ ShellCommandRunDrivers (
>    CHAR16              *Temp2;
>    CONST CHAR16        *FullDriverName;
>    CHAR16              *TruncatedDriverName;
> +  CHAR16              *ImageName;
>    CHAR16              *FormatString;
>    UINT32              DriverVersion;
>    BOOLEAN             DriverConfig;
> @@ -274,6 +361,7 @@ ShellCommandRunDrivers (
>          DriverConfig   = ReturnDriverConfig(*HandleWalker);
>          DriverDiag     = ReturnDriverDiag  (*HandleWalker);
>          FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);
> +        ImageName      = GetImageNameFromHandle (*HandleWalker);
>
>          TruncatedDriverName = NULL;
>          if (!SfoFlag && (FullDriverName != NULL)) {
> @@ -293,15 +381,18 @@ ShellCommandRunDrivers (
>            DeviceCount,
>            ChildCount,
>            SfoFlag?FullDriverName:TruncatedDriverName,
> -          Temp2==NULL?L"":Temp2
> -         );
> +          SfoFlag ? (Temp2 == NULL ? L"" : Temp2) : (ImageName == NULL ? L"" : ImageName)
> +          );
>          if (TruncatedDriverName != NULL) {
>            FreePool (TruncatedDriverName);
>          }
>          if (Temp2 != NULL) {
>            FreePool(Temp2);
>          }
> -
> +        if (ImageName != NULL) {
> +          FreePool (ImageName);
> +        }
> +
>          if (ShellGetExecutionBreakFlag ()) {
>            ShellStatus = SHELL_ABORTED;
>            break;
> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> index b061243af7..fa51677aa2 100644
> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> @@ -24,6 +24,10 @@
>
>  #include <IndustryStandard/Pci.h>
>
> +#include <Pi/PiFirmwareVolume.h>
> +#include <Pi/PiFirmwareFile.h>
> +#include <Protocol/FirmwareVolume2.h>
> +
>  #include <Protocol/Shell.h>
>  #include <Protocol/ShellParameters.h>
>  #include <Protocol/DevicePath.h>
> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> index 7a3e61e5fc..5ca548d9f6 100644
> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> @@ -93,7 +93,7 @@
>  "             T   D\r\n"
>  "             Y C I\r\n"
>  "             P F A\r\n"
> -"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE PATH\r\n"
> +"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE NAME\r\n"
>  "=== ======== = = = === === =================================== ==========\r\n"
>  #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"
>  #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"
> --
> 2.12.2.windows.2
>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH 1/2] ShellPkg/driver: Show Image Name in non-SFO mode
Posted by Leif Lindholm 7 years, 4 months ago
At a quick glance, the fix should probably be

diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
index 4d876bb108..26b785c563 100644
--- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
+++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
@@ -216,7 +216,7 @@ GetImageNameFromHandle (
         Status = gBS->HandleProtocol (
                         LoadedImage->DeviceHandle,
                         &gEfiFirmwareVolume2ProtocolGuid,
-                        &Fv2
+                        (VOID **)&Fv2
                         );
         if (!EFI_ERROR (Status)) {
           Status = Fv2->ReadSection (

/
    Leif

On Thu, Aug 10, 2017 at 08:53:11AM +0100, Ard Biesheuvel wrote:
> This patch is breaking the GCC build:
> 
> ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c:
>  In function 'GetImageNameFromHandle':
> 220:25: error: passing argument 3 of 'gBS->HandleProtocol' from
> incompatible pointer type [-Werror]
> 220:25: note: expected 'void **' but argument is of type 'struct
> EFI_FIRMWARE_VOLUME2_PROTOCOL **'
> 
> Please fix.
> 
> Regards,
> Ard.
> 
> 
> On 9 August 2017 at 08:49, Ruiyu Ni <ruiyu.ni@intel.com> wrote:
> > From: Huajing Li <huajing.li@intel.com>
> >
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Huajing Li <huajing.li@intel.com>
> > Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
> > ---
> >  .../Library/UefiShellDriver1CommandsLib/Drivers.c  | 99 +++++++++++++++++++++-
> >  .../UefiShellDriver1CommandsLib.h                  |  4 +
> >  .../UefiShellDriver1CommandsLib.uni                |  2 +-
> >  3 files changed, 100 insertions(+), 5 deletions(-)
> >
> > diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> > index ffdef04352..f3c1476872 100644
> > --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> > +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Drivers.c
> > @@ -2,7 +2,7 @@
> >    Main file for Drivers shell Driver1 function.
> >
> >    (C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>
> > -  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
> > +  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
> >    This program and the accompanying materials
> >    are licensed and made available under the terms and conditions of the BSD License
> >    which accompanies this distribution.  The full text of the license may be found at
> > @@ -161,6 +161,92 @@ ReturnDriverVersion(
> >  }
> >
> >  /**
> > +  Get image name from Image Handle.
> > +
> > +  @param[in] Handle      Image Handle
> > +
> > +  @return         A pointer to the image name as a string.
> > +**/
> > +CHAR16 *
> > +GetImageNameFromHandle (
> > +  IN CONST EFI_HANDLE Handle
> > +  )
> > +{
> > +  EFI_STATUS                        Status;
> > +  EFI_DRIVER_BINDING_PROTOCOL       *DriverBinding;
> > +  EFI_LOADED_IMAGE_PROTOCOL         *LoadedImage;
> > +  EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;
> > +  EFI_GUID                          *NameGuid;
> > +  CHAR16                            *ImageName;
> > +  UINTN                             BufferSize;
> > +  UINT32                            AuthenticationStatus;
> > +  EFI_FIRMWARE_VOLUME2_PROTOCOL     *Fv2;
> > +
> > +  LoadedImage   = NULL;
> > +  DriverBinding = NULL;
> > +  ImageName     = NULL;
> > +
> > +  Status = gBS->OpenProtocol (
> > +                  Handle,
> > +                  &gEfiDriverBindingProtocolGuid,
> > +                  (VOID **) &DriverBinding,
> > +                  NULL,
> > +                  NULL,
> > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> > +                  );
> > +  if (EFI_ERROR (Status)) {
> > +      return NULL;
> > +  }
> > +  Status = gBS->OpenProtocol (
> > +                  DriverBinding->ImageHandle,
> > +                  &gEfiLoadedImageProtocolGuid,
> > +                  (VOID**)&LoadedImage,
> > +                  gImageHandle,
> > +                  NULL,
> > +                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> > +                  );
> > +  if (!EFI_ERROR (Status)) {
> > +    DevPathNode = LoadedImage->FilePath;
> > +    if (DevPathNode == NULL) {
> > +      return NULL;
> > +    }
> > +    while (!IsDevicePathEnd (DevPathNode)) {
> > +      NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);
> > +      if (NameGuid != NULL) {
> > +        Status = gBS->HandleProtocol (
> > +                        LoadedImage->DeviceHandle,
> > +                        &gEfiFirmwareVolume2ProtocolGuid,
> > +                        &Fv2
> > +                        );
> > +        if (!EFI_ERROR (Status)) {
> > +          Status = Fv2->ReadSection (
> > +                          Fv2,
> > +                          NameGuid,
> > +                          EFI_SECTION_USER_INTERFACE,
> > +                          0,
> > +                          (VOID **)&ImageName,
> > +                          &BufferSize,
> > +                          &AuthenticationStatus
> > +                          );
> > +          if (!EFI_ERROR (Status)) {
> > +            break;
> > +          }
> > +          ImageName = NULL;
> > +        }
> > +      }
> > +      //
> > +      // Next device path node
> > +      //
> > +      DevPathNode = NextDevicePathNode (DevPathNode);
> > +    }
> > +    if (ImageName == NULL) {
> > +      ImageName = ConvertDevicePathToText (LoadedImage->FilePath, TRUE, TRUE);
> > +    }
> > +  }
> > +  return ImageName;
> > +}
> > +
> > +/**
> >    Function for 'drivers' command.
> >
> >    @param[in] ImageHandle  Handle to the Image (NULL if Internal).
> > @@ -186,6 +272,7 @@ ShellCommandRunDrivers (
> >    CHAR16              *Temp2;
> >    CONST CHAR16        *FullDriverName;
> >    CHAR16              *TruncatedDriverName;
> > +  CHAR16              *ImageName;
> >    CHAR16              *FormatString;
> >    UINT32              DriverVersion;
> >    BOOLEAN             DriverConfig;
> > @@ -274,6 +361,7 @@ ShellCommandRunDrivers (
> >          DriverConfig   = ReturnDriverConfig(*HandleWalker);
> >          DriverDiag     = ReturnDriverDiag  (*HandleWalker);
> >          FullDriverName = GetStringNameFromHandle(*HandleWalker, Language);
> > +        ImageName      = GetImageNameFromHandle (*HandleWalker);
> >
> >          TruncatedDriverName = NULL;
> >          if (!SfoFlag && (FullDriverName != NULL)) {
> > @@ -293,15 +381,18 @@ ShellCommandRunDrivers (
> >            DeviceCount,
> >            ChildCount,
> >            SfoFlag?FullDriverName:TruncatedDriverName,
> > -          Temp2==NULL?L"":Temp2
> > -         );
> > +          SfoFlag ? (Temp2 == NULL ? L"" : Temp2) : (ImageName == NULL ? L"" : ImageName)
> > +          );
> >          if (TruncatedDriverName != NULL) {
> >            FreePool (TruncatedDriverName);
> >          }
> >          if (Temp2 != NULL) {
> >            FreePool(Temp2);
> >          }
> > -
> > +        if (ImageName != NULL) {
> > +          FreePool (ImageName);
> > +        }
> > +
> >          if (ShellGetExecutionBreakFlag ()) {
> >            ShellStatus = SHELL_ABORTED;
> >            break;
> > diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> > index b061243af7..fa51677aa2 100644
> > --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> > +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.h
> > @@ -24,6 +24,10 @@
> >
> >  #include <IndustryStandard/Pci.h>
> >
> > +#include <Pi/PiFirmwareVolume.h>
> > +#include <Pi/PiFirmwareFile.h>
> > +#include <Protocol/FirmwareVolume2.h>
> > +
> >  #include <Protocol/Shell.h>
> >  #include <Protocol/ShellParameters.h>
> >  #include <Protocol/DevicePath.h>
> > diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> > index 7a3e61e5fc..5ca548d9f6 100644
> > --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> > +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.uni
> > @@ -93,7 +93,7 @@
> >  "             T   D\r\n"
> >  "             Y C I\r\n"
> >  "             P F A\r\n"
> > -"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE PATH\r\n"
> > +"DRV VERSION  E G G #D  #C  DRIVER NAME                         IMAGE NAME\r\n"
> >  "=== ======== = = = === === =================================== ==========\r\n"
> >  #string STR_DRIVERS_ITEM_LINE     #language en-US "%H%3x%N %08x %1c %1c %1c %3d %3d %-35s %s\r\n"
> >  #string STR_DRIVERS_ITEM_LINE_SFO #language en-US "DriversInfo,"%x","%x","%c","%c","%c","%d","%d","%s","%s"\r\n"
> > --
> > 2.12.2.windows.2
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel