Die Tiefen von Windows I/O (Teil 6, Abschluss) — Wie Minifilter funktionieren und langsame I/O mit Procmon untersuchen
· Aktualisiert am: · Go Komura · 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
flowchart TB
accTitle: Das Legacy-Modell und das Minifilter-Modell
accDescr: Vergleich des Legacy-Modells, in dem der Filter sich selbst an den Stapel bindet, mit dem Minifilter-Modell, in dem Callbacks bei FltMgr registriert werden.
ROOT["Wie man an Datei-I/O teilnimmt"]
ROOT -->|"Legacy-Modell"| LEG["Der Filter bindet sich selbst an"]
ROOT -->|"Minifilter-Modell"| MINI["Callbacks bei FltMgr registrieren"]
LEG --> OWN["Anbindung und Abschluss selbst implementieren"]
MINI --> SHARED["FltMgr ü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.
sequenceDiagram
accTitle: Callback-Reihenfolge, wenn die Anforderung nach unten gereicht wird und der Abschluss zurückkommt
accDescr: Registrieren 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.
participant FM as FltMgr
participant A as Filter A (hoch)
participant B as Filter B (niedrig)
participant FS as Dateisystem
FM->>A: pre
FM->>B: pre
FM->>FS: den Stapel nach unten reichen
FS-->>FM: Ergebnis
FM-->>B: post
FM-->>A: post
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.
flowchart TB
accTitle: Minifilter-Altitude-Bänder nach Zweck
accDescr: Je 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.
TOP["Größere Zahlen"] --> M["Activity Monitor 360000-389999"]
M --> U["Undelete 340000-349999"]
U --> AV["Anti-Virus 320000-329999"]
AV --> R["Replication 300000-309999"]
R --> B["Continuous Backup 280000-289999"]
B --> LOW["Weiter 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.
sequenceDiagram
accTitle: Beispielkonfiguration, die vor dem Abschluss des Öffnens auf das Scanergebnis wartet
accDescr: Veranschaulicht 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.
participant APP as App
participant AV as AV-Minifilter
participant FS as Dateisystem
APP->>AV: eine Datei öffnen
AV->>FS: die Bedingungen prüfen und nach unten reichen
FS-->>AV: Öffnen gelingt
Note over AV: In diesem Beispiel wartet post-create auf das Prüfungsergebnis
alt Von der Prüfung erlaubt
AV-->>APP: Erfolgsergebnis
else Verweigerung nötig
Note over AV: Das Öffnen innerhalb der dokumentierten Grenzen abbrechen
Note over AV: Änderungen durch Erzeugen oder Überschreiben werden nicht zurückgerollt
AV-->>APP: Fehlerergebnis
end
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
- Zeigen Sie Duration über Options > Select Columns….
- 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.
- 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.
flowchart TB
accTitle: Die Perspektive, die jeder Teil der Windows-I/O-Serie abdeckt
accDescr: Begriffliche 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.
APP["Ein Dateivorgang der Anwendung"]
SYNC["Teil 2 - Synchrone und asynchrone I/O"]
IOM["Teil 1 - Der I/O-Manager und IRPs"]
FLT["Teil 6 - FltMgr und Minifilter"]
FS["Teil 5 - NTFS-Interna"]
CACHE["Teil 4 - Der Cache Manager"]
IOCP["Teil 3 - IOCP und Verarbeitung nach dem Abschluss"]
APP -. "wie er aufgerufen wird" .-> SYNC
APP -. "Struktur der Anforderungsbehandlung" .-> IOM
IOM -. "Datei-I/O überwachen und steuern" .-> FLT
FLT -. "wenn es weiter nach unten geht" .-> FS
FS -. "arbeitet bei gecachter I/O zusammen" .- CACHE
SYNC -. "passendes Abschlussbenachrichtigungsmodell" .-> IOCP
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
- Teil 1: Das Gesamtbild des I/O-Systems — Namensauflösung, Objekte, IRPs und der Gerätestapel
- Teil 2: Synchrone und asynchrone I/O — Handle-Modi, OVERLAPPED und der Umgang mit dem Abschluss
- Teil 3: IOCP und der .NET-Threadpool — Abschlussbenachrichtigung und Fortsetzung der Arbeit
- Teil 4: Der Cache Manager — Schreiben, Caching und das Erreichen des Speichers
- Teil 5: NTFS-Interna — MFT, Streams, Links und Journale
- Teil 6: Minifilter (dieser Artikel) — Datei-I/O überwachen und steuern sowie umgebungsabhängige Langsamkeit untersuchen
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
- Die Tiefen von Windows I/O (Teil 1): Das Gesamtbild des I/O-Systems
- Die Tiefen von Windows I/O (Teil 4): Der Cache Manager
- Die Tiefen von Windows I/O (Teil 5): NTFS-Interna
- Process-Monitor-Praxisleitfaden
- Fehlalarme von Microsoft Defender und ihre Leistungsauswirkung
- Untersuchen mit Process Explorer, Handle und VMMap
- Mindest-Sicherheitscheckliste für Windows-Anwendungen
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.
Referenzlinks
-
Microsoft Learn, About file system filter drivers. Rolle und Einsatz von Dateisystemfiltern. ↩ ↩2
-
Microsoft Learn, Filter Manager Concepts. FltMgr, Instanzen, Pre-/Post-Reihenfolge, Zieloperationen und das Zusammenleben mit Legacy-Filtern. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Advantages of the Filter Manager Model. Vorteile des Minifilter-Modells und der Mechanismus, Operationen auszuwählen. ↩ ↩2 ↩3
-
Microsoft Learn, PFLT_PRE_OPERATION_CALLBACK. Rückgabewerte des Pre-Operation-Callbacks und die Einschränkungen je Wert. ↩ ↩2
-
Microsoft Learn, Processing I/O Operations. Anhalten und Fortsetzen von I/O sowie Rücksicht auf den Ausführungskontext. ↩ ↩2
-
Microsoft Learn, FAST_IO_DISPATCH structure. Der Fast-I/O-Verarbeitungspfad einschließlich des Legacy-Modells. ↩
-
Microsoft Learn, Load order groups and altitudes for minifilter drivers. Relative Lage, Instanzdefinitionen, Nummernbereiche nach Zweck und Dezimal-Altitudes. ↩ ↩2 ↩3
-
Microsoft Learn, Request a Filter Altitude Identifier. Antragsverfahren, anzugebende Angaben und erwartete Bearbeitungszeit. ↩
-
Microsoft Learn, Blocking legacy file system filter drivers. Die Ausgabespalten von fltmc und die Legacy-Kennzeichnung in der Spalte Frame. ↩
-
Microsoft Learn, Tools for minifilter development and testing. Auflisten von Filtern, Instanzen und Volumes mit fltmc und anderen Werkzeugen. ↩ ↩2
-
Microsoft Learn, Allocated altitudes. Die veröffentlichte Liste von Filternamen und zugewiesenen Altitudes. ↩ ↩2
-
Microsoft Learn, Cloud Files API. Grundlage der Cloud-Synchronisierung mit Platzhaltern. ↩
-
Microsoft Learn, Process Monitor - Sysinternals. Überwachung von Dateisystem, Registrierung sowie Prozessen und Threads, plus Filterung und Stapelanzeige. ↩ ↩2 ↩3
-
Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. Was Ausschlüsse abdecken und ihre Wirkung auf den Schutz. ↩ ↩2 ↩3
-
Microsoft Learn, FltCancelFileOpen. Abbrechen eines Öffnens in post-create und die Einschränkung, dass Dateiänderungen nicht zurückgerollt werden. ↩
-
Microsoft Learn, Set up a Dev Drive on Windows 11. Einsatz von Dev Drive, die Vertrauenseinstellung und Hinweise zu Filteranbindung und Sicherheit. ↩ ↩2
-
Microsoft Learn, Protect Dev Drive using performance mode. Vertrauenswürdiges Dev Drive, die Bedingungen, unter denen Defender arbeitet, und asynchrones Scannen. ↩ ↩2
-
Microsoft Learn, CreateFileW. Die Rolle einer API, die sowohl das Öffnen einer bestehenden Datei als auch das Erzeugen einer neuen abdeckt. ↩
-
Microsoft Learn, Windows Performance Recorder. Aufzeichnen von System- und Anwendungsverhalten auf ETW-Basis. ↩
-
Microsoft Learn, Performance analyzer for Microsoft Defender Antivirus. Aufzeichnen von Scans und Analysieren der Last je Datei und je Prozess. ↩
Verwandte Artikel
Aktuelle Artikel mit denselben Schlagwörtern führen zu verwandten Themen weiter.
Die Tiefen von Windows I/O (Teil 1) — Jedes Lesen und Schreiben wird zu einem IRP: Das Gesamtbild des I/O-Systems
Teil 1 einer Serie, die das Windows-I/O-System von Grund auf erklärt. Wir stellen den Namensraum des Object Managers, die drei Objektarte...
Die Tiefen von Windows I/O (Teil 4) — Cache-Manager: Wann erreicht Ihr WriteFile den Datenträger?
Teil 4 einer bebilderten Reihe über den Windows-Cache-Manager. Behandelt den als Dateizuordnung umgesetzten Cache, Read-Ahead und verzöge...
Die Tiefen von Windows I/O (Teil 2) — Synchrones und asynchrones I/O: Was OVERLAPPED wirklich bedeutet
Teil 2 der Serie erklärt synchrones und asynchrones I/O (Overlapped I/O) unter Windows anhand von Diagrammen. Behandelt werden FILE_FLAG_...
Die Tiefen von Windows I/O (Teil 5) — NTFS-Interna: Das Dateisystem anhand des MFT verstehen
Teil 5 einer bebilderten Reihe über die NTFS-Interna. Behandelt werden MFT und Dateidatensätze, mehrere Datenströme (Zone.Identifier), Ha...
Die Tiefen von Windows I/O (Teil 3) — I/O-Completion-Ports (IOCP) und der .NET-Threadpool: Der Keller unter async/await
Teil 3 einer bebilderten Reihe über I/O-Completion-Ports (IOCP). Behandelt das Design, das Completion-Warteschlange und Threadanzahl-Steu...
Verwandte Themen
Diese Seiten ordnen den Artikel in einen größeren Leistungs- und Entscheidungskontext ein.
Technische Windows-Themen
Portal zu Windows-Entwicklung, Fehleranalyse und der Nutzung bestehender Assets.
Leistungen zu diesem Thema
Dieser Artikel ist direkt mit den folgenden Leistungen verbunden.
Windows-App-Entwicklung
Geschäftsanwendungen, Geräteintegration und Kommunikationstools von den Anforderungen bis zur Umsetzung.
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.