Share via


Dateisystemfilterüberprüfung

Nutzungsüberprüfung

Die Filterüberprüfung überprüft die folgende Verwendung in einem Minifiltertreiber:

  • Richtige Verwendung von Parametern und Aufrufen des Kontexts
  • Richtige Rückgabewerte aus Rückrufroutinen vor und nach der Operation
  • Konsistente und kohärente Änderungen an Parametern in Rückrufdaten

Filter-Manager-Objektnachverfolgung

Die Filterüberprüfung verfolgt die folgenden Filter-Manager-Objekte nach:

  • Filterkontexte (Streamkontexte, Dateikontexte usw.)
  • Rückrufdatenstrukturen
  • Arbeitselemente in der Warteschlange
  • NameInformationsstrukturen
  • Dateiobjekte
  • Objekte filtern
  • Instanzobjekte
  • Volumeobjekte

Bei Strukturen mit Verweiszählungen, z. B. Filterkontexte und Namensinformationsstrukturen, wird filter verifier beim Entladen des Filtertreibers in den Debugger eingegliedert, wenn die Verweisanzahlen offenbar geleakt wurden. Es werden Anweisungen ausgegeben, wie Sie die Debuggererweiterung !fltkd verwenden können, um die durchgesickerten Strukturen zu finden.

Filterüberprüfungsverletzungen

Wenn filter verifier einen Verstoß erkennt, wird eine Meldung im Debugger ausgegeben, die die Verletzung beschreibt. Bei den meisten Verstößen wird auch die Ausführung angehalten und der Benutzer aufgefordert, maßnahmen zu ergreifen. Beispiel:

FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?

Geben Sie zum Fortfahren einen von vier Befehlen mit einem Buchstaben ein:

  • B oder b für Break: Dies wird in den Debugger unterteilt, in dem Sie weitere Untersuchungen durchführen können.
  • I oder i für Ignorieren: Setzt die Ausführung fort. Wenn diese Verletzung erneut auftritt, gibt filter verifier die Meldung zur Verletzung an den Debugger aus, stoppt die Ausführung und zeigt die Eingabeaufforderung an.
  • Z oder z für Zap: Setzt die Ausführung fort. Wenn diese Verletzung erneut auftritt, gibt Filter Verifier die Meldung zur Verletzung an den Debugger aus, hält die Ausführung jedoch NICHT an.
  • R oder r für Entfernen: Setzt die Ausführung fort. Wenn diese Verletzung erneut auftritt, gibt Filter Verifier die Meldung zur Verletzung NICHT aus und stoppt die Ausführung NICHT.

Hinweis

Wenn Sie filter verifier für einen Treiber verwenden, der mit aktivierten Compileroptimierungen erstellt wurde, tritt gelegentlich ein Filterüberprüfungsfehler auf, der immer wieder behauptet, dass Ihr Filter Verweise auf eine oder mehrere Ressourcen durchgesickert hat, auch wenn Sie keine Ursache für ein Leck im Code finden können. Die Nachricht beginnt mit einem Text ähnlich dem folgenden:

FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:

Möglicherweise wird auch eine Meldung angezeigt, die darauf hinweist, dass die Objektnachverfolgung nicht synchron ist, z. B.:

FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system

Die häufigste Ursache für diese Bedingung ist, dass filter verifier den wahren Aufrufer einer Filter Manager-API aufgrund einer Optimierung des Tail-Aufrufs nicht identifizieren konnte. Dies kann auftreten, wenn eine Routine in Ihrem Treiber eine Filter-Manager-API als letzte Zeile aufruft. Beispiel:

void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
                        PVOID Filter,
                        PVOID Context)
{
   // Do some stuff
   ...
   FltFreeGenericWorkItem(WorkItem);
}

Es gibt mehrere Möglichkeiten, um zu überprüfen, ob dies geschehen ist:

  1. Deaktivieren Sie die Optimierung der verdächtigen Routine, indem Sie sie in #pragma optimize("", off) ... #pragma optimize("", on)umschließen.
  2. Ordnen Sie Ihren Code neu an, sodass der Api-Aufruf des Filter-Managers nicht das Letzte ist, was in Ihrer Routine passiert.

Wenn sich der Fehler nach dem Ausprobieren einer dieser Optionen nicht mehr reproduziert, handelt es sich wahrscheinlich um ein falsch positives Ergebnis.

Aktivieren dieser Option

Sie können die Dateisystemfilterüberprüfungsfunktion für einen oder mehrere Treiber über die verifier.exe Befehlszeile aktivieren. Ausführliche Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen.

Die empfohlene Möglichkeit zum Starten von Filter Verifier ist die Option /standard vonverifier.exe, da sie zusätzliche nützliche Features wie spezielle Pool- und Poolnachverfolgung bietet:

verifier.exe /standard /driver MyFilter.sys

Die Überprüfung beginnt, wenn sich der Minifiltertreiber beim Filter-Manager registriert.

  • Aktivieren der Nur Filterüberprüfung in Windows 11 und höheren Versionen von Windows Aktivieren Sie die E/A-Überprüfungs- und Dateisystemfilterüberprüfungsoptionen in Driver Verifier (verifier.exe). Beispiel:

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Aktivieren von Nur Filterüberprüfung in Windows 10 und früheren Versionen von Windows Um den minimalen Satz von Filterüberprüfungen zu aktivieren, geben Sie den Namen des Minifiltertreibers an, und aktivieren Sie die E/A-Überprüfungsoption in Driver Verifier (verifier.exe). Beispiel:

    verifier.exe /flags 0x10 /driver MyFilter.sys