Controladores admitidos
Para que SDV compruebe un controlador, debe ser capaz de interpretar el código del controlador, en concreto, los puntos de entrada del controlador y el código de las funciones y rutinas que admiten la funcionalidad de controlador necesaria.
En las secciones siguientes se describen los requisitos básicos de los controladores y la sintaxis específica que SDV espera de los controladores que comprueba. SDV no comprueba que los controladores cumplan estos requisitos, pero si el controlador no cumple, SDV puede no ejecutarse y, en raras situaciones, notifica resultados falsos positivos o falsos negativos debido a una interpretación incorrecta.
Importante
SDV ya no es compatible y SDV no está disponible en las versiones de WDK o EWDK de Windows 24H2. No está disponible en WDK más reciente que la compilación 26017 y no se incluye en windows 24H2 RTM WDK.
SDV todavía se puede usar descargando windows 11, versión 22H2 EWDK (publicada el 24 de octubre de 2023) con las herramientas de compilación de Visual Studio 17.1.5 desde Descargar el Kit de controladores de Windows (WDK). Solo se recomienda el uso de Enterprise WDK para ejecutar SDV. No se recomienda usar versiones anteriores del WDK estándar junto con las versiones recientes de Visual Studio, ya que esto probablemente provocará errores de análisis.
En el futuro, CodeQL será la herramienta de análisis estático principal para los controladores. CodeQL proporciona un lenguaje de consulta eficaz que trata el código como una base de datos que se va a consultar, lo que facilita la escritura de consultas para comportamientos, patrones y mucho más específicos.
Para obtener más información sobre el uso de CodeQL, consulte CodeQL y la prueba de logotipo de herramientas estáticas.
Características básicas del controlador
SDV solo puede comprobar los controladores con las siguientes características:
SDV comprueba los controladores y las bibliotecas que se escriben en C y C++.
SDV realiza la comprobación completa solo en controladores de dispositivos compatibles con KMDF y compatibles con WDM (controladores de función, controladores de filtro y controladores de autobús), controladores NDIS (controladores de filtro, minipuerto y controladores de protocolo) y controladores de Storport.
SDV intenta comprobar de forma limitada las propiedades genéricas (como NullCheck) en los controladores que no caben en las categorías anteriores.
SDV puede comprobar los controladores WDM que declaran sus funciones de devolución de llamada del controlador mediante los tipos de rol de función WDM. Para obtener información sobre cómo declarar funciones, consulte Declaración de funciones mediante tipos de roles de función para controladores WDM.
SDV puede comprobar los controladores que se generan a partir del marco de controladores del modo kernel, siempre que declare cada función de devolución de llamada mediante un tipo de rol de función de devolución de llamada SDV-KMDF. Para obtener más información, consulte Declaración de funciones mediante tipos de roles de función para controladores KMDF.
SDV puede comprobar los controladores NDIS, siempre que anote cada función de devolución de llamada con la declaración de función mediante un tipo de función de devolución de llamada SDV-NDIS. Para obtener más información, consulte Declaración de funciones mediante tipos de roles de función para controladores NDIS.
SDV puede comprobar los controladores de Storport, siempre que anote cada función de devolución de llamada con la declaración de función. Para ello, use un tipo de función de devolución de llamada SDV-Storport. Para obtener más información, consulte Declaración de funciones mediante el uso de tipos de roles de función para controladores de Storport.
Requisitos básicos del controlador
Para que SDV compruebe un controlador WDM, el controlador debe:
Incluya Wdm.h o Ntddk.h (Wdm.h es un subconjunto de Ntddk.h).
Cree objetos de dispositivo mediante métodos que se describen en Introducción a objetos de dispositivo y a continuación.
Tener una rutina de descarga escrita como se recomienda en Escribir una rutina de descarga.
Declare cada función de distribución mediante una declaración de tipo de rol de función, que se describe en Uso de declaraciones de tipo de rol de función. Para obtener información sobre los tipos de rol WDM y las anotaciones de _Dispatch_type_ (tipo), consulte Declaración de funciones mediante tipos de rol de función para controladores WDM.
Para que SDV compruebe un controlador KMDF, el controlador debe:
Incluya Wdf.h y Ntddk.h.
Cree los objetos KMDF descritos en Uso del marco para desarrollar un controlador.
Anota cada función de devolución de llamada mediante un tipo de rol de función de devolución de llamada SDV-KMDF, que se describe en Uso de declaraciones de tipo de rol de función. Para obtener una lista de los tipos de rol admitidos, consulte Declaraciones de función KMDF del comprobador de controladores estáticos.
Para que SDV compruebe un controlador NDIS, el controlador debe:
Incluya Ndis.h y Ntddk.h.
Siga las instrucciones de la Guía de diseño de red para crear controladores NDIS.
Anota cada función de devolución de llamada mediante un tipo de rol de función de devolución de llamada SDV-NDIS, tal como se describe en Uso de declaraciones de tipo de rol de función. Para obtener una lista de los tipos de roles admitidos, consulte Declaraciones de función NDIS del comprobador de controladores estáticos.
Además, SDV puede comprobar los controladores que admiten:
Administración de energía.
Instrumental de administración de Windows (WMI).
Nombres de funciones reservadas
El motor de comprobación de SDV no funciona correctamente cuando el código de controlador o biblioteca usa los mismos patrones de nombre de función que SDV usa internamente.
En concreto, SDV no interpreta correctamente el código si:
El código incluye nombres de función que comienzan por __init y van seguidos de uno o varios enteros, como __init123.
El código incluye nombres de función que comienzan por sdv_, como sdv_Func, o incluyen la cadena _sdv_, como Func_sdv_ o Func_sdv_foo.
La biblioteca usa un
.def
archivo para cambiar el nombre de una función exportada y el nombre externo es el mismo que el nombre de otra función estática de la biblioteca.
Si el código de controlador o el código de biblioteca incluye estos elementos, SDV intenta comprobar el controlador o procesar la biblioteca, pero el resultado no es compatible con la característica (NSF). Para obtener más información sobre los resultados de SDV, consulte Interpretación de los resultados del comprobador de controladores estáticos.