Compartilhar via


Drivers com suporte

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 suportam a funcionalidade necessária do driver.

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 motoristas cumprem esses requisitos, mas se o motorista não cumprir, o SDV pode deixar de rodar e, em raras situações, relata resultados falsos positivos ou falsos negativos devido a erros de interpretação.

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.

Características básicas do driver

SDV é capaz de verificar apenas drivers com as seguintes características:

  • 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, miniporta e protocolo) e drivers Storport.

  • O SDV tenta a verificação limitada de propriedades genéricas (como NullCheck) em drivers que não se encaixam nas categorias acima.

  • O SDV pode verificar os drivers WDM que declaram suas funções de retorno de chamada de driver usando os tipos 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 que são 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, desde que você anote cada função de retorno de chamada com a declaração de função usando um 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 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 de retorno de chamada SDV-Storport. Para obter mais informações, consulte Declarando funções usando tipos de função para drivers Storport.

Requisitos básicos do driver

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 a objetos de dispositivo e a seguir.

  • Tenha uma rotina de descarregamento que seja gravada conforme recomendado em Escrevendo uma rotina de descarregamento.

  • Declare cada função de despacho usando uma declaração de tipo de função de função, descrita em Usando declarações de tipo de função 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 Usando 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 Usando declarações de tipo de função 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:

  • Incluir Ndis.h e Ntddk.h.

  • Siga as diretrizes no Guia de Design de Rede 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 Usando declarações de tipo de função 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 drivers que suportem:

Nomes de função reservados

O mecanismo de verificação SDV não funciona corretamente quando o driver ou código de biblioteca usa os mesmos padrões de nome de função que SDV usa internamente.

Especificamente, o SDV não interpreta 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 .def arquivo 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 do código da biblioteca incluir esses elementos, o SDV tentará verificar o driver ou processar a biblioteca, mas o resultado será NSF (Recurso Não Suportado). Para obter mais informações sobre resultados de SDV, consulte Interpretando resultados do verificador de driver estático.