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



我有一个小程序来查找所有连接到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中返回空迭代器。为什么它只在OSX 10.11上返回空迭代器,即使USB CDC设备已连接?有没有其他方法可以在OSX 10.11中获取设备列表?

我使用了"IOUSBHostInterface"而不是"AppleUSBCDC",现在可以枚举并获取所有连接的USB CDC设备的供应商ID和产品ID。看起来苹果不再承认"AppleUSBCDC"。

El Capitan更改了USB堆栈的底层名称/架构,我认为服务名称现在有所不同,但我手头没有USB CDC设备可供检查。使用IORegistryExplorer(硬件IO工具附带)查看要匹配的设备节点,并查看它们具有哪些属性(以及可以尝试使用IOServiceNameMatchingIOServiceMatching搜索哪些属性)。

最新更新