Les profondeurs de l'E/S Windows (partie 6, dernière partie) — Fonctionnement des minifilters et enquête de latence avec Procmon

· Mis à jour le: · · Windows, Win32, E/S, Minifilter, Noyau, Pilote de périphérique, Sécurité, Investigation de bugs

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

Modèle hérité et modèle minifilterCompare 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.modèle héritémodèle minifilterFaçon de participer aux E/S fichiersLe filtre s'attache lui-mêmeEnregistrer le traitement auprès de FltMgrImplémenter l'attachement et la completionFltMgr 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.

Ordre des rappels lorsqu'on transmet vers le bas et que l'on reçoit la completionLorsque 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.Système de fichiersFiltre B (bas)Filtre A (haut)FltMgrSystème de fichiersFiltre B (bas)Filtre A (haut)FltMgrprepreTransmettre vers le basRésultat du traitementpostpost

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.

Plages d'altitude des minifilters par usagePlus 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.Côté des grands nombresActivity Monitor : 360000-389999Undelete : 340000-349999Anti-Virus : 320000-329999Replication : 300000-309999Continuous Backup : 280000-289999vers 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.

Exemple de configuration qui attend le résultat du scan pour terminer l'ouvertureIllustre 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.Système de fichiersMinifilter AVApplicationSystème de fichiersMinifilter AVApplicationDans cet exemple, on attend le résultat de l'inspection en post-createAnnuler l'ouverture selon les contraintesNe pas annuler les changements de création ou d'écrasementalt[Autorisé par l'inspection][Refus nécessaire]Ouvrir le fichierVérifier les conditions et transmettre vers le basOuverture établieRésultat de succèsRésultat d'échec

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

  1. Affichez Duration via Options > Select Columns….
  2. 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.
  3. 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.

Points de vue traités par chaque volet de la série E/S WindowsSché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.méthode d'appelstructure du traitement des demandessurveillance et contrôle des E/S fichierslorsqu'on avance vers le bascoopération en E/S avec cachemécanisme de notification de completion correspondantOpération fichier de l'applicationPartie 2 : E/S synchrone et asynchronePartie 1 : gestionnaire d'E/S et IRPPartie 6 : FltMgr et minifiltersPartie 5 : structure interne de NTFSPartie 4 : gestionnaire de cachePartie 3 : IOCP et traitement après completion

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

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

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.

Références

  1. Microsoft Learn, About file system filter drivers. Sur le rôle et les usages des filtres de système de fichiers. ↩ ↩2

  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

  3. 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

  4. Microsoft Learn, PFLT_PRE_OPERATION_CALLBACK. Sur les valeurs de retour du rappel pre et les contraintes de chacune. ↩ ↩2

  5. 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

  6. Microsoft Learn, FAST_IO_DISPATCH structure. Sur le chemin de traitement du fast I/O, modèle hérité compris. ↩

  7. 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

  8. Microsoft Learn, Request a Filter Altitude Identifier. Sur la méthode de demande, les éléments nécessaires et le délai de traitement. ↩

  9. Microsoft Learn, Blocking legacy file system filter drivers. Sur les colonnes de sortie de fltmc et l’affichage Legacy de la colonne Frame. ↩

  10. Microsoft Learn, Tools for minifilter development and testing. Sur l’énumération des filtres, instances et volumes avec fltmc, etc. ↩ ↩2

  11. Microsoft Learn, Allocated altitudes. Sur la liste publique des noms de filtres et des altitudes attribuées. ↩ ↩2

  12. Microsoft Learn, Cloud Files API. Sur l’infrastructure de synchronisation cloud qui utilise des espaces réservés. ↩

  13. 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

  14. Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. Sur la cible des exclusions et l’impact sur la protection. ↩ ↩2 ↩3

  15. Microsoft Learn, FltCancelFileOpen. Sur l’annulation d’une ouverture en post-create et la contrainte de ne pas annuler une modification de fichier. ↩

  16. 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

  17. 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

  18. Microsoft Learn, CreateFileW. Sur le rôle de l’API, ouverture d’un fichier existant et création d’un nouveau compris. ↩

  19. Microsoft Learn, Windows Performance Recorder. Sur l’enregistrement du fonctionnement du système et des applications fondé sur ETW. ↩

  20. 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 récents partageant les mêmes étiquettes, pour approfondir des sujets proches.

Ces pages replacent le sujet dans un contexte plus large de services et de décisions.

Cet article est directement lié aux services suivants.

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.

Retour au blog