Partilhar via


Verificador de drivers: Novidades

Driver Verifier está disponível em todas as versões do Windows a partir do Windows 2000. Cada versão introduz novos recursos e verifica a localização de bugs nos drivers do Windows. Esta seção resume as alterações e fornece links para a documentação relacionada.

Verificador de Driver no Windows 11 (Atualizado: September 30, 2021)

A partir do Windows 11, muitos sinalizadores agora são habilitados sem reinicialização usando uma sintaxe de comando diferente da sintaxe volátil. Consulte Sintaxe de comando do verificador de driver para obter mais informações sobre a nova sintaxe.

Verificador de driver no Windows 10 (atualizado: 8 de maio de 2018)

Importante

Para obter informações sobre como habilitar o WDF Verifier no Windows 10, versão 1803 ou versões mais recentes, consulte Usando o verificador KMDF.

  • Você ainda pode habilitar a verificação WDF como parte dos sinalizadores /standard do Verificador de Driver. Consulte Sintaxe de comando do verificador de driver para obter mais informações.
  • Essa alteração afetará você se você estiver habilitando o DV com sintaxe /flags 0x209BB , pois a verificação WDF não será mais habilitada automaticamente.

A partir do Windows 10, o verificador de driver inclui novas regras de validação de driver para as seguintes tecnologias:

Verificador de driver no Windows 8-1 (atualizado: 17 de junho de 2013)

A partir do Windows 8.1, o Driver Verifier apresenta quatro novas opções para detetar erros.

Verificador de driver no Windows 8 (atualizado: 20 de outubro de 2012)

A partir do Windows 8, o Verificador de Driver apresenta cinco novas opções para detetar erros.

  • A opção Power Framework Delay Fuzzing insere atrasos artificiais de execução para ajudar a detetar erros de concorrência em drivers que utilizam o framework de gestão de energia (PoFx). Os atrasos de execução têm limites de tempo superiores. Esta opção não é recomendada para drivers que não utilizam diretamente a estrutura de gestão de energia (PoFx).
  • A opção verificação de conformidade DDI aplica as mesmas regras de uso da interface de driver de dispositivo (DDI) que o Verificador de Driver Estático utiliza para garantir que o seu driver execute chamadas de função no IRQL exigido para a função. A verificação de conformidade DDI é executada como parte das opções padrão do Verificador de Driver.
  • A opção Invariant MDL Checking for Stack monitora como o driver lida com buffers MDL invariantes na pilha de drivers.
  • A opção Invariant MDL Checking for Driver monitora como o driver lida com buffers MDL invariantes por driver.
  • A opção Stack Based Failure Injection injeta falhas de alocação de recursos em drivers de modo kernel.

Ao criar, implantar e testar o driver usando o Visual Studio 2012 e o WDK para Windows 8, você também pode configurar o Verificador de Driver para ser executado em um computador de teste ao implantar o driver para teste.

Verificador de driver no Windows 7 (atualizado: 22 de outubro de 2012)

Para o Windows 7, o Verificador de Driver foi aprimorado com novos testes e recursos que permitem que o Verificador de Driver exponha mais classes de bugs típicos de driver.

  • Referências incorretas a nomes de utilizador em drivers do kernel
  • Melhorias na verificação de E/S
  • Melhorias no Pool Especial, no Pool Tracking, e na Simulação de Recursos Baixos
  • Uso incorreto de mecanismos de sincronização
  • Referências de objeto incorretas
  • Cobranças de quota de pool na rotina DPC
  • Bloqueios ou atrasos no desligamento do sistema
  • Melhoria no Processamento de Pedidos de E/S Pendentes

No Windows 7, o Verificador de Driver fornece verificações para bloqueios de rotação em fila, essas verificações se assemelham às fornecidas para bloqueios de rotação em versões anteriores do Windows. Essas verificações incluem o seguinte:

  • Verificar se uma operação que deve aumentar o valor do nível de solicitação de interrupção (IRQL), como KeAcquireInStackQueuedSpinLock, não está realmente diminuindo o valor IRQL.

  • Verificar se uma operação que deve reduzir o valor de IRQL, como KeReleaseInStackQueuedSpinLock, não está realmente aumentando o valor de IRQL.

  • Cortar o conjunto de trabalho do processo do sistema se a opção Forçar verificação de IRQL estiver ativada, quando o IRQL estiver sendo elevado para DISPATCH_LEVEL ou superior, em uma tentativa de expor possíveis referências à memória paginável enquanto o driver estiver sendo executado em IRQL elevado.

  • Prevendo possíveis deadlocks quando a opção Deadlock Detection estiver ativada.

  • Tentando usar a mesma estrutura de dados KSPIN_LOCK como um bloqueio de rotação e como um bloqueio de rotação em fila de pilha quando a opção Deteção de Deadlock está ativada.

  • Verificação de valores de ponteiro obviamente incorretos, como um endereço virtual de modo de usuário que é usado como um endereço de bloqueio de rotação.

  • Registrando transições de IRQL no log IRQL do Verificador de Controladores. Essas informações aparecem quando você usa a extensão !verifier 8 dos depuradores do Windows. Veja !verifier.

Informações adicionais de depuração

No Windows 7, o Verificador de Driver fornece as seguintes informações adicionais que são úteis para depuração:

Há um log com traces de stack em ordem cronológica para chamadas recentes para KeEnterCriticalRegion e KeLeaveCriticalRegion de drivers verificados. O conteúdo do log é mostrado usando a extensão de depuração !verifier 0x200 dos depuradores do Windows. Essas informações podem ser úteis para entender cenários em que um thread está sendo executado inesperadamente em uma região crítica ou está tentando deixar uma região crítica que já deixou.

Você pode exibir informações adicionais do Log de solicitações de E/S pendentes de força usando a extensão do depurador de 0x40 !verifier . Em versões anteriores do Windows, o log continha apenas um rastreamento de pilha para cada IRP que o Verificador de Driver mantinha pendente. Este foi o rastreamento de pilha do momento em que IoCompleteRequest foi chamado pela primeira vez para o IRP pendente forçado. O Windows 7 tem pelo menos duas entradas de log, possivelmente mais de duas, para cada IRP pendente forçado:

  • Traço de pilha no momento em que o Verificador de Driver selecionou o IRP para forçar a pendência. Driver Verifier escolhe alguns dos IRPs para serem forçados a ficarem pendentes quando um dos drivers verificados chama IoCallDriver.
  • Rastreamentos de pilha para cada chamada IoCompleteRequest para o IRP pendente forçado antes que a conclusão chegue ao driver verificado. Mais de uma chamada IoCompleteRequest pode existir para o mesmo IRP porque um dos drivers pode interromper temporariamente a conclusão de sua rotina de conclusão e, em seguida, retomá-la chamando IoCompleteRequest novamente.

Há mais rastreamentos de pilha válidos no registo de transição IRQL. Este log é exibido usando !verifier 8. Em versões do Windows anteriores ao Windows 7, o Verificador de Driver poderia ter tentado registrar alguns desses rastreamentos de pilha em IRQL elevado e não conseguiu capturar o rastreamento de pilha devido ao alto valor de IRQL. No Windows 7, o Verificador de Driver tenta capturar esses rastreamentos de pilha:

  • Antes de aumentar o IRQL, por exemplo, quando um driver verificado chama KeAcquireSpinLock.
  • Depois que o IRQL é reduzido, quando um driver verificado chama KeReleaseSpinLock.

Desta forma, o Driver Verifier pode capturar mais destes rastros da pilha de transição IRQL.

!analyze pode fazer a triagem de problemas expostos pelas verificações do Verificador de E/S Avançado (que fazem parte do Verificador de E/S no Windows 7). Em versões anteriores do Windows, o relatório de erros do Verificador de E/S Avançado consistia em exibir uma descrição do defeito do controlador que foi detetado pelo Verificador de Controladores, seguido por uma interrupção no depurador. Executar !analyze após tal pausa não resulta em triagem significativa para muitas dessas quebras porque !analyze não pode usar as informações do texto de descrição do erro que aparece no depurador. No Windows 7, as informações significativas sobre esses defeitos de driver são salvas pelo verificador de driver na memória. !analyze pode encontrar essas informações e realizar uma triagem automática muito mais significativa para muitas dessas pausas.

Verificador de driver no Windows Vista (atualizado: 9 de fevereiro de 2009)

Para o Windows Vista, o Verificador de Driver foi aprimorado com novos testes e recursos.

  • Ativando o verificador de driver e alterando as configurações sem reinicializar
  • Simulação aprimorada de baixos recursos
  • Forçar solicitações de E/S pendentes
  • Verificações de segurança
  • Verificação de E/S mais completa
  • Verificação IRQL aprimorada
  • Controlos diversos
  • Rastreamento de página de memória bloqueada
  • Verificações automáticas adicionais

Verificador de driver no Windows XP (atualizado: 4 de dezembro de 2001)

Driver Verifier é uma ferramenta para monitorar drivers de modo kernel do Windows e drivers gráficos. A Microsoft recomenda fortemente que os fabricantes de hardware testem seus drivers com o Verificador de Driver para garantir que os drivers não estejam fazendo chamadas de função ilegais ou causando corrupção do sistema. Driver Verifier foi aprimorado com novos testes e recursos para o Microsoft Windows XP.

Os motoristas submetidos ao WHQL para teste devem passar no Verificador de Motoristas. Os novos recursos do Verificador de Driver no Windows XP incluem:

  • Driver Verifier Manager, uma interface gráfica do usuário (GUI) totalmente nova para verifier.exe
  • Nova verificação automática para monitoramento de comutação de pilha
  • Novas opções do Verificador de Driver para Verificação DMA (também conhecida como Verificação HAL), Deteção de Deadlock e Verificação SCSI
  • Alterações na Verificação de E/S que combinam testes de "Nível 1" e "Nível 2", testes opcionais de Verificação de E/S Aprimorada
  • Novas extensões do depurador !deadlock e !dma
  • As novas verificações de erros são: 0xE6 (VIOLAÇÃO_DO_VERIFICADOR_DE_DRIVER_DMA) e 0xF1 (VIOLAÇÃO_DETECTADA_PELO_VERIFICADOR_SCSI)
  • Subcódigos adicionais para os códigos de verificação de bugs existentes 0xC4 e 0xC9

Os recursos do Verificador de Driver também incluem:

  • Novas opções de linha de comando do Verificador O utilitário verifier.exe tem um novo parâmetro, VolatileDriverList, que pode ser usado com a palavra-chave /adddriver para especificar uma lista de drivers a serem adicionados às configurações voláteis. VolatileDriverList pode ser usado com a palavra-chave /removedriver para especificar uma lista de drivers a serem removidos.

  • Novas extensões !verifier As novas extensões !verifier exibem informações de log adicionais ao monitorar recursos baixos ou aumentos de IRQL e bloqueios de rotação. Ajuda on-line também está disponível.

    • Sinalizadores definidos com 0x4 fazem com que a exibição inclua um log de falhas injetadas pelo Verificador de Driver durante a simulação de recursos limitados
    • Sinalizadores definidos com 0x8 faz com que a exibição inclua um registro das alterações IRQL mais recentes feitas pelos drivers que estão sendo verificados
    • Se Flags for igual a exatamente 0x4 ou 0x8, o parâmetro Quantity especificará o número de registros ou entradas de log a serem incluídos na exibição
    • O parâmetro ? mostra um breve texto de ajuda
  • Ajuda Online para o Driver Verifier Manager A Ajuda Online para o Driver Verifier Manager pode ser exibida de uma das seguintes maneiras:

    • Selecione e segure (ou clique com o botão direito do mouse) um item na janela Driver Verifier Manager e escolha O que é isso? no menu pop-up.
    • Selecione o ponto de interrogação (?) no canto superior direito da janela e, em seguida, selecione um item na janela Driver Verifier Manager.