Лучший способ связи KEXT с демоном и блокировка до тех пор, пока результат не будет возвращен от демона.

В KEXT я прослушиваю закрытие файла через прослушиватель vnode или файловой области. Для определенных (очень немногих )файлов мне нужно отправить путь к моему системному демону, который выполняет некоторую обработку (это должно произойти в демоне )и вернуть результат обратно в KEXT. Вызов закрытия файла должен быть заблокирован, пока я не получу ответ от демона. В зависимости от результата мне нужно выполнить некоторую операцию в закрытом вызове и успешно вернуть закрытый вызов. На форуме много дискуссий по теме, связанной с коммуникацией KEXT. Но они не являются окончательными и, по-видимому, относятся к очень старому (2002 году около ). Это требование может быть выполнено с помощью FtlSendMessage(...)Win32 API. Я ищу эквивалент этого на Mac

Вот то, что я просмотрел и хочу обобщить свое понимание:

  1. Сообщение Mach:Обеспечивает очень хороший способ двунаправленной связи с использованием портов отправителя и ответа с механизмом очередей. Однако API-интерфейсы сообщений mach (, например. mach_msg, mach_port_allocate,bootstrap_look_up)не являются ключевыми показателями эффективности. Можно использовать mach API mach_msg_send_from_kernel, но само по себе это не поможет в двунаправленной связи. Правильно ли я понимаю?
  2. IOUserClient:Похоже, это больше связано с общением из пользовательского пространства с KEXT, а затем с некоторыми обратными вызовами из KEXT. Я не нашел способа инициировать связь KEXT с демоном, а затем дождаться результата от демона. Я что-то упускаю?
  3. Сокеты:Это может быть последним вариантом, так как мне придется реализовать весь двунаправленный канал связи от KEXT до Daemon.
  4. ioctл/sysctl:Я мало о них знаю. Из того, что я прочитал,это не рекомендуемый вариант, особенно для двунаправленной связи
  5. RPC -Mig:Опять же, я мало что о них знаю. Выглядит сложным из того, что я видел. Не уверен, что это рекомендуемый способ.
  6. KUNCUserNotification:Похоже, это просто уведомление пользователя от KEXT. Это не соответствует моему требованию.

Поддерживаемая платформа: (10.5 и более поздние версии ). Итак, глядя на требование, может ли кто-нибудь предложить и дать несколько советов по этой теме?

Заранее спасибо.

10
задан ymn 29 March 2013 в 03:38
поделиться