Partilhar via


Noções básicas sobre o Driver Verifier estático

Para escrever um driver robusto que esteja em conformidade com o WDM (Windows Driver Model) ou o KMDF (Kernel Mode Driver Framework), NDIS ou Storport, você deve ter experiência e entender como o driver interage com o gerenciador de E/S. Testar esses drivers é igualmente complicado.

Desenvolver drivers sólidos pode ser um desafio pelos seguintes motivos:

  • Os drivers são assíncronos, mesmo em máquinas de processador único.

  • Os motoristas são massivamente reentrantes.

  • Os motoristas usam muitas regras obscuras.

  • Os modelos de motoristas são evolutivos e envelhecem ao longo do tempo.

O teste de drivers de dispositivo é limitado pelos seguintes motivos:

  • Observação. Não é possível observar um erro na interação entre o driver e o sistema operacional. Os drivers podem violar regras de uso implícitas, resultando em uma falha ou comportamento inadequado, mas é difícil detectar a causa raiz de um erro ao desenvolver e testar drivers.

  • Controle. Os drivers que funcionam corretamente em circunstâncias normais podem ter erros sutis que ocorrem apenas em situações excepcionais, como quando um driver abaixo dele na pilha falha em um IRP. Tais situações são difíceis de exercer, de modo que o teste tradicional não detecta adequadamente os caminhos de erro através do código do driver.

O SDV melhora a observação e o controle que você tem ao testar drivers. Ao definir regras para o uso adequado das funções WDM, KMDF, NDIS e Storport e monitorar a conformidade do motorista com essas regras, o SDV melhora sua capacidade de observar erros. Por exemplo, a regra WDM LowerDriverReturn especifica que, em determinadas circunstâncias, a rotina de despacho de um driver deve sempre retornar o valor que foi retornado pelo driver inferior na pilha.

O SDV também aumenta o controle, fornecendo:

  • Um modelo hostil do ambiente do driver, onde vários cenários piores (como chamadas do sistema operacional falhando continuamente) podem acontecer.

  • Poderosa análise estática (chamada de verificação de modelo) que explora sistematicamente todos os caminhos de execução possíveis no driver.

O SDV é uma ferramenta essencial de teste de unidade para drivers de dispositivo. Ele coloca um driver em um ambiente hostil e testa sistematicamente os caminhos de código através do driver, procurando violações das regras de uso do modelo de driver.

Importante

O SDV não é mais suportado e o SDV não está disponível nas versões WDK ou EWDK do Windows 24H2. Ele não está disponível em WDKs mais recentes que a compilação 26017 e não está incluído no Windows 24H2 RTM WDK. O SDV ainda pode ser usado baixando o Windows 11, versão 22H2 EWDK (lançado em 24 de outubro de 2023) com as ferramentas de compilação do Visual Studio 17.1.5 de Baixar o Kit de Driver do Windows (WDK). Recomenda-se apenas o uso do Enterprise WDK para executar o SDV. Usar versões mais antigas do WDK padrão em conjunto com versões recentes do Visual Studio não é recomendado, pois isso provavelmente resultará em falhas de análise.
No futuro, o CodeQL será a principal ferramenta de análise estática para drivers. O CodeQL fornece uma linguagem de consulta poderosa que trata o código como um banco de dados a ser consultado, simplificando a gravação de consultas para comportamentos, padrões e muito mais específicos. Para obter mais informações sobre como usar o CodeQL, consulte CodeQL e o teste de logotipo de ferramentas estáticas.