gpt4 book ai didi

c - UEFI编程 EFI_USER_MANAGER_PROTOCOL

转载 作者:行者123 更新时间:2023-11-30 17:32:48 26 4
gpt4 key购买 nike

我使用以下命令来定位EFI_USER_MANAGER_PROTOCOL:

Status = gBS->LocateHandle(ByProtocol, &gEfiUserManagerProtocolGuid, NULL, &bufferSizeu, handlesu);

我收到EFI_ERROR - EFI_NOT_FOUND

现在我尝试安装协议(protocol)然后打开协议(protocol):

  Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, &gEfiUserManagerProtocolGuid, NULL, NULL);

协议(protocol)打开成功,我尝试调用函数current():

Status = users->Current(users, &User);

计算机死机并且没有显示任何错误。

我该如何解决这个问题?

最佳答案

要解决此问题,您需要检查如何调用 InstallMultipleProtocolInterfaces - 看起来您没有提供协议(protocol)实例(实际上您提供了 NULL)。因此,当您找到协议(protocol)实例时,您会找到放置在那里的内容,即 NULL,因此您的“users”变量为 NULL,并且当您使用它时系统会挂起。

请在UEFI规范中找到InstallMultipleProtocolInterfaces的描述:第一项(Handle 之后)始终是指向协议(protocol) GUID 的指针,第二项始终是指向协议(protocol)接口(interface)的指针。这些对用于调用引导服务InstallProtocolInterface()以向Handle添加协议(protocol)接口(interface)。

我会做这样的事情:

Status = gBS->InstallMultipleProtocolInterfaces (
&ImageHandle,
&gEfiUserManagerProtocolGuid,
&mUserManager,
NULL);

其中 mUserManager 是您的协议(protocol)接口(interface)结构。由于您拥有协议(protocol)接口(interface),因此您可以验证所定位协议(protocol)的地址是否指向该结构的实际位置。

关于c - UEFI编程 EFI_USER_MANAGER_PROTOCOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23994485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com