Я разрабатываю расширение ядра OS X (kext), которое будет использоваться в качестве драйвера I / O Kit. Этот драйвер, однако, будет строго «виртуальным»; он не будет взаимодействовать с каким-либо оборудованием.
OS X хранит каталог (Каталог ввода / вывода) всех драйверов, которые загружены в ядро. Он также ведет реестр (I / O Registry), содержащий драйверы каталога ввода-вывода, которые соответствуют аппаратному устройству и в настоящее время контролируют оборудование.
Поскольку мой драйвер не зависит от аппаратного обеспечения и не «совпадает», он загружается только в каталог ввода-вывода и не регистрируется в реестре ввода-вывода. Это вызывает проблему, поскольку API для получения объектов драйверов ввода-вывода ограничен драйверами, которые зарегистрированы в реестре ввода-вывода, и не имеет доступа к объектам в каталоге ввода-вывода. Я попытался сопоставить мой драйвер, используя рекомендованные API , однако, как я упоминал ранее, эти API не предоставляют записи каталога ввода / вывода.
Моя конечная цель - получить ссылку на мой драйвер для передачи данных с помощью метода "setProperties" . Если ничего не помогает, я могу использовать комбинацию syscall, copyin и copyout для передачи данных в драйвер и из него, но в данный момент меня это не интересует.
Вкратце: есть ли способ получить ссылку на драйвер, который находится в каталоге ввода-вывода, но не в реестре ввода-вывода?
Обновление : Чтобы понять, что я имею в виду, посмотрите на следующие два снимка экрана IORegistryExplorer:
Зарегистрированный драйвер легко доступен через API , но незарегистрированный драйвер не будет соответствовать IOServiceGetMatchingServices (...). Как получить ссылку на загруженный драйвер, который не зарегистрирован?
Для получения дополнительной информации, проверьте: