Comunicazione tra la modalità utente e i minifiltri
FltMgr supporta la comunicazione tra applicazioni in modalità utente e minifiltri in modalità kernel (KM) tramite porte di comunicazione. Uno scenario di esempio è un'applicazione antivirus che deve comunicare con la controparte del minifiltro km per analizzare i file per virus e malware.
Il minifiltro controlla la sicurezza sulla porta specificando un descrittore di sicurezza da applicare all'oggetto porta di comunicazione. La comunicazione tramite una porta di comunicazione non viene memorizzata nel buffer, quindi è più veloce ed efficiente.
Un'app o un servizio di messaggistica unificata può rispondere ai messaggi da un minifiltro per la comunicazione bidirezionale. La comunicazione viene stabilita nel modo seguente:
Un driver minifilter chiama FltCreateCommunicationPort per creare una porta del server di comunicazione. Quando l'autore della porta del listener, il minifiltro inizia immediatamente in modo implicito ad ascoltare le connessioni in ingresso sulla porta creata.
Quando un'app o un servizio di messaggistica unificata chiama FilterConnectCommunicationPort per tentare di connettersi alla porta, FltMgr chiama la routine di callback ConnectNotifyCallback del minifilter con un handle per la connessione appena creata. Al termine del callback, FltMgr passa quindi al chiamante di messaggistica unificata un handle di file separato che rappresenta l'endpoint del chiamante di messaggistica unificata alla connessione. Il chiamante di messaggistica unificata può usare questo handle per associare più porte di completamento I/O alla porta del listener. Questa funzionalità è utile per le app che devono gestire volumi elevati di operazioni di I/O contemporaneamente.
FltMgr accetta la richiesta di connessione solo se il chiamante di messaggistica unificata ha accesso sufficiente come specificato dal descrittore di sicurezza sulla porta. Ogni connessione alla porta ottiene la propria coda di messaggi e gli endpoint privati.
La chiusura di un endpoint (kernel o utente) termina tale connessione. Quando un chiamante di messaggistica unificata chiude l'handle all'endpoint, FltMgr chiama la routine DisconnectNotifyCallback del driver minifilter in modo che il driver minifiltro possa chiudere il relativo handle alla connessione.
La chiusura della porta del server di comunicazione impedisce nuove connessioni, ma non termina le connessioni esistenti. FltMgr termina le connessioni esistenti quando il driver minifilter scarica.
Routine FltMgr per la comunicazione tra messaggistica unificata e km
FltMgr fornisce le routine di supporto seguenti per i minifiltri per comunicare con le applicazioni di messaggistica unificata:
Le applicazioni e i servizi di messaggistica unificata possono usare le routine di supporto fornite dal sistema seguenti per comunicare con i driver minifiltro:
Routine di callback minifiltro per la comunicazione tra messaggistica unificata e km
Un minifiltro implementa le routine di callback seguenti per supportare la comunicazione tra messaggistica unificata e km. Passa puntatori a queste routine quando chiama FltCreateCommunicationPort.
Callback Routine Name | Tipo di routine callback |
---|---|
ConnectNotifyCallback | PFLT_CONNECT_NOTIFY |
DisconnectNotifyCallback | PFLT_DISCONNECT_NOTIFY |
MessageNotifyCallback | PFLT_MESSAGE_NOTIFY |