Die Tiefen von Windows I/O (Teil 6, Abschluss) — Wie Minifilter funktionieren und langsame I/O mit Procmon untersuchen

· Aktualisiert am: · · Windows, Win32, I/O, Minifilter, Kernel, Gerätetreiber, Sicherheit, Fehlersuche

Änderungsverlauf (Erstfassung, veröffentlicht am 29. Jul 2026)
Erstveröffentlichung
Diesen Artikel zitieren(DOI (registriertes Archiv): 10.5281/zenodo.22175384)

Die folgenden DOIs verweisen auf bereits archivierte Versionen, die vom aktuellen Text abweichen können. Verwenden Sie die URL dieser Seite, um auf den aktuellen Text zu verweisen.

Go Komura (2026). Die Tiefen von Windows I/O (Teil 6, Abschluss) — Wie Minifilter funktionieren und langsame I/O mit Procmon untersuchen. KomuraSoft LLC. https://comcomponent.com/de/blog/windows-minifilter-filter-drivers/

DOI (registriertes Archiv)
10.5281/zenodo.22175384
DOI (zuletzt registrierte Version)
10.5281/zenodo.22175385

Auf einem bestimmten PC dauert schon das Öffnen einer Datei lange. Auf Rechnern mit installierter Antivirensoftware werden Builds und Massen-Dateikopien langsam. Starten Sie Process Monitor, sehen Sie eine Aufzeichnung von Dateivorgängen, obwohl Sie die eigene Anwendung nicht geändert haben.

Der Schlüssel zu beidem ist der Dateisystem-Filtertreiber, der Datei-I/O unterwegs überwacht und steuert. Windows stellt genau dafür einen Erweiterungspunkt bereit.1

In diesem letzten Teil der Serie „Die Tiefen von Windows I/O“ behandeln wir den Minifilter, das heutige Standard-Implementierungsmodell. Die erste Hälfte klärt die Funktionsweise, die zweite verbindet das mit einem Verfahren, mit fltmc und Procmon herauszufinden, welche Umgebung und welcher Vorgang langsam sind. Auch für Anwendungsentwicklerinnen und -entwickler, die nie einen Treiber schreiben, sollte es eine Karte zum Eingrenzen von Leistungsproblemen sein.

1. Zuerst das Fazit

Ein Minifilter ist ein Treiber, der sich beim mit Windows ausgelieferten Filter Manager (FltMgr) registriert und angibt, welche Operationen er in welcher Phase behandelt. FltMgr ruft die Callbacks nach dieser Registrierung und nach einer relativen Lage namens Altitude auf. Aus Sicht der Anwendung ist der Dateivorgang derselbe, aber die Arbeit der Filter dazwischen kann Ergebnis und Dauer beeinflussen.2

Trotzdem sind „ein Filter ist vorhanden“ und „dieser Filter ist die Ursache der Langsamkeit“ zwei verschiedene Aussagen. fltmc prüft die Konfiguration, Procmon beobachtet Vorgänge. Keines von beiden legt eine Ursache aus einer Liste oder einer einzelnen Zahl fest.

Dieser Artikel ist um die folgenden Unterscheidungen aufgebaut.

Was Sie prüfen wollen Wo Sie hinsehen Was es allein nicht sagt
Welche Filter geladen sind fltmc filters Ob dieser Filter den betreffenden Vorgang behandelt hat
Was am betreffenden Volume angebunden ist fltmc instances Wie viel Zeit jeder Filter verbraucht hat
Welche Dateivorgänge Zeit brauchen Procmon-Ereignisse und die Spalte Duration Die Komponente, die die gesamte Verzögerung erzeugt hat
Wofür der Defender-Scan Zeit verbraucht Der Microsoft-Defender-Leistungsanalysator Leistungsprobleme in anderen Produkten oder in der Anwendung insgesamt

In der Abbildung kennzeichnet eine durchgezogene Linie eine stets geltende Beziehung und eine gestrichelte Linie eine bedingte (die Bedingungen stehen bei jeder Beziehung auf der Detailseite). Die vollständige Liste der Beziehungen (34 insgesamt, mit Beleg und Sicherheitsgrad) und die Definitionen der wichtigsten Konzepte sind auf der Detailseite der Wissenskarte (auf Japanisch) zusammengestellt. Daten: JSON-LD / Turtle

2. Eine Geschichte derer in der Mitte — von Legacy-Filtern zu FltMgr

Ein Dateisystem-Filtertreiber überwacht und steuert Anforderungen, die zu einem Dateisystem oder zu einem anderen Filter gehen. Er wird für Virenschutz, Verschlüsselung, Sicherung und Ähnliches genutzt und kann mehr als Anforderungen aufzeichnen: Er kann Parameter ändern oder den Zugriff verweigern. „Abfangen“ bedeutet hier keine Hardwareunterbrechung der CPU. Es bedeutet, in der Mitte des I/O-Pfads zu sitzen.1

Im Legacy-Modell bindet der Filter selbst sein Geräteobjekt an den Gerätestapel, reicht Anforderungen nach unten und behandelt den Abschluss. Anbindungsreihenfolge, sicheres Entfernen und das Zusammenleben mit anderen Filtern bleiben der Implementierung überlassen; dieses Modell legt dem Treiber daher einen weiten Bereich von Aufgaben auf.

Im Minifilter-Modell dagegen übernimmt FltMgr die gemeinsame Arbeit wie das Anbinden an den Stapel, und jeder Treiber registriert Callbacks nur für die Operationen, die er braucht. Ein Minifilter bleibt ein Kernelmodus-Treiber, und das Treiberobjekt verschwindet nicht. Was sich ändert, ist der Mechanismus der Teilnahme am Dateisystemstapel.3

Das Legacy-Modell und das Minifilter-ModellVergleich des Legacy-Modells, in dem der Filter sich selbst an den Stapel bindet, mit dem Minifilter-Modell, in dem Callbacks bei FltMgr registriert werden.Legacy-ModellMinifilter-ModellWie man an Datei-I/O teilnimmtDer Filter bindet sich selbst anCallbacks bei FltMgr registrierenAnbindung und Abschluss selbst implementierenFltMgr übernimmt die gemeinsame Arbeit

Abbildung 1: Vergleich des Modells, in dem der Filter sich selbst an den Stapel bindet, mit dem Modell, in dem Callbacks bei FltMgr registriert werden.

Die Abbildung zeigt die Anordnung, in der FltMgr sich für die Minifilter an den Stapel bindet. In der Praxis kann FltMgr, um mit Legacy-Filtern zusammenzuleben, sich an unterschiedlichen Positionen als mehrere Frames anbinden. Das Zusammenleben bringt Lagebeschränkungen mit sich; der Wechsel zu Minifiltern löst daher nicht jedes Kompatibilitätsproblem von selbst.2

FltMgr verringert die Lage-Unstabilität durch die Ladereihenfolge und unterstützt auch das Entladen während des laufenden Systems. Was sich tatsächlich abnehmen lässt, ist jedoch ein Treiber, der den entsprechenden Callback implementiert und das Entladen erlaubt. Das ist keine Garantie, dass Sie in einer Untersuchung jeden beliebigen Filter entfernen dürfen.3

3. Wie sich ein Minifilter verhält — Pre- und Post-Operation-Callbacks

Ein Minifilter registriert die Operationen, die er behandeln will: etwa Öffnen und Erzeugen, die IRP_MJ_CREATE entsprechen, oder Schreibvorgänge, die IRP_MJ_WRITE entsprechen. Der Pre-Operation-Callback läuft, bevor die Anforderung nach unten gereicht wird, der Post-Operation-Callback an der Stelle, an der das Ergebnis von unten zurückkommt. Ein Filter kann beide registrieren oder nur die Seite, die er braucht.2

Die nächste Abbildung zeigt den Fall, in dem A und B dieselbe Operation behandeln, die Anforderung in ihren Pre-Operation-Callbacks nach unten reichen und um einen Post-Operation-Rückruf bitten.

Callback-Reihenfolge, wenn die Anforderung nach unten gereicht wird und der Abschluss zurückkommtRegistrieren A und B beide die Zieloperation, reichen sie nach unten und bitten um einen Post-Operation-Callback, laufen die Pre-Callbacks von der höheren Altitude nach unten und die Post-Callbacks in umgekehrter Reihenfolge.DateisystemFilter B (niedrig)Filter A (hoch)FltMgrDateisystemFilter B (niedrig)Filter A (hoch)FltMgrprepreden Stapel nach unten reichenErgebnispostpost

Abbildung 2: Im üblichen Hin- und Rückweg laufen die Pre-Callbacks von der höheren Altitude zur niedrigeren und die Post-Callbacks in umgekehrter Reihenfolge. Nicht jede Anforderung erzeugt diesen Hin- und Rückweg.

Der Rückgabewert des Pre-Operation-Callbacks entscheidet, was als Nächstes geschieht. Die wichtigsten lassen sich so zusammenfassen.45

Pre-Operation-Rückgabewert Bedeutung
FLT_PREOP_SUCCESS_NO_CALLBACK Den Stapel nach unten gehen und den Post-Callback dieses Filters nicht anfordern
FLT_PREOP_SUCCESS_WITH_CALLBACK Den Stapel nach unten gehen und bei Abschluss den Post-Callback dieses Filters anfordern
FLT_PREOP_COMPLETE Die Operation mit dem von diesem Filter angegebenen Ergebnis abschließen. Zugriff verweigern ist ein Beispiel
FLT_PREOP_PENDING Die entsprechende IRP-basierte Operation anhalten und später fortsetzen oder abschließen

Schließt ein Filter eine Anforderung in seinem Pre-Operation-Callback ab, reist die Anforderung nicht weiter zu den Filtern darunter oder zum Dateisystem. Der Post-Operation-Callback des Filters, der FLT_PREOP_COMPLETE zurückgegeben hat, wird ebenfalls nicht aufgerufen, und der Abschluss geht zu den Filtern darüber zurück, die die Anforderung bereits empfangen und um einen Post-Callback gebeten haben. Deshalb ist es wichtig, nicht anzunehmen, „pre und post werden immer aufgerufen, weil ich sie registriert habe“.4

Pending wiederum ist nicht einfach zusätzliche Wartezeit. Ein Treiber, der eine Anforderung anhält, übernimmt die Verantwortung, sie ordnungsgemäß fortzusetzen oder abzuschließen. Eine Implementierung muss außerdem mit Einschränkungen wie Operationstyp, IRQL, Pufferlebensdauer und Abbruch umgehen. Die Tabelle in diesem Artikel ist eine Skizze der Verarbeitung, kein Implementierungsverfahren, dem Sie so folgen können.5

3.1 Fast I/O ist ebenfalls abgedeckt, das heißt aber nicht „alle I/O ist sichtbar“

Was FltMgr behandelt, ist nicht nur IRP-basierte I/O. Es deckt auch Fast I/O und Dateisystemfilter- (FSFilter-) Callback-Operationen ab. Die Vorstellung „dieser Pfad nutzt keine IRPs, also kann ein Minifilter ihn nicht sehen“ ist falsch. Die Gegenannahme, jeder Zugriff werde zwingend zum IRP und durchlaufe dieselbe Callback-Folge, ist ebenfalls ungenau.2

Was sich beobachten lässt, ändert sich mit den angebundenen Volumes, den registrierten Operationen, den bei der Registrierung angegebenen Ausschlussbedingungen und damit, ob ein Filter darüber die Anforderung abschließt. Auch nicht jeder einzelne Speicherzugriff auf eine speicherabgebildete Datei wird jedes Mal als ein Datei-I/O-Ereignis aufgezeichnet. Legacy-Filter haben ebenfalls einen Mechanismus für Fast I/O; Unterstützung für Fast I/O ist daher keine ausschließlich den Minifiltern eigene Funktion.36

4. Altitude — die „Höhe“, die die Reihenfolge bestimmt

Wenn mehrere Filter an derselben Operation teilnehmen, muss die Reihenfolge festgelegt werden. Was diese relative Lage angibt, ist die Altitude. Je größer die Zahl, desto weiter sitzt der Filter vom Dateisystem, je kleiner, desto näher. Es ist keine Threadpriorität und keine Zahl, die Leistung oder Wichtigkeit eines Produkts ausdrückt.7

Die Einstellung steht in der Instanzdefinition des Treibers, und was tatsächlich an ein gegebenes Volume angebunden wird, wird zur Instanz. Weil dieselbe Definition für mehrere Volumes gilt, wird nicht je Volume eine eigene Altitude vergeben. Ein einzelner Treiber kann mehr als eine Definition tragen, aber mehrere Altitudes zugewiesen zu bekommen ist keine übliche Nutzung.7

Die Ladereihenfolgegruppen nach Zweck und ihre Nummernbereiche sind wie folgt definiert.

Minifilter-Altitude-Bänder nach ZweckJe größer die Zahl, desto weiter die relative Lage vom Dateisystem. Die Abbildung ist ein Auszug einiger Gruppen und deckt nicht alles von oben bis unten ab.Größere ZahlenActivity Monitor 360000-389999Undelete 340000-349999Anti-Virus 320000-329999Replication 300000-309999Continuous Backup 280000-289999Weiter zu weiteren Gruppen nach Zweck

Abbildung 3: Auszug der Altitude-Bänder nach Zweck. Es gibt auch Bänder oberhalb von Activity Monitor, daher sitzt ein Überwachungsfilter nicht immer ganz oben im gesamten Stapel.

Die erste Altitude beantragen Sie bei Microsoft. Ist Ihnen in derselben Ladereihenfolgegruppe bereits ein ganzzahliger Wert zugewiesen, gibt es auch einen Mechanismus, eine Altitude zu bauen, indem Sie einen Dezimalteil an diesen Wert anfügen und Microsoft benachrichtigen. Das bedeutet nicht, dass eine entwickelnde Person ohne bestehenden ganzzahligen Wert eine beliebige Zahl frei nutzen darf.7

In der Entwicklung folgen Sie Request a Filter Altitude Identifier und senden Sie eine ASCII-Text-E-Mail an fsfcomm@microsoft.com mit dem Betreff Filter altitude request. Sie füllen Firmennamen, einen langfristig gültigen Firmenkontakt, Produktname und URL, eine Beschreibung, den Treiberdateinamen, den Filtertyp, den Starttyp sowie die gewünschte Gruppe und Nummer aus. Die offizielle Anleitung sagt, 30 Werktage für die Bearbeitung einzuplanen, und Sie erhalten nicht unbedingt die gewünschte Nummer. Das ist etwas, das Sie in der Planungsphase von Entwicklung und Verteilung klären.8

5. Die Bewohner kennenlernen — Ihr PC durch fltmc gesehen

Ist der Mechanismus klar, prüfen Sie die tatsächliche Konfiguration. Öffnen Sie eine Eingabeaufforderung als Administrator und führen Sie die folgenden schreibgeschützten Kommandos aus.910

:: Die geladenen Dateisystemfilter auflisten
fltmc filters

:: Wie Filter und Volumes angebunden sind
fltmc instances

:: Die Volumes auflisten
fltmc volumes

fltmc filters erzeugt dieselbe Auflistung wie fltmc ohne Argumente. Was folgt, ist ein anschauliches Beispiel, wie die Spalten zu lesen sind, keine Messung auf einem realen Gerät für diesen Artikel. Die Altitudes sind veröffentlichte zugewiesene Werte, die Zeilenmenge und die Instanzzahlen dienen der Veranschaulichung.11

Filter Name                     Num Instances    Altitude    Frame
------------------------------  -------------  ------------  -----
bindflt                                 1        409800         0
cldflt                                  1        409500         0
WdFilter                                4        328010         0
luafv                                   1        135000         0
FileInfo                                4         45000         0
Spalte Wie sie zu lesen ist
Filter Name Der Name des Filters. Er stimmt nicht unbedingt mit dem Produktnamen überein
Num Instances Die Zahl angebundener Instanzen. Sie stimmt nicht immer mit der Zahl verschiedener Volumes überein
Altitude Die Lage relativ zu anderen Filtern. Prüfen Sie die Details auch je Instanz
Frame Die FltMgr-Frame-Nummer. <Legacy> kennzeichnet einen Legacy-Filter

Prüfen Sie getrennt, dass ein Name in filters erscheint und dass der Filter am Volume der betreffenden Datei angebunden ist. Der Punkt ist, beim Konfigurationsvergleich bis zu instances zu gehen. Auch nach der Bestätigung, woran er angebunden ist, wissen Sie noch nicht, welche Callbacks er für diese Operation registriert hat oder was er tatsächlich getan hat.10

5.1 Filter, die Sie oft sehen

WdFilter ist der Filter von Microsoft Defender, zugewiesen 328010 im Anti-Virus-Band. cldflt ist der Cloud-Dateien-Filter hinter der Cloud Files API und ist 409500 zugewiesen. Bei OneDrive Files On-Demand arbeiten ein lokaler Platzhalter und der Sync-Anbieter zusammen, um die benötigten Daten zu holen. Das bedeutet nicht, dass die ganze Datei bei jedem Öffnen heruntergeladen wird.1112

Die Dateisystemüberwachung von Procmon nutzt ebenfalls einen Minifilter. Vergleichen Sie fltmc filters vor und nach dem Start, sehen Sie auf manchen Rechnern einen Treiber, dessen Name mit PROCMON beginnt. Nehmen Sie nicht an, dass die nachgestellte Zahl oder der Lade- und Entladezeitpunkt festliegt. Prüfen Sie den Zustand auf dem Rechner vor Ihnen.

Trotzdem ist nicht die gesamte Überwachung von Procmon, einschließlich Registrierung sowie Prozess- und Threadüberwachung, mit einem Dateisystem-Minifilter implementiert. Und eine Zeile in Procmon bedeutet nicht einen physischen Festplattenzugriff. Dateivorgänge zu beobachten und zu beobachten, was das Speichermedium tut, sind zwei verschiedene Schichten.13

6. Wofür verbraucht der Virenschutz seine Zeit?

Ist ein Produkt so konfiguriert, mitten in einem Dateivorgang auf ein Scanergebnis zu warten, ist dieses Warten Teil der Zeit, die die Anwendung zum Abschluss des Vorgangs braucht. In einem Build, der viele kleine Dateien erzeugt und aktualisiert, können sich die einzelnen Prüfungen addieren. Aber es ist nicht gegeben, dass die ganze Datei bei jedem Zugriff erneut gelesen wird, und Bedingungen und Zeitpunkt eines Scans unterscheiden sich nach Produkt und Konfiguration.14

Die nächste Abbildung ist eine begriffliche Sicht des Falls, in dem die Prüfung nach einem Öffnen erfolgt, bevor das Ergebnis an die Anwendung zurückgeht. Sie stellt weder die Interna eines bestimmten Produkts dar noch garantiert sie die Verarbeitungsreihenfolge für jede Datei.

Beispielkonfiguration, die vor dem Abschluss des Öffnens auf das Scanergebnis wartetVeranschaulicht eine Produktkonfiguration, die in post-create prüft. Es ist keine Abbildung der Implementierung jedes Produkts und bedeutet nicht, dass jedes Mal ein Scan stattfindet.DateisystemAV-MinifilterAppDateisystemAV-MinifilterAppIn diesem Beispiel wartet post-create auf das PrüfungsergebnisDas Öffnen innerhalb der dokumentierten Grenzen abbrechenÄnderungen durch Erzeugen oder Überschreiben werden nicht zurückgerolltalt[Von der Prüfung erlaubt][Verweigerung nötig]eine Datei öffnendie Bedingungen prüfen und nach unten reichenÖffnen gelingtErfolgsergebnisFehlerergebnis

Abbildung 4: Beispielkonfiguration, die in post-create auf das Prüfungsergebnis wartet. Die tatsächlichen Bedingungen und der Zeitpunkt der Prüfung unterscheiden sich nach Produkt; dies allein identifiziert die Ursache einer Verzögerung nicht.

Technisch gibt es einen Mechanismus, in dem Post-Operation-Callback eines erfolgreichen Create FltCancelFileOpen aufzurufen und einen Fehlerstatus zu setzen, sodass das Öffnen als fehlgeschlagen gilt. Das ist jedoch keine Funktion, die Änderungen an der Datei zurückrollt. Sie löscht eine neu erzeugte Datei nicht und stellt den Inhalt vor einem Überschreiben nicht wieder her, und der Aufruf hat Einschränkungen, etwa vor der Handle-Erzeugung zu erfolgen.15

6.1 Eine Ausschlusseinstellung ist nicht „den Filter entfernen“

Eine Ausschlusseinstellung verringert, was der von dieser Einstellung betroffene Scan prüft. Es ist keine Einstellung, die den Filter selbst vom Stapel nimmt, und keine, die über EDR, Sicherung oder Verschlüsselung eines anderen Anbieters hinweg greift. Selbst innerhalb derselben Produktfamilie dürfen ein Antivirus-Ausschluss und ein Ausschluss für eine andere Schutzfunktion nicht als dasselbe behandelt werden.14

Ist es nach einem Ausschluss noch langsam, lautet die Antwort daher nicht unbedingt „die Einstellung ist kaputt“. Es bleibt Raum, zu prüfen, worauf die Einstellung zutrifft, die Verwaltungsrichtlinie, einen anderen Filter, das Dateisystem, das Netzwerk und Wartezeiten auf der Anwendungsseite. Umgekehrt lässt sich selbst dann, wenn ein Ausschluss schneller macht, allein aus diesem Ergebnis nicht sagen, es gebe keine anderen Faktoren als den Scan.

Machen Sie einen weiten Ausschluss oder das Ausschalten einer Schutzfunktion nicht zum ersten Schritt einer Untersuchung. Zeichnen Sie zuerst Protokolle und Reproduktionsbedingungen auf, und ist eine Änderung nötig, bestätigen Sie das Risiko mit der Administration und legen Sie dann Umfang, Dauer und Rückgängigmachen fest. Den Umgang mit Fehlalarmen behandelt auch „Wenn die eigene Windows-Anwendung als Virus eingestuft wird“.14

6.2 Dev Drive ist eine bedingte Option, um die Scanauswirkung zu begrenzen

Für einen Ort, der Entwicklungsdateien hält, kommt auch Dev Drive in Betracht. Der Leistungsmodus von Microsoft Defender scannt die betroffenen Dateiöffnungen asynchron, behält den Schutz und begrenzt die Auswirkung auf die Leistung. Microsoft positioniert ihn für die Entwicklung als sicherere Alternative zu Ordnerausschlüssen.1617

Es gibt jedoch Voraussetzungen: Das Volume muss ein vertrauenswürdiges Dev Drive sein, Defender muss als primärer Virenschutz laufen, der Echtzeitschutz muss aktiv sein und so weiter. Auf einen gewöhnlichen NTFS-Ordner zu zeigen erzeugt nicht dasselbe Verhalten, und nicht jedes Antivirusprodukt wechselt zum asynchronen Scan. Prüfen Sie auf einem Dev Drive auch die Filter-Anbindungsrichtlinie und die Kompatibilität mit den benötigten Sicherheits- und Sicherungsprodukten.1716

7. Untersuchen von „nur diese Umgebung ist langsam“

Arbeiten Sie die Untersuchung in dieser Reihenfolge ab: den langsamen Vorgang identifizieren, die Konfiguration des betreffenden Volumes vergleichen, dann die Kandidaten mit zusätzlichen Messungen bestätigen. Weder „jedes Mal langsam“ noch „nur beim ersten Mal oder nur gelegentlich langsam“ ist ein Grund, Filter aus der Kandidatenliste zu streichen.

7.1 Zuerst die Reproduktionsbedingungen aufreihen

Bevor Sie etwas vergleichen, zeichnen Sie Anwendungsversion, was der Vorgang tut, die Eingabedateien, das Ziel, das ausführende Benutzerkonto sowie die Versionen von Betriebssystem und Sicherheitsprodukten auf. Vermeiden Sie Vergleiche, die lokale Dateien mit UNC-Pfaden mischen oder noch nicht geholte Cloud-Dateien mit bereits lokal vorhandenen.

Trennen Sie auch den ersten Lauf von späteren. Unterscheiden sich Cache-Zustand, Sync-Fortschritt oder andere Arbeit, kann derselbe Vorgang unterschiedlich lange dauern. Reproduzieren Sie mehrmals und stellen Sie die Gesamtlaufzeit der Anwendung neben das Fenster, in dem die Ablaufverfolgung erfasst wurde.

7.2 Langsame Vorgänge mit Procmon finden

Starten Sie Procmon als Administrator, halten Sie die Erfassung einmal an und löschen Sie die vorhandenen Ereignisse. Das Ziel einzuengen und nur während der Reproduktion des benötigten Vorgangs aufzuzeichnen macht das Protokoll hinterher leichter lesbar. Zu den Grundoperationen siehe auch „Process-Monitor-Praxisleitfaden“.13

  1. Zeigen Sie Duration über Options > Select Columns….
  2. Geben Sie unter Filter > Filter… (Ctrl+L) den Prozessnamen oder die PID an, die Sie anvisieren, drücken Sie Add und wenden Sie dann an. Führen Kindprozesse oder Dienste die eigentliche I/O aus, nehmen Sie sie in die Untersuchung auf.
  3. Starten Sie die Erfassung, reproduzieren Sie das Symptom und halten Sie an. Betrachten Sie Operation, Path, Result und Duration gemeinsam und engen Sie das Ziel bei Bedarf mit einer Duration-Filterbedingung oder Tools > File Summary ein.

Verlassen Sie sich nicht auf ein Verfahren, das voraussetzt, dass Sie in der Ereignisliste durch Klicken auf die Duration-Kopfzeile sortieren können. Bei einem Problem aus einer großen Zahl kurzer Vorgänge lässt das Extrahieren nur der langen Durationen Kandidaten fallen, prüfen Sie daher auch die Anzahlen. Außerdem erscheint CreateFile nicht nur beim Erzeugen einer neuen Datei, sondern auch beim Öffnen einer bestehenden. Lesen Sie die Details, nicht nur den Operationsnamen.1318

Die Duration hier ist, wie lange der Vorgang aus Sicht dieses Procmon-Ereignisses gedauert hat. Sie ist nicht die Ausführungszeit eines bestimmten Minifilters. Sie kann Wartezeiten im Dateisystem, im Gerät oder im Netzwerk darunter enthalten. Das Addieren der Durationen parallel laufender Vorgänge entspricht nicht unbedingt der Gesamtlaufzeit der Anwendung.

7.3 fltmc-Unterschiede in „Kandidaten“ verwandeln

Erfassen Sie fltmc filters und fltmc instances auf dem schnellen und auf dem langsamen Rechner und vergleichen Sie die Filter, die am betreffenden Ziel angebunden sind. Halten Sie beobachtete Tatsachen und ihre Deutung wie unten getrennt.

Was Sie beobachtet haben Was als Nächstes zu prüfen ist
Ein bestimmter Filter existiert nur auf dem langsamen Rechner Seine Anbindung am betreffenden Volume sowie Version und Richtlinie des Produkts
Die Konfiguration ist gleich, aber nur eine Seite ist langsam Was gescannt wird, Caching, Produkteinstellungen sowie Speicher- oder Netzwerkbedingungen
Das Öffnen eines bestimmten Pfads dauert Der Stapel des Vorgangs, Cloud-Abruf oder Netzwartezeiten und die eigene Diagnose des Produkts
Nur beim ersten Mal oder nur sporadisch langsam Erstprüfung, Dateiänderungen und die Zeiten, zu denen Synchronisierung oder Sicherung läuft

Ein Filtername in einem Stapel ist ein Hinweis, diesen Codepfad zu untersuchen. Aber dass der Name aufgeführt ist, ist kein Beleg, dass der Treiber lange gelaufen ist. Erfassen Sie bei Bedarf CPU-Ausführung und Warteverhalten mit Werkzeugen wie Windows Performance Recorder/Analyzer und vergleichen Sie sie mit den Diagnoseinformationen des Produkts.19

Vermuten Sie Defender, können Sie mit dem offiziellen Leistungsanalysator prüfen, welche Dateien und Prozesse die größte Last auf den Scan legen. Starten Sie die Aufzeichnung aus einer PowerShell-Sitzung mit erhöhten Rechten auf einem unterstützten Rechner, reproduzieren Sie das Symptom in einem getrennten Vorgang und drücken Sie die Eingabetaste zum Anhalten. Das folgende Beispiel erzeugt auch den Ordner für die Aufzeichnung.20

$traceDirectory = Join-Path $env:TEMP 'DefenderPerformance'
New-Item -ItemType Directory -Path $traceDirectory -Force | Out-Null
$tracePath = Join-Path $traceDirectory ('scan-{0}.etl' -f (Get-Date -Format 'yyyyMMdd-HHmmss'))

# Den Zielvorgang während der Aufzeichnung reproduzieren, dann die Eingabetaste drücken, um die Aufzeichnung zu beenden
New-MpPerformanceRecording -RecordTo $tracePath

# Prüfen, welche Dateien die größte Auswirkung auf den Scan haben
Get-MpPerformanceReport -Path $tracePath -TopFiles 10 -TopScansPerFile 5

Was dieser Bericht zeigt, ist wiederum Information über den Defender-Scan. Übernehmen Sie die Pfade oben in der Liste nicht unverändert in die Ausschlussliste; bestätigen Sie, ob sie mit der reproduzierten Langsamkeit zusammenhängen. Das erfasste Protokoll kann Dateinamen, Benutzernamen und Ähnliches enthalten, achten Sie daher auf Speicherort und Weitergabe.

Vergleiche durch Einstellungsänderungen kommen, nachdem Sie die obigen Belege gesammelt haben. fltmc unload in der Produktion zu versuchen oder eine Altitude umzuschreiben, um die Reihenfolge zu ändern, ist kein allgemeines Heilmittel.

8. Die Serie abrunden — eine Karte der sechs Teile

In der Serie haben wir alles von einem API-Aufruf der Anwendung über Namensauflösung, I/O-Anforderungen, Abschlussbenachrichtigung, Caching und das Dateisystem betrachtet. Der hier behandelte Minifilter sitzt an der Stelle, die Anforderungen zum Dateisystem überwacht und steuert.

Die Perspektive, die jeder Teil der Windows-I/O-Serie abdecktBegriffliche Abbildung, die den Gegenstand jedes Teils in Beziehung setzt. Es ist kein einzelner Ausführungspfad und bedeutet nicht, dass jeder API-Aufruf IRP, Datenträger und IOCP durchläuft.wie er aufgerufen wirdStruktur der AnforderungsbehandlungDatei-I/O überwachen und steuernwenn es weiter nach unten gehtarbeitet bei gecachter I/O zusammenpassendes AbschlussbenachrichtigungsmodellEin Dateivorgang der AnwendungTeil 2 - Synchrone und asynchrone I/OTeil 1 - Der I/O-Manager und IRPsTeil 6 - FltMgr und MinifilterTeil 5 - NTFS-InternaTeil 4 - Der Cache ManagerTeil 3 - IOCP und Verarbeitung nach dem Abschluss

Abbildung 5: Begriffliche Abbildung der Beziehung der Serienteile. Nicht alle I/O durchläuft jedes Kästchen, und manche Pfade enden ohne Gerätezugriff oder Unterbrechung. IOCP ist ebenfalls ein Abschlussbenachrichtigungsmechanismus, der mit passenden Handles und Benachrichtigungseinstellungen genutzt wird.

Die Abbildung ist keine einzelne Ausführungsaufzeichnung. Der Pfad unterscheidet sich bei Fast I/O, bei Anforderungen, die der Cache erfüllen kann, und bei Anforderungen, die enden, ohne weiter nach unten gereicht zu werden. Ordnen Sie API-Aufrufe, Dateisystemoperationen, IRPs und physische Festplattenzugriffe nicht eins zu eins zu — das ist der Punkt, auf den Sie achten, wenn Sie die Teile verbinden.2

9. Zusammenfassung — zum Abschluss der Serie

Ein Minifilter nimmt über die von FltMgr bereitgestellten Callbacks an Datei-I/O teil. Im üblichen Hin- und Rückweg laufen die Pre-Callbacks von der höheren Altitude zur niedrigeren und die Post-Callbacks umgekehrt, aber der tatsächliche Pfad ändert sich mit der Registrierung und mit einem Abschluss unterwegs.

Kennen Sie diesen Mechanismus, können Sie erklären, warum Dateivorgänge in Procmon erscheinen und warum ein Sicherheitsprodukt die Dauer eines Dateizugriffs beeinflussen kann. Zugleich werden der überwachbare Bereich und das, was diese Beobachtung allein nicht sagt, sichtbar.

Wenn „nur diese Umgebung langsam ist“, engen Sie den Vorgang in Procmon ein, bestätigen Sie mit fltmc instances, was angebunden ist, und stützen Sie das mit den Diagnosefunktionen des Produkts und einem Vergleich unter gleichen Bedingungen. Wählen Sie eine Ausschlusseinstellung oder Dev Drive danach, sobald Sie die Bedingungen, unter denen sie greifen, und ihre Wirkung auf den Schutz geprüft haben. In dieser Reihenfolge können Sie eine Untersuchung voranbringen, ohne den Schutz allein aus Vermutung zu schwächen.

Die in dieser Serie behandelten Strukturen dienen nicht dazu, die Ursache auf eine Komponente festzulegen. Sie sind eine Karte, um zu entscheiden, wo als Nächstes zu messen ist. Getrennt zu denken, was unter einer einzelnen Zeile Anwendungscode geschehen kann, ist der erste Schritt, einen Fehler oder ein Leistungsproblem in etwas zu verwandeln, das sich reproduzieren und erklären lässt.

Verwandte Artikel

Verwandte Beratungsleistungen

Komura Soft LLC untersucht Leistungsprobleme und Fehler in Windows-Fachanwendungen der Art „Dateioperationen sind nur auf dem Kunden-PC langsam“ oder „nach der Einführung eines Sicherheitsprodukts hat sich das Verhalten geändert“. Die Arbeit kann schon in dem Stadium beginnen, in dem unklar ist, ob die Ursache ein Filter, die Anwendung, das Dateisystem oder das Netzwerk ist.

Wenn Sie uns kontaktieren, teilen Sie mit, was Sie wissen: welcher Vorgang langsam wird, in welchen Umgebungen er auftritt und in welchen nicht, ob Sie lokale Datenträger, eine Freigabe oder die Cloud nutzen, und welche Sicherheitsprodukte eingeführt sind. Enthalten Protokolle oder Dateien vertrauliche Informationen, sprechen Sie zuerst über die Art der Weitergabe.

  1. Microsoft Learn, About file system filter drivers. Rolle und Einsatz von Dateisystemfiltern. ↩ ↩2

  2. Microsoft Learn, Filter Manager Concepts. FltMgr, Instanzen, Pre-/Post-Reihenfolge, Zieloperationen und das Zusammenleben mit Legacy-Filtern. ↩ ↩2 ↩3 ↩4 ↩5

  3. Microsoft Learn, Advantages of the Filter Manager Model. Vorteile des Minifilter-Modells und der Mechanismus, Operationen auszuwählen. ↩ ↩2 ↩3

  4. Microsoft Learn, PFLT_PRE_OPERATION_CALLBACK. Rückgabewerte des Pre-Operation-Callbacks und die Einschränkungen je Wert. ↩ ↩2

  5. Microsoft Learn, Processing I/O Operations. Anhalten und Fortsetzen von I/O sowie Rücksicht auf den Ausführungskontext. ↩ ↩2

  6. Microsoft Learn, FAST_IO_DISPATCH structure. Der Fast-I/O-Verarbeitungspfad einschließlich des Legacy-Modells. ↩

  7. Microsoft Learn, Load order groups and altitudes for minifilter drivers. Relative Lage, Instanzdefinitionen, Nummernbereiche nach Zweck und Dezimal-Altitudes. ↩ ↩2 ↩3

  8. Microsoft Learn, Request a Filter Altitude Identifier. Antragsverfahren, anzugebende Angaben und erwartete Bearbeitungszeit. ↩

  9. Microsoft Learn, Blocking legacy file system filter drivers. Die Ausgabespalten von fltmc und die Legacy-Kennzeichnung in der Spalte Frame. ↩

  10. Microsoft Learn, Tools for minifilter development and testing. Auflisten von Filtern, Instanzen und Volumes mit fltmc und anderen Werkzeugen. ↩ ↩2

  11. Microsoft Learn, Allocated altitudes. Die veröffentlichte Liste von Filternamen und zugewiesenen Altitudes. ↩ ↩2

  12. Microsoft Learn, Cloud Files API. Grundlage der Cloud-Synchronisierung mit Platzhaltern. ↩

  13. Microsoft Learn, Process Monitor - Sysinternals. Überwachung von Dateisystem, Registrierung sowie Prozessen und Threads, plus Filterung und Stapelanzeige. ↩ ↩2 ↩3

  14. Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. Was Ausschlüsse abdecken und ihre Wirkung auf den Schutz. ↩ ↩2 ↩3

  15. Microsoft Learn, FltCancelFileOpen. Abbrechen eines Öffnens in post-create und die Einschränkung, dass Dateiänderungen nicht zurückgerollt werden. ↩

  16. Microsoft Learn, Set up a Dev Drive on Windows 11. Einsatz von Dev Drive, die Vertrauenseinstellung und Hinweise zu Filteranbindung und Sicherheit. ↩ ↩2

  17. Microsoft Learn, Protect Dev Drive using performance mode. Vertrauenswürdiges Dev Drive, die Bedingungen, unter denen Defender arbeitet, und asynchrones Scannen. ↩ ↩2

  18. Microsoft Learn, CreateFileW. Die Rolle einer API, die sowohl das Öffnen einer bestehenden Datei als auch das Erzeugen einer neuen abdeckt. ↩

  19. Microsoft Learn, Windows Performance Recorder. Aufzeichnen von System- und Anwendungsverhalten auf ETW-Basis. ↩

  20. Microsoft Learn, Performance analyzer for Microsoft Defender Antivirus. Aufzeichnen von Scans und Analysieren der Last je Datei und je Prozess. ↩

Aktuelle Artikel mit denselben Schlagwörtern führen zu verwandten Themen weiter.

Diese Seiten ordnen den Artikel in einen größeren Leistungs- und Entscheidungskontext ein.

Dieser Artikel ist direkt mit den folgenden Leistungen verbunden.

Häufige Fragen

Fragen, die in Beratungen zu diesem Artikelthema häufig gestellt werden.

Was ist der Unterschied zwischen einem Dateisystem-Filtertreiber und einem Minifilter?
Ein Dateisystem-Filtertreiber ist der Oberbegriff für einen Treiber, der Datei-I/O überwacht oder steuert. Ein Minifilter ist eine Implementierungsart: Er registriert Callbacks je Operation beim Windows Filter Manager (FltMgr). Der Hauptunterschied zum Legacy-Modell ist, dass FltMgr die gemeinsame Arbeit wie das Anbinden an den Stapel und die Abschlussbehandlung übernimmt. Die relative Lage der Minifilter zueinander bestimmt die Altitude. Das Entladen während des laufenden Systems ist nur möglich, wenn der Treiber das unterstützt und das Abnehmen erlaubt.
Scannt Antivirensoftware jeden Dateizugriff jedes Mal?
Nicht unbedingt. Ein Minifilter wird nach Bedingungen wie den angebundenen Volumes und den registrierten Operationen aufgerufen. Was er dann scannt, hängt von der Produktrichtlinie, vom Änderungszustand der Datei, von Ausschlusseinstellungen und Ähnlichem ab. Einen Mechanismus zu haben, der Datei-I/O überwacht, ist nicht dasselbe, wie bei jedem Zugriff die ganze Datei erneut zu scannen.
Ist eine Antivirus-Ausschlusseinstellung ein Weg, den Filtertreiber zu entfernen?
In der Regel nicht. Es ist eine Einstellung, die für das ausgeschlossene Ziel den Scan auslässt, den die Einstellung betrifft. Sie deaktiviert auch nicht EDR, Sicherung oder Verschlüsselung eines anderen Anbieters auf einmal. Was ein Ausschluss abdeckt, unterscheidet sich nach Produkt und Schutzfunktion, und ein weiter Ordnerausschluss schwächt den Schutz. In einer Leistungsuntersuchung zuerst messen und Konfigurationsänderungen nur im kleinsten mit der Administration vereinbarten Umfang vornehmen.
Kann Process Monitor allein einen langsamen Filtertreiber identifizieren?
Procmon hilft, langsame Vorgänge und die beteiligten Pfade zu finden, aber Duration ist nicht die Verarbeitungszeit eines einzelnen Minifilters. Allein dass ein Treibername in einem Stapel erscheint, reicht ebenfalls nicht, um die Ursache festzulegen. Bestätigen Sie die Anbindung an das betreffende Volume mit fltmc und stützen Sie das mit den Diagnosefunktionen des Produkts, zusätzlichem Tracing und Vergleichen unter gleichen Bedingungen. Die Aufzeichnung von Procmon ist auch keine lückenlose Darstellung jedes Zugriffs auf die physische Festplatte.
Hilft es bei langsamen Builds immer, sie auf ein Dev Drive zu legen?
Nicht immer. Der Leistungsmodus von Microsoft Defender setzt Voraussetzungen voraus, etwa ein vertrauenswürdiges Dev Drive, Defender als primären Virenschutz und aktivierten Echtzeitschutz. Er macht den Scan der betroffenen Dateiöffnungen asynchron, um die Auswirkung zu begrenzen, löst aber weder das Verhalten anderer Produkte noch andere Engpässe wie CPU oder Netzwerk.

Autorenprofil

Profilseite des Artikelautors.

Go Komura

Geschäftsführer von KomuraSoft LLC

Spezialisiert auf Windows-Softwareentwicklung, technische Beratung und Fehleranalyse, insbesondere bei bestehenden Systemen und schwer reproduzierbaren Störungen.

Zurück zum Blog