首页 文章

IOServiceGetMatchingServices在OSX 10.11 El Capitan中返回空迭代器

提问于
浏览
1

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

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中获取设备列表?

2 回答

  • 1

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

  • 1

    我使用“IOUSBHostInterface”代替“AppleUSBCDC”,现在能够枚举并获取所有连接的USB CDC设备的供应商ID和产品ID . 看起来Apple不再认可“AppleUSBCDC” .

相关问题