我正在尝试向 UEFI 中的协议(protocol)添加过滤器驱动程序,这意味着在层次结构中使用该协议(protocol)的每个人最终都会通过我。
我知道我需要将我的驱动程序添加到相关的设备路径 - 虽然不知道如何。不仅如此,它如何与已连接到设备的任何 handle 一起使用? (如果我理解正确,我需要使用 BY_DRIVER | EXCLUSIVE 将我的驱动程序连接到设备,一旦我将我自己的驱动程序连接到设备路径并将 ConnectController 与我的驱动程序句柄一起使用,UEFI 应该自动将任何支持句柄连接到我) .
我希望是否有人知道如何为特定协议(protocol)添加一个驱动程序作为过滤器驱动程序(或在不同的语义层驱动程序中?)。
真的,真的感谢任何给予的帮助,因为我在其他任何地方都找不到任何帮助。
最佳答案
并不复杂。您唯一需要做的就是重新安装您想要拦截的协议(protocol)。
我们以 EFI_PCI_IO_PROTOCOL 为例:
- 收集句柄数据库中的所有 PCI 设备句柄:
LocateHandleBuffer()
- 通过
HandleProtocol()
获取每个句柄上的原始 PCI IO 接口(interface),将其记录在某个地方,因为您可能希望在新协议(protocol)接口(interface)中调用它。 - 通过
gBS->ReinstallProtocolInterface
重新安装 PCI IO 协议(protocol),这将断开设备并将旧协议(protocol)接口(interface)替换为新协议(protocol)接口(interface)。
关于c - 将驱动程序添加到设备路径 UEFI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574623/