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
  • Corregir valores de retorno de las rutinas de devolución de llamada de preoperación y postoperación
  • Cambios consistentes 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 de Información de Nombre
  • 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, el Verificador de Filtros intervendrá en el depurador al descargar el controlador del 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 Pausa: esto activa una pausa 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 se encuentre con un error en Filter Verifier que afirma consistentemente que su filtro filtró referencias a uno o más recursos, incluso cuando no pueda encontrarse una causa para la pérdida en su 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 al verdadero llamador de una API de Filter Manager debido a una optimización de llamadas cola. 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, encapsulándola 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 verificación del filtro del sistema de archivos en uno o más minifiltros al mismo tiempo que se selecciona ntoskrnl para la verificació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 grupos especiales y seguimiento de grupos:

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 el verificador de filtros en Windows 11 y versiones posteriores de Windows Para habilitar el conjunto mínimo de comprobaciones del verificador de filtros, 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 el comprobador de filtros 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