Я пытаюсь извлечь список всех устройств AppleUSBCDCACMData IOClass на моем Mac, используя следующий фрагмент кода (всего лишь некоторые небольшие изменения в примере кода Apple). Устройство представляет собой 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 Получается, что невозможно запросить IORegistry с произвольными строками имен IOClass? Так как я столкнулся с теми же проблемами и с некоторыми нестандартными проприетарными IOClasses. Это можно воспроизвести с помощью любого USB-модема (3g/HSDPA), который загружает драйвер AppleUSBCDC.
Что я делаю не так?