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

IOServiceGetMatchingServices returning empty iterator in 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 中是否有其他方法获取设备列表?

El Capitan 更改了 USB 堆栈的底层 names/architecture,我假设服务名称现在不同了,但我手头没有 USB CDC 设备可以检查。 使用 IORegistryExplorer(包含在 Hardware IO Tools 中)查看您要匹配的设备 nub,并查看它们具有哪些属性(以及您可以尝试使用 IOServiceNameMatchingIOServiceMatching 搜索的内容) .

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