AppleUSBCDCACMData IOClass 上的 IOServiceMatching:异常?
题
我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)提取我的 mac 中所有 AppleUSBCDCACMData IOClass 设备的列表。该设备是一个 USB 调制解调器,它创建了大约 7 个 /dev/cu.usbmodemx 设备节点。
error = IOMasterPort(MACH_PORT_NULL, &masterPort);
if(error){
return ;
}
else{
matchingDict = IOServiceMatching("AppleUSBCDCACMData");
IOServiceGetMatchingServices(masterPort,matchingDict,&modem_iterator);
while(usbDevice = IOIteratorNext(modem_iterator))
{
}
我的观察是,IOServiceGetMatchingServices 返回的迭代器是空的(即没有可迭代的内容)。但是,如果我将“AppleUSBCDCACMControl”作为参数传递给 IOServiceMatching,我会得到一个包含 7 个元素的列表的迭代器 - 这与 IORegistryExplorer 视图一致。请参阅此处 IORegistryExplorer 的屏幕截图, http://tumblr.deepak.dk/post/1666218968/ioregistryexplorer似乎无法使用任意 IOClass 名称字符串查询 IORegistry?因为我也遇到了一些非标准专有 IOClass 的相同问题。这可以使用任何加载 AppleUSBCDC 驱动程序的 USB 调制解调器 (3g/HSDPA) 来重现。
我究竟做错了什么?
解决方案
IOService
对象只能匹配一次 registerService()
已被要求为他们。 AppleUSBCDCACMControl
这样做,但是 AppleUSBCDCACMData
才不是。
不隶属于 StackOverflow