Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Validação de uso
O Verificador de Filtros valida o seguinte uso em um driver de minifiltro:
- Uso correto de parâmetros e contexto de chamada
- Valores de retorno corretos de rotinas de retorno de chamada pré e pós-operação
- Alterações consistentes e coerentes nos parâmetros nos dados de retorno de chamada
Rastreamento de objetos do Gerenciador de Filtros
O Verificador de Filtros rastreia os seguintes objetos do gerenciador de filtros:
- Filtrar contextos (contextos de fluxo, contextos de arquivo, etc.)
- Estruturas de dados de retorno de chamada
- Itens de trabalho enfileirados
- NomeEstruturas de informação
- Objetos de arquivo
- Filtrar objetos
- Objetos de instância
- Objetos de volume
Para estruturas contadas por referência, como contextos de filtro e estruturas de informações de nome, o Verificador de Filtros invadirá o depurador ao descarregar o driver de filtro se alguma contagem de referência parecer ter sido vazada. Ele imprimirá instruções sobre como você pode usar a extensão do depurador !fltkd para encontrar as estruturas vazadas.
Violações do verificador de filtro
Quando o Verificador de Filtros deteta uma violação, ele imprime uma mensagem no depurador descrevendo a violação. Para a maioria das violações, ele também interrompe a execução e solicita que o usuário tome 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 Break: Isso invade o depurador, onde você pode realizar 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 para o 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 para o 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 Filtro em um driver que foi criado com otimizações de compilador habilitadas, você pode ocasionalmente encontrar um erro de Verificador de Filtro afirmando consistentemente que seu 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 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 rastreamento 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 conseguiu 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:
- Desative a otimização da rotina suspeita envolvendo-a em
#pragma optimize("", off) ... #pragma optimize("", on). - Reordene seu código para que a chamada à API do Gerenciador de Filtros não seja a última coisa acontecendo em sua rotina.
Se o erro não se reproduzir mais depois de tentar uma dessas opções, é provável que seja um falso positivo.
Ativando esta opção
Você pode ativar o recurso Verificação do Filtro do Sistema de Arquivos para um ou mais dos drivers usando a linha de comando verifier.exe. Para obter detalhes, consulte Selecionando Opções do Verificador de Controladores.
Observação
Antes da compilação 25126 do Windows, 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 a compilação 25126.
A maneira recomendada de iniciar o Filter Verifier é com a opção /standard de , uma vez que ele fornece recursos úteis adicionais, como verifier.exe e rastreamento de pool:
verifier.exe /standard /driver MyFilter.sys
A verificação começa quando o driver do minifiltro se registra no gerenciador de filtros.
Ativando apenas 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 Filtro, habilite as opções Verificação de E/S e Verificação do Filtro do Sistema de Arquivos no Verificador de Driver (verifier.exe). Por exemplo:
verifier.exe /ruleclasses 5 37 /driver MyFilter.sysAtivando apenas 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 do 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