2

我正在开发一个将用作 I/O Kit 驱动程序的 OS X 内核扩展 (kext)。然而,这个驱动程序将是严格的“虚拟”;它不会与任何硬件接口。

OS X 保留了所有加载到内核中的驱动程序的目录(I/O 目录)。它还保留一个注册表(I/O 注册表),其中包含与硬件设备匹配且当前控制硬件的 I/O 目录驱动程序。

由于我的驱动程序不依赖于硬件并且不“匹配”,因此它只加载到 I/O 目录中,而不是在 I/O 注册表中注册。这会导致一个问题,因为获取 I/O 驱动程序对象的 API 仅限于在 I/O 注册表中注册的驱动程序,并且不会访问 I/O 目录中的对象。我尝试使用推荐的 API 匹配我的驱动程序,但是,正如我之前提到的,这些 API 不会公开 I/O 目录条目。

我的最终目标是获得对我的驱动程序的引用,以便使用“setProperties”方法传输数据。如果一切都失败了,我可以使用 syscall、copyin 和 copyout 的组合来将数据传入和传出驱动程序,但我目前对该解决方案不感兴趣。

简而言之:有没有办法获得对 I/O 目录中但不在I/O 注册表中的驱动程序的引用?

更新:要了解我的意思,请查看以下 IORegistryExplorer 的两个屏幕截图:

注册的驱动程序可以通过 API轻松访问,但未注册的驱动程序将无法使用 IOServiceGetMatchingServices(...) 进行匹配。如何获取对未注册的已加载驱动程序的引用?

欲了解更多信息,请查看:

4

1 回答 1

0

您可以在没有硬件的情况下加载驱动程序。您可能想考虑针对“IOKit”或“IOBSD”做类似“IOResourceMatching”的事情。当这些资源可用时,这将导致在您的驱动程序上触发被动匹配。

于 2009-02-04T19:30:10.590 回答