Хобрук: Ваш путь к мастерству в программировании

Как перебирать ключи IO Kit?

Я пытаюсь получить список всех устройств в системе вместе с тем, как они подключены. Поэтому я хочу по существу клонировать структуру дерева сервисов IO Kit (которую вы видите с помощью IORegistryExplorer). Как перебрать все ключи? (Одна из причин, по которой это сбивает меня с толку, заключается в том, что я не понимаю, в чем разница между io_service, io_registry и io_object).

04.06.2013

Ответы:


1

Разница между службой, реестром и объектом заключается только в обстоятельствах, в которых они используются. В остальном они полностью одинаковы. Из IOTypes.h:

typedef io_object_t io_registry_entry_t;
typedef io_object_t io_service_t;

Доступна документация по Обход реестра ввода-вывода, который также включает информацию об обходе всего реестра. Для каждой записи вам нужно будет получить свойства и сохранить их вместе с вашим представлением реестра.

Таким образом, вы должны использовать IORegistryGetRootEntry(), распечатать/сохранить его имя и свойства, а затем перебрать дочерние элементы с помощью IORegistryEntryGetChildIterator().

Вы получаете свойства с IORegistryEntryCreateCFProperties() после CFDictionaryGetKeysAndValues(). Затем для значений вам нужно проверить, какие это типы, чтобы распечатать/сохранить их (или использовать CFSHOW). Если вы действительно хотите клонировать это в другую структуру (с другими типами), вы должны явно обрабатывать каждый возможный CFTypeID.

Я создал рабочий прототип по адресу https://gist.github.com/JonnyJD/6126680.


РЕДАКТИРОВАТЬ:

В другом ответе SO исходный код (C) ioreg связан. Это должно быть хорошим ресурсом для печати/извлечения отсутствующих CFTypes.

31.07.2013
Новые материалы

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..