Compartilhar via


Usando 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. Ele é usado para detectar e solucionar muitos problemas de driver que são conhecidos por causar corrupção do 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 2016, Windows Server 2019, Windows Server 2022, Windows Server 2025
Número original do KB: 244617

Recursos do Verificador de Driver

Para usar o Verificador de Driver, execute Verifier.exe e reinicie o computador. Você não precisa fazer outras alterações para começar a analisar os drivers no sistema. Sua conta de usuário requer privilégios de administrador para executar Verifier.exe.

O Verificador de Driver pode verificar muitos aspectos diferentes do comportamento de um driver. Esses recursos são agrupados em opções ou configurações que são habilitadas pelo uso de sinalizadores. (Os termos opções, 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 e classes de regra do Verificador de Driver.

Opções padrão

As opções a seguir juntas representam as regras que todos os drivers no sistema não devem violar. Essas opções são habilitadas quando você opta por habilitar as configurações padrão na GUI do Verificador de Driver ou especifica a /standard opção 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, independentemente de quais opções foram selecionadas.

Exemplos de verificações automáticas:

  • Verificações de IRQL
    • Um IRQL aumentado (o que significa que o IRQL atual é menor que o IRQL de destino).
    • Um IRQL reduzido (o que significa que o IRQL atual é maior do que o IRQL de destino).
  • SpinLocks:
    • Liberação dupla de um bloqueio de rotação.
    • As aquisições/versões de bloqueio de rotação são feitas no IRQL apropriado.
  • Alocações de memória:
    • As alocações/liberações de pool paginado são feitas no IRQL correto (APC_LEVEL ou inferior).
    • As alocações/liberações de pool não paginadas são feitas no IRQL correto (DISPATCH_LEVEL ou inferior).
    • Nenhum valor aleatório (não inicializado) é especificado para essas interfaces de programação de aplicativos (APIs).
    • As alocações liberadas não estão apontando para objetos de temporizador ativos.
  • Verificação de descarga 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 motorista:
    • Alternar incorretamente as pilhas de threads.
    • Tentando chamar KeWaitXxx em IRQL >= DISPATCH_LEVEL.
    • Desreferenciar 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 quanto a saturações de memória, subexecuções de memória e memória acessada depois de liberada.

Forçar verificação de IRQL

Quando essa opção está ativa, o Verificador de Driver coloca uma pressão extrema de memória no driver invalidando o código paginável. Se o driver tentar acessar a memória paginada no IRQL errado ou enquanto mantém um bloqueio de rotação, o verificador de driver detectará esse comportamento.

Rastreamento de pool

Quando essa opção está ativa, o Verificador de Driver verifica se o driver liberou todas as suas 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 a manipulação de E/S do driver. Ele detecta o uso ilegal ou inconsistente de rotinas de E/S.

Quando o Verificador de E/S está habilitado:

  • Todos os IRPs alocados por meio de IoAllocateIrp são alocados do pool especial, se disponível.
  • As 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 são verificadas com o código DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Observação

No Windows 7 e versões posteriores do sistema operacional Windows, todos os recursos da Verificação de E/S Aprimorada são incluídos como parte da Verificação de E/S e não está mais disponível nem é necessário selecionar a opção Verificação de E/S Aprimorada no Gerenciador de Verificação de Driver ou na linha de comando.

Detecção de deadlock

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 deadlock 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 da Verificação de E/S Aprimorada estão incluídos como parte da Verificação de E/S. Essa opção não está mais disponível ou não é mais necessária no Gerenciador de Verificador de Driver ou em uma linha de comando.

Verificação DMA

Quando essa opção está ativa, o verificador de driver monitora o uso de rotinas de DMA pelo driver. Ele detecta o uso indevido de buffers, adaptadores e registros de mapa DMA.

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 de modo de usuário por rotinas de modo kernel.

Verificações diversas

Quando essa opção está ativa, o Verificador de Driver procura causas comuns de falhas de driver, como o manuseio incorreto da memória liberada.

Verificação de conformidade DDI

Quando essa opção está ativa, o Verificador de Driver aplica um conjunto de regras DDI (interface de driver de dispositivo) que verificam a interação adequada entre um driver e a interface do kernel do sistema operacional.

A opção de verificação de conformidade de DDI é implementada usando uma biblioteca de modo kernel, chamada VerifierExt.sys. Se uma violação de uma das regras de verificação de conformidade da DDI for encontrada, VerifierExt.sys será o módulo que chamou a verificação de bugs do sistema.

Opções adicionais

Essas opções são projetadas para testes de cenários 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 é que você deve instalar o Windows Server 2012. Você pode habilitar o Verificador de Driver nas versões de varejo e verificadas do Windows. Se o Norton Antivirus estiver instalado, não ative a Detecção de Deadlock do Verificador de Driver.

Habilitar o 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 de 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 as estatísticas do Verificador de Driver em tempo real. Para obter mais informações, consulte a seção Gerenciador de Verificação de Driver (Verifier.exe ).

Depurar violações do Verificador de Driver

Se o Verificador de Driver detectar uma violação, o comportamento padrão é verificar o sistema para fornecer o máximo de informações possível sobre a depuração do problema. Um sistema conectado a um depurador será interrompido assim que uma verificação de bug ocorrer.

Todas as violações do Verificador de Driver resultam em verificações de bugs, as mais comuns (embora não necessariamente todas) 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 do 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 de DDI que foi violada (RuleID é sempre o primeiro argumento para a verificação de bugs, todas as IDs de regra de Verificação de Conformidade de DDI estão no formato 0x200nn).

Verificador de driver e drivers gráficos

Windows drivers gráficos no modo kernel, como DLLs de driver de impressora e vídeo, 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 de 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 do Verificador de Driver é incorporado ao Win32k.sys. Como os drivers gráficos são mais restritos do que outros drivers no modo kernel, eles exigem apenas um subconjunto da funcionalidade do 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, o uso de pool especial, falha aleatória de alocações de pool e rastreamento de pool, são suportadas em graus variados nos diferentes retornos de chamada DDI gráficos.

Falhas aleatórias são suportadas para as seguintes funções de retorno de chamada DDI de gráficos:

  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath

Além disso, o uso de pool especial e rastreamento de pool é suportado 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 verificação de IRQL, são ignorados. Além disso, você pode usar o comando kernel-debugger 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 verificar a exatidão da implementação do driver gráfico (por exemplo, comparando a saída do driver gráfico com uma imagem de referência).

Gerenciador de Verificador de Driver (Verifier.exe)

A ferramenta Gerenciador do Verificador de Driver (Verifier.exe) é a maneira preferencial de criar e modificar as configurações do Verificador de Driver e coletar estatísticas do Verificador de Driver. Verifier.exe está localizado na pasta %WinDir%\System32 para cada instalação do Windows.

O Gerenciador de Verificador de Driver é a GUI incluída no Windows para configurar o Verificador de Driver. Inicie o Gerenciador de Verificação de Driver usando verifier.exe sem nenhuma outra opção de linha de comando. Sempre que as opções são incluídas, 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 do CMD do Administrador.

Status do motorista

A página de propriedades 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 no 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 alternar para o modo de atualização manual. Você pode modificar a taxa de atualização usando os botões de opção 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 de pool especial e menos de 95% das alocações de 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 de pool.

Contadores globais

Esta página de propriedades mostra o valor atual de alguns contadores mantidos pelo Verificador de Driver. Um valor zero para um contador pode indicar que o sinalizador do 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 recursos baixos 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 a 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 propriedades 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 atuais e assim por diante. Você deve selecionar um nome de driver na caixa de combinação superior para exibir os contadores desse 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 visualizar 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 é verificado somente 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 abaixo da lista. Você também pode clicar com o botão direito do mouse em um nome de driver para exibir o menu de contexto, que permite executar a alternância 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 opção 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 estarão disponíveis. Isso significa que, após a próxima reinicialização, todos os drivers do sistema serão verificados.

Você pode definir o tipo de verificação usando as caixas de seleção 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 do 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: seleciona algumas configurações comumente usadas (com todos os drivers verificados).
  • Redefinir tudo: limpa todas as configurações do Verificador de Driver para que nenhum driver 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 propriedades 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 dos drivers que estão sendo verificados. Depois de alterar o status de algumas caixas de seleção, selecione Aplicar para que as alterações entrem em vigor. As alterações entram em vigor imediatamente. E eles duram até que você faça alterações adicionais ou até reiniciar o computador.

A interface da linha de comandos

Você também pode executar Verifier.exe a partir de uma linha de comando (para obter mais informações, digite verifier.exe /? em um prompt de comando). Várias opções podem ser usadas 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:

Opções de configuração (sinalizadores)

  • verifier.exe /flags valor

    O valor é um número hexadecimal (um prefixo 0x é necessário) que representa o valor coletivo dos sinalizadores a serem habilitados. O valor de cada sinalizador é mostrado na verifier /? saída.

    Bandeiras padrão:

    0x00000000: Verificações automáticas
    0x00000001: Piscina especial
    0x00000002: Forçar verificação de IRQL
    0x00000008: Rastreamento de pool
    0x00000010: Verificação de E/S
    0x00000020: Detecção de deadlock
    0x00000080: Verificação de DMA
    0x00000100: Verificações de segurança
    0x00000800: Verificações diversas
    0x00020000: Verificação de conformidade com DDI

    Mais bandeiras:

    0x00000004: Simulação aleatória de poucos recursos
    0x00000040: Verificação de E/S aprimorada (somente Vista)
    0x00000200: Forçar solicitações de E/S pendentes
    0x00000400: Registro IRP
    0x00002000: Verificação de MDL invariável para pilha
    0x00004000: Verificação de MDL invariável para driver0x00008000: Fuzzing de atraso da estrutura de energia

    Por 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 um dos exemplos funciona):

    verifier.exe /standard
    
    verifier.exe /flags 0x209BB
    
  • Configurar drivers para verificar

    verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
    

    Esse 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
    

    Este 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 as estatísticas atuais do Verificador

    verifier /query
    

    Despeje o status atual do Verificador de Driver e os 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 na 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 de driver

As seções a seguir descrevem mais detalhes sobre as configurações do verificador de driver que podem ser de interesse para os 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, certifique-se de seguir essas etapas com atenção. Para proteção acrescida, faça backup do Registro antes de modificá-lo. Em, é possível restaurar o Registro caso ocorra 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:

  1. Inicie o Editor do Registro (Regedt32).

  2. Crie a seguinte chave do Registro:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers

  3. Edite a REG_SZ chave.

Defina a REG_SZ chave para os nomes que não diferenciam maiúsculas de minúsculas 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 sejam 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 de 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.