uefi规范示例提到EfiCoreImageHandle。怎么弄?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uefi规范示例提到EfiCoreImageHandle。怎么弄?相关的知识,希望对你有一定的参考价值。

引用关于EFI_BOOT_SERVICES.HandleProtocol()的UEFI规范部分:

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的值?

答案

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

另请参阅我目前使用ShowUSBHandleProtocol实用程序,即

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

我可以用以下代码替换上面的代码:

Status = gBS->OpenProtocol( HandleBuffer[Index],
                            &gEfiUsbIoProtocolGuid,
                            (VOID **)&UsbIo,
                            gImageHandle,
                            NULL,
                            EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL );

使用UDK2018和Lenovo T480进行测试

以上是关于uefi规范示例提到EfiCoreImageHandle。怎么弄?的主要内容,如果未能解决你的问题,请参考以下文章

UEFI实战HII之代码示例

UEFI实战HII之代码示例

UEFI+GPT引导基础篇:什么是GPT,什么是UEFI?

BIOS学习笔记之UEFI模块机制

UEFI实战SlimBootloader代码流程分析

计算机关于磁盘的大杂烩