gpt4 book ai didi

macos - 从 KEXT 到守护进程进行通信并阻塞直到从守护进程返回结果的最佳方式

转载 作者:行者123 更新时间:2023-12-02 00:55:39 24 4
gpt4 key购买 nike

在 KEXT 中,我正在通过 vnode 或文件范围监听器监听文件关闭。对于某些(很少)文件,我需要将文件路径发送到我的系统守护进程,该守护进程会进行一些处理(这必须在守护进程中发生)并将结果返回到 KEXT。需要阻止文件关闭调用,直到我收到守护程序的响应。根据结果​​,我需要在关闭调用中进行一些操作并成功返回关闭调用。论坛上有很多关于 KEXT 通信相关主题的讨论。但它们并不是决定性的,而且似乎很古老(2002 年左右)。此要求可以通过 FtlSendMessage(...) Win32 API 来处理。我正在寻找 Mac 上的同等产品

这是我所看到的并想总结我的理解:

  1. Mach 消息:使用发送方和回复端口以及排队机制提供非常好的双向通信方式。但是,mach 消息 API(例如 mach_msgmach_port_allocatebootstrap_look_up)似乎不是 KPI。可以使用 mach API mach_msg_send_from_kernel,但仅此一点对双向通信没有帮助。我的理解对吗?
  2. IOUserClient:这似乎更多地与从用户空间到 KEXT 的通信然后从 KEXT 进行一些回调有关。我没有找到一种方法来启动从 KEXT 到守护进程的通信,然后等待守护进程的结果。我错过了什么吗?
  3. 套接字:这可能是最后一个选择,因为我必须实现从 KEXT 到守护进程的整个双向通信 channel 。
  4. ioctl/sysctl:我对它们了解不多。据我所知,不推荐使用它,特别是对于双向通信
  5. RPC-Mig:同样,我对它们了解不多。从我所看到的看来很复杂。不确定这是否是推荐的方式。
  6. KUNCUserNotification:这似乎只是从 KEXT 向用户提供通知。不符合我的要求。

支持的平台是(10.5 及以上)。因此,看看需求,有人可以建议并提供有关此主题的一些指示吗?

提前致谢。

最佳答案

我用于该进程的模式是让用户空间进程启动到 KEXT 的套接字连接; KEXT 创建一个新线程来处理该套接字上的消息并休眠该线程。当 KEXT 检测到需要响应的事件时,它会唤醒消息传递线程并使用现有套接字将数据发送到守护程序。收到响应后,控制权将传递回请求线程以决定是否否决该操作。

我不知道有任何单一资源可以完整地描述整个模式,但相关的 KPI 在 Mac OS X Internals 中进行了讨论。 (看起来很旧,但 KPI 自编写以来没有太大变化)和 OS X and iOS Kernel Programming (我是一名技术评论员)。

关于macos - 从 KEXT 到守护进程进行通信并阻塞直到从守护进程返回结果的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com