Communication entre le mode utilisateur et les mini-filtres
FltMgr prend en charge la communication entre les applications en mode utilisateur (UM) et les mini-filtres en mode noyau (KM) via des ports de communication. Un exemple de scénario est une application antivirus qui doit communiquer avec son équivalent de minifilter KM pour analyser les fichiers pour détecter les virus et les programmes malveillants.
Le minifilter contrôle la sécurité sur le port en spécifiant un descripteur de sécurité à appliquer à l’objet de port de communication. La communication via un port de communication n’est pas mise en mémoire tampon. Il est donc plus rapide et plus efficace.
Une application ou un service de messagerie unifiée peut répondre aux messages d’un minifilter pour la communication bidirectionnelle. La communication est établie comme suit :
Un pilote minifilter appelle FltCreateCommunicationPort pour créer un port de serveur de communication. En tant que créateur du port de l’écouteur, le minifilter commence immédiatement à écouter les connexions entrantes sur le port créé.
Lorsqu’une application ou un service de messagerie unifiée appelle FilterConnectCommunicationPort pour tenter de se connecter au port, FltMgr appelle la routine de rappel ConnectNotifyCallback du minifilter avec un handle à la connexion nouvellement créée. Une fois le rappel terminé, FltMgr transmet ensuite à l’appelant de messagerie unifiée un handle de fichier distinct qui représente le point de terminaison de l’appelant de messagerie unifiée à la connexion. L’appelant de messagerie unifiée peut utiliser ce handle pour associer plusieurs ports d’achèvement d’E/S au port de l’écouteur. Cette fonctionnalité est utile pour les applications qui doivent gérer simultanément des volumes élevés d’opérations d’E/S.
FltMgr accepte la demande de connexion uniquement si l’appelant de messagerie unifiée dispose d’un accès suffisant tel que spécifié par le descripteur de sécurité sur le port. Chaque connexion au port obtient sa propre file d’attente de messages et points de terminaison privés.
La fermeture d’un point de terminaison (noyau ou utilisateur) met fin à cette connexion. Lorsqu’un appelant de messagerie unifiée ferme son handle au point de terminaison, FltMgr appelle la routine DisconnectNotifyCallback du pilote minifilter afin que le pilote minifilter puisse fermer son handle à la connexion.
La fermeture du port du serveur de communication empêche les nouvelles connexions, mais ne termine pas les connexions existantes. FltMgr met fin aux connexions existantes lorsque le pilote minifilter se décharge.
Routines FltMgr pour la communication entre la messagerie unifiée et le km
FltMgr fournit les routines de prise en charge suivantes pour les minifilters afin de communiquer avec les applications de messagerie unifiée :
Les applications et services de messagerie unifiée peuvent utiliser les routines de support fournies par le système suivantes pour communiquer avec les pilotes minifilter :
Routines de rappel minifilter pour la communication entre la messagerie unifiée et le km
Un minifilter implémente les routines de rappel suivantes pour prendre en charge la communication entre la messagerie unifiée et km. Il transmet des pointeurs à ces routines lorsqu’il appelle FltCreateCommunicationPort.
Nom de la routine de rappel | Type de routine de rappel |
---|---|
ConnectNotifyCallback | PFLT_CONNECT_NOTIFY |
DisconnectNotifyCallback | PFLT_DISCONNECT_NOTIFY |
MessageNotifyCallback | PFLT_MESSAGE_NOTIFY |