Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Validação de uso
O Verificador de Filtro valida o seguinte uso em um driver de minifiltro:
- Uso correto de parâmetros e contexto de chamada
- Corrigir valores de retorno das rotinas de retorno de chamada de pré-operação e pós-operação
- Alterações consistentes e coerentes em parâmetros em dados de retorno
Rastreamento de Objetos do Gerenciador de Filtros
O Verificador de Filtros rastreia os seguintes objetos do gerenciador de filtros:
- Contextos de filtro (contextos de fluxo, contextos de arquivo etc.)
- Estruturas de dados de Callback
- Itens de trabalho na fila
- Estruturas de NameInformation
- Objetos de arquivo
- Filtrar objetos
- Objetos de instância
- Objetos de volume
Para estruturas gerenciadas por contagem de referência, como contextos de filtro e estruturas de informações de nome, o Verificador de Filtros entrará no depurador ao descarregar o driver de filtro se alguma contagem de referência tiver sido vazada. Ele imprimirá instruções sobre como você pode usar a extensão do depurador !fltkd para localizar as estruturas vazadas.
Filtrar violações do verificador
Quando o Verificador de Filtro detecta uma violação, ele imprime uma mensagem no depurador que descreve a violação. Para a maioria das violações, ele também interrompe a execução e solicita que o usuário execute alguma ação. Por exemplo:
FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?
Para continuar, digite um dos quatro comandos de uma letra:
-
Boubpara Quebra: isso interrompe no depurador onde você pode fazer uma investigação mais aprofundada. -
Iouipara Ignorar: retoma a execução. Se essa violação for encontrada novamente, o Verificador de Filtro imprimirá a mensagem de violação no depurador, interromperá a execução e exibirá o prompt. -
Zouzpara Zap: retoma a execução. Se essa violação for encontrada novamente, o Verificador de Filtro imprimirá a mensagem de violação no depurador, mas NÃO interromperá a execução. -
Rourpara Remover: retoma a execução. Se essa violação for encontrada novamente, o Verificador de Filtro NÃO imprimirá a mensagem de violação e NÃO interromperá a execução.
Observação
Ao usar o Verificador de Filtros em um driver que foi criado com otimizações de compilador habilitadas, ocasionalmente você pode encontrar um erro do Verificador de Filtros afirmando consistentemente que o filtro vazou referências a um ou mais recursos, mesmo quando você não consegue encontrar uma causa para um vazamento em seu código. A mensagem começará com um texto semelhante ao seguinte:
FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:
Você também pode ver uma mensagem indicando que o acompanhamento de objetos está fora de sincronia, como:
FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system
A causa mais comum dessa condição é que o Verificador de Filtro não pôde identificar o verdadeiro chamador de uma API do Gerenciador de Filtros devido a uma otimização de chamada final. Isso pode ocorrer quando uma rotina em seu driver chama uma API do Gerenciador de Filtros como sua última linha. Por exemplo:
void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
PVOID Filter,
PVOID Context)
{
// Do some stuff
...
FltFreeGenericWorkItem(WorkItem);
}
Há algumas maneiras de verificar se isso aconteceu:
- Desabilite a otimização da rotina suspeita encapsulando-a em
#pragma optimize("", off) ... #pragma optimize("", on). - Reordene seu código de modo que a chamada à API do Gerenciador de Filtros não seja a última coisa que está acontecendo em sua rotina.
Se o erro não for mais reproduzido depois de tentar uma dessas opções, provavelmente será um falso positivo.
Ativando essa opção
Você pode ativar o recurso de Verificação de Filtro do Sistema de Arquivos para um ou mais drivers usando a verifier.exe linha de comando. Para obter detalhes, consulte Selecionar opções do Verificador de Driver.
Observação
Antes do Windows build 25126, não há suporte para habilitar a Verificação de Filtro do Sistema de Arquivos em um ou mais minifiltros ao mesmo tempo em que o ntoskrnl é selecionado para verificação. Isso pode resultar em erros espúrios do Verificador.
Para evitar esse problema, não inclua ntoskrnl na lista de componentes para verificar ou atualizar para uma versão do Windows após o build 25126.
A maneira recomendada de iniciar o Verificador de Filtros é com a opção /standard de verifier.exe, uma vez que fornece recursos úteis adicionais, como pool especial e acompanhamento de pool:
verifier.exe /standard /driver MyFilter.sys
A verificação começa quando o driver de minifiltro se registra no gerenciador de filtros.
Habilitando somente o verificador de filtro no Windows 11 e versões posteriores do Windows Para habilitar o conjunto mínimo de verificações do Verificador de Filtros, habilite as opções de Verificação de E/S e Verificação de Filtro do Sistema de Arquivos no Verificador de Driver (verifier.exe). Por exemplo:
verifier.exe /ruleclasses 5 37 /driver MyFilter.sysHabilitando somente o verificador de filtro no Windows 10 e versões anteriores do Windows Para habilitar o conjunto mínimo de verificações do Verificador de Filtro, especifique o nome do driver de minifiltro e habilite a opção verificação de E/S no Verificador de Driver (verifier.exe). Por exemplo:
verifier.exe /flags 0x10 /driver MyFilter.sys