In KEXT, sto ascoltando la chiusura del file tramite vnode o listener di scope del file. Per alcuni (pochissimi) file, ho bisogno di inviare il percorso del file al mio demone di sistema che esegue qualche elaborazione (questo deve succedere in demone) e restituisce il risultato a KEXT. Il file close call deve essere bloccato fino a quando non ottengo risposta da demone. In base al risultato, è necessario eseguire alcune operazioni in una chiamata chiusa e restituire correttamente la chiamata in chiusura. C'è molta discussione sull'argomento relativo alla comunicazione KEXT sul forum. Ma non sono conclusivi e sembrano essere molto vecchi (anno 2002 circa). Questo requisito può essere gestito dall'API Win32 FtlSendMessage(...)
. Sto cercando equivalente di quella su MacIl modo migliore per comunicare da KEXT a Daemon e bloccare finché non viene restituito il risultato da Daemon
Ecco quello che ho guardato e vuole riassumere la mia comprensione:
- Mach messaggio: Fornisce ottimo modo di comunicazione bidirezionale con mittente e rispondere porte con meccanismo di messa in coda. Tuttavia, le API dei messaggi mach (ad esempio
mach_msg
,mach_port_allocate
,bootstrap_look_up
) non sembrano essere KPI. L'API machmach_msg_send_from_kernel
può essere utilizzata, ma da sola non aiuta nella comunicazione bidirezionale. La mia comprensione è giusta? - IOUserClient: questo sembra avere più a che fare con la comunicazione dallo spazio utente a KEXT e poi avere alcune chiamate da KEXT. Non ho trovato un modo per avviare la comunicazione da KEXT a daemon e quindi attendere il risultato da demone. Mi sto perdendo qualcosa?
- Socket: Questa potrebbe essere l'ultima opzione poiché dovrei implementare l'intero canale di comunicazione bidirezionale da KEXT a Daemon.
ioct
l/sysctl
: Non ne so molto di loro. Da quello che ho letto, la sua opzione non raccomandata in particolare per la comunicazione bidirezionale- RPC-Mig: Ancora una volta non ne so molto di loro. Sembra complicato da quello che ho visto. Non sono sicuro se questo è il modo consigliato.
- KUNCUserNotification: Sembra che stia appena fornendo una notifica all'utente da KEXT. Non soddisfa il mio requisito.
La piattaforma supportata è (da 10,5 in poi). Quindi, guardando il requisito, qualcuno può suggerire e fornire alcuni suggerimenti su questo argomento?
Grazie in anticipo.
Hai trovato un esempio di come implementarlo con i socket? – gbdavid