Dans KEXT, j'écoute la fermeture de fichier via vnode ou l'écouteur d'étendue de fichier. Pour certains (très peu) fichiers, je dois envoyer un chemin de fichier à mon démon système qui effectue un traitement (cela doit se produire dans le démon) et renvoie le résultat à KEXT. L'appel de fermeture de fichier doit être bloqué jusqu'à ce que j'obtienne une réponse du démon. Basé sur le résultat, j'ai besoin de certaines opérations en appel rapproché et retour ferme l'appel avec succès. Il y a beaucoup de discussions sur le sujet lié à la communication de KEXT sur le forum. Mais ils ne sont pas concluants et semblent être très vieux (année 2002 autour). Cette exigence peut être gérée par FtlSendMessage(...)
API Win32. Je cherche l'équivalent de ce MacMeilleure façon de communiquer de KEXT à Daemon et de bloquer jusqu'à ce que le résultat soit retourné par Daemon
Voici ce que je l'ai regardé et que vous voulez résumer ma compréhension:
- Mach un message: Constitue très bon moyen de communication bidirectionnelle utilisant l'expéditeur et de réponse ports avec un mécanisme de file d'attente. Cependant, les API de message mach (par exemple
mach_msg
,mach_port_allocate
,bootstrap_look_up
) ne semblent pas être des KPI. L'API machmach_msg_send_from_kernel
peut être utilisée, mais cela ne suffit pas dans la communication bidirectionnelle. Est-ce que je comprends bien? - IOUserClient: Cela semble être plus à faire avec la communication de l'espace utilisateur vers KEXT et ensuite avoir quelques rappels de KEXT. Je n'ai pas trouvé un moyen d'initier la communication de KEXT vers le démon, puis d'attendre le résultat du démon. Est-ce que je manque quelque chose?
- Sockets: Cela pourrait être la dernière option puisque je devrais implémenter le canal de communication bidirectionnel entier de KEXT à Daemon.
ioct
l/sysctl
: Je n'en sais pas beaucoup à leur sujet. De ce que j'ai lu, son option non recommandée, en particulier pour la communication bidirectionnelle- RPC-Mig: Encore une fois je ne sais pas beaucoup à leur sujet. Regarde compliqué de ce que j'ai vu. Je ne sais pas si c'est recommandé.
- KUNCUserNotification: Cela semble juste fournir une notification à l'utilisateur de KEXT. Cela ne répond pas à mes exigences.
La plate-forme prise en charge est (à partir de 10,5). Donc, en regardant l'exigence, quelqu'un peut-il suggérer et donner quelques indications sur ce sujet?
Merci d'avance.
Avez-vous trouvé un exemple d'implémentation avec des sockets? – gbdavid