Compartir a través de


Comprobación del filtro del sistema de archivos

Validación de uso

Filter Verifier valida el uso siguiente en un controlador de minifiltro:

  • Uso correcto de parámetros y contexto de llamada
  • Valores devueltos correctos de las rutinas de devolución de llamada de preoperación y postoperación
  • Cambios coherentes y coherentes en los parámetros de los datos de devolución de llamada

Seguimiento de objetos del Administrador de filtros

Filter Verifier realiza un seguimiento de los siguientes objetos de administrador de filtros:

  • Contextos de filtro (contextos de flujo, contextos de archivo, etc.)
  • Estructuras de datos de devolución de llamada
  • Elementos de trabajo en cola
  • Estructuras NameInformation
  • Objetos de archivo
  • Filtrar objetos
  • Objetos de instancia
  • Objetos de volumen

En el caso de las estructuras con recuento de referencias, como los contextos de filtro y las estructuras de información de nombres, Filter Verifier se dividirá en el depurador al descargar el controlador de filtro si parece que se han filtrado recuentos de referencias. Imprimirá instrucciones sobre cómo puede usar la extensión del depurador !fltkd para encontrar las estructuras filtradas.

Infracciones del comprobador de filtro

Cuando Filter Verifier detecta una infracción, imprime un mensaje en el depurador que describe la infracción. Para la mayoría de las infracciones, también detiene la ejecución y pide al usuario que realice alguna acción. Por ejemplo:

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

Para continuar, escriba uno de los cuatro comandos de una letra:

  • B o b para Interrumpir: esto se divide en el depurador donde puede realizar una investigación más detallada.
  • I o i para Omitir: reanuda la ejecución. Si se vuelve a encontrar esta infracción, Filter Verifier imprimirá el mensaje de infracción en el depurador, detendrá la ejecución y mostrará el mensaje.
  • Z o z para Zap: reanuda la ejecución. Si se vuelve a detectar esta infracción, Filter Verifier imprimirá el mensaje de infracción en el depurador, pero NO detendrá la ejecución.
  • R o r para Remove: reanuda la ejecución. Si se vuelve a encontrar esta infracción, Filter Verifier NO imprimirá el mensaje de infracción y NO detendrá la ejecución.

Nota:

Al usar Filter Verifier en un controlador que se ha compilado con optimizaciones del compilador habilitadas, es posible que ocasionalmente encuentre un error de comprobador de filtro que indica de forma coherente que las referencias filtradas por el filtro a uno o varios recursos incluso cuando no se encuentra una causa de pérdida en el código. El mensaje comenzará con texto similar al siguiente:

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

También puede ver un mensaje que indica que el seguimiento de objetos no está sincronizado, como:

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

La causa más común de esta condición es que Filter Verifier no pudo identificar el verdadero autor de llamada de una API del Administrador de filtros debido a una optimización de llamadas finales. Esto puede ocurrir cuando una rutina del controlador llama a una API de Filter Manager como última línea. Por ejemplo:

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

Hay un par de maneras de comprobar que esto ha ocurrido:

  1. Deshabilite la optimización de la rutina sospechosa encapsulando en #pragma optimize("", off) ... #pragma optimize("", on).
  2. Reordene el código de forma que la llamada API del Administrador de filtros no sea la última cosa que sucede en la rutina.

Si el error ya no se reproduce después de probar una de esas opciones, es probable que sea un falso positivo.

Activación de esta opción

Puede activar la característica Comprobación del filtro del sistema de archivos para uno o varios controladores mediante la verifier.exe línea de comandos. Para obtener más información, consulte Seleccionar opciones del comprobador de controladores.

Nota:

Antes de la compilación 25126 de Windows no se admite habilitar la comprobación del filtro del sistema de archivos en uno o minifiltros al mismo tiempo que se selecciona ntoskrnl para la comprobación. Si lo hace, se pueden producir errores de comprobador falsos.

Para evitar este problema, no incluya ntoskrnl en la lista de componentes para comprobar o actualizar a una versión de Windows después de la compilación 25126.

La manera recomendada de iniciar el comprobador de filtros es con la opción /standard de verifier.exe, ya que proporciona características útiles adicionales, como el seguimiento de grupos y grupos especiales:

verifier.exe /standard /driver MyFilter.sys

La comprobación se inicia cuando el controlador de minifiltro se registra con el administrador de filtros.

  • Habilitar solo comprobador de filtro en Windows 11 y versiones posteriores de Windows Para habilitar el conjunto mínimo de comprobaciones de comprobador de filtro, habilite las opciones Comprobación de E/S y Comprobación del filtro del sistema de archivos en Comprobador de controladores (verifier.exe). Por ejemplo:

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Habilitar solo comprobador de filtro en Windows 10 y versiones anteriores de Windows Para habilitar el conjunto mínimo de comprobaciones del comprobador de filtro, especifique el nombre del controlador de minifiltro y habilite la opción Comprobación de E/S en Comprobador de controladores (verifier.exe). Por ejemplo:

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