Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para que o SDV verifique um driver, ele deve ser capaz de interpretar o código do driver, especificamente, os pontos de entrada do driver e o código em funções e rotinas que dão suporte à funcionalidade de driver necessária.
As seções a seguir descrevem os requisitos básicos para drivers e a sintaxe específica que o SDV espera dos drivers que ele verifica. O SDV não verifica se os drivers cumprem os requisitos, mas se o driver não os cumprir, o SDV poderá não ser executado corretamente e, em situações raras, relatará resultados falsos positivos ou falsos negativos devido a uma interpretação incorreta.
Importante
O SDV não tem mais suporte 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 o build 26017 e não está incluído no WDK do Windows 24H2 RTM.
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 construção do Visual Studio 17.1.5 a partir do Download do Kit de Drivers do Windows (WDK). É recomendável apenas o uso do WDK Enterprise para executar o SDV. Não é recomendável usar versões mais antigas do WDK padrão em conjunto com versões recentes do Visual Studio, pois isso provavelmente resultará em falhas de análise.
De agora em diante, o CodeQL será a ferramenta principal de análise estática para drivers de software. 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 específicos, padrões e muito mais.
Para obter mais informações sobre como usar o CodeQL, consulte CodeQL e o Teste de Logotipo de Ferramentas Estáticas.
Características básicas do driver
O SDV é capaz de verificar apenas os drivers com as seguintes características:
O SDV verifica drivers e bibliotecas que são escritos em C e C++.
O SDV executa a verificação completa somente em drivers de dispositivo compatíveis com KMDF e WDM (drivers de função, drivers de filtro e drivers de barramento), drivers NDIS (drivers de filtro, miniporto e protocolo) e drivers Storport.
O SDV tenta a verificação limitada de propriedades genéricas (como NullCheck) em drivers que não pertencem às categorias acima.
O SDV pode verificar os drivers WDM que declaram suas funções de retorno de chamada usando os tipos de funções de função WDM. Para obter informações sobre como declarar funções, consulte Declarando funções usando tipos de função para drivers WDM.
O SDV pode verificar os drivers produzidos a partir do Kernel-Mode Driver Framework, desde que você declare cada função de retorno de chamada usando um tipo de função de retorno de chamada SDV-KMDF. Para obter mais informações, consulte Declarando funções usando tipos de função para drivers KMDF.
O SDV pode verificar drivers NDIS, contanto que você anote cada função de retorno de chamada com a declaração de função, usando o tipo de função de retorno de chamada SDV-NDIS. Para obter mais informações, consulte Declarando funções usando tipos de função para drivers NDIS.
O SDV pode verificar os drivers do Storport, desde que você anote cada função de retorno de chamada com a declaração de função. Faça isso usando um tipo de função callback SDV-Storport. Para obter mais informações, consulte Declarando funções usando tipos de função para drivers Storport.
Requisitos básicos de controlador
Para que o SDV verifique um driver WDM, o driver deve:
Inclua Wdm.h ou Ntddk.h (Wdm.h é um subconjunto de Ntddk.h).
Crie objetos de dispositivo usando métodos descritos em Introdução aos Objetos de Dispositivo e a seguir.
Tenha uma rotina de descarregamento que seja escrita conforme recomendado em Escrever uma Rotina de Descarregamento.
Declare cada função de despacho usando uma declaração de tipo de função, descrita em Usando Declarações de Tipo de Função. Para obter informações sobre os tipos de função WDM e as anotações _Dispatch_type_ (tipo), consulte Declarando Funções Usando Tipos de Função para Drivers WDM.
Para que o SDV verifique um driver KMDF, o driver deve:
Inclua Wdf.h e Ntddk.h.
Crie os objetos KMDF descritos em Usar a Estrutura para desenvolver um driver.
Anote cada função de retorno de chamada usando um tipo de função de retorno de chamada SDV-KMDF, descrito em Usar Declarações de Tipo de Função. Para obter uma lista dos tipos de função com suporte, consulte Declarações de função KMDF do Verificador de Driver Estático.
Para que o SDV verifique um driver NDIS, o driver deve:
Inclua Ndis.h e Ntddk.h.
Siga as diretrizes no Guia de Projeto de Redes para criar drivers NDIS.
Anote cada função de retorno de chamada usando um tipo de função de retorno de chamada SDV-NDIS, conforme descrito em Usar Declarações de Tipo de Função. Para obter uma lista dos tipos de função com suporte, consulte Declarações de função NDIS do Verificador de Driver Estático.
Além disso, o SDV pode verificar os drivers que dão suporte a:
Nomes de funções reservadas
O mecanismo de verificação SDV não funciona corretamente quando o código de driver ou biblioteca usa os mesmos padrões de nome de função que o SDV usa internamente.
Especificamente, o SDV não interpretará corretamente o código se:
O código inclui nomes de função que começam com __init e são seguidos por um ou mais inteiros, como __init123.
O código inclui nomes de função que começam com sdv_, como sdv_Func ou incluem a cadeia de caracteres _sdv_, como Func_sdv_ ou Func_sdv_foo.
A biblioteca usa um
.defarquivo para renomear uma função exportada e o nome externo é o mesmo que o nome de outra função estática na biblioteca.
Se o código do driver ou o código da biblioteca incluir esses elementos, o SDV tentará verificar o driver ou processar a biblioteca, mas o resultado será NSF (Recurso Sem Suporte). Para obter mais informações sobre os resultados do SDV, consulte Interpretando os resultados do verificador de driver estático.