Partilhar via


Controladores suportados

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 de driver necessária.

As seções a seguir descrevem os requisitos básicos para controladores e a sintaxe específica que o SDV exige dos controladores que verifica. O SDV não verifica se os drivers cumprem esses requisitos, mas se o driver não cumprir, o SDV pode falhar na execução e, em situações raras, ele relata resultados falsos positivos ou falsos negativos devido a má 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 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.

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.

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

  • O SDV pode verificar os drivers WDM que declaram as suas funções de retorno de chamada dos drivers usando os tipos de funções do 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 mais informações, consulte Definição de funções usando tipos de função para drivers KMDF.

  • O SDV pode verificar os 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 cada função de callback seja anotada com a declaração de função. Para fazer isso, use 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 controlador

Para que o SDV verifique um controlador WDM, o controlador deve:

Para que SDV verifique um driver KMDF, o driver deve:

Para que o SDV verifique um controlador NDIS, o controlador deve:

Além disso, o SDV pode verificar drivers que suportam:

Nomes de funções reservadas

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

Especificamente, o SDV não interpreta corretamente o código se:

  • O código inclui nomes de funções 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 o código da biblioteca incluir esses elementos, o SDV tentará verificar o driver ou processar a biblioteca, mas o resultado será o recurso não suportado (NSF). Para obter mais informações sobre os resultados do SDV, consulte Interpretando os resultados do verificador de driver estático.