【问题标题】:IOServiceGetMatchingServices returning empty iterator in OSX 10.11 El CapitanIOServiceGetMatchingServices 在 OSX 10.11 El Capitan 中返回空迭代器
【发布时间】:2015-11-10 00:36:33
【问题描述】:

我有一个小程序来找出所有连接到 Mac 的 USB CDC 设备的供应商 ID 和产品 ID。程序使用 IOServiceNameMatching 和 IOServiceGetMatchingServices 分别获取匹配字典和服务迭代器,如下面代码 sn-p 所示:

matchingDictionary = IOServiceNameMatching("AppleUSBCDC");
IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDictionary, &serviceIterator);

然后我遍历 serviceIterator 以枚举和提取所有连接的 USB CDC 设备的 ID。这在 OSX 10.10 之前一直可以正常工作,但 IOServiceGetMatchingServices 在 OSX 10.11 中返回空迭代器。为什么即使连接了 USB CDC 设备,它也只在 OSX 10.11 上返回空迭代器?是否有其他方法可以在 OSX 10.11 中获取设备列表?

【问题讨论】:

    标签: macos cocoa usb osx-elcapitan iokit


    【解决方案1】:

    我使用“IOUSBHostInterface”而不是“AppleUSBCDC”,现在能够枚举和获取所有连接的 USB CDC 设备的供应商 ID 和产品 ID。看起来 Apple 不再识别“AppleUSBCDC”了。

    【讨论】:

      【解决方案2】:

      El Capitan 更改了 USB 堆栈的基础名称/架构,我假设服务名称现在不同,但我没有方便检查的 USB CDC 设备。 使用 IORegistryExplorer(包含在硬件 IO 工具中)查看您想要匹配的设备小块,并查看它们具有哪些属性(以及您可以尝试使用 IOServiceNameMatchingIOServiceMatching 搜索的内容)。

      【讨论】:

        猜你喜欢
        • 2016-02-02
        • 2016-03-03
        • 1970-01-01
        • 2016-06-24
        • 2015-09-22
        • 2016-02-05
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多