2011-02-08 13 views
5

Ho creato un driver di richiamo WFP che viene eseguito in modalità kernel. Ora, sto cercando di capire come comunicare tra questo driver e la mia applicazione GUI che funziona in modalità utente. Qualche idea?Comunicazione tra la modalità kernel e l'applicazione in modalità utente

Esattamente quello che voglio è qualcosa di simile:

  1. Il driver callout rileva una connessione Entrate sulla porta 4444 (Questo non fa parte della mia domanda)
  2. I driver inviano un messaggio al dall'utente modalità app.
  3. L'applicazione mostra una notifica all'utente e chiede se dovremmo accettare/bloccare la connessione.
  4. L'app in modalità utente restituisce la risposta dell'utente al driver di callout.

Grazie!

risposta

4

Sono d'accordo con LordDoskias. È necessario creare un oggetto dispositivo e renderlo disponibile al dominio Win32. Quindi è possibile utilizzare CreateFile, ReadFile, WriteFile e il già citato DeviceIoControl per inviare richieste.

Per ottenere le notifiche dal driver all'applicazione, è possibile utilizzare il cosiddetto inverted call model. Si inviano alcuni IRP (tramite uno dei meccanismi menzionati) e lo si fa in modo asincrono (o in thread separati). Quindi, il driver li tiene penzoloni fino a quando non deve notificare al componente modalità utente qualcosa e quindi restituisce l'IRP completato. Metodi alternativi sono per impostare qualche evento ed avere la richiesta di messaggistica unificata qualunque sia il driver mantiene in una sorta di coda ...

Il succo è, non v'è alcun modo diretto che il conducente possa inviare qualche messaggio alla modalità utente applicazione.

+1

Ho letto un eccellente articolo su [Inverted Call Model] (http://www.osronline.com/article.cfm?id=94). Forse è utile. – QuangNHb

2

Scegli questa API chiamata - DeviceIoControl

In sostanza quello che si potrebbe fare è registrare il conducente del gestore oggetti, allora la vostra applicazione GUI sarà in grado di aprire e inviare comandi e dati diversi (ci sono i buffer da fare che) e quindi è necessario inviare un codice IOCTL personalizzato (controllare con il manuale WDK).

Problemi correlati