IOServiceMatching для AppleUSBCDCACMData IOClass: аномалия? - PullRequest
2 голосов
/ 24 ноября 2010

Я пытаюсь извлечь список всех устройств 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.

Что я делаю не так?

1 Ответ

2 голосов
/ 24 ноября 2010

IOService объекты могут быть сопоставлены только после вызова registerService().AppleUSBCDCACMControl делает это, а AppleUSBCDCACMData нет.

...