【问题标题】:Accessing I/O Catalog Class Objects访问 I/O 目录类对象
【发布时间】: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(...) 进行匹配。如何获取对未注册的已加载驱动程序的引用?

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

【问题讨论】:

    标签: macos driver iokit


    【解决方案1】:

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

    【讨论】:

    • 我更新了问题以回应您的回答。驱动程序加载正常,但不会在 I/O 注册表中注册。 plist 已经包含一个“IOResourceMatch”条目以与“IOKit”完全匹配,就像 Dont_Steal_Mac_OS_X 驱动程序一样。
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 2021-11-25
    • 2010-11-08
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多