uefi规范示例提到了EfiCoreImageHandle。如何获得?

时间:2019-04-06 13:29:13

标签: c specifications boot bootloader uefi

在UEFI规范部分中引用EFI_BOOT_SERVICES.HandleProtocol():

  

HandleProtocol()函数仍然可供旧的EFI使用   应用程序和驱动程序。但是,所有新的应用程序和驱动程序   应该使用EFI_BOOT_SERVICES.OpenProtocol()代替   HandleProtocol()。以下代码片段显示了一种可能   使用OpenProtocol()实现HandleProtocol()。变量   EfiCoreImageHandle是EFI核心的图像句柄。

EFI_STATUS
HandleProtocol (
     IN EFI_HANDLE   Handle,
     IN EFI_GUID     *Protocol,
     OUT VOID        **Interface
     )
    {
     return OpenProtocol (
           Handle,
           Protocol,
           Interface,
           EfiCoreImageHandle,
           NULL,
           EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL
           );
    }

引号结尾。

我的问题是:当启动管理器或从UEFI shell运行EFI应用程序时,如何获取EfiCoreImageHandle的值?

1 个答案:

答案 0 :(得分:1)

简而言之,EfiCoreImageHandle只是规范中的占位符。看看我如何在https://github.com/fpmurphy/UEFI-Utilities-2019OpenProtocol实用程序中调用ShowEDID

还要看看我目前使用ShowUSB的{​​{1}}实用程序,即

HandleProtocol

我可以将上面的代码替换为:

Status = gBS->HandleProtocol( HandleBuffer[Index],
                              &gEfiUsbIoProtocolGuid,
                              (VOID**)&UsbIo );

已通过UDK2018和Lenovo T480测试