IOServiceGetMatchingServices在某些Mac上找不到某些设备

|| 我的应用程序存在问题,该应用程序监视USB总线的更改。具体来说,如果我想获取随附的USB服务列表,请使用以下代码。奇怪的是有些用户(通常不是我的机器)看不到一两个设备。 这些设备确实会显示在IORegistryExplorer中,并显示已注册。 不能正常运行的机器也正在运行10.6,同时也是MacBook Pro。   CFMutableDictionaryRef service_properties = CFDictionaryCreateMutable(NULL,0,NULL,NULL);       CFMutableDictionaryRef child_props = CFDictionaryCreateMutable(NULL,0,NULL,NULL);
kr = IOServiceGetMatchingServices(kIOMasterPortDefault,
                                  IOServiceNameMatching(\"AppleUSBEHCI\"), &io_objects);

if(kr != KERN_SUCCESS)
    exit(1);

while((io_service= IOIteratorNext(io_objects)))
{

    kr = IORegistryEntryCreateCFProperties(io_service, &service_properties, kCFAllocatorDefault, kNilOptions);

    io_iterator_t   iter;
    kr = IORegistryEntryGetChildIterator(io_service, kIOServicePlane, &iter);
    io_registry_entry_t     child;
    while( (child = IOIteratorNext( iter )))
    {
        kr = IORegistryEntryCreateCFProperties(child, &child_props,  kCFAllocatorDefault, kNilOptions );
        NSLog(@\"%@\",child_props);
    }

    IOObjectRelease(io_service);
}
    
已邀请:
        您完全错了。您正在与Mac中使用的物理控制器(
EHCI
UHCI
OHCI
)进行匹配。只要他们发明了新的控制器标准(例如,自2012年以来在新Mac中为
XHCI
)(针对USB 3兼容性),此操作就会失败。 您可能想要做的是与ѭ5进行匹配,这就是我想匹配系统中的每个设备时所要做的。这也是在示例代码6中所做的。     
        事实证明,您需要轮询所有总线类型:
for(i=0;i<3;i++){

if(i==0)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching(\"AppleUSBEHCI\"), &io_objects);
if(i==1)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching(\"AppleUSBOHCI\"), &io_objects);
if(i==2)kr = IOServiceGetMatchingServices(myMasterPort,
                                      IOServiceNameMatching(\"AppleUSBUHCI\"), &io_objects);

if(kr != KERN_SUCCESS)
    exit(1);
    
        我同意杰里米(Jeremy)的观点:ѭ8之外还有其他可能性 也许您可能知道(以防万一):
ioreg -l | grep AppleUSB
应该在您的机器上显示活动的USB状态     

要回复问题请先登录注册