我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)在我的 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) 重现。
我究竟做错了什么?