Partager via


Vérification du filtre du système de fichiers

Validation de l’utilisation

Le vérificateur de filtre valide l’utilisation suivante dans un pilote minifilter :

  • Utilisation correcte des paramètres et du contexte appelant
  • Corriger les valeurs de retour des routines de rappel de préopération et de post-opération
  • Modifications cohérentes et cohérentes des paramètres dans les données de rappel

Filter Manager Object Tracking

Le vérificateur de filtre suit les objets de gestionnaire de filtres suivants :

  • Contextes de filtre (contextes de flux, contextes de fichier, etc.)
  • Structures de données de rappel
  • Éléments de travail mis en file d’attente
  • Structures NameInformation
  • Objets de fichier
  • Filtrer des objets
  • Objets d’instance
  • Objets de volume

Pour les structures comptées de référence, telles que les contextes de filtre et les structures d’informations de nom, le vérificateur de filtre s’insère dans le débogueur lors du déchargement du pilote de filtre si des nombres de références semblent avoir été divulguées. Il imprime des instructions sur la façon dont vous pouvez utiliser l’extension du débogueur !fltkd pour rechercher les structures divulguées.

Violations du vérificateur de filtre

Lorsque le vérificateur de filtre détecte une violation, il imprime un message dans le débogueur décrivant la violation. Pour la plupart des violations, il interrompt également l’exécution et invite l’utilisateur à prendre des mesures. Par exemple :

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

Pour continuer, tapez l’une des quatre commandes d’une lettre :

  • B ou b pour Break : cela se décompose dans le débogueur dans lequel vous pouvez effectuer une investigation plus approfondie.
  • I ou i pour Ignorer : reprend l’exécution. Si cette violation est à nouveau rencontrée, le vérificateur de filtre imprime le message de violation dans le débogueur, arrête l’exécution et affiche l’invite.
  • Z ou z pour Zap : reprend l’exécution. Si cette violation est à nouveau rencontrée, le vérificateur de filtre imprime le message de violation dans le débogueur, mais n’interrompt pas l’exécution.
  • R ou r pour Supprimer : reprend l’exécution. Si cette violation est à nouveau rencontrée, le vérificateur de filtre n’imprime PAS le message de violation et n’arrête pas l’exécution.

Remarque

Lors de l’utilisation du vérificateur de filtre sur un pilote qui a été créé avec des optimisations du compilateur activées, vous pouvez parfois rencontrer une erreur de vérificateur de filtre prétendant constamment que vos références filtrées ont fui vers une ou plusieurs ressources, même si vous ne trouvez pas de cause de fuite dans votre code. Le message commence par du texte similaire à ce qui suit :

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

Vous pouvez également voir un message indiquant que le suivi des objets n’est pas synchronisé, par exemple :

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

La cause la plus courante de cette condition est que le vérificateur de filtre n’a pas pu identifier le véritable appelant d’une API Filter Manager en raison d’une optimisation des appels de fin. Cela peut se produire lorsqu’une routine dans votre pilote appelle une API Filter Manager comme dernière ligne. Par exemple :

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

Il existe deux façons de vérifier que cela s’est produit :

  1. Désactivez l’optimisation de la routine suspecte en #pragma optimize("", off) ... #pragma optimize("", on)l’encapsulant .
  2. Réorganisez votre code afin que l’appel de l’API Filter Manager ne soit pas la dernière chose qui se passe dans votre routine.

Si l’erreur ne se reproduit plus après avoir essayé l’une de ces options, il est probable qu’il s’agit d’un faux positif.

Activation de cette option

Vous pouvez activer la fonctionnalité vérification du filtre du système de fichiers pour un ou plusieurs pilotes à l’aide de la verifier.exe ligne de commande. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote.

Remarque

Avant windows build 25126, il n’est pas pris en charge pour activer la vérification du filtre du système de fichiers sur un ou minifilters en même temps que ntoskrnl est sélectionné pour la vérification. Cela peut entraîner des erreurs de vérificateurs impulsants.

Pour éviter ce problème, n’incluez pas ntoskrnl dans la liste des composants pour vérifier ou mettre à niveau vers une version de Windows après la build 25126.

La méthode recommandée pour démarrer le vérificateur de filtre est avec l’option /standard de verifier.exe, car elle fournit des fonctionnalités supplémentaires utiles telles que le pool spécial et le suivi de pool :

verifier.exe /standard /driver MyFilter.sys

La vérification démarre lorsque le pilote minifilter s’inscrit auprès du gestionnaire de filtres.

  • Activation uniquement du vérificateur de filtre dans Windows 11 et versions ultérieures de Windows Pour activer l’ensemble minimal de vérifications du vérificateur de filtre, activez les options vérification d’E/S et vérification du système de fichiers dans le vérificateur de pilote (verifier.exe). Par exemple :

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Activation uniquement du vérificateur de filtre dans Windows 10 et versions antérieures de Windows Pour activer le jeu minimal de vérifications du vérificateur de filtre, spécifiez le nom du pilote minifilter et activez l’option Vérification d’E/S dans le vérificateur de pilotes (verifier.exe). Par exemple :

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