Historique des révisions (première version, publiée le 29 Jul 2026)
- Première publication
Citer cet article(DOI (archive enregistrée): 10.5281/zenodo.22175390)
Les DOI ci-dessous renvoient à des versions déjà archivées et peuvent différer du texte actuel. Pour citer le texte actuel, utilisez l’URL de cette page.
Go Komura (2026). Les profondeurs de l'E/S Windows (partie 6, dernière partie) — Fonctionnement des minifilters et enquête de latence avec Procmon. KomuraSoft LLC. https://comcomponent.com/fr/blog/windows-minifilter-filter-drivers/
- DOI (archive enregistrée)
- 10.5281/zenodo.22175390
- DOI (dernière version enregistrée)
- 10.5281/zenodo.22175391
Sur un PC en particulier, simplement ouvrir un fichier prend du temps. Sur les machines où un antivirus est installé, les builds et les copies de nombreux fichiers ralentissent. Par ailleurs, lorsque vous lancez Process Monitor, vous voyez un enregistrement d’opérations sur fichiers alors que vous n’avez pas modifié votre propre application.
La clé pour comprendre les deux, c’est le pilote filtre de système de fichiers, qui surveille et contrôle les E/S fichiers en cours de route. Windows prévoit un point d’extension précisément pour cela.1
Dans ce dernier volet de la série « Les profondeurs de l’E/S Windows », nous abordons le minifilter, le modèle d’implémentation standard aujourd’hui. La première moitié pose le fonctionnement ; la seconde relie cela à une procédure pour, avec fltmc et Procmon, trouver dans quel environnement et quelle opération c’est lent. Même pour un développeur d’applications qui n’écrit jamais de pilote, cela devrait servir de carte pour isoler un problème de performances.
1. D’abord la conclusion
Un minifilter est un pilote qui enregistre auprès du Filter Manager (FltMgr) fourni avec Windows « quelles opérations traiter, et à quel stade ». FltMgr appelle les rappels selon le contenu enregistré et selon une position relative appelée altitude. Du point de vue de l’application, c’est la même opération sur fichier, mais le traitement des filtres au milieu peut influer sur le résultat et le temps nécessaire.2
Cela dit, « il y a un filtre » et « ce filtre est la cause de la lenteur » sont deux choses distinctes. fltmc est un outil pour vérifier la configuration, Procmon un outil pour observer les opérations. Ni l’un ni l’autre n’est un outil qui tranche la cause d’après une liste ou un seul chiffre.
Dans cet article, on avance en s’appuyant sur les distinctions suivantes.
| Ce que l’on veut vérifier | Où regarder | Ce que cela ne dit pas à soi seul |
|---|---|---|
| Quels filtres sont chargés | fltmc filters |
Si ce filtre a traité l’opération en cause |
| Ce qui est attaché au volume cible | fltmc instances |
Le temps consommé par chaque filtre |
| Quelles opérations sur fichiers prennent du temps | Les événements Procmon et Duration | Le composant qui a produit tout le retard |
| Sur quoi le scan Defender consomme du temps | L’analyseur de performances de Defender | Les problèmes de performances d’autres produits ou de l’application dans son ensemble |
Dans le diagramme, un trait continu marque une relation qui vaut toujours et un trait pointillé une relation conditionnelle (les conditions figurent dans l’explication de chaque relation sur la page de détail). La liste complète des relations (34 au total, avec preuve et niveau de certitude) et les définitions des concepts principaux sont rassemblées sur la page de détail de la carte des connaissances (en japonais). Données : JSON-LD / Turtle
2. L’histoire de ceux qui s’intercalent — des filtres hérités à FltMgr
Un pilote filtre de système de fichiers est un pilote qui surveille et contrôle les demandes adressées au système de fichiers ou à d’autres filtres. On s’en sert pour l’antivirus, le chiffrement, la sauvegarde, etc. ; il ne se limite pas à enregistrer les demandes, il peut aussi modifier des paramètres ou refuser un accès. « S’intercaler » ici ne désigne pas une interruption matérielle du CPU, mais s’insérer dans le chemin de traitement des E/S.1
Dans le modèle hérité, le filtre lui-même attache son objet périphérique à la pile de périphériques, transmet les demandes vers le bas et traite la completion. L’ordre d’attachement, le détachement sûr et la coexistence avec d’autres filtres font partie du périmètre que l’implémentation doit gérer.
Dans le modèle minifilter, FltMgr prend en charge le travail commun tel que l’attachement à la pile, et chaque pilote enregistre les rappels des opérations dont il a besoin. Un minifilter reste un pilote en mode noyau ; l’objet pilote ne disparaît pas. Ce qui change, c’est le mécanisme par lequel il participe à la pile du système de fichiers.3
flowchart TB
accTitle: Modèle hérité et modèle minifilter
accDescr: Compare le modèle hérité, où le filtre s'attache lui-même à la pile, et le modèle minifilter, où le traitement s'enregistre auprès de FltMgr.
ROOT["Façon de participer aux E/S fichiers"]
ROOT -->|"modèle hérité"| LEG["Le filtre s'attache lui-même"]
ROOT -->|"modèle minifilter"| MINI["Enregistrer le traitement auprès de FltMgr"]
LEG --> OWN["Implémenter l'attachement et la completion"]
MINI --> SHARED["FltMgr prend en charge le travail commun"]
Figure 1 : Comparaison entre le modèle où le filtre s’attache lui-même à la pile et celui où le traitement s’enregistre auprès de FltMgr.
La figure montre une configuration où FltMgr s’attache à la pile à la place du minifilter. En pratique, pour coexister avec des filtres hérités, FltMgr peut aussi s’attacher à plusieurs positions sous forme de plusieurs frames. La coexistence a des contraintes de placement, et passer au minifilter ne résout pas à lui seul tous les problèmes de compatibilité.2
FltMgr réduit l’instabilité de position liée à l’ordre de chargement, et aide aussi au déchargement en cours de fonctionnement. Cela dit, on ne peut détacher que les pilotes qui implémentent le rappel correspondant et autorisent le déchargement. Ce n’est pas une garantie que l’on peut retirer n’importe quel filtre pendant une enquête.3
3. Le fonctionnement des minifilters — rappels pre/post
Un minifilter s’enregistre pour traiter, par exemple, les opérations d’ouverture et de création correspondant à IRP_MJ_CREATE, ou les écritures correspondant à IRP_MJ_WRITE. Le rappel pre est le traitement avant de transmettre vers le bas, le rappel post celui du stade où le résultat revient du bas. On peut enregistrer les deux, ou seulement le côté nécessaire.2
La figure suivante suppose que A et B traitent tous deux la même opération, transmettent la demande vers le bas en pre et demandent l’appel de post.
sequenceDiagram
accTitle: Ordre des rappels lorsqu'on transmet vers le bas et que l'on reçoit la completion
accDescr: Lorsque A et B enregistrent tous deux l'opération cible, transmettent vers le bas et demandent post, pre est appelé de l'altitude haute vers le bas, post dans l'ordre inverse.
participant FM as FltMgr
participant A as Filtre A (haut)
participant B as Filtre B (bas)
participant FS as Système de fichiers
FM->>A: pre
FM->>B: pre
FM->>FS: Transmettre vers le bas
FS-->>FM: Résultat du traitement
FM-->>B: post
FM-->>A: post
Figure 2 : Dans un aller-retour habituel, pre va de l’altitude haute vers la basse, post dans l’ordre inverse. Cet aller-retour ne se produit pas pour toutes les demandes.
La valeur de retour de pre décide de la suite. Les principales se résument ainsi.45
| Valeur de retour pre | Signification |
|---|---|
FLT_PREOP_SUCCESS_NO_CALLBACK |
Avancer vers le bas, sans demander son propre post |
FLT_PREOP_SUCCESS_WITH_CALLBACK |
Avancer vers le bas, et demander aussi son propre post à la completion |
FLT_PREOP_COMPLETE |
Terminer avec le résultat que l’on a indiqué. Un refus en est un exemple |
FLT_PREOP_PENDING |
Mettre en attente l’opération IRP correspondante, puis reprendre ou terminer plus tard |
Si un filtre termine la demande en pre, la demande n’avance pas vers les filtres plus bas ni vers le système de fichiers. Le post du filtre qui a renvoyé FLT_PREOP_COMPLETE n’est pas appelé non plus ; la completion revient vers le côté supérieur qui avait déjà reçu la demande et demandé post. Il est donc important de ne pas penser « c’est enregistré, donc pre et post sont forcément tous les deux appelés ».4
De plus, la mise en attente n’est pas un simple ajout de temps d’attente. Le pilote qui a mis en attente a la responsabilité de reprendre et de terminer la demande correctement. L’implémentation traite aussi des contraintes de type d’opération, d’IRQL, de durée de vie des tampons, d’annulation, etc. Le tableau de cet article est une carte du traitement, pas une procédure d’implémentation telle quelle.5
3.1 Le fast I/O est aussi concerné, mais cela ne signifie pas que « toutes les E/S sont visibles »
FltMgr ne traite pas seulement les E/S fondées sur des IRP : le fast I/O et les opérations de rappel des filtres de système de fichiers (FSFilter) en font aussi partie. Comprendre « ce n’est pas un chemin IRP, donc un minifilter ne le voit pas » est une erreur. Inversement, comprendre que tous les accès deviennent forcément un IRP et empruntent la même suite de rappels n’est pas exact non plus.2
Le périmètre observable change selon le volume attaché, les opérations enregistrées, les conditions d’exclusion à l’enregistrement, et selon qu’une demande se termine plus haut. Les accès mémoire individuels à un fichier mappé en mémoire ne s’enregistrent pas non plus, à chaque fois, comme un événement d’E/S fichier. Les filtres hérités ont aussi un mécanisme pour le fast I/O ; la prise en charge du fast I/O n’est pas une fonction propre aux seuls minifilters.36
4. L’altitude — « l’élévation » qui décide de l’ordre
Si plusieurs filtres interviennent sur la même opération, il faut décider dans quel ordre les traiter. C’est l’altitude qui indique cette position relative. Plus le nombre est grand, plus on est loin du système de fichiers ; plus il est petit, plus on est près. Ce n’est pas la priorité d’un thread, ni un chiffre qui exprimerait les performances ou l’importance du produit.7
Le réglage s’écrit dans la définition d’instance du pilote ; ce qui est réellement attaché à un volume donné devient une instance. La même définition s’applique à plusieurs volumes, donc on n’émet pas une altitude distincte par volume. Un même pilote peut aussi porter plusieurs définitions, mais l’attribution de plusieurs altitudes n’est pas un usage courant.7
Les groupes d’ordre de chargement et les plages de numéros par usage sont fixés comme suit.
flowchart TB
accTitle: Plages d'altitude des minifilters par usage
accDescr: Plus le nombre est grand, plus la position relative est loin du système de fichiers. La figure est un extrait de certains groupes et ne couvre pas du plus haut au plus bas.
TOP["Côté des grands nombres"] --> 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["vers les groupes d'usage plus bas"]
Figure 3 : Extrait des plages d’altitude par usage. En réalité il existe aussi des plages au-dessus d’Activity Monitor, et un filtre de surveillance n’est pas toujours au sommet de toute la pile.
La première altitude se demande à Microsoft. S’il y a déjà une valeur entière attribuée dans le même groupe d’ordre de chargement, il existe aussi un mécanisme pour fabriquer une altitude avec une partie décimale à partir de cette valeur et en informer Microsoft. Cela ne signifie pas qu’un développeur sans valeur entière existante peut librement utiliser n’importe quel numéro.7
En développement, suivez Request a Filter Altitude Identifier et envoyez à fsfcomm@microsoft.com un e-mail texte ASCII dont l’objet est Filter altitude request. Indiquez le nom de l’entreprise, un contact d’entreprise à long terme, le nom et l’URL du produit, une description, le nom de fichier du pilote, le type de filtre, le type de démarrage, le groupe et le numéro souhaités, etc. Le guide officiel indique de prévoir 30 jours ouvrés de traitement, et le numéro n’est pas forcément celui demandé. C’est un point à vérifier dès la planification du développement et de la distribution.8
5. Présentation des résidents — votre PC vu par fltmc
Une fois le mécanisme compris, vérifiez la configuration réelle. Ouvrez une invite de commandes en tant qu’administrateur et exécutez les commandes de lecture suivantes.910
:: Liste des filtres de système de fichiers chargés
fltmc filters
:: État d'attachement des filtres et des volumes
fltmc instances
:: Liste des volumes
fltmc volumes
fltmc filters est la même liste que fltmc sans argument. Ce qui suit est un exemple explicatif de la lecture des colonnes, pas un résultat de mesure sur une machine cette fois. Les altitudes utilisent des valeurs d’attribution publiées ; la composition des lignes et le nombre d’instances sont illustratifs.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
| Colonne | Lecture |
|---|---|
| Filter Name | Nom du filtre. Il ne coïncide pas forcément avec le nom du produit |
| Num Instances | Nombre d’instances attachées. Il ne coïncide pas toujours avec un nombre de volumes distincts |
| Altitude | Position relative par rapport aux autres filtres. Vérifier aussi au niveau de l’instance |
| Frame | Numéro de frame de FltMgr. <Legacy> indique un filtre hérité |
Distinguez le fait qu’un nom figure dans filters et le fait qu’il soit attaché au volume où se trouve le fichier en cause. Pour comparer des configurations, le point est d’aller jusqu’à instances. Confirmer l’attachement ne dit pas encore quels rappels sont enregistrés pour cette opération, ni quel traitement a réellement été fait.10
5.1 Filtres souvent rencontrés
WdFilter est le filtre de Microsoft Defender ; l’attribution est 328010 dans la bande Anti-Virus. cldflt est le filtre de fichiers cloud qui soutient l’API Cloud Files, avec 409500 attribué. Dans Fichiers à la demande de OneDrive, un espace réservé local et le fournisseur de synchronisation coopèrent pour obtenir les données nécessaires. Cela ne signifie pas qu’ouvrir un fichier télécharge forcément l’ensemble à chaque fois.1112
La surveillance du système de fichiers de Procmon utilise aussi un minifilter. En comparant fltmc filters avant et après le lancement, on peut, selon l’environnement, confirmer un pilote dont le nom commence par PROCMON. Ne considérez pas le numéro de suffixe ni le moment du chargement et du déchargement comme fixes ; vérifiez l’état sous la main.
Cela dit, la surveillance du registre, des processus et des threads par Procmon n’est pas entièrement réalisée par un minifilter de système de fichiers. De plus, une ligne de Procmon ne signifie pas un accès disque physique. Observer une opération sur fichier et observer le fonctionnement du stockage sont des couches distinctes.13
6. Où l’antivirus consomme-t-il du temps ?
Si la configuration attend le résultat d’un scan au milieu d’une opération sur fichier, ce temps d’attente entre dans le temps que met l’application à terminer l’opération. Dans un build qui crée et met à jour un grand nombre de petits fichiers, les contrôles un par un peuvent s’accumuler. Cela dit, ce n’est pas fixé que chaque accès relit le fichier entier, et les conditions et le moment du scan varient selon le produit et les réglages.14
Voici un schéma conceptuel du cas où l’inspection après ouverture se fait avant de renvoyer le résultat à l’application. Ce n’est pas une figure qui garantit l’implémentation interne d’un produit précis, ni l’ordre de traitement de tous les fichiers.
sequenceDiagram
accTitle: Exemple de configuration qui attend le résultat du scan pour terminer l'ouverture
accDescr: Illustre une configuration produit qui inspecte en post-create. Ce n'est pas le schéma d'implémentation de tous les produits, et ce n'est pas un scan à chaque fois.
participant APP as Application
participant AV as Minifilter AV
participant FS as Système de fichiers
APP->>AV: Ouvrir le fichier
AV->>FS: Vérifier les conditions et transmettre vers le bas
FS-->>AV: Ouverture établie
Note over AV: Dans cet exemple, on attend le résultat de l'inspection en post-create
alt Autorisé par l'inspection
AV-->>APP: Résultat de succès
else Refus nécessaire
Note over AV: Annuler l'ouverture selon les contraintes
Note over AV: Ne pas annuler les changements de création ou d'écrasement
AV-->>APP: Résultat d'échec
end
Figure 4 : Exemple de configuration qui attend le résultat de l’inspection en post-create. Les conditions et le moment réels de l’inspection varient selon le produit ; cela ne suffit pas à identifier la cause d’un retard.
Techniquement, il existe un mécanisme qui, dans le rappel post d’un create réussi, appelle FltCancelFileOpen, fixe un statut d’échec et traite l’ouverture comme un échec. Cela dit, ce n’est pas une fonction qui annule une modification de fichier. Elle ne supprime pas un fichier nouvellement créé ni ne restaure le contenu d’avant un écrasement, et l’appel a des contraintes telles que « avant la création du handle ».15
6.1 Une exclusion n’est pas « le retrait du filtre »
Une exclusion réduit la cible du scan auquel ce réglage s’applique. Ce n’est pas un réglage qui retire le filtre lui-même de la pile, ni un réglage qui agit en commun sur l’EDR, la sauvegarde, le chiffrement, etc. d’un autre éditeur. Même au sein d’une même famille de produits, il ne faut pas identifier l’exclusion antivirus et l’exclusion d’une autre fonction de protection.14
Donc, si c’est encore lent après une exclusion, ce n’est pas forcément que « le réglage est cassé ». Il reste à vérifier la cible d’application, la stratégie de gestion, un autre filtre, le système de fichiers, le réseau, l’attente côté application, etc. Inversement, même si une exclusion accélère, ce seul résultat ne permet pas de dire qu’il n’y a pas de facteur autre que le scan.
On ne fait pas d’une exclusion large ou de l’arrêt d’une fonction de protection la première étape d’enquête. Enregistrez d’abord les journaux et les conditions de reproduction ; si un changement est nécessaire, convenez du risque avec l’administrateur, puis fixez le périmètre, la durée et la procédure de remise en place. Le traitement des faux positifs est aussi abordé dans « Quand votre application Windows maison est signalée comme un virus ».14
6.2 Dev Drive est une option conditionnelle pour limiter l’impact du scan
Pour un emplacement de fichiers de développement, Dev Drive entre aussi en considération. Le mode performance de Microsoft Defender scanne de façon asynchrone les ouvertures de fichiers concernées, un mécanisme qui limite l’impact sur les performances tout en conservant la protection. Microsoft le positionne comme une alternative plus sûre à l’exclusion de dossiers à usage de développement.1617
Cela dit, les prérequis incluent un Dev Drive de confiance, Defender fonctionnant comme antivirus principal, et la protection en temps réel activée. Ce n’est pas le même comportement dès que l’on désigne un dossier NTFS ordinaire, et tous les produits antivirus ne basculent pas vers un scan asynchrone. Sur un Dev Drive, vérifiez aussi la stratégie d’attachement des filtres, et confirmez la compatibilité avec les produits de sécurité et de sauvegarde nécessaires.1716
7. Enquêter sur « ça ne rame que dans cet environnement »
Dans l’enquête, avancez dans l’ordre identifier l’opération lente → comparer la configuration du volume cible → confirmer les candidats par des mesures supplémentaires. Qu’il soit toujours lent, lent seulement la première fois, ou seulement par moments, ce n’est pas une raison d’écarter les filtres des candidats.
7.1 D’abord aligner les conditions de reproduction
Avant de comparer, enregistrez la version de l’application, le contenu de l’opération, les fichiers d’entrée, la destination, l’utilisateur d’exécution, les versions de l’OS et du produit de sécurité. Ne mélangez pas, dans la comparaison, fichiers locaux et chemins UNC, ni fichiers cloud non encore obtenus et fichiers déjà présents en local.
Séparez aussi la première fois et les suivantes. Si l’état du cache, l’avancement de la synchronisation ou la présence d’autres traitements diffèrent, le temps nécessaire peut changer pour la même opération. Reproduisez plusieurs fois, et faites correspondre le temps écoulé de l’application dans son ensemble et la plage horaire où la trace a été prise.
7.2 Trouver les opérations lentes avec Procmon
Lancez Procmon en tant qu’administrateur, arrêtez d’abord la capture et effacez les événements existants. Cibler, n’enregistrer que pendant la reproduction de l’opération nécessaire, puis arrêter, rend la relecture plus facile. Les opérations de base sont aussi décrites dans « Guide pratique de Process Monitor ».13
- Affichez Duration via Options > Select Columns….
- Dans Filter > Filter… (Ctrl+L), indiquez le nom de processus ou le PID cible, appuyez sur Add, puis appliquez. Si un processus enfant ou un service effectue réellement les E/S, incluez-les aussi dans l’enquête.
- Démarrez la capture, reproduisez le symptôme, puis arrêtez. Vérifiez ensemble Operation, Path, Result, Duration et, au besoin, affinez avec une condition de filtre sur Duration ou Tools > File Summary.
Ne vous fiez pas à la seule procédure « cliquer l’en-tête Duration de la liste d’événements pour trier ». Dans un problème où de nombreuses opérations courtes se produisent, extraire seulement les Duration longues fait perdre des candidats ; vérifiez aussi le nombre. De plus, CreateFile apparaît aussi pour l’ouverture d’un fichier existant, pas seulement pour une création. Lisez le détail, pas seulement le nom de l’opération.1318
La Duration ici est le temps de l’opération telle que Procmon l’a observée comme événement. Ce n’est pas le temps d’exécution d’un minifilter précis. L’attente du système de fichiers, du périphérique, du réseau, etc. plus bas peut y entrer. Additionner les Duration d’opérations concurrentes ne coïncide pas forcément avec le temps écoulé de l’application dans son ensemble.
7.3 Transformer l’écart fltmc en « candidats »
Sur l’environnement rapide et l’environnement lent, prenez fltmc filters et fltmc instances, et comparez les filtres attachés à la destination en cause. Distinguez, comme ci-dessous, le fait observé et son interprétation.
| Ce que l’on a pu observer | Ce qu’il faut ensuite confirmer |
|---|---|
| Un filtre précis n’existe que dans l’environnement lent | L’attachement au volume cible, la version et la stratégie du produit |
| Même configuration, mais un seul côté est lent | Cible du scan, cache, réglages produit, conditions de stockage ou de réseau |
| L’ouverture d’un chemin précis prend du temps | La pile de l’opération, l’attente d’obtention cloud ou réseau, le diagnostic côté produit |
| Lent seulement la première fois, ou de façon sporadique | Inspection initiale, modification du fichier, horaires de synchronisation ou de sauvegarde |
Le fait qu’un nom de filtre apparaisse dans la pile est un indice pour examiner ce chemin de traitement. Mais le seul fait que le nom figure n’est pas la preuve que ce pilote a fonctionné longtemps. Au besoin, prenez aussi l’exécution CPU et l’attente avec Windows Performance Recorder/Analyzer, et recoupez avec les informations de diagnostic du produit.19
Si l’on soupçonne Defender, l’analyseur de performances officiel permet de confirmer les fichiers et processus dont la charge de scan est élevée. Sur un PowerShell administrateur d’un environnement pris en charge, démarrez l’enregistrement, reproduisez le symptôme par une autre opération, puis arrêtez avec Entrée. Voici un exemple qui crée aussi le dossier de destination.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'))
# Reproduire l'opération cible pendant l'enregistrement, puis arrêter l'enregistrement avec Entrée
New-MpPerformanceRecording -RecordTo $tracePath
# Vérifier les fichiers dont l'impact sur le scan est élevé
Get-MpPerformanceReport -Path $tracePath -TopFiles 10 -TopScansPerFile 5
Ce que ce rapport montre, ce sont aussi des informations sur le scan de Defender. Ne transférez pas tels quels les chemins en tête vers la liste d’exclusion ; confirmez d’abord le lien avec la lenteur au moment de la reproduction. Les journaux collectés peuvent contenir des noms de fichiers ou d’utilisateurs : attention aussi à l’emplacement de conservation et de partage.
Les comparaisons par changement de réglage se font après avoir rassemblé les preuves ci-dessus. On ne fait pas d’un essai de fltmc unload en production, ni d’une réécriture d’altitude pour changer l’ordre, une mesure générale.
8. Bouquet final de la série — la carte des 6 volets
Dans l’ensemble de la série, nous avons vu, depuis l’appel d’API de l’application, la résolution de noms, la demande d’E/S, la notification de completion, le cache et le système de fichiers. Le minifilter de ce volet se situe à la position qui surveille et contrôle les demandes vers le système de fichiers.
flowchart TB
accTitle: Points de vue traités par chaque volet de la série E/S Windows
accDescr: Schéma conceptuel qui relie les sujets de chaque volet. Ce n'est pas un seul chemin d'exécution, et cela ne signifie pas que tous les appels d'API passent par IRP, disque et IOCP.
APP["Opération fichier de l'application"]
SYNC["Partie 2 : E/S synchrone et asynchrone"]
IOM["Partie 1 : gestionnaire d'E/S et IRP"]
FLT["Partie 6 : FltMgr et minifilters"]
FS["Partie 5 : structure interne de NTFS"]
CACHE["Partie 4 : gestionnaire de cache"]
IOCP["Partie 3 : IOCP et traitement après completion"]
APP -. "méthode d'appel" .-> SYNC
APP -. "structure du traitement des demandes" .-> IOM
IOM -. "surveillance et contrôle des E/S fichiers" .-> FLT
FLT -. "lorsqu'on avance vers le bas" .-> FS
FS -. "coopération en E/S avec cache" .- CACHE
SYNC -. "mécanisme de notification de completion correspondant" .-> IOCP
Figure 5 : Schéma conceptuel des relations entre les volets de la série. Toutes les E/S ne passent pas par toutes les cases, et il existe des chemins qui se terminent sans accès au périphérique ni interruption. L’IOCP est aussi un mécanisme de notification de completion que l’on utilise avec le handle et les réglages de notification correspondants.
La figure n’est pas une trace d’exécution unique. Le chemin change pour le fast I/O, les demandes traitables par le cache, les demandes qui se terminent sans être transmises plus bas, etc. Ne pas faire correspondre un à un l’appel d’API, l’opération du système de fichiers, l’IRP et l’accès disque physique est le point d’attention lorsque l’on relie les volets.2
- Partie 1 : vue d’ensemble du système d’E/S — résolution de noms, objets, IRP et pile de périphériques
- Partie 2 : E/S synchrone et asynchrone — mode du handle, OVERLAPPED, traitement de la completion
- Partie 3 : IOCP et pool de threads .NET — notification de completion et poursuite du traitement
- Partie 4 : gestionnaire de cache — écriture, cache, répercussion vers le stockage
- Partie 5 : structure interne de NTFS — MFT, flux, liens, journal
- Partie 6 : minifilters (cet article) — surveillance et contrôle des E/S fichiers, et enquête de latence dépendante de l’environnement
9. Résumé — pour clore la série
Un minifilter intervient dans les E/S fichiers via les rappels que FltMgr prévoit. Dans un aller-retour habituel, pre va de l’altitude haute vers la basse et post dans l’ordre inverse, mais le chemin réel change selon le contenu enregistré et selon une completion en cours de route.
Connaître ce mécanisme permet d’expliquer pourquoi des opérations sur fichiers apparaissent dans Procmon, et pourquoi un produit de sécurité peut influer sur le temps d’accès aux fichiers. En même temps, on voit aussi le périmètre que l’on peut surveiller, et ce que cette observation seule ne dit pas.
Quand « ça ne rame que dans cet environnement », affiner l’opération avec Procmon, confirmer l’attachement avec fltmc instances, et étayer avec les fonctions de diagnostic du produit et des comparaisons dans des conditions alignées. Les exclusions et Dev Drive se choisissent ensuite, après avoir vérifié les conditions d’application et l’impact sur la protection. Dans cet ordre, on peut avancer l’enquête sans affaiblir la protection sur de seules hypothèses.
La structure traitée dans la série n’est pas là pour figer une cause unique, mais une carte pour juger où mesurer ensuite. Distinguer ce qui peut se passer sous une ligne d’application est le premier pas pour mettre un défaut ou un problème de performances sous une forme que l’on peut reproduire et expliquer.
Articles connexes
- Les profondeurs de l’E/S Windows (partie 1) : vue d’ensemble du système d’E/S
- Les profondeurs de l’E/S Windows (partie 4) : gestionnaire de cache
- Les profondeurs de l’E/S Windows (partie 5) : structure interne de NTFS
- Guide pratique de Process Monitor
- Faux positifs Microsoft Defender et impact sur les performances
- Enquête avec Process Explorer, Handle et VMMap
- Liste de contrôle minimale de sécurité pour le développement d’applications Windows
Domaines de conseil associés
KomuraSoft LLC prend en charge l’enquête sur les problèmes de performances et les dysfonctionnements d’applications métier Windows du type « les opérations sur fichiers ne sont lentes que sur le PC du client » ou « le comportement a changé depuis l’introduction d’un produit de sécurité ». Même au stade où l’on ne sait pas si la cause est un filtre, l’application, le système de fichiers ou le réseau, c’est un sujet d’enquête.
Lors d’une prise de contact, indiquez dans la mesure du possible l’opération qui ralentit, l’environnement où elle se produit et celui où elle ne se produit pas, si l’on utilise le local, un dossier partagé ou le cloud, et le produit de sécurité installé. Pour le partage de journaux ou de fichiers contenant des informations confidentielles, consultez-nous d’abord.
- Développement d’applications Windows
- Investigation de dysfonctionnements et analyse de cause
- Conseil technique
Références
-
Microsoft Learn, About file system filter drivers. Sur le rôle et les usages des filtres de système de fichiers. ↩ ↩2
-
Microsoft Learn, Filter Manager Concepts. Sur FltMgr, les instances, l’ordre pre/post, les opérations cibles, et la coexistence avec les filtres hérités. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Advantages of the Filter Manager Model. Sur les avantages du modèle minifilter et le mécanisme qui choisit les opérations à traiter. ↩ ↩2 ↩3
-
Microsoft Learn, PFLT_PRE_OPERATION_CALLBACK. Sur les valeurs de retour du rappel pre et les contraintes de chacune. ↩ ↩2
-
Microsoft Learn, Processing I/O Operations. Sur la mise en attente et la reprise des E/S, et les précautions de contexte d’exécution. ↩ ↩2
-
Microsoft Learn, FAST_IO_DISPATCH structure. Sur le chemin de traitement du fast I/O, modèle hérité compris. ↩
-
Microsoft Learn, Load order groups and altitudes for minifilter drivers. Sur la position relative, la définition d’instance, les plages de numéros par usage et les altitudes décimales. ↩ ↩2 ↩3
-
Microsoft Learn, Request a Filter Altitude Identifier. Sur la méthode de demande, les éléments nécessaires et le délai de traitement. ↩
-
Microsoft Learn, Blocking legacy file system filter drivers. Sur les colonnes de sortie de fltmc et l’affichage Legacy de la colonne Frame. ↩
-
Microsoft Learn, Tools for minifilter development and testing. Sur l’énumération des filtres, instances et volumes avec fltmc, etc. ↩ ↩2
-
Microsoft Learn, Allocated altitudes. Sur la liste publique des noms de filtres et des altitudes attribuées. ↩ ↩2
-
Microsoft Learn, Cloud Files API. Sur l’infrastructure de synchronisation cloud qui utilise des espaces réservés. ↩
-
Microsoft Learn, Process Monitor - Sysinternals. Sur la surveillance du système de fichiers, du registre, des processus et des threads, les filtres et l’affichage de la pile. ↩ ↩2 ↩3
-
Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. Sur la cible des exclusions et l’impact sur la protection. ↩ ↩2 ↩3
-
Microsoft Learn, FltCancelFileOpen. Sur l’annulation d’une ouverture en post-create et la contrainte de ne pas annuler une modification de fichier. ↩
-
Microsoft Learn, Set up a Dev Drive on Windows 11. Sur l’usage de Dev Drive, le réglage de confiance, l’attachement des filtres et les précautions de sécurité. ↩ ↩2
-
Microsoft Learn, Protect Dev Drive using performance mode. Sur le Dev Drive de confiance, les conditions de fonctionnement de Defender et le scan asynchrone. ↩ ↩2
-
Microsoft Learn, CreateFileW. Sur le rôle de l’API, ouverture d’un fichier existant et création d’un nouveau compris. ↩
-
Microsoft Learn, Windows Performance Recorder. Sur l’enregistrement du fonctionnement du système et des applications fondé sur ETW. ↩
-
Microsoft Learn, Performance analyzer for Microsoft Defender Antivirus. Sur l’enregistrement du scan et l’analyse de la charge par fichier et par processus. ↩
Articles associés
Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.
Les profondeurs de l'E/S Windows (partie 1) — Chaque lecture et écriture devient un IRP : la vue d'ensemble du système d'E/S
Premier volet d'une série qui explique le système d'E/S de Windows en partant de la base. Nous cartographions l'espace de noms de l'Objec...
Les profondeurs de l'E/S Windows (partie 5) — Structure interne de NTFS : comprendre le système de fichiers à travers la MFT
Cinquième partie de la série qui explique la structure interne de NTFS à l'aide de schémas. MFT et enregistrements de fichiers, flux de d...
Les profondeurs de l'E/S Windows (partie 4) — Cache Manager : quand votre WriteFile atteint-il vraiment le disque ?
Quatrième partie de la série qui explique le Cache Manager de Windows à l'aide de schémas. Cache implémenté comme un mappage de fichiers,...
Les profondeurs de l'E/S Windows (partie 2) — E/S synchrone et asynchrone : ce que signifie vraiment OVERLAPPED
Deuxième partie d'une série qui explique en schémas l'E/S synchrone et l'E/S asynchrone (Overlapped I/O) de Windows. Elle structure le se...
Les profondeurs de l'E/S Windows (partie 3) — Les ports d'achèvement d'E/S (IOCP) et le pool de threads .NET : le sous-sol d'async/await
Troisième partie de la série qui explique le port d'achèvement d'E/S (IOCP) à l'aide de schémas. Conception qui unifie la file d'achèveme...
Sujets associés
Ces pages replacent le sujet dans un contexte plus large de services et de décisions.
Thèmes techniques Windows
Portail des sujets sur le développement Windows, l'analyse des incidents et la valorisation des actifs existants.
Services liés à ce sujet
Cet article est directement lié aux services suivants.
Développement d'applications Windows
Applications métier, intégration d'équipements et outils de communication, des besoins au développement.
Questions fréquentes
Questions souvent posées lors d’une consultation sur le sujet de cet article.
- Quelle est la différence entre un pilote filtre de système de fichiers et un minifilter ?
- Un pilote filtre de système de fichiers est le terme générique pour un pilote qui surveille ou contrôle les E/S fichiers. Un minifilter est l'une des façons de l'implémenter : il enregistre auprès du Filter Manager (FltMgr) de Windows des rappels par opération. La principale différence avec le modèle hérité est que FltMgr prend en charge le travail commun, comme l'attachement à la pile et le traitement de la completion. La position relative des minifilters entre eux est décidée par l'altitude. Le déchargement en cours de fonctionnement n'est possible que si ce pilote le prend en charge et autorise son détachement.
- Un antivirus scanne-t-il chaque accès fichier à chaque fois ?
- Pas nécessairement. Un minifilter est appelé selon des conditions telles que les volumes auxquels il est attaché et les opérations qu'il a enregistrées. Ce qu'il scanne ensuite dépend de la stratégie du produit, de l'état de modification du fichier, des exclusions, etc. Disposer d'un mécanisme qui surveille les E/S fichiers n'est pas la même chose que rescanner le fichier entier à chaque accès.
- Une exclusion antivirus est-elle un moyen de retirer le pilote filtre ?
- En général, non. C'est un réglage qui omet, pour la cible exclue, le scan auquel ce réglage s'applique. Il ne désactive pas non plus d'un coup l'EDR, la sauvegarde ou le chiffrement d'un autre éditeur. Le périmètre d'une exclusion diffère selon le produit et la fonction de protection, et une exclusion de dossier trop large affaiblit la protection. Dans une enquête de performances, mesurez d'abord et ne changez les paramètres que dans le plus petit périmètre convenu avec l'administrateur.
- Process Monitor seul permet-il d'identifier un pilote filtre lent ?
- Procmon aide à trouver les opérations lentes et les chemins concernés, mais Duration n'est pas le temps de traitement d'un minifilter individuel. Le seul fait qu'un nom de pilote apparaisse dans une pile ne tranche pas non plus la cause. Confirmez l'attachement au volume concerné avec fltmc, et étayez avec les fonctions de diagnostic du produit, des traces supplémentaires, et des comparaisons dans des conditions alignées. L'enregistrement de Procmon n'est pas non plus un compte rendu exhaustif de tous les accès au disque physique.
- Si les builds sont lents, les déplacer vers un Dev Drive améliore-t-il toujours ?
- Pas toujours. Le mode performance de Microsoft Defender a des prérequis tels qu'un Dev Drive de confiance, Defender comme antivirus principal, et la protection en temps réel activée. Il rend asynchrone le scan des ouvertures de fichiers qu'il couvre pour limiter l'impact, mais ce n'est pas une fonction qui résout le comportement des produits d'autres éditeurs ni d'autres goulets tels que le CPU ou le réseau.
Profil de l’auteur
Page de présentation de l’auteur de l’article.
Go Komura
Représentant de KomuraSoft LLC
Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.