Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El Kit de controladores de Windows (WDK) proporciona herramientas de comprobación de controladores que te ayudan a detectar y corregir errores durante el desarrollo. Estas herramientas incluyen herramientas de análisis estáticos, como CodeQL y herramientas dinámicas, como comprobador de controladores, que pueden encontrar errores críticos antes de la implementación. El uso de estas herramientas de verificación al principio del desarrollo ahorra tiempo y evita problemas graves de controladores en la producción.
La documentación de WDK describe estas herramientas de verificación y recomienda su uso porque cada herramienta detecta diferentes tipos de errores de controlador de maneras diferentes. Estas herramientas son mucho más eficaces que las comprobaciones manuales. Pueden detectar errores que normalmente no se encuentran en las pruebas de controladores estándar y incorporan la experiencia de los desarrolladores de controladores experimentados y diseñadores de interfaz de controladores de Windows.
Para obtener los mejores resultados, use todas las herramientas que se pueden ejecutar en el controlador. Si omite alguna de estas herramientas, es posible que pase por alto un error grave en el controlador.
Herramientas de comprobación estáticas y dinámicas
Hay dos tipos básicos de herramientas de comprobación:
Las herramientas de comprobación estática examinan el código del controlador sin ejecutar el controlador. Dado que estas herramientas no se basan en pruebas que ejercen el código, pueden ser extremadamente exhaustivas. En teoría, las herramientas de comprobación estática pueden examinar todo el código del controlador, incluidas las rutas de acceso de código que rara vez se ejecutan en la práctica. Sin embargo, dado que el controlador no se está ejecutando realmente, estas herramientas podrían generar resultados falsos positivos. Es decir, podrían notificar un error en una ruta de código que no ocurre en la práctica.
CodeQL es la herramienta de análisis estático principal para 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 y patrones específicos. El Programa de compatibilidad de hardware de Windows requiere codeQL para pruebas de logotipo de herramientas estáticas (STL) en nuestros sistemas operativos cliente y servidor. Para obtener más información, consulte CodeQL y la prueba del logotipo de herramientas estáticas.
Las herramientas de comprobación dinámica examinan el código del controlador mientras se ejecuta el controlador, normalmente interceptando las llamadas a rutinas de soporte técnico de controladores que se usan habitualmente y sustituyendo las llamadas a sus propias versiones de comprobación de errores de las mismas rutinas. Dado que el controlador se está ejecutando realmente mientras las herramientas dinámicas realizan la comprobación, los resultados falsos positivos son poco frecuentes. Sin embargo, dado que las herramientas dinámicas detectan solo las acciones que se producen mientras supervisan el controlador, las herramientas podrían pasar por alto ciertos defectos del controlador si la cobertura de las pruebas del controlador no es adecuada. Al mismo tiempo, mediante el uso de información disponible en tiempo de ejecución( por ejemplo, información más difícil de extraer estáticamente del código fuente: las herramientas de verificación dinámica pueden detectar determinadas clases de errores de controlador que son más difíciles de detectar con herramientas de análisis estáticos.
Use una combinación de herramientas de verificación estáticas y dinámicas. Las herramientas estáticas permiten comprobar las rutas de acceso de código difíciles de ejercer en la práctica, mientras que las herramientas dinámicas encuentran errores graves que se producen en el controlador.
Información general sobre las herramientas de comprobación
Importante
La herramienta Comprobador de controladores estáticos (SDV) ya no se admite. No está disponible en WDKs más recientes que una compilación 26017, incluido el WDK RTM de Windows 24H2. No se recomienda usar el SDV para el análisis.
El WDK describe las siguientes herramientas de verificación y recomienda su uso por parte de desarrolladores y evaluadores de controladores. Se muestran en el orden en que se usan normalmente.
Después de compilar el código
- CodeQL es un potente motor de análisis de código semántico. La combinación de un amplio conjunto de consultas de seguridad de alto valor y una plataforma sólida lo convierte en una herramienta inestimable para proteger el código de controlador. Para obtener más información, consulte CodeQL y la prueba del logotipo de herramientas estáticas.
Cuando se ejecuta el controlador
Use las siguientes herramientas de comprobación dinámica en cuanto se compila el controlador y se ejecuta sin errores obvios.
El Comprobador de controladores es una herramienta de verificación dinámica escrita especialmente para controladores de Windows. Incluye varias pruebas que se pueden ejecutar en varios controladores simultáneamente. El Comprobador de Controladores es tan eficaz para encontrar errores graves en los controladores que los desarrolladores y evaluadores experimentados lo configuran para que se ejecute cada vez que sus controladores funcionan en un entorno de desarrollo o prueba. El comprobador de controladores está incluido en Windows. Al habilitar el Comprobador de controladores para un controlador, también debe ejecutar varias pruebas en el controlador. El comprobador de controladores puede detectar determinados errores de controlador que son difíciles de detectar mediante herramientas de comprobación estáticas por sí solas. Entre los ejemplos de estos tipos de errores se incluyen los siguientes:
Saturaciones del búfer del grupo de kernels. Cuando el controlador validado asigna búferes de memoria del grupo, Driver Verifier los protege mediante una página de memoria inaccesible. Si el controlador intenta usar la memoria más allá del final del búfer, el Comprobador de controladores inicia una comprobación de errores.
Usar memoria después de liberarla. Los bloques de memoria de grupos especiales usan su propia página de memoria y no comparten páginas de memoria con otras asignaciones. Cuando el controlador libera el bloque de memoria del grupo, la página de memoria correspondiente deja de ser accesible. Si el controlador intenta usar esa memoria después de liberarla, el controlador se bloquea al instante.
Uso de la memoria paginable mientras se ejecuta en IRQL con privilegios elevados. Cuando un controlador comprobado genera irQL en DISPATCH_LEVEL o superior, el comprobador de controladores recorta toda la memoria paginable del conjunto de trabajo del sistema, simulando un sistema bajo presión de memoria. El controlador se bloquea si intenta usar una de estas direcciones virtuales paginables.
Simulación de recursos bajos. Para simular un sistema en condiciones de recursos bajos, Driver Verifier puede hacer fallar varias API del kernel del sistema operativo a las que llaman los controladores.
Fugas de memoria. El comprobador de controladores realiza un seguimiento de las asignaciones de memoria realizadas por un controlador y se asegura de que el controlador libera la memoria antes de descargarla.
Operaciones de E/S que tardan demasiado tiempo en completarse o cancelarse. El comprobador de controladores puede probar la lógica del controlador para responder a los
STATUS_PENDINGvalores devueltos de IoCallDriver.Comprobación de cumplimiento de DDI. (Disponible a partir de Windows 8) El comprobador de controladores aplica un conjunto de reglas de interfaz de controlador de dispositivo (DDI) que comprueban la interacción adecuada entre un controlador y la interfaz de kernel del sistema operativo.
Kernel Address Sanitizer (KASAN) es una tecnología de detección de errores compatible con controladores de Windows que le permite detectar varias clases de accesos de memoria ilegales, como desbordamientos de búfer y eventos de uso después de liberar.
Application Verifier es una herramienta de verificación dinámica para aplicaciones y controladores en modo de usuario escritos en C o C++. No comprueba el código administrado.