Partilhar via


Noções básicas sobre o verificador de driver 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 condutores estão em grande reentrada.

  • Os motoristas usam muitas regras obscuras.

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

O teste de drivers de dispositivo é limitado pelas seguintes limitações:

  • 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 detetar a causa raiz de um erro ao desenvolver e testar drivers.

  • Controlo. Drivers que funcionam corretamente em circunstâncias normais podem ter erros subtis que ocorrem apenas em situações excecionais, como quando um driver abaixo dele na pilha falha ao lidar com um IRP. Tais situações são difíceis de exercer, de modo que os testes tradicionais não detetam adequadamente os caminhos de erro através do código do driver.

O SDV melhora a observação e o controlo que tens quando testas controladores. 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 motorista, onde vários cenários piores (como chamadas do sistema operacional falhando continuamente) podem acontecer.

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

SDV é uma ferramenta essencial de testes unitários para drivers de dispositivo. Ele coloca um driver em um ambiente hostil e testa sistematicamente os caminhos de código no driver, procurando por 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 do 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 em Baixar o Kit de Driver do Windows (WDK). Somente o uso do Enterprise WDK para executar SDV é recomendado. O uso de 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 ferramenta principal de análise estática para controladores. O CodeQL fornece uma linguagem de consulta poderosa que trata o código como um banco de dados a ser consultado, simplificando a escrita 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.