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

时间:2015-11-10 00:36:33

标签: macos cocoa usb osx-elcapitan iokit

我有一个小程序可以找到连接到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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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