Kommunikation zwischen Benutzermodus und Minifiltern
FltMgr unterstützt die Kommunikation zwischen UM-Anwendungen (User-Mode) und Kernelmodus-Minifiltern über Kommunikationsports. Ein Beispielszenario ist eine Antivirenanwendung, die mit ihrem KM-Minifilter-Gegenstück kommunizieren muss, um Dateien nach Viren und Schadsoftware zu scannen.
Der Minifilter steuert die Sicherheit auf dem Port, indem ein Sicherheitsdeskriptor angegeben wird, der auf das Kommunikationsportobjekt angewendet werden soll. Die Kommunikation über einen Kommunikationsport wird nicht gepuffert, sodass sie schneller und effizienter ist.
Eine UM-App oder ein Dienst kann nachrichten von einem Minifilter für die bidirektionale Kommunikation beantworten. Die Kommunikation wird wie folgt aufgebaut:
Ein Minifiltertreiber ruft FltCreateCommunicationPort auf, um einen Kommunikationsserverport zu erstellen. Als Ersteller des Listenerports beginnt der Minifilter sofort implizit mit der Überwachung eingehender Verbindungen am erstellten Port.
Wenn eine UM-App oder ein Dienst FilterConnectCommunicationPort aufruft, um eine Verbindung mit dem Port herzustellen, ruft FltMgr die ConnectNotifyCallback-Rückrufroutine des Minifilters mit einem Handle für die neu erstellte Verbindung auf. Nach Abschluss des Rückrufs übergibt FltMgr den UM-Aufrufer dann ein separates Dateihandle, das den ENDPUNKT des UM-Aufrufers an die Verbindung darstellt. Der UM-Aufrufer kann dieses Handle verwenden, um mehrere E/A-Vervollständigungsports dem Listenerport zuzuordnen. Diese Funktion ist nützlich für Apps, die gleichzeitig hohe E/A-Vorgänge verarbeiten müssen.
FltMgr akzeptiert die Verbindungsanforderung nur, wenn der UM-Aufrufer über ausreichenden Zugriff verfügt, wie vom Sicherheitsdeskriptor für den Port angegeben. Jede Verbindung mit dem Port erhält eine eigene Nachrichtenwarteschlange und private Endpunkte.
Durch das Schließen von Endpunkten (Kernel oder Benutzer) wird diese Verbindung beendet. Wenn ein UM-Aufrufer sein Handle am Endpunkt schließt, ruft FltMgr die DisconnectNotifyCallback-Routine des Minifiltertreibers auf, damit der Minifiltertreiber seinen Handle mit der Verbindung schließen kann.
Das Schließen des Kommunikationsserverports verhindert neue Verbindungen, beendet aber keine vorhandenen Verbindungen. FltMgr beendet vorhandene Verbindungen, wenn der Minifiltertreiber entladen wird.
FltMgr-Routinen für die Kommunikation zwischen UM und KM
FltMgr bietet die folgenden Supportroutinen für Minifilter für die Kommunikation mit UM-Anwendungen:
UM-Anwendungen und -Dienste können die folgenden vom System bereitgestellten Supportroutinen verwenden, um mit Minifiltertreibern zu kommunizieren:
Minifilterrückrufroutinen für die Kommunikation zwischen UM und KM
Ein Minifilter implementiert die folgenden Rückrufroutinen, um die Kommunikation zwischen UM und KM zu unterstützen. Sie übergibt Zeiger an diese Routinen, wenn sie FltCreateCommunicationPort aufruft.
Name der Rückrufroutine | Rückrufroutinentyp |
---|---|
ConnectNotifyCallback | PFLT_CONNECT_NOTIFY |
DisconnectNotifyCallback | PFLT_DISCONNECT_NOTIFY |
MessageNotifyCallback | PFLT_MESSAGE_NOTIFY |