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< /a> 似乎无法使用任意 IOClass 名称字符串查询 IORegistry?因为我也遇到了一些非标准专有 IOClass 的相同问题。 这可以使用任何加载 AppleUSBCDC 驱动程序的 USB 调制解调器 (3g/HSDPA) 来重现。
我做错了什么?
I am trying to extract a list of all AppleUSBCDCACMData IOClass devices in my mac using the following code snippet (just some small scale modifications in apple sample code). The device is a usb modem which creates some 7 /dev/cu.usbmodemx device nodes.
error = IOMasterPort(MACH_PORT_NULL, &masterPort);
if(error){
return ;
}
else{
matchingDict = IOServiceMatching("AppleUSBCDCACMData");
IOServiceGetMatchingServices(masterPort,matchingDict,&modem_iterator);
while(usbDevice = IOIteratorNext(modem_iterator))
{
}
My observation is, the iterator returned by IOServiceGetMatchingServices is empty (ie nothing to iterate on). But if i pass "AppleUSBCDCACMControl" as the parameter to IOServiceMatching, i get a iterator of a list of 7 elements - which is in conformance with the IORegistryExplorer view. See a screenshot of IORegistryExplorer here, http://tumblr.deepak.dk/post/1666218968/ioregistryexplorer
It appears that it is not possible to query IORegistry with arbitrary IOClass name strings? Since i faced the same issues with some non-standard proprietary IOClasses as well.
This can be reproduced using any USB modem (3g/HSDPA) which loads AppleUSBCDC driver.
What am i doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
IOService
对象只能匹配一次registerService()
已为它们调用。AppleUSBCDCACMControl
会执行此操作,但AppleUSBCDCACMData
不会。IOService
objects can only be matched onceregisterService()
has been called for them.AppleUSBCDCACMControl
does this, butAppleUSBCDCACMData
does not.