Comunicación entre el modo de usuario y los minifiltros

FltMgr admite la comunicación entre aplicaciones en modo de usuario (UM) y minifiltros en modo kernel (KM) a través de puertos de comunicación. Un escenario de ejemplo es una aplicación antivirus que necesita comunicarse con su homólogo de minifiltro km para examinar archivos de virus y malware.

El minifiltro controla la seguridad en el puerto especificando un descriptor de seguridad que se va a aplicar al objeto de puerto de comunicación. La comunicación a través de un puerto de comunicación no se almacena en búfer, por lo que es más rápida y eficaz.

Una aplicación o servicio de mensajería unificada puede responder a los mensajes de un minifiltro para la comunicación bidireccional. La comunicación se establece de la siguiente manera:

  • Un controlador de minifiltro llama a FltCreateCommunicationPort para crear un puerto de servidor de comunicación. Como creador del puerto del agente de escucha, el minifiltro comienza implícitamente a escuchar las conexiones entrantes en el puerto creado.

  • Cuando una aplicación de mensajería unificada o un servicio llama a FilterConnectCommunicationPort para intentar conectarse al puerto, FltMgr llama a la rutina de devolución de llamada ConnectNotifyCallback del minifiltro con un identificador para la conexión recién creada. Cuando se completa la devolución de llamada, FltMgr pasa al autor de la llamada de mensajería unificada un identificador de archivo independiente que representa el punto de conexión del autor de la llamada de mensajería unificada a la conexión. El autor de la llamada de mensajería unificada puede usar este identificador para asociar varios puertos de finalización de E/S con el puerto del agente de escucha. Esta funcionalidad es útil para las aplicaciones que necesitan controlar grandes volúmenes de operaciones de E/S simultáneamente.

FltMgr acepta la solicitud de conexión solo si el llamador de mensajería unificada tiene acceso suficiente según lo especificado por el descriptor de seguridad en el puerto. Cada conexión al puerto obtiene su propia cola de mensajes y puntos de conexión privados.

El cierre de cualquier punto de conexión (kernel o usuario) finaliza esa conexión. Cuando un llamador de mensajería unificada cierra su identificador al punto de conexión, FltMgr llama a la rutina DisconnectNotifyCallback del controlador de minifiltro para que el controlador de minifiltro pueda cerrar su identificador a la conexión.

El cierre del puerto del servidor de comunicación impide nuevas conexiones, pero no finaliza las conexiones existentes. FltMgr finaliza las conexiones existentes cuando se descarga el controlador de minifiltro.

Rutinas fltMgr para la comunicación entre mensajería unificada y KM

FltMgr proporciona las siguientes rutinas de compatibilidad para minifiltros para comunicarse con aplicaciones de mensajería unificada:

Las aplicaciones y servicios de mensajería unificada pueden usar las siguientes rutinas de soporte técnico proporcionadas por el sistema para comunicarse con controladores de minifiltro:

Rutinas de devolución de llamada de minifiltro para la comunicación entre mensajería unificada y KM

Un minifiltro implementa las siguientes rutinas de devolución de llamada para admitir la comunicación entre mensajería unificada y KM. Pasa punteros a estas rutinas cuando llama a FltCreateCommunicationPort.

Nombre de la rutina de devolución de llamada Tipo de rutina de devolución de llamada
ConnectNotifyCallback PFLT_CONNECT_NOTIFY
DisconnectNotifyCallback PFLT_DISCONNECT_NOTIFY
MessageNotifyCallback PFLT_MESSAGE_NOTIFY