Usar o Verificador de Driver para identificar problemas com drivers do Windows para usuários avançados
A ferramenta Verificador de Driver está incluída em todas as versões do Windows desde o Windows 2000. É usado para detectar e solucionar problemas de driver que são conhecidos por causar corrupção no sistema, falhas ou outro comportamento imprevisível. Este artigo descreve como usar o Verificador de Driver para isolar e solucionar problemas de um driver no sistema.
Aplica-se a: Windows Server 2012 Foundation, Windows Server 2012 Essentials, Windows Server 2012 Standard, Windows Server 2012 Datacenter
Número de KB original: 244617
Funcionalidades do Verificador de Driver
Para usar o Verificador de Driver, execute Verifier.exe e reinicie o computador. Você não precisa fazer nenhuma outra alteração para começar a analisar drivers no sistema. Sua conta de usuário requer privilégios de administrador para executar Verifier.exe.
O Verificador de Driver pode marcar muitos aspectos diferentes do comportamento de um driver. Esses recursos são agrupados em opções ou configurações habilitadas pelo uso de sinalizadores. (As opções de termos, configurações e sinalizadores normalmente são intercambiáveis na documentação do Verificador de Driver. Eles representam conceitos semelhantes.)
Para obter informações detalhadas sobre cada sinalizador, consulte Opções do Verificador de Driver e classes de regra.
Opções Padrão
As opções a seguir representam as regras que todos os drivers do sistema não devem violar. Essas opções são habilitadas quando você escolhe habilitar as configurações padrão na GUI do Verificador de Driver ou especifica a opção /standard
ao configurar o Verificador de Driver usando a linha de comando.
Verificações automáticas
Essas verificações são sempre feitas em um driver que está sendo verificado, não importa quais opções tenham sido selecionadas.
Exemplos de Verificações Automáticas:
- Verificações IRQL
- Um IRQL gerado (o que significa que o IRQL atual é menor que o IRQL de destino).
- Um IRQL reduzido (o que significa que o IRQL atual é mais do que o IRQL de destino).
- SpinLocks:
- Versão dupla de um bloqueio de rotação.
- Aquisições/versões de bloqueio de rotação são feitas no IRQL apropriado.
- Alocações de memória:
- Alocações/liberações de pool de páginas são feitas no IRQL correto (APC_LEVEL ou abaixo).
- Alocações/liberdades de pool não páginadas são feitas no IRQL correto (DISPATCH_LEVEL ou abaixo).
- Nenhum valor aleatório (não diferenciado) é especificado para essas APIs (interfaces de programação de aplicativo).
- Alocações liberadas não estão apontando para objetos temporizadores ativos.
- Verificação de descarregamento do driver:
- Verifica se o driver não tem operações pendentes durante o descarregamento, como DPCs pendentes ou threads de trabalho.
- Outros comportamentos do Driver:
- Alternar pilhas de thread incorretamente.
- Tentando chamar KeWaitXxx no IRQL >= DISPATCH_LEVEL.
- Desreferenciando um objeto que já tem uma contagem de referência de 0.
Pool Especial
Quando essa opção está ativa, o Verificador de Driver aloca a maioria das solicitações de memória do driver de um pool especial. Esse pool especial é monitorado por excessos de memória, subexame de memória e memória acessadas após a liberação.
Forçar a verificação do IRQL
Quando essa opção está ativa, o Verificador de Driver coloca uma pressão de memória extrema no driver invalidando o código pageable. Se o driver tentar acessar a memória paged no IRQL errado ou ao segurar um bloqueio de rotação, o Verificador de Driver detectará esse comportamento.
Rastreamento de Pool
Quando essa opção estiver ativa, o Verificador de Driver verifica se o driver liberou todas as alocações de memória quando ele é descarregado. Ele revela vazamentos de memória.
Verificação de E/S
Quando essa opção está ativa, o Verificador de Driver aloca os IRPs do driver de um pool especial e monitora o tratamento de E/S do driver. Ele detecta o uso ilegal ou inconsistente de rotinas de E/S.
Quando o Verificador de E/S estiver habilitado:
- Todos os IRPs alocados por meio do IoAllocateIrp são alocados no pool especial, se estiverem disponíveis.
- Verificações são feitas em IoCallDriver, IoCompleteRequest e IoFreeIrp para capturar mensagens de erro do driver.
- Todas as falhas do Verificador de E/S marcar com o DRIVER_VERIFIER_IOMANAGER_VIOLATION de código (0xC9).
Observação
No Windows 7 e versões posteriores do sistema operacional Windows, todos os recursos da Verificação avançada de E/S são incluídos como parte da Verificação de E/S e não estão mais disponíveis nem necessários para selecionar a opção Verificação avançada de E/S no Driver Verifier Manager ou na linha de comando.
Detecção de impasse
Quando essa opção está ativa, o Verificador de Driver monitora o uso do driver de bloqueios de rotação, mutexes e mutexes rápidos. Ele detecta se o código do driver tem o potencial de causar um impasse em algum momento.
Verificação de E/S aprimorada
Quando essa opção está ativa, o Verificador de Driver monitora as chamadas de várias rotinas do Gerenciador de E/S e executa testes de estresse de IRPs PnP, IRPs de energia e IRPs WMI.
Observação
No Windows 7 e versões posteriores, todos os recursos de Verificação avançada de E/S são incluídos como parte da Verificação de E/S. Essa opção não está mais disponível ou necessária no Driver Verifier Manager ou em uma linha de comando.
Verificação de DMA
Quando essa opção está ativa, o Verificador de Driver monitora o uso de rotinas de DMA pelo driver. Ele detecta o uso inadequado de buffers de DMA, adaptadores e registros de mapa.
Verificações de segurança
Quando essa opção está ativa, o Verificador de Driver procura erros comuns que podem resultar em vulnerabilidades de segurança, como uma referência a endereços do modo de usuário por rotinas do modo kernel.
Verificações diversas
Quando essa opção está ativa, o Verificador de Driver procura as causas comuns de falhas no driver, como o mau tratamento da memória liberada.
Verificação de conformidade do DDI
Quando essa opção está ativa, o Verificador de Driver aplica um conjunto de regras de DDI (interface do driver de dispositivo) que marcar para a interação adequada entre um driver e a interface do kernel do sistema operacional.
A opção de verificação de conformidade DDI é implementada usando uma biblioteca do modo Kernel, chamada VerifierExt.sys. Se uma violação de uma das regras de Verificação de Conformidade do DDI for encontrada, VerifierExt.sys será o módulo que pediu que o bug do sistema marcar ocorra.
Opções adicionais
Essas opções são projetadas para testes de cenário específicos ou são opções que injetarão falhas ou atrasos em determinadas rotinas de DDI para simular condições extremas de estresse.
Requisitos do Verificador de Driver
O único requisito é instalar Windows Server 2012. Você pode habilitar o Verificador de Driver em versões de varejo e marcadas do Windows. Se o Norton Antivírus estiver instalado, não habilite a Detecção de Impasse do Verificador de Driver.
Habilitar verificador de driver
Você pode habilitar o Verificador de Driver usando Verifier.exe. Verifier.exe está incluído em todas as cópias do Windows. Ele é instalado automaticamente na pasta System32. Verifier.exe tem interfaces GUI (linha de comando) e interface gráfica do usuário (GUI), para que você possa especificar drivers e níveis apropriados de verificação. Você também pode ver estatísticas do Verificador de Driver em tempo real. Para obter mais informações, consulte a seção Driver Verifier Manager (Verifier.exe).
Depurar violações do Verificador de Driver
Caso o Verificador de Driver detecte uma violação, o comportamento padrão é bug marcar sistema a fim de fornecer o máximo de informações possíveis sobre a depuração do problema. Um sistema conectado a um depurador será interrompido depois que um bug marcar ocorrer.
Todas as violações do Verificador de Driver resultam em verificações de bugs, as mais comuns (embora não necessariamente todas elas) são:
- 0xC1: SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
- 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION
- 0xC6: DRIVER_CAUGHT_MODIFYING_FREED_POOL
- 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION
- 0xD6: DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
- 0xE6: DRIVER_VERIFIER_DMA_VIOLATION
!analyze -v
é o melhor comando a ser usado ao iniciar uma nova sessão de depuração. Esse comando retornará informações úteis e tentará identificar o driver com falha.
Extensões de depurador específicas do Verificador de Driver:
!verifier
despejará as estatísticas capturadas do Verificador de Driver.!verifier -?
mostrará todas as opções disponíveis.!deadlock
despeja informações relacionadas a bloqueios ou objetos rastreados pela detecção de Deadlock.!deadlock -?
mostrará todas as opções disponíveis.!iovirp [address]
despejará informações relacionadas a um IRP rastreado pelo Verificador de E/S.!ruleinfo [RuleID]
despejará informações relacionadas à regra de Verificação de Conformidade do DDI que foi violada (RuleID é sempre o primeiro argumento para o bug marcar, todas as IDs de regra de Verificação de Conformidade DDI estão no formulário 0x200nn).
Driver Verifier e drivers gráficos
Os drivers gráficos do modo kernel do Windows, como DLLs do driver de impressora e de exibição, são impedidos de chamar o ponto de entrada do pool diretamente. As alocações de pool são executadas indiretamente usando retornos de chamada DDI (interface do driver de dispositivo gráfico) para Win32k.sys. Por exemplo, EngAllocMem é o retorno de chamada que um driver gráfico chama para alocar explicitamente a memória do pool. Outros retornos de chamada especializados, como EngCreatePalette e EngCreateBitmap, também retornam memória do pool.
Para fornecer o mesmo teste automatizado para os drivers gráficos, o suporte para algumas das funções verificador de driver é incorporado ao Win32k.sys. Como os drivers gráficos são mais restritos do que outros drivers do modo kernel, eles exigem apenas um subconjunto da funcionalidade verificador de driver. Especificamente, a verificação de IRQL e a verificação de E/S não são necessárias. A outra funcionalidade, ou seja, usando pool especial, falha aleatória de alocações de pool e acompanhamento de pool, tem suporte para diferentes graus nos diferentes retornos de chamada DDI gráficos.
Há suporte para falhas aleatórias para as seguintes funções de retorno de chamada DDI gráficos:
- EngAllocMem
- EngAllocUserMem
- EngCreateBitmap
- EngCreateDeviceSurface
- EngCreateDeviceBitmap
- EngCreatePalette
- EngCreateClip
- EngCreatePath
- EngCreateWnd
- EngCreateDriverObj
- BRUSHOBJ_pvAllocRbrush
- CLIPOBJ_ppoGetPath
Além disso, há suporte para o uso do pool especial e do rastreamento de pool para EngAllocMem.
Habilitar o Verificador de Driver para os drivers gráficos é idêntico aos outros drivers. Para obter mais informações, consulte a seção Habilitar Verificador de Driver . Sinalizadores sem suporte, como a verificação IRQL, são ignorados. Além disso, você pode usar o comando kernel-depurador para examinar o !gdikdx.verifier
estado atual do Verificador de Driver e os rastreamentos de pool para drivers gráficos.
Observação
Você só deve usar a configuração de falha de alocação aleatória para testes de robustez. O uso dessa configuração pode causar mensagens de erro de renderização, portanto, você não deve usar essa configuração com testes de verificação para marcar a correção da implementação do driver gráfico (por exemplo, comparando a saída do driver gráfico com uma imagem de referência).
Driver Verifier Manager (Verifier.exe)
A ferramenta Driver Verifier Manager (Verifier.exe) é a maneira preferida de criar e modificar as configurações do Verificador de Driver e coletar estatísticas do Verificador de Driver. Verifier.exe está localizada na pasta %WinDir%\System32 para cada instalação do Windows.
Driver Verifier Manager é a GUI incluída no Windows para configurar o Verificador de Driver. Inicie o Driver Verifier Manager usando verifier.exe sem outros comutadores de linha de comando. Sempre que os comutadores são incluídos, a versão baseada em linha de comando do utilitário é usada.
Para obter ajuda com a configuração do Verificador de Driver, execute verifier.exe /?
a partir de uma janela CMD do administrador.
Driver status
A página de propriedade Status do Driver fornece uma imagem do status atual do Verificador de Driver. Você pode ver quais drivers o verificador detecta. O status pode ser um dos seguintes valores:
- Carregado: o driver está carregado e verificado no momento.
- Descarregado: o driver não está carregado no momento, mas foi carregado pelo menos uma vez desde que você reiniciou o computador.
- Nunca carregado: o driver nunca foi carregado. Esse status pode indicar que o arquivo de imagem do driver está corrompido ou que você especificou um nome de driver ausente do sistema.
Selecione o cabeçalho da lista para classificar a lista por nomes de driver ou status. Na área superior direita da caixa de diálogo, você pode exibir os tipos atuais da verificação que estão em vigor. O status dos drivers é atualizado automaticamente se você não mudar para o modo de atualização manual. Você pode modificar a taxa de atualização usando os botões de rádio na área inferior esquerda da caixa de diálogo. Para forçar uma atualização do status, selecione Atualizar Agora.
Se você habilitar o sinalizador do Pool Especial e menos de 95% das alocações do pool forem para o pool especial, uma mensagem de aviso será exibida nesta página. Isso significa que você precisa selecionar um conjunto menor de drivers para verificar ou adicionar mais memória física ao computador para obter uma melhor cobertura da verificação de alocações do pool.
Contadores Globais
Esta página de propriedade mostra o valor atual de alguns contadores mantidos pelo Verificador de Driver. Um valor zero para um contador pode indicar que o sinalizador verificador de driver associado não está habilitado. Por exemplo, um valor de 0 para o contador Outros/Falhas indica que o sinalizador de simulação de recurso baixo não está habilitado. Você pode monitorar a atividade do verificador porque os valores dos contadores são atualizados automaticamente por padrão. Você pode alterar a taxa de atualização, alternar para atualização manual ou forçar uma atualização usando o grupo de controles na área inferior esquerda da caixa de diálogo.
Rastreamento de Pool
Esta página de propriedade mostra mais estatísticas coletadas do Verificador de Driver. Todos os contadores mostrados nesta página estão relacionados ao sinalizador de rastreamento de pool do verificador. A maioria deles são contadores por driver, como alocações atuais, bytes alocados atualmente e assim por diante. Você deve selecionar um nome de driver na caixa de combinação superior para exibir os contadores para esse driver específico.
Configurações
Você pode usar esta página para criar e modificar as configurações do Verificador de Driver. As configurações são salvas no registro e você deve reiniciar o computador para que as configurações entrem em vigor. Você pode usar a lista para exibir os drivers instalados no momento. Cada driver pode estar em um dos seguintes estados:
- Verificar Habilitado: o driver está verificado no momento.
- Verificar Desabilitado: o driver não está verificado no momento.
- Verificar Habilitado (Reinicialização Necessária): o driver só é verificado após a próxima reinicialização.
- Verificar desabilitado (Reinicialização Necessária): o driver está verificado no momento, mas não é verificado após a próxima reinicialização.
Você pode selecionar um ou vários drivers da lista e alternar o status usando os dois botões na lista. Você também pode clicar com o botão direito do mouse em um nome do driver para exibir o menu de contexto, que permite executar a agregação de estado.
Na parte inferior da caixa de diálogo, você pode especificar mais drivers (separados por espaços) que deseja verificar após a próxima reinicialização. Normalmente, você usa esse controle de edição quando deseja instalar um novo driver que ainda não está carregado.
Se o grupo de botões de rádio na parte superior da lista estiver definido como Verificar todos os drivers, a lista e os botões Verificar e Não Verificar e o controle de edição não estiverem disponíveis. Isso significa que, após a próxima reinicialização, todos os drivers do sistema são verificados.
Você pode definir o tipo de verificação usando as caixas de marcar na área superior direita da caixa de diálogo. Você pode habilitar a Verificação de E/S no nível 1 ou no nível 2. A verificação de nível 2 é mais forte que o nível 1.
Salve qualquer modificação nas configurações selecionando Aplicar. Há mais dois botões nesta página:
- Configurações preferenciais: ele seleciona algumas configurações comumente usadas (com todos os drivers verificados).
- Redefinir Tudo: ele limpa todas as configurações do Verificador de Driver para que nenhum drivers seja verificado.
Depois de selecionar Aplicar, você deve reiniciar o computador para que as alterações entrem em vigor.
Configurações voláteis
Você pode usar essa página de propriedade para alterar os sinalizadores do Verificador de Driver imediatamente. Você só pode alternar o estado de alguns dos sinalizadores do Verificador de Driver. E você não pode alterar a lista de drivers que estão sendo verificados. Depois de alterar o status de algumas caixas de marcar, selecione Aplicar para que as alterações entrem em vigor. As alterações entrarão em vigor imediatamente. E elas duram até que você faça alterações adicionais ou até reiniciar o computador.
A interface de linha de comando
Você também pode executar Verifier.exe de uma linha de comando (para obter mais informações, digiteverifier.exe /? em um prompt de comando). Vários comutadores podem ser usados na linha de comando, por exemplo:
Verifier.exe /flags 0x209BB /driver MyDriver1.sys MyFilterDriver1.sys
A lista a seguir mostra os sinalizadores de linha de comando mais usados:
Configurar opções (sinalizadores)
verifier.exe /flags value
Valor é um número hex (um prefixo de 0x é necessário) que representa o valor coletivo dos sinalizadores a serem habilitados. O valor de cada sinalizador é mostrado na
verifier /?
saída.Sinalizadores Padrão:
0x00000000: verificações automáticas
0x00000001: Pool especial
0x00000002: Forçar a verificação do IRQL
0x00000008: rastreamento de pool
0x00000010: verificação de E/S
0x00000020: detecção de impasse
0x00000080: verificação de DMA
0x00000100: verificações de segurança
0x00000800: verificações diversas
0x00020000: verificação de conformidade do DDIMais sinalizadores:
0x00000004: simulação aleatória de recursos baixos
0x00000040: verificação de E/S aprimorada (somente Vista)
0x00000200: forçar solicitações de E/S pendentes
0x00000400: Registro em log de IRP
0x00002000: Verificação de MDL invariável para pilha
0x00004000: Verificação invariável de MDL para driver0x00008000: falha na estrutura do powerPor exemplo, para habilitar apenas o Pool Especial, a Verificação de E/S e as verificações diversas:
verifier.exe /flags 0x811
Para habilitar todas as configurações padrão (qualquer exemplo funciona):
verifier.exe /standard
verifier.exe /flags 0x209BB
Configurar drivers para verificar
verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
Este comando especifica o driver ou drivers específicos a serem verificados. Forneça drivers adicionais em uma lista separada por espaço.
verifier.exe /all
Esse comando verifica todos os drivers no sistema.
Configurar usando o modo Volátil
verifier.exe /volatile /flags *value /adddriver MyDriver1.sys*
Esse comando altera os sinalizadores do verificador imediatamente e adiciona MyDriver1.sys para verificação.
Consultar estatísticas atuais do Verificador
verifier /query
Despeje o verificador de driver atual status e contadores para a saída padrão.
Consultar as configurações atuais do Verificador
verifier /querysettings
Despeje as configurações atuais do Verificador de Driver para a saída padrão.
Limpar configurações do Verificador
verifier.exe /reset
Esse comando apaga todas as configurações atuais do Verificador de Driver.
Informações adicionais para desenvolvedores do Driver
As seções a seguir descrevem mais detalhes sobre as configurações do verificador de driver que podem ser de interesse para desenvolvedores de driver. Essas configurações geralmente não são exigidas por profissionais de TI.
Importante
Esta seção, método ou tarefa contém etapas que descrevem como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para saber mais sobre como fazer o backup e restaurar o registro, consulte Como fazer o backup e restaurar o registro no Windows.
Para habilitar o Verificador de Driver editando o registro, siga estas etapas:
Iniciar Editor do Registro (Regedt32).
Localize a seguinte chave do Registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
Edite a
REG_SZ
chave.
Defina a REG_SZ
chave para os nomes insensíveis a casos dos drivers que você deseja testar. Você pode especificar vários drivers, mas usar apenas um driver. Ao fazer isso, você pode garantir que os recursos disponíveis do sistema não estejam esgotados prematuramente. O esgotamento prematuro de recursos não causa problemas de confiabilidade do sistema, mas pode fazer com que algumas verificações de driver sejam ignoradas.
A lista a seguir mostra exemplos de valores para a REG_SZ
chave:
- Ntfs.sys
- Win32k.sys ftdisk.sys
- *.sys
Você pode especificar o nível de verificação do driver na seguinte chave do registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel
O valor da chave é um DWORD que representa a coleção de todos os sinalizadores habilitados.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários