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. Entwickler von Dateisystemfiltern von Drittanbietern können die Funktionen von FltMgr verwenden, um "Minifilter"-Treiber zu schreiben, die einfacher zu entwickeln sind als ältere Dateisystemfiltertreiber. Das Endergebnis ist ein verkürzter Entwicklungsprozess und qualitativ hochwertigere, robustere 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 Anlagen nach Ladereihenfolgegruppen und Höhen. Das Anbringen eines Minifiltertreibers in einer bestimmten Höhe auf einem bestimmten Volume wird als instance des Minifiltertreibers bezeichnet.

Höhe eines Minifilters:

  • Stellt sicher, dass die instance des Minifiltertreibers immer an der entsprechenden Position im Vergleich zu anderen Minifiltertreiberinstanzen geladen wird.
  • Bestimmt die Reihenfolge, in der FltMgr den Minifiltertreiber aufruft, um E/A zu verarbeiten.

Die folgende Abbildung zeigt einen vereinfachten E/A-Stapel mit dem Filter-Manager und drei Minifiltertreibern.

Diagramm zur Veranschaulichung eines vereinfachten E/A-Stapels mit dem Filter-Manager und drei Minifiltertreibern.

Ein Minifiltertreiber kann IRP-basierte E/A-Vorgänge und schnelle E/A- und Dateisystemfilter-Rückrufvorgänge (FSFilter) filtern. Für jeden der E/A-Vorgänge, die gefiltert werden sollen, kann ein Minifilter eine Preoperation-Rückrufroutine, eine Rückrufroutine nach der Operation 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ückgibt, ruft FltMgr die entsprechende Rückrufroutine für den nächsten Minifiltertreiber auf, der für den Vorgang registriert ist.

Angenommen, alle drei Minifiltertreiber in dieser Abbildung sind für den gleichen E/A-Vorgang registriert. In dieser Situation gilt:

  • Wenn FltMgr den E/A-Vorgang empfängt, ruft es die Minifilter-Präoperationsrückrufroutinen in der Reihenfolge der Höhe vom höchsten bis zum niedrigsten (A, B, C) auf. FltMgr leitet dann die E/A-Anforderung zur weiteren Verarbeitung an den nächstniedrigen Treiber weiter.
  • Wenn FltMgr die E/A-Anforderung für den Abschluss empfängt, ruft es die Rückrufroutinen nach der Operation jedes Minifiltertreibers in umgekehrter Reihenfolge vom niedrigsten zum höchsten (C, B, A) auf.

Für die Interoperabilität mit älteren Filtertreibern kann FltMgr Filtergeräteobjekte an einen E/A-Stapel des Dateisystems 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 anfügen können.

FltMgr kann keinen Minifilter zwischen zwei angefügten Legacyfiltern anfügen, es sei denn, es ist bereits ein Filter-Manager-Frame dazwischen vorhanden. 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, könnte stattdessen über diesem Legacyfilter angefügt werden.

Wichtig

Überprüfen Sie immer die Interoperabilität von Legacyfiltern mit Minifiltern, oder ersetzen Sie Legacyfilter durch Minifilter. Weitere Informationen finden Sie unter Richtlinien für das Portieren von Legacyfiltertreibern.

Wenn ein Minifiltertreiber entladen und neu geladen wird, wird er auf derselben Höhe in demselben Frame erneut geladen, aus dem er entladen wurde.

Die folgende Abbildung zeigt einen vereinfachten E/A-Stapel mit zwei Filter-Manager-Frames, Minifiltertreiberinstanzen und einem Legacyfiltertreiber.

Diagramm, das einen vereinfachten E/A-Stapel mit zwei Filter-Manager-Frames, Minifiltertreiberinstanzen und einem Legacyfiltertreiber veranschaulicht.