You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UEFI环境中调用HandleProtocol后是否需要调用FreePool?

关于EFI_BOOT_SERVICES.HandleProtocol()的内存清理问题

首先给出EFI_HANDLE_PROTOCOL的函数定义:

typedef
EFI_STATUS
(EFIAPI *EFI_HANDLE_PROTOCOL) (
    IN EFI_HANDLE Handle,
    IN EFI_GUID *Protocol,
    OUT VOID **Interface
);

核心问题解答

  • 调用HandleProtocol后不需要调用FreePool释放Interface指向的内存。
  • 内存性质:Interface返回的是指向已存在的协议实例的直接指针,这块内存并非通过EFI_BOOT_SERVICES.AllocatePool等接口分配的临时池内存,而是由安装该协议的驱动/系统组件预先分配并维护的常驻内存。
  • 清理责任:只有当安装该协议的驱动被卸载,或者对应的EFI Handle被销毁时,这块内存才会由负责安装它的组件进行清理,调用HandleProtocol的一方完全不需要手动处理内存释放。

和OpenProtocol的区别

UEFI规范建议用OpenProtocol替代HandleProtocol,其中OpenProtocol在部分场景下会返回需要调用方自行释放的内存,但HandleProtocol的设计逻辑是直接返回系统中已存在的协议实例指针,因此不存在调用方释放内存的义务。

内容的提问来源于stack exchange,提问作者chav1s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:42:06