C 向设备路径UEFI添加驱动程序

C 向设备路径UEFI添加驱动程序,c,filter,driver,bios,uefi,C,Filter,Driver,Bios,Uefi,我正在尝试向UEFI中的协议添加一个过滤器驱动程序,这意味着在层次结构中使用该协议的每个人最终都会通过我 我知道我需要将我的驱动程序添加到相关的设备路径,但不知道如何添加。除此之外,它将如何与任何已经连接到设备的句柄一起工作? (如果我理解正确,我需要使用BY|driver | EXCLUSIVE将我的驱动程序连接到设备,一旦我将自己的驱动程序连接到设备路径并使用带有驱动程序句柄的ConnectController,UEFI应自动将任何支持句柄连接到我) 我希望如果有人知道如何添加一个驱动程序,

我正在尝试向UEFI中的协议添加一个过滤器驱动程序,这意味着在层次结构中使用该协议的每个人最终都会通过我

我知道我需要将我的驱动程序添加到相关的设备路径,但不知道如何添加。除此之外,它将如何与任何已经连接到设备的句柄一起工作? (如果我理解正确,我需要使用BY|driver | EXCLUSIVE将我的驱动程序连接到设备,一旦我将自己的驱动程序连接到设备路径并使用带有驱动程序句柄的ConnectController,UEFI应自动将任何支持句柄连接到我)

我希望如果有人知道如何添加一个驱动程序,作为特定协议的过滤器驱动程序(或者在不同的语义层驱动程序中?)


我真的非常感谢任何帮助,因为我在其他地方都没有找到任何帮助。

这并不复杂。你唯一需要做的就是重新安装你想要拦截的协议

让我们以EFI_PCI_IO_协议为例:

  • 收集句柄数据库中的所有PCI设备句柄:
    LocateHandleBuffer()
  • 通过
    HandleProtocol()
    获取每个句柄上的原始PCI IO接口,将其记录在新协议接口中您可能需要调用的地方
  • 通过
    gBS->ReinstallProtocolInterface
    重新安装PCI IO协议,这将断开设备的连接,并用新的协议接口替换旧的协议接口