AppleUSBCDCACMData IOClass 上的 IOServiceMatching:异常?

发布于 2024-10-04 02:28:22 字数 967 浏览 0 评论 0原文

我正在尝试使用以下代码片段(只是苹果示例代码中的一些小规模修改)提取我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光匆匆的小流年 2024-10-11 02:28:22

IOService 对象只能匹配一次 registerService() 已为它们调用。 AppleUSBCDCACMControl 会执行此操作,但 AppleUSBCDCACMData 不会。

IOService objects can only be matched once registerService() has been called for them. AppleUSBCDCACMControl does this, but AppleUSBCDCACMData does not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文