c - 将驱动程序添加到设备路径 UEFI

标签 c filter driver bios uefi

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

我知道我需要将我的驱动程序添加到相关的设备路径 - 虽然不知道如何。不仅如此,它如何与已连接到设备的任何 handle 一起使用? (如果我理解正确,我需要使用 BY_DRIVER | EXCLUSIVE 将我的驱动程序连接到设备,一旦我将我自己的驱动程序连接到设备路径并将 ConnectController 与我的驱动程序句柄一起使用,UEFI 应该自动将任何支持句柄连接到我) .

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

真的,真的感谢任何给予的帮助,因为我在其他任何地方都找不到任何帮助。

最佳答案

并不复杂。您唯一需要做的就是重新安装您想要拦截的协议(protocol)。

我们以 EFI_PCI_IO_PROTOCOL 为例:

  1. 收集句柄数据库中的所有 PCI 设备句柄:LocateHandleBuffer()
  2. 通过 HandleProtocol() 获取每个句柄上的原始 PCI IO 接口(interface),将其记录在某个地方,因为您可能希望在新协议(protocol)接口(interface)中调用它。
  3. 通过 gBS->ReinstallProtocolInterface 重新安装 PCI IO 协议(protocol),这将断开设备并将旧协议(protocol)接口(interface)替换为新协议(protocol)接口(interface)。

关于c - 将驱动程序添加到设备路径 UEFI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574623/

相关文章:

c - 是否可以制作一个 Box 并要求用户在中间插入一些东西?

c - 与 CUDA 和 GCC 的链接错误

java - 从 MDC 中清除 requestId 的位置

opengl - OpenGL Mipmapping:OpenGL如何确定 map 级别?

windows - 当我在 Windows 上的 HID 设备上执行 ReadFile() 时会发生什么?

c - 在 docker 容器内使用 membarrier

c - 如何将结构体内部的空C结​​构体转换为Delphi?

javascript - 从数组中过滤日期范围

java - 如何扩展 cassandra SessionManager 以进行 Instrumentation

linux - pyglet 顶点列表未呈现(AMD 驱动程序?)