2011-02-08 30 views
5

He creado un controlador de llamada WFP que se ejecuta en modo kernel. Ahora, estoy tratando de averiguar cómo comunicarme entre este controlador y mi aplicación GUI que se ejecuta en modo de usuario. ¿Algunas ideas?Comunicación entre el modo kernel y la aplicación en modo de usuario

Exactamente lo que yo quiero es algo como esto:

  1. El controlador de llamada detecta una conexión incomming en el puerto 4444 (Esto no es parte de mi pregunta)
  2. Los conductores envían un mensaje al usuario- modo de aplicación.
  3. La aplicación muestra una notificación al usuario y le pregunta si debemos aceptar/bloquear la conexión.
  4. La aplicación de modo de usuario devuelve la respuesta del usuario al controlador de texto destacado.

¡Gracias!

Respuesta

4

Estoy de acuerdo con LordDoskias. Debe crear un objeto de dispositivo y ponerlo a disposición del reino de Win32. Luego puede usar CreateFile, ReadFile, WriteFile y el ya mencionado DeviceIoControl para enviar solicitudes.

Para recibir notificaciones del controlador a la aplicación, puede usar el llamado inverted call model. Envías algunos IRP (a través de uno de los mecanismos mencionados) y lo haces de forma asíncrona (o en subprocesos separados). Luego, el controlador los mantiene colgando hasta que tenga que notificar al componente del modo de usuario acerca de algo y luego devuelve el IRP completado. Los métodos alternativos son para establecer algún evento y tener la solicitud de UM cualquiera que sea el conductor mantiene en una especie de cola ...

Lo esencial es, no hay forma directa de que el conductor puede enviar algún mensaje para el modo de usuario solicitud.

+1

He leído un excelente artículo sobre [Modelo de llamada invertida] (http://www.osronline.com/article.cfm?id=94). Tal vez es útil. – QuangNHb

2

Marque esta llamada a la API - DeviceIoControl

Esencialmente lo que haría es registrar el controlador en el administrador de objetos, a continuación, su aplicación con interfaz gráfica será capaz de abrirlo y enviar diferentes comandos y datos (no son tampones que hacer eso) y luego debe enviar un código IOCTL personalizado (consulte el manual WDK).

Cuestiones relacionadas