Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Windows Driver Kit (WDK) fornece ferramentas de verificação de drivers que o ajudam a detetar e corrigir erros durante o desenvolvimento. Estas ferramentas incluem ferramentas de análise estática como o CodeQL e ferramentas dinâmicas como o Driver Verifier, que podem identificar bugs críticos antes da implementação. Utilizar estas ferramentas de verificação no início do desenvolvimento economiza tempo e previne problemas graves de drivers (controladores) durante a fase de produção.
A documentação do WDK descreve estas ferramentas de verificação e recomenda a sua utilização porque cada ferramenta deteta diferentes tipos de erros do driver de formas distintas. Estas ferramentas são muito mais eficientes do que as verificações manuais. Conseguem detetar erros que normalmente não se encontram em testes de drivers padrão e incorporam a experiência de programadores experientes e designers de interfaces de drivers para Windows.
Para melhores resultados, use todas as ferramentas que possam funcionar no seu driver. Se omitires alguma destas ferramentas, podes não detectar um bug sério no teu driver.
Ferramentas de verificação estática e dinâmica
Existem dois tipos básicos de ferramentas de verificação:
As ferramentas de verificação estática examinam o código do driver sem executá-lo. Como estas ferramentas não dependem de testes que exerçam o código, podem ser extremamente detalhadas. Teoricamente, as ferramentas de verificação estática podem examinar todo o código do driver, incluindo caminhos de código que raramente são executados na prática. No entanto, como o driver não está realmente a funcionar, estas ferramentas podem gerar resultados falsos positivos. Ou seja, podem reportar um erro num caminho de código que não ocorre na prática.
O CodeQL é a principal ferramenta de análise estática para drivers. O CodeQL fornece uma linguagem de consulta poderosa que trata o código como uma base de dados a ser consultada, tornando simples a escrita de consultas para comportamentos e padrões específicos. O Programa de Compatibilidade de Hardware do Windows requer CodeQL para Testes de Logótipo de Ferramenta Estático (STL) nos nossos sistemas operativos Cliente e Servidor. Para obter mais informações, consulte CodeQL e o Teste de Logotipo de Ferramentas Estáticas.
As ferramentas de verificação dinâmica examinam o código do driver enquanto o driver está em execução, geralmente intercetando chamadas para rotinas de suporte ao driver comumente usadas e substituindo chamadas para suas próprias versões de verificação de erros das mesmas rotinas. Como o driver está realmente em execução enquanto as ferramentas dinâmicas estão fazendo a verificação, resultados falso-positivos são raros. No entanto, como as ferramentas dinâmicas detetam apenas as ações que ocorrem enquanto monitorizam o condutor, podem falhar certos defeitos do condutor se a cobertura dos testes de condução não for adequada. Ao mesmo tempo, ao utilizar informação disponível em tempo de execução – por exemplo, informação que é mais difícil de extrair estaticamente do código-fonte – as ferramentas de verificação dinâmica podem detetar certas classes de erros de driver que são mais difíceis de detetar com ferramentas de análise estática.
Use uma combinação de ferramentas de verificação estáticas e dinâmicas. As ferramentas estáticas permitem verificar caminhos de código que são difíceis de exercer na prática, enquanto as ferramentas dinâmicas encontram erros graves que estão ocorrendo no driver.
Visão geral das ferramentas de verificação
Importante
A ferramenta Static Driver Verifier (SDV) já não é suportada. Não está disponível em WDKs mais recentes do que a versão 26017, incluindo o Windows 24H2 RTM WDK. Não é recomendado usar o SDV para análise.
O WDK descreve as seguintes ferramentas de verificação e recomenda a sua utilização por desenvolvedores de drivers e testadores. Estão listados pela ordem em que normalmente os utilizas.
Após a compilação do código
- O CodeQL é um potente motor de análise de código semântico. A combinação de um conjunto extenso de consultas de segurança de alto valor e uma plataforma robusta torna-o uma ferramenta inestimável para proteger o código do driver. Para obter mais informações, consulte CodeQL e o Teste de Logotipo de Ferramentas Estáticas.
Quando o driver é executado
Use as seguintes ferramentas de verificação dinâmica assim que o driver for construído e estiver sendo executado sem erros óbvios.
Driver Verifier é uma ferramenta de verificação dinâmica escrita especialmente para drivers do Windows. Inclui múltiplos testes que podes executar em vários drivers em simultâneo. O Driver Verifier é tão eficaz a detetar bugs graves nos drivers que desenvolvedores e testadores experientes o configuram para correr sempre que o driver corre num ambiente de desenvolvimento ou teste. Driver Verifier está incluído no Windows. Quando se ativa o Verificador de Controladores para um determinado controlador, também se devem realizar vários testes no mesmo. O Verificador de Driver pode detetar certos bugs de driver que são difíceis de detetar usando apenas ferramentas de verificação estática. Exemplos desses tipos de bugs incluem o seguinte:
Saturações de buffer do pool de kernel. Quando o driver verificado aloca buffers de memória de pool, o Driver Verifier protege-os usando uma página de memória não acessível. Se o driver tentar usar memória para além do fim do buffer, o Driver Verifier inicia uma verificação de bugs.
Usando a memória depois de libertá-la. Blocos de memória de pool especiais usam a sua própria página de memória e não partilham páginas de memória com outras alocações. Quando o driver liberta o bloco de memória do pool, a página de memória correspondente torna-se inacessível. Se o driver tentar usar essa memória depois de a libertar, o driver crasha instantaneamente.
Usando memória paginável durante a execução em IRQL elevado. Quando um controlador verificado aumenta o IRQL para DISPATCH_LEVEL ou superior, o Verificador de Controladores elimina toda a memória paginável do conjunto de trabalho do sistema, simulando um sistema sob pressão de memória. O driver falha se ele tentar usar um desses endereços virtuais pagináveis.
Simulação de Baixos Recursos. Para simular um sistema em condições de poucos recursos, o Driver Verifier pode falhar várias APIs do kernel do sistema operativo que os drivers chamam.
Fugas de memória. O Driver Verifier regista as alocações de memória feitas pelo driver e garante que este liberta a memória antes de ser descarregada.
Operações de E/S que levam muito tempo para serem concluídas ou canceladas. O Driver Verifier pode testar a lógica do driver para responder a
STATUS_PENDINGvalores de retorno do IoCallDriver.Verificação de Conformidade de DDI. (Disponível a partir do Windows 8) O Verificador de Driver aplica um conjunto de regras de interface de driver de dispositivo (DDI) que verificam a interação adequada entre um driver e a interface do kernel do sistema operacional.
O Kernel Address Sanitizer (KASAN) é uma tecnologia de deteção de bugs suportada em drivers do Windows que permite detetar várias classes de acessos ilegais à memória, como estouros de buffer e eventos de uso após liberação.
Verificador de Aplicações é uma ferramenta de verificação dinâmica para aplicações e drivers em modo utilizador escrita em C ou C++. Não verifica o código gerido.