【发布时间】:2009-02-04 17:20:45
【问题描述】:
我正在开发一个将用作 I/O Kit 驱动程序的 OS X 内核扩展 (kext)。然而,这个驱动程序将是严格的“虚拟”;它不会与任何硬件接口。
OS X 保留一个目录(I/O 目录),其中包含加载到内核中的所有驱动程序。它还保留一个注册表(I/O Registry),其中包含与硬件设备匹配且当前控制硬件的 I/O 目录驱动程序。
由于我的驱动程序不依赖于硬件并且不“匹配”,它只加载到 I/O 目录中,而不是在 I/O 注册表中注册。这会导致一个问题,因为获取 I/O 驱动程序对象的 API 仅限于在 I/O 注册表中注册的驱动程序,并且不会访问 I/O 目录中的对象。我已经尝试过matching to my driver using the recommended APIs,但是,正如我之前提到的,这些 API 不会公开 I/O 目录条目。
我的最终目标是获得对我的驱动程序的引用,以便transfer in data with the "setProperties" method。如果一切都失败了,我can use a combination of syscall, copyin and copyout 将数据传入和传出驱动程序,但我目前对该解决方案不感兴趣。
简而言之:有什么方法可以获取对 I/O 目录中但不在在 I/O 注册表中的驱动程序的引用?
更新:要明白我的意思,请看以下 IORegistryExplorer 的两个屏幕截图:
注册的驱动程序很容易访问through the API,但未注册的驱动程序将无法使用 IOServiceGetMatchingServices(...) 进行匹配。如何获取对未注册的已加载驱动程序的引用?
欲了解更多信息,请查看:
【问题讨论】: