Filter-Manager-Konzepte
Der Filter-Manager (FltMgr.sys) ist ein vom System bereitgestellter Kernelmodustreiber, der Funktionen implementiert und verfügbar macht, die häufig in Dateisystemfiltertreibern erforderlich sind. Dateisystemfilterentwickler können die Funktionen von FltMgr verwenden, um Minifiltertreiber zu schreiben, die einfacher zu entwickeln sind als ältere Dateisystemfiltertreiber. Das Endergebnis ist ein verkürzter Entwicklungsprozess und eine höhere Qualität, stabilere Treiber.
FltMgr wird mit Windows installiert, wird aber nur aktiv, wenn ein Minifiltertreiber geladen wird. Es wird an den Dateisystemstapel für ein Zielvolume angefügt. Ein Minifiltertreiber fügt indirekt an den Dateisystemstapel an, indem er sich bei FltMgr für die E/A-Vorgänge registriert, die der Minifiltertreiber filtert.
Minifilter werden in einer bestimmten Reihenfolge angefügt. Das Betriebssystem bestimmt die Reihenfolge der Anlage durch Ladereihenfolgengruppen und Höhen. Der Anhang eines Minifiltertreibers in einer bestimmten Höhe auf einem bestimmten Volume wird als Instanz des Minifiltertreibers bezeichnet.
Höhe eines Minifilters:
- Stellt sicher, dass die Instanz des Minifiltertreibers immer an der entsprechenden Position relativ zu anderen Minifiltertreiberinstanzen geladen wird.
- Bestimmt die Reihenfolge, in der FltMgr den Minifiltertreiber zum Verarbeiten von E/A aufruft.
Die folgende Abbildung zeigt einen vereinfachten E/A-Stapel mit dem Filter-Manager und drei Minifiltertreibern.
Ein Minifiltertreiber kann IRP-basierte E/A-Vorgänge und schnelle E/A- und Dateisystemfilter(FSFilter)-Rückrufvorgänge filtern. Für jede der E/A-Operationen, die er filtern möchte, kann ein Minifilter eine Rückrufroutine vor dem Vorgang, eine Rückrufroutine nach dem Vorgang oder beides registrieren. Wenn FltMgr einen E/A-Vorgang verarbeitet, ruft es die entsprechende Rückrufroutine für jeden Minifiltertreiber auf, der für diesen Vorgang registriert ist. Wenn diese Rückrufroutine zurückgegeben wird, ruft FltMgr die entsprechende Rückrufroutine für den nächsten Minifiltertreiber auf, der für den Vorgang registriert wurde.
Gehen Sie beispielsweise davon aus, dass alle drei Minifiltertreiber in dieser Abbildung für denselben E/A-Vorgang registriert sind. In dieser Situation gilt:
- Wenn FltMgr den E/A-Vorgang empfängt, ruft er die Minifilter-Vorvorgangsrückrufroutinen in der Reihenfolge der Höhe von der höchsten zum niedrigsten (A, B, C) auf. FltMgr leitet dann die E/A-Anforderung zur weiteren Verarbeitung an den nächsten niedrigeren Treiber weiter.
- Wenn FltMgr die E/A-Anforderung zum Abschluss empfängt, ruft sie die Vorvorgangsrückrufroutinen jedes Minifiltertreibers in umgekehrter Reihenfolge von der niedrigsten zur höchsten (C, B, A) auf.
Für die Interoperabilität mit älteren Filtertreibern kann FltMgr Filtergeräteobjekte an einen Dateisystem-E/A-Stapel an mehreren Speicherorten anfügen. Jedes der Filtergeräteobjekte von FltMgr wird als Frame bezeichnet. Aus Sicht eines Legacyfiltertreibers ist jeder Filter-Manager-Frame nur ein anderer Legacyfiltertreiber.
Jeder Filter-Manager-Frame stellt einen Bereich von Höhen dar. FlgMgr kann einen vorhandenen Frame anpassen oder einen neuen Frame erstellen, damit Minifiltertreiber an der richtigen Position angefügt werden können.
FltMgr kann keinen Minifilter zwischen zwei angefügten Legacyfiltern anfügen, es sei denn, es gibt bereits einen Filter-Manager-Frame dazwischen. Wenn ein Minifilter über einem Legacyfilter angefügt werden soll, kann er je nach Vorhandensein eines zweiten angefügten Legacyfilters darunter angefügt werden. Ein Minifilter, der unterhalb eines Legacyfilters angefügt werden soll, kann stattdessen oberhalb dieses Legacyfilters angefügt werden.
Wichtig
Überprüfen Sie immer die Interoperabilität von Legacyfiltern mit Minifiltern, oder ersetzen Sie ältere Filter durch Minifilter. Weitere Informationen finden Sie unter Richtlinien für das Portieren von Legacyfiltertreibern.
Wenn ein Minifiltertreiber entladen und neu geladen wird, lädt das System ihn in derselben Höhe in demselben Frame neu, aus dem er entladen wurde.
Die folgende Abbildung zeigt einen vereinfachten E/A-Stapel mit zwei Filter-Manager-Frames, Minifiltertreiberinstanzen und einem älteren Filtertreiber.