Вопрос

У меня есть расширение ядра на основе IOKit в Mac OS X, подкласс IOService.Когда эта служба загружается, мне нужно опубликовать дополнительную конкретную информацию о времени выполнения из нее, и мне нужно, чтобы она была доступна из пользовательского пространства без выполнения некоторых конкретных запросов IOUserClient.Информация, о которой идет речь, в основном представляет собой пары поле \ значение, и ее формат является общим для KEXT и его библиотеки-оболочки пользовательского пространства.Содержимое будет меняться со временем в зависимости от некоторых конкретных событий внутри сервиса, когда он активен.

В Linux я бы выполнил это с помощью файла в файловой системе /proc.Можете ли вы посоветовать аналогичную стратегию для OS X?Может быть, что-то связанное с IORegistry?

Спасибо.

Это было полезно?

Решение

Что ж, это оказалось довольно просто.Ваш сервис IOKit (eventially) унаследован от класса IOService, который, в свою очередь, унаследован от IORegistryEntry, который представляет экземпляр записи вашего сервиса в IORegistry и предоставляет семейство методов setProperty \ getProperty для добавления \ изменения \ удаления ваших собственных полей в записи IORegistry для вашего сервиса.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top