CodeQL y la prueba de logotipo de herramientas estáticas
CodeQL y seguridad del controlador
Microsoft se compromete a mitigar la superficie expuesta a ataques para el sistema operativo Windows y garantizar que los controladores de terceros cumplan una barrera estricta de seguridad es fundamental para lograr ese objetivo. Un paso para establecer esta barrera de seguridad es el requisito para el Programa de compatibilidad de hardware con Windows (WHCP), que indica que todos los envíos de controladores deben usar el motor CodeQL en el código fuente del controlador y corregir las infracciones que se consideran de "corrección obligatoria".
CodeQL, de GitHub, es un potente motor de análisis de código semántico, y la combinación de un amplio conjunto de consultas de seguridad de alto valor junto con una plataforma robusta lo convierten en una herramienta muy valiosa para proteger el código del controlador.
El uso de CodeQL con fines de pruebas de WHCP es aceptable en virtud del Contrato de licencia de usuario final del Kit de laboratorio de hardware (HLK). Para los participantes de WHCP, el CLUF de HLK sobrescribe los términos y condiciones de CodeQL de GitHub indicando que CodeQL se puede usar durante el análisis automatizado, CI o CD, como parte de los procesos de ingeniería normales para analizar los controladores que se van a enviar y certificar como parte del WHCP.
El requisito de analizar el código fuente del controlador y corregir las infracciones de "corrección obligatoria" se aplicará mediante la prueba de logotipo de herramientas estáticas.
En este tema se describe cómo:
- Use CodeQL para analizar el código fuente del controlador para conocer problemas de seguridad de alto impacto conocidos.
- Asegúrese de que la prueba de logotipo de herramientas estáticas puede consumir los resultados de la ejecución de CodeQL.
- Determine qué consultas "must-fix" deben ejecutarse para la certificación WHCP.
Importante
El Programa de compatibilidad de hardware de Windows necesita CodeQL para pruebas de logotipo de herramientas estáticas (STL) en nuestros sistemas operativos de cliente y servidor. Seguiremos manteniendo el servicio de SDV y CA en productos anteriores. Se recomienda a los partners a comprobar los requisitos de CodeQL para las pruebas de logotipo de herramientas estáticas.
CLUF de HLK y CodeQL
El uso de CodeQL con el fin de certificar las pruebas del Programa de compatibilidad de hardware con Windows es aceptable en virtud del Contrato de licencia de usuario final del Kit de laboratorio de hardware (HLK). Para los participantes de WHCP, el CLUF de HLK sobrescribe los términos y condiciones de CodeQL de GitHub. El CLUF de HLK indica que CodeQL se puede usar durante el análisis automatizado, CI o CD, como parte de los procesos de ingeniería normales con el fin de analizar los controladores que se van a enviar y certificar como parte del Programa de compatibilidad de hardware con Windows. Para aquellos que lo sigan para uso general, deben leer los Términos y condiciones de CodeQL de GitHub o ponerse en contacto con CodeQL.
Conceptos de CodeQL
CodeQL es un motor de análisis estático que usan los desarrolladores para realizar análisis de seguridad en el código fuera de un entorno activo. CodeQL ingiere código mientras se compila y compila una base de datos a partir de este. La base de datos se convierte en un directorio que contiene datos consultables, una referencia de origen y archivos de registro. Una vez compilada la base de datos, se puede ejecutar el análisis mediante consultas CodeQL (también denominadas comprobaciones o reglas) que determinarán si el código fuente contiene infracciones o vulnerabilidades de seguridad. CodeQL proporciona una biblioteca de consultas estándar que comprueban la corrección del lenguaje y la semántica, y que proporcionan un gran valor a los desarrolladores que desean asegurarse de que su código no contiene errores ni vulnerabilidades.
CodeQL también proporciona la opción de crear consultas personalizadas. Para obtener más información sobre cómo escribir consultas personalizadas, consulte Escritura de consultas en la documentación de CodeQL.
CodeQL también proporciona una herramienta de línea de comandos (CLI) de CodeQL para realizar fácilmente acciones de CodeQL o realizar análisis a gran escala.
Puede encontrar documentación complementaria de la CLI de CodeQL en Introducción a CodeQL.
1. Configuración de CodeQL
Para el uso del Programa de compatibilidad de hardware con Windows
Matriz de versiones del Programa de compatibilidad de hardware con Windows
Use esta matriz para determinar las versiones que se van a descargar.
Versión de Windows | Versión de la CLI de CodeQL | microsoft/windows-drivers QL pack version | codeql/cpp-queries QL pack version | Rama que se va a usar |
---|---|---|---|---|
Windows Server 2022 | 2.4.6 o 2.15.4 | 1.0.13 (Si usa codeql 2.15.4) | 0.9.0 (Si usa codeql 2.15.4) | WHCP_21H2 |
Windows 11 | 2.4.6 o 2.15.4 | 1.0.13 (Si usa codeql 2.15.4) | 0.9.0 (Si usa codeql 2.15.4) | WHCP_21H2 |
Windows 11, versión 22H2 | 2.6.3 o 2.15.4 | 1.0.13 (Si usa codeql 2.15.4) | 0.9.0 (Si usa codeql 2.15.4) | WHCP_22H2 |
Windows 11, versión 23H2 | 2.6.3 o 2.15.4 | 1.0.13 (Si usa codeql 2.15.4) | 0.9.0 (Si usa codeql 2.15.4) | WHCP_22H2 |
Windows 11, versión 24H2 | 2.15.4 | 1.1.0 | 0.9.0 | WHCP_24H2 |
No se especifica una versión de paquete QL para la CLI de CodeQL 2.4.6 y 2.6.3 porque solo las versiones más recientes de CodeQL admiten el uso de paquetes QL.
Para uso general
Para el uso general de CodeQL con otras versiones de Windows fuera del programa de WHCP, o para desarrollar y probar consultas, actualmente se recomienda la siguiente versión y rama:
Versión de la CLI de CodeQL | microsoft/windows-drivers qlpack version | versión codeql/cpp-queries | Rama que se va a usar |
---|---|---|---|
2.15.4 | latest | latest | principal |
Descarga e instalación de CodeQL
Nota:
Visual Studio 17.8 rompió la compatibilidad con las versiones anteriores de CodeQL utilizadas en las ramas WHCP_21H2 y WHCP_22H2. Se ha validado la versión 2.15.4 de la CLI de CodeQL para su uso con WHCP 21H2 y WHCP 22H2 cuando se usa Visual Studio 17.8 o posterior. Para el programa WHCP, use la versión de la CLI de CodeQL de acuerdo con la tabla anterior y la versión de Windows para la que está certificando: versión 2.4.6, versión 2.6.3 o versión 2.15.4. Para su uso general con la rama principal, use la versión de la CLI de CodeQL 2.15.4.
Cree un directorio para que contenga CodeQL. En este ejemplo se usa
C:\codeql-home\
C:\> mkdir C:\codeql-home
Consulte las tablas anteriores para seleccionar la versión de la CLI de CodeQL que se usará de acuerdo con la rama deseada de las consultas de controladores de Microsoft. Si va a realizar análisis como parte del programa WHCP, consulte la tabla Para el uso del Programa de compatibilidad de hardware con Windows; en caso contrario, use la rama principal y 2.15.4. El uso de una versión diferente puede dar lugar a que una base de datos no sea compatible con las bibliotecas.
Vaya a la versión de archivos binarios de la CLI de CodeQL asociada a las tablas anteriores y descargue el archivo ZIP de acuerdo con la arquitectura del proyecto. Por ejemplo, para Windows de 64 bits "codeql-win64.zip".
Extraiga el directorio de la CLI de CodeQL en el que acaba de crear, por ejemplo: C:\codeql-home\codeql.
Compruebe que CodeQL está instalado correctamente comprobando la versión:
C:\codeql-home\codeql>codeql --version CodeQL command-line toolchain release 2.15.4. Copyright (C) 2019-2023 GitHub, Inc. Unpacked in: C:\codeql-home\codeql Analysis results depend critically on separately distributed query and extractor modules. To list modules that are visible to the toolchain, use 'codeql resolve qlpacks' and 'codeql resolve languages'.
El comando de ayuda muestra información de uso de la línea de comandos.
C:\codeql-home\codeql\>codeql --help Usage: codeql <command> <argument>... Create and query CodeQL databases, or work with the QL language. GitHub makes this program freely available for the analysis of open-source software and certain other uses, but it is not itself free software. Type codeql --license to see the license terms. --license Show the license terms for the CodeQL toolchain. Common options: -h, --help Show this help text. -v, --verbose Incrementally increase the number of progress messages printed. -q, --quiet Incrementally decrease the number of progress messages printed. Some advanced options have been hidden; try --help -v for a fuller view. Commands: query Compile and execute QL code. bqrs Get information from .bqrs files. database Create, analyze and process CodeQL databases. dataset [Plumbing] Work with raw QL datasets. test Execute QL unit tests. resolve [Deep plumbing] Helper commands to resolve disk locations etc. execute [Deep plumbing] Low-level commands that need special JVM options. version Show the version of the CodeQL toolchain. generate Generate formatted QL documentation.
Instalación de paquetes CcodeQL
Para ramas de WHCP_21H2 y WHCP_22H2
Si usa Visual Studio 2022 17.8 o posterior con WHCP_21H2 o WHCP_22H2 y la CLI de CodeQL, versión 2.15.4:
- Siga los pasos de "TODAS LAS DEMÁS RAMAS".
- Asegúrese de quitar el submódulo de CodeQL si todavía tiene una versión anterior del repositorio clonado. CodeQL podría intentar usar las consultas en el submódulo de forma predeterminada, lo que provocará errores debido a versiones no coincidentes.
Si usa la versión 17.7 de Visual Studio o una versión inferior de AND, ya sea WHCP_21H2 o WHCP_22H2 LA CLI de AND CodeQL, versión 2.4.6 o 2.6.3:
- Siga las Instrucciones especiales para WHCP_21H2 y WHCP_22H2 con VS17.7 o versiones anteriores.
TODAS LAS DEMÁS RAMAS
Descarga de los paquetes de consulta de CodeQL
Ya no es necesario clonar el repositorio Windows-Driver-Developer-Supplemental-Tools para usar las consultas de certificación. Ahora se usan paquetes CodeQL ("paquetes QL" o "paquetes de consultas").
- Descargue la versión correcta del paquete microsoft/windows-drivers de la Matriz de versiones del programa de compatibilidad de hardware con Windows. Especifique la
@<version>
en el comando siguiente.
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>
Por ejemplo, si usa WHCP_24H2, ejecute el siguiente comando para descargar el paquete de consultas windows-drivers 1.1.0:
C:\codeql-home\> codeql pack download microsoft/windows-drivers@1.1.0
Use este comando para descargar la versión 0.9.0 del paquete de consultas cpp-queries de CodeQL.
C:\codeql-home\> codeql pack download codeql/cpp-queries@0.9.0
(Es posible omitir el paso anterior, ya que la opción descargará las --download
consultas necesarias más adelante en el proceso de análisis).
CodeQL instala los paquetes de consulta descargados en el directorio predeterminado:
C:\Users\<current user>\.codeql\packages\microsoft\windows-drivers\<downloaded version>\
No cambie este directorio ni mueva el paquete instalado.
Descarga de conjuntos de consultas de controladores de Windows
Busque y copie en el equipo local los dos conjuntos de consultas principales.
- windows-driver-recommended.qls
- windows-driver-mustfix.qls
El contenido aparece a continuación en Consultas y conjuntos; los dos archivos se encuentran en https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suites.
2. Compilación de la base de datos de CodeQL
En estos ejemplos se supone que se usa un entorno de desarrollo de Windows y que la ubicación de instalación es C:\codeql-home, pero puede usar la configuración que le convenga. Consulte Lenguajes y marcos admitidos de CodeQL para obtener una lista de los compiladores que se admiten.
Cree un directorio para CodeQL para colocar las bases de datos que crea. Por ejemplo: C:\codeql-home\databases
mkdir C:\codeql-home\databases
Use el comando CodeQL para crear una base de datos con los parámetros siguientes:
- el primer parámetro es un vínculo al directorio de la base de datos. Por ejemplo: C:\codeql-home\databases\MyDriverDatabase (este comando producirá un error si el directorio ya existe).
--language
o-l
es el lenguaje o los lenguajes en los que se encuentra el código fuente (puede ser una lista separada por comas; por ejemplo, [cpp, javascript]).-- source
o-s
es la ruta de acceso al código fuente.--command
o-c
es el comando de compilación o la ruta de acceso al archivo de compilación.
codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
Ejemplos
Ejemplo de un controlador simple.
C:\codeql-home\codeql> codeql database create D:\DriverDatabase --language=cpp --source-root=D:\Drivers\SingleDriver --command="msbuild /t:rebuild D:\Drivers\SingleDriver\SingleDriver.sln"
Ejemplo de varios controladores.
C:\codeql-home\codeql> codeql database create D:\SampleDriversDatabase --language=cpp --source-root=D:\AllMyDrivers\SampleDrivers --command=D:\AllMyDrivers\SampleDrivers\BuildAllSampleDrivers.cmd
Para obtener más información o ayuda con el comando database create
, vaya a Creación de bases de datos de CodeQL o use el siguiente comando:
C:\codeql-home\codeql> codeql database create --help
3. Realización de análisis
Nota:
Si usa visual Studio versión 17.7 o inferior Y WHCP_21H2 o WHCP_22H2 y la versión de la CLI de CodeQL 2.4.6 o 2.6.3, siga las Instrucciones especiales para WHCP_21H2 y WHCP_22H2 con VS17.7 o versiones anteriores.
En este momento, la configuración se completa y el siguiente paso es realizar el análisis real en el código fuente del controlador.
Use el comando CodeQL para analizar la base de datos mediante los parámetros siguientes:
- el primer parámetro es un vínculo al directorio de la base de datos. Por ejemplo: C:\codeql-home\databases\MyDriverDatabase. (Este comando producirá un error si el directorio no existe).
--download
indica a CodeQL que debe descargar las dependencias antes de ejecutar las consultas.--format
es el tipo de archivo el archivo de salida. Las opciones incluyen: SARIF y CSV. (Para los usuarios de WHCP, use el formato SARIF).--output
es la ruta de acceso a donde desea que se coloque el archivo de salida, asegúrese de incluir el formato en el nombre de archivo. (Este comando producirá un error si el directorio aún no existe).- el parámetro de especificadores de consulta es una lista separada por espacios de argumentos que pueden incluir:
- Una ruta de acceso a un archivo de consulta
- Una ruta de acceso a un directorio que contiene archivos de consulta
- Una ruta de acceso a un archivo de conjunto de consultas
- el nombre de un paquete de consultas de CodeQL
codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
Ejemplo:
codeql database analyze --download D:\DriverDatabase suites/windows-driver-recommended.qls --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif
Para obtener más información o ayuda con el comando
database analyze
, vaya a Análisis de bases de datos con la CLI de CodeQL y Uso de un paquete de CodeQL para analizar una base de datos de CodeQL.Para obtener ayuda de la línea de comandos, use el siguiente comando:
C:\codeql-home\codeql> codeql database analyze --help
Instrucciones especiales para WHCP_21H2 y WHCP_22H2 con VS17.7 o versiones anteriores
Estas instrucciones solo se aplican al usar Visual Studio 17.7 o versiones anteriores, junto con CodeQL 2.6.3 o 2.4.6
Instale la versión de CodeQL como se indica en los pasos anteriores.
Clone e instale el repositorio de herramientas complementarias del desarrollador de controladores de Windows que contiene las consultas CodeQL específicas para controladores:
git clone https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools.git --recurse-submodules
Consulte Matriz de versiones del Programa de compatibilidad de hardware con Windows para identificar la rama correcta de la versión de Windows para la que desea certificar.
Use el comando
git checkout
para desproteger la rama identificada.Confirme que los submódulos están presentes en el directorio codeql-home.
D:/codeql-home |--- codeql |--- Windows-Driver-Developer-Supplemental-Tools
Analice su base de datos de CodeQL.
Actualice este comando de ejemplo para que coincida con el entorno. Establezca los parámetros, ruta de acceso a la nueva base de datos, formato, archivo sarif de salida, ruta de acceso a la consulta CodeQL o al conjunto de consultas que se usará en el análisis.
codeql database analyze <path to database> --format=sarifv2.1.0 --output=<"path to output file".sarif> <path to query/suite to run>
Ejemplo:
codeql database analyze D:\DriverDatabase --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif D:\codeql-home\Windows-driver-developer-supplemental-tools\src\suites\windows_driver_mustfix.qls
Asegúrese de comprobar la ruta de acceso al conjunto o consulta que desea ejecutar, no todas las ramas tienen la misma estructura de archivos.
Consulte otras instrucciones de este documento para conocer los pasos siguientes, como el modo de revisar y enviar resultados de pruebas.
4. Visualización e interpretación de los resultados
Nos centraremos en el formato SARIF para esta sección, ya que es lo que se necesita para los siguientes pasos, aunque puede utilizar el formato CSV si se adapta mejor a sus necesidades.
El formato de intercambio de resultados de análisis estático (SARIF), un formato de tipo JSON que se usa para compartir los resultados del análisis estático. Obtenga más información sobre el estándar de OASIS Static Analysis Results Interchange Format (SARIF), how CodeQL uses SARIF Output y the schema json.
Hay varios métodos para interpretar los resultados del análisis, incluida la ordenación manual a través de los objetos. Estos son algunos de los que usamos:
El Visor de Microsoft Sarif (web) tiene funcionalidad que le permite arrastrar y soltar el archivo SARIF en el visor y, a continuación, muestra los resultados clasificados por regla. Esta es una manera muy rápida y sencilla de ver el recuento de infracciones o qué consultas tienen infracciones, pero menos fácil de encontrar información de código fuente aparte del número de línea. Tenga en cuenta que la página no se actualizará si no hay ninguna infracción.
El Visor de Microsoft SARIF para Visual Studio es excelente para mostrar los resultados en Visual Studio para realizar una transición sin problemas de los resultados al código fuente.
La sección más importante del archivo SARIF es la propiedad "Results" dentro del objeto "Run". Cada consulta tendrá una propiedad Results con detalles sobre las infracciones detectadas y dónde se produjeron. Si no se encuentra ninguna infracción, el valor de la propiedad estará vacío.
Las consultas se clasifican mediante estados como "error" "advertencia" y "problema", pero esta clasificación es independiente de cómo el Programa de compatibilidad de hardware con Windows y específicamente la prueba de logotipo de herramientas estáticas calificará los resultados. Cualquier controlador con defectos de cualquier consulta dentro del conjunto de "corrección obligatoria" no pasará la prueba de logotipo de herramientas estáticas y no podrá certificarse, independientemente de la clasificación de consultas en el archivo de consulta sin procesar (por ejemplo, "advertencia").
5. Eliminación de los resultados de CodeQL (opcional)
CodeQL para controladores admite la eliminación de resultados. En la actualidad, las eliminaciones se proporcionan como una comodidad para ayudar a los desarrolladores a clasificar los problemas y reducir el ruido, no como una forma de omitir las comprobaciones de corrección obligatoria. Por el momento, no afectan a la generación de un registro de comprobación de controladores ni a la superación de la prueba del logotipo de herramientas estáticas. Para usar eliminaciones, debe ejecutar la consulta DriverAlertSuppression.ql al mismo tiempo que las demás consultas o conjuntos que desea ejecutar. De forma predeterminada, esta consulta se habilita al ejecutar nuestros conjuntos desde nuestra rama principal o de desarrollo de GitHubs.
En el caso de las comprobaciones que se han migrado desde el análisis de código, se respetarán las eliminaciones de análisis de código existentes. Para obtener más información, consulte Advertencia pragma de C++.
Known limitation:
No puede combinar #pragma(disable) y #pragma(suppress) en la misma línea en este momento.
Para las comprobaciones que son nuevas en CodeQL, puede eliminarlas mediante una de estas dos acciones:
Escriba una anotación "#pragma(suppress:the-rule-id-here)" (entre comillas) en la línea anterior a la infracción, como lo haría con el análisis de código. "the-rule-id-here" se puede reemplazar por el valor @id de los metadatos de una consulta determinada, visible en la parte superior del archivo.
Escriba un comentario en la línea anterior compuesta por el texto "lgtm[the-rule-id-here]" (entre comillas). Deberá ejecutar la consulta de eliminación de alertas de C/C++ estándar en lugar de la consulta de eliminación de alertas del controlador.
Una vez que una supresión está presente y reconocida, el archivo SARIF resultante incluirá los datos que se suprimen y la mayoría de los visores de resultados no mostrarán el resultado de forma predeterminada.
6. Conversión de SARIF al formato del registro de comprobación de controladores (DVL)
La prueba de logotipo de herramientas estáticas analiza un registro de comprobación de controladores (DVL), que son los resultados compilados de varios motores de análisis estáticos que se han ejecutado en el código fuente del controlador. Hay tres maneras de convertir su archivo SARIF a formato DVL, seleccione el que mejor se adapte a su configuración.
Uso de Visual Studio (compilación de WDK Preview 20190 y versiones posteriores)
- Coloque el archivo de resultados de SARIF en el mismo directorio que el archivo .vcxproj.
- En el menú Extensión de controlador, seleccione Crear registro de comprobación de controladores.
- Compruebe que la interfaz de usuario de DVL detecta el archivo SARIF.
- Nota: si ha movido el archivo SARIF al directorio .vcxproj mediante la interfaz de usuario de Visual Studio, es posible que Visual Studio cree una referencia al archivo SARIF en lugar de moverlo realmente. Intente abrir el directorio fuera de Visual Studio para asegurarse de que realmente existe allí.
- Seleccione Crear.
Uso de MSBuild
Coloque el archivo de resultados de SARIF en el mismo directorio que el archivo .vcxproj.
Abra el símbolo del sistema de Visual Studio, el símbolo del sistema de herramientas de Visual Studio Native o el Kit para controladores de Windows para empresa (EWDK).
Use el comando msbuild con los parámetros siguientes:
- ruta de acceso al archivo de proyecto vcx
/target:dvl
/p:Configuration="Release"
/P:Platform=<platform>
(Use solo una de las siguientes cadenas: x86, x64, arm, arm64)
msbuild.exe <vcxprojectfile> /target:dvl /p:Configuration="Release" /P:Platform=<platform>
Usar CMD
Busque el dvl.exe desde el WDK o un eWDK montado.
Utilice el exe con los siguientes parámetros:
/manualCreate
driver name
(No incluya el formato de archivo .sys)driver architecture
(Use solo una de las siguientes cadenas: x86, x64, arm, arm64)
"C:\Program Files (x86)\Windows Kits\10\Tools\dvl\dvl.exe" /manualCreate <driver name> <driver architecture>
Encontrará instrucciones adicionales para la prueba HLK del logotipo de herramientas estáticas e instrucciones sobre dónde colocar el archivo DVL en Ejecución de la prueba.
7. Evento posterior a la compilación de Visual Studio (opcional)
Si va a compilar el controlador mediante Visual Studio, puede configurar consultas CodeQL para que se ejecuten como un evento posterior a la compilación.
En este ejemplo, se crea un pequeño archivo por lotes en la ubicación de destino y se llama como evento posterior a la compilación. Para obtener más información sobre los eventos de compilación de Visual Studio C++, consulte Especificación de eventos de compilación.
Cree un pequeño archivo por lotes que vuelva a crear la base de datos de CodeQL y, a continuación, ejecute las consultas deseadas en él. En este ejemplo, el archivo por lotes se denominará
RunCodeQLRebuildQuery.bat
. Modifique las rutas de acceso que se muestran en el archivo por lotes de ejemplo para que coincidan con las ubicaciones del directorio.ECHO ">>> Running CodeQL Security Rule V 1.0 <<<" ECHO ">>> Removing previously created rules database <<<" rmdir /s/q C:\codeql-home\databases\kmdf CALL C:\codeql-home\codeql\codeql\codeql.cmd database create -l=cpp -s="C:\codeql-home\drivers\kmdf" -c "msbuild /p:Configuration=Release /p:Platform=x64 C:\codeql-home\drivers\kmdf\kmdfecho.sln /t:rebuild /p:PostBuildEventUseInBuild=false " "C:\codeql-home\databases\kmdf" -j 0 CALL C:\codeql-home\codeql\codeql\codeql database analyze "C:\codeql-home\databases\kmdf" "C:\codeql-home\Windows-Driver-Developer-Supplemental-Tools\codeql\codeql-queries\cpp\ql\src\Likely Bugs\Underspecified Functions" --format=sarifv2.1.0 --output=C:\codeql-home\databases\kmdf.sarif -j 0 --rerun ECHO ">>> Loading SARIF Results in Visual Studio <<<" CALL devenv /Edit C:\codeql-home\databases\kmdf.sarif SET ERRORLEVEL = 0
La opción devenv.exe / Edit se usa en el archivo por lotes para abrir el archivo de resultados SARIF en la instancia existente de Visual Studio. Para ver los resultados de SARIF, instale el Visor de Microsoft SARIF para Visual Studio y consulte las instrucciones que encontrará para obtener más información.
En el proyecto de controlador, vaya a las propiedades del proyecto. En la lista desplegable Configuración, seleccione la configuración de compilación que desea comprobar con CodeQL, se recomienda "Versión". La creación de la base de datos de CodeQL y la ejecución de las consultas tarda unos minutos, por lo que no se recomienda ejecutar CodeQL en la configuración de depuración del proyecto.
Seleccione Eventos de compilación y Evento posterior a la compilación en las propiedades del proyecto de controlador.
Proporcione una ruta de acceso al archivo por lotes y una descripción del evento posterior a la compilación.
Los resultados de la ejecución del archivo por lotes se mostrarán al final de la salida de la compilación.
1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.ql. 1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.ql. 1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.ql. 1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.ql. 1>[1/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.bqrs. 1>[2/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.bqrs. 1>[3/4 eval 4.5s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.bqrs. 1>[4/4 eval 5.2s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.bqrs. 1>Shutting down query evaluator. 1>Interpreting results. 1>">>> Loading SARIF Results in Visual Studio <<<"
Solución de problemas
Si va a implementar un certificado con WHCP, asegúrese primero de usar la versión de HLK asociada a la versión de Windows que tiene como destino, la rama asociada en el repositorio de herramientas complementarias para desarrolladores de controladores de Windows y la versión posterior de la CLI de CodeQL. Para obtener la matriz de compatibilidad de versiones de HLK/Windows, consulte Kit de laboratorio de hardware de Windows y, para la versión de rama/CLI de CodeQL del repositorio de herramientas complementarias del desarrollador de controladores de Windows/versión de Windows, consulte la tabla WHCP en la sección Configuración de CodeQL.
Errores y soluciones alternativas
En el caso de problemas de coincidencia de la versión de la base de datos, las siguientes herramientas pueden resultar útiles.
Use el comando de versión codeql para mostrar la versión del exe codeql.
C:\codeql-home\codeql\>codeql version
CodeQL command-line toolchain release 2.4.0.
Copyright (C) 2019-2020 GitHub, Inc.
Unpacked in: C:\codeql-home\codeql\
Analysis results depend critically on separately distributed query and
extractor modules. To list modules that are visible to the toolchain,
use 'codeql resolve qlpacks' and 'codeql resolve languages'.
El comando de actualización de la base de datos actualizará una base de datos. Tenga en cuenta que se trata de una actualización unidireccional y no es reversible. Para obtener más información, consulte database upgrade.
Consultas y conjuntos
Como parte del repositorio de GitHub de Microsoft CodeQL, proporcionamos dos conjuntos de consultas para simplificar el flujo de trabajo de desarrollador de controladores de un extremo a otro. El conjunto de consultas windows_driver_recommended.qls es un superconjunto de todas las consultas que Microsoft ha considerado valiosas para los desarrolladores de controladores. El conjunto de consultas windows_driver_mustfix.qls incluye consultas consideradas "Must-Fix" (corrección obligatoria) para la certificación de WHCP, que se deben ejecutar e integrar para pasar la prueba de logotipo de herramientas estáticas. Los conjuntos de consultas de corrección obligatoria y recomendadas se actualizan cada cierto tiempo.
Consultas de corrección obligatoria
El subconjunto de consultas siguientes son de corrección obligatoria para la certificación WHCP y también se incluyen en el conjunto de correcciones recomendadas.
Este conjunto de reglas se incluye en windows_driver_mustfix.qls.
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/bad-addition-overflow-check | codeql/cpp-queries/<Version> /Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql |
CWE-190, CWE-192 |
cpp/pointer-overflow-check | codeql/cpp-queries/<Version> /Likely Bugs/Memory Management/PointerOverflow.ql |
N/D |
cpp/too-few-arguments | codeql/cpp-queries/<Version> /Likely Bugs/Underspecified Functions/TooFewArguments.ql |
N/D |
cpp/comparison-with-wider-type | codeql/cpp-queries/<Version> /Security/CWE/CWE-190/ComparisonWithWiderType.ql |
CWE-190, CWE-197, CWE-835 |
cpp/hresult-boolean-conversion | codeql/cpp-queries/<Version> /Security/CWE/CWE-253/HResultBooleanConversion.ql |
CWE-253 |
El archivo windows_driver_mustfix.qls contiene estas consultas de código de corrección obligatoria.
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
- description: Security queries required to fix when certifying Windows Drivers
- queries: .
from: codeql/cpp-queries
version: 0.9.0
- include:
query path:
- Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
- Likely Bugs/Memory Management/PointerOverflow.ql
- Likely Bugs/Underspecified Functions/TooFewArguments.ql
- Security/CWE/CWE-190/ComparisonWithWiderType.ql
- Security/CWE/CWE-253/HResultBooleanConversion.ql
- import: windows-driver-suites/windows_mustfix_partial.qls
from: microsoft/windows-drivers
Este conjunto de reglas se incluye en windows-driver-suites/windows_mustfix_partial.qls.
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/windows/wdk/deprecated-api | /microsoft/windows-drivers/<Version> /drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql |
N/D |
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited | /microsoft/windows-drivers/<Version> /microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql |
CWE-704 |
El archivo windows_mustfix_partial.qls contiene estas consultas de código de corrección obligatoria.
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
- description: Security queries required to fix when certifying Windows Drivers
- queries: .
from: microsoft/windows-drivers
- include:
query path:
- drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql
- microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql
Consultas de corrección recomendada
Estas consultas forman parte del conjunto de consultas windows_driver_recommended.qls en el repositorio de CodeQL de GitHub de Microsoft. La columna "Enumeración de puntos débiles comunes" (CWE) especifica qué tipos de problemas de seguridad busca la consulta indicada. Consulte la página de Mitre en CWE para obtener más detalles sobre la CWE.
Procedimientos recomendados
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/offset-use-before-range-check | codeql/cpp-queries/<Version> /Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql |
N/D |
Errores probables
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/bad-addition-overflow-check | codeql/cpp-queries/<Version> /Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql |
CWE-190, CWE-192 |
cpp/integer-multiplication-cast-to-long | codeql/cpp-queries/<Version> /Likely Bugs/Arithmetic/IntMultToLong.ql |
CWE-190, CWE-192, CWE-197, CWE-681 |
cpp/signed-overflow-check | codeql/cpp-queries/<Version> /Likely Bugs/Arithmetic/SignedOverflowCheck.ql |
N/D |
cpp/upcast-array-pointer-arithmetic | codeql/cpp-queries/<Version> /Likely Bugs/Conversion/CastArrayPointerArithmetic.ql |
CWE-119, CWE-843 |
cpp/pointer-overflow-check | codeql/cpp-queries/<Version> /Likely Bugs/Memory Management/PointerOverflow.ql |
N/D |
cpp/too-few-arguments | codeql/cpp-queries/<Version> /Likely Bugs/Underspecified Functions/TooFewArguments.ql |
N/D |
cpp/incorrect-not-operator-usage | codeql/cpp-queries/<Version> /Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql |
CWE-480 |
cpp/suspicious-add-sizeof | codeql/cpp-queries/<Version> /Likely Bugs/Memory Management/SuspiciousSizeof.ql |
CWE-468 |
cpp/uninitialized-local | codeql/cpp-queries/<Version> /Likely Bugs/Memory Management/UninitializedLocal.ql |
CWE-457, CWE-665 |
Seguridad
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/conditionally-uninitialized-variable | codeql/cpp-queries/<Version> /Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. |
CWE-457 |
cpp/unterminated-variadic-call | codeql/cpp-queries/<Version> /Security/CWE/CWE-121/UnterminatedVarargsCall.ql |
CWE-121 |
cpp/suspicious-pointer-scaling | codeql/cpp-queries/<Version> /Security/CWE/CWE-468/IncorrectPointerScaling.ql |
CWE-468 |
cpp/suspicious-pointer-scaling-void | codeql/cpp-queries/<Version> /Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql |
CWE-468 |
cpp/potentially-dangerous-function | codeql/cpp-queries/<Version> /Security/CWE/CWE-676/PotentiallyDangerousFunction.ql |
CWE-676 |
cpp/incorrect-string-type-conversion | codeql/cpp-queries/<Version> /Security/CWE/CWE-704/WcharCharConversion.ql |
CWE-704 |
cpp/comparison-with-wider-type | codeql/cpp-queries/<Version> /Security/CWE/CWE-190/ComparisonWithWiderType.ql |
CWE-190, CWE-197, CWE-835 |
cpp/hresult-boolean-conversion | codeql/cpp-queries/<Version> /Security/CWE/CWE-253/HResultBooleanConversion.ql |
CWE-253 |
cpp/suspicious-add-sizeof | codeql/cpp-queries/<Version> /Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql |
CWE-468 |
El archivo windows_driver_recommended.qls contiene estas consultas de código recomendadas.
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
from: microsoft/windows-drivers
- import: windows-driver-suites/windows_recommended_partial.qls
from: microsoft/windows-drivers
- queries: .
from: codeql/cpp-queries
version: 0.9.0
- include:
query path:
- Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
- Likely Bugs/Arithmetic/IntMultToLong.ql
- Likely Bugs/Arithmetic/SignedOverflowCheck.ql
- Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
- Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
- Likely Bugs/Memory Management/SuspiciousSizeof.ql
- Likely Bugs/Memory Management/UninitializedLocal.ql
- Security/CWE/CWE-121/UnterminatedVarargsCall.ql
- Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql
- Security/CWE/CWE-468/IncorrectPointerScaling.ql
- Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
- Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
- Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
- Security/CWE/CWE-704/WcharCharConversion.ql
- Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
- Likely Bugs/Memory Management/PointerOverflow.ql
- Likely Bugs/Underspecified Functions/TooFewArguments.ql
- Security/CWE/CWE-190/ComparisonWithWiderType.ql
- Security/CWE/CWE-253/HResultBooleanConversion.ql
Estas consultas forman parte de windows_recommended_partial.qls.
Errores probables: windows_recommended_partial.qls
ID | Location | Enumeración de puntos débiles comunes |
---|---|---|
cpp/paddingbyteinformationdisclosure | microsoft/windows-drivers/<Version> /microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql |
N/D |
cpp/badoverflowguard | microsoft/windows-drivers/<Version> /microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql |
N/D |
cpp/infiniteloop | microsoft/windows-drivers/<Version> /microsoft/Likely Bugs/Conversion/InfiniteLoop.ql |
N/D |
cpp/uninitializedptrfield | microsoft/windows-drivers/<Version> /microsoft/Likely Bugs/UninitializedPtrField.ql |
N/D |
cpp/use-after-free | microsoft/windows-drivers/<Version> /microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql |
N/D |
Seguridad: windows_recommended_partial.qls
ID | Location | Advertencia de análisis de código |
---|---|---|
cpp/weak-crypto/cng/hardcoded-iv | /microsoft/windows-drivers/<Version> /microsoft/Security/Crytpography/HardcodedIVCNG.ql |
N/D |
Controladores: General
ID | Location | Advertencia de análisis de código |
---|---|---|
cpp/drivers/ke-set-event-pageable | /microsoft/windows-drivers/<Version> /drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql |
No hay ninguna comprobación de CA asociada |
cpp/drivers/role-type-correctly-used | /microsoft/windows-drivers/<Version> /drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql |
No hay ninguna comprobación de CA asociada |
cpp/drivers/extended-deprecated-apis | /microsoft/windows-drivers/<Version> /drivers/general/queries/ExtendedDeprecatedApis.ql |
Advertencia C28719, Advertencia C28726, Advertencia C28735, Advertencia C28750 |
cpp/drivers/irql-not-saved | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql |
Advertencia C28158 |
cpp/drivers/irql-not-used | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql |
Advertencia C28157 |
cpp/drivers/irql-set-too-high | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql |
Advertencia C28150 |
cpp/drivers/irql-too-low | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlTooLow/IrqlTooLow.ql |
Advertencia C28120 |
cpp/drivers/irql-set-too-high | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql |
Advertencia C28121 |
cpp/drivers/irql-set-too-low | /microsoft/windows-drivers/<Version> /drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql |
Advertencia C28124 |
cpp/drivers/pool-tag-integral | /microsoft/windows-drivers/<Version> /drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql |
Advertencia C28134 |
cpp/drivers/str-safe | /microsoft/windows-drivers/<Version> /drivers/general/queries/StrSafe/StrSafe.ql |
Advertencia C28146 |
Controladores: WDM
ID | Location | Advertencia de análisis de código |
---|---|---|
cpp/drivers/illegal-field-access | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql |
Advertencia C28128 |
cpp/drivers/illegal-field-access2 | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql |
Advertencia C28175 |
cpp/drivers/illegal-field-write | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql |
Advertencia C28176 |
cpp/drivers/opaque-mdl-use | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql |
(No hay ninguna comprobación de CA asociada) |
cpp/drivers/opaque-mdl-write | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql |
Advertencia C28145 |
cpp/drivers/pending-status-error | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/PendingStatusError/PendingStatusError.ql |
Advertencia C28143 |
cpp/drivers/wrong-dispatch-table-assignment | /microsoft/windows-drivers/<Version> /drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql |
Advertencia C28169 |
El archivo windows-driver-suites/windows_recommended_partial.qls contiene estas consultas de código recomendadas.
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
- queries: .
from: microsoft/windows-drivers
- include:
query path:
- microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql
- microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql
- microsoft/Likely Bugs/Conversion/InfiniteLoop.ql
- microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql
- microsoft/Likely Bugs/UninitializedPtrField.ql
- microsoft/Security/Crytpography/HardcodedIVCNG.ql
- drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql
- drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql
- drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql
- drivers/general/queries/ExaminedValue/ExaminedValue.ql
- drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql
- drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql
- drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql
- drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql
- drivers/general/queries/IrqlTooLow/IrqlTooLow.ql
- drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql
- drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql
- drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql
- drivers/general/queries/StrSafe/StrSafe.ql
- drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql
- drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql
- drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql
- drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql
- drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql
- drivers/wdm/queries/PendingStatusError/PendingStatusError.ql
- drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql
Preguntas más frecuentes (FAQ)
¿Cuándo será necesario para la certificación de dispositivos?
Consulte el Proceso de certificación del Programa de compatibilidad de hardware con Windows para obtener más información sobre los requisitos.
¿Cuál es la motivación detrás de la necesidad de ejecutar CodeQL en el código fuente del controlador?
La motivación para exigir que CodeQL se ejecute en el código fuente del controlador se puede resumir por dos razones principales:
- La seguridad de Windows es primordial y exigir que CodeQL se ejecute en el código fuente de los controladores es un paso para ayudar a mejorar la seguridad de los componentes que obtienen la certificación de Microsoft.
- Los ingenieros de seguridad de Microsoft desarrollan activamente las consultas de CodeQL, ya que Microsoft se compromete a garantizar que su ecosistema de hardware se beneficia de las mismas herramientas de alta calidad que se usan en Microsoft.
¿A qué tipos de controladores se aplica CodeQL y la prueba de logotipo de herramientas estáticas?
En la actualidad, la prueba de logotipo de herramientas estáticas requiere que se ejecute CodeQL y que se pase el conjunto de consultas "Must-Fix" para todos los controladores en modo kernel, excepto los controladores de gráficos. Tenga en cuenta que la ejecución de CodeQL en controladores gráficos es muy recomendable aunque no sea obligatoria actualmente. Algunas consultas también pueden encontrar defectos útiles en los componentes en modo de usuario.
Se prevé ampliar la prueba y sus consultas para requerir resultados para controladores gráficos, controladores de modo usuario y componentes de controladores, así como otros componentes del paquete de controladores en el futuro. Si encuentra un comportamiento inesperado o falsos positivos que ejecutan CodeQL en controladores gráficos o controladores en modo usuario, envíe un problema a través del repositorio Windows-Driver-Developer-Supplemental-Tools.
¿Qué licencia rige el uso de CodeQL para desarrolladores de controladores?
El uso de CodeQL con fines de pruebas de WHCP es aceptable en virtud del Contrato de licencia de usuario final del Kit de laboratorio de hardware (HLK). Para los participantes de WHCP, el CLUF de HLK sobrescribe los términos y condiciones de CodeQL de GitHub. El CLUF de HLK indica que CodeQL se puede usar durante el análisis automatizado, CI o CD, como parte de los procesos de ingeniería normales con el fin de analizar los controladores que se van a enviar y certificar como parte del WHCP.
¿Es necesario usar Visual Studio o msbuild para ejecutar CodeQL?
CodeQL no requiere que se use MSBuild ni Visual Studio. Consulte Lenguajes y marcos admitidos para obtener una lista de los compiladores que se admiten.
¿Cómo comprueba el HLK que mi controlador se ha analizado con CodeQL?
La prueba de logotipo de herramientas estáticas en HLK es la prueba que aplica este requisito. Los detalles de la prueba de logotipo de herramientas estáticas se pueden encontrar en su página de MS Docs.
¿Todos los defectos notificados por CodeQL son verdaderos?
Cada consulta CodeQL tiene distintos niveles de precisión. Nuestro objetivo es minimizar los falsos positivos, pero de vez en cuando se producen. Nuestro conjunto de consultas "Must-Fix" se han desarrollado y seleccionado manualmente para su uso con el programa WHCP porque nuestras pruebas extensas generan casi cero falsos positivos. Si le salen falsos positivos de una consulta en el conjunto de consultas "Must-Fix", envíe un correo electrónico de inmediato a stlogohelp@microsoft.com
o abra una incidencia en el repositorio Windows-Driver-Developer-Supplemental-Tools y haremos lo posible para resolverlo cuanto antes.
¿La clasificación de una consulta como "advertencia" o "error" importa a efectos de la prueba del logotipo de herramientas estáticas?
Las consultas se clasifican mediante estados como "error" "advertencia" y "problema" en CodeQL, pero esta clasificación es independiente de cómo el Programa de compatibilidad de hardware con Windows y específicamente la prueba de logotipo de herramientas estáticas calificará los resultados. Cualquier controlador con defectos de cualquier consulta dentro del conjunto de "corrección obligatoria" no pasará la prueba de logotipo de herramientas estáticas y no podrá certificarse, independientemente de la clasificación de consultas en el archivo de consulta sin procesar (por ejemplo, "advertencia").
¿Puedo generar un DVL en soluciones de Visual Studio?
No, la generación de DVL debe ejecutarse en el nivel de proyecto y no se puede ejecutar en soluciones de Visual Studio. Encontrará instrucciones sobre cómo generar un DVL en: Creación de un registro de comprobación de controladores.
¿Puedo generar un registro de comprobación de controladores (DVL) fuera del contexto de msbuild o Visual Studio?
Como parte del Kit para controladores de Windows (WDK) y WDK de empresa (eWDK), Microsoft envía un componente denominado dvl.exe que se puede usar para generar registros de comprobación de controladores (DVL). A partir de las versiones preliminares de WDK/eWDK 21342 y posteriores, es posible generar un DVL desde la línea de comandos fuera del contexto de msbuild o Visual Studio transfiriendo un nombre de controlador y una arquitectura. Consulte Creación de un registro de comprobación de controladores para obtener más detalles.
Tengo comentarios o preguntas sobre cómo utilizar CodeQL en mi controlador, ¿dónde puedo enviar mis comentarios?
Envíe sus comentarios y preguntas a stlogohelp@microsoft.com.