Share via


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 de "corrección obligatoria" deben ejecutarse para la certificación WHCP.

Importante

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. Seguiremos manteniendo la compatibilidad con SDV y CA en productos más antiguos. Se recomienda encarecidamente a los asociados revisar los requisitos de CodeQL para la prueba 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 versión del paquete de QL 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 del paquete de QL para codeQL CLI 2.4.6 y 2.6.3 porque solo las versiones más recientes de CodeQL admiten paquetes QL.

Para uso general

Para el uso general de CodeQL con otras versiones de Windows fuera del programa WHCP, o para desarrollar y probar consultas, actualmente se recomienda la siguiente versión y rama:

Versión de la CLI de CodeQL versión de qlpack microsoft/windows-drivers versión codeql/cpp-queries Rama que se va a usar
2.15.4 latest latest main

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.

  1. Cree un directorio para que contenga CodeQL. En este ejemplo se usará C:\codeql-home\

    C:\> mkdir C:\codeql-home
    
  2. 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.

  3. 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".

  4. Extraiga el directorio de la CLI de CodeQL en el que acaba de crear, por ejemplo: C:\codeql-home\codeql.

  5. 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'.
    
  6. 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 visual Studio versión 17.7 o inferior a 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.

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 para la certificación. Ahora se usan paquetes CodeQL ("paquetes de QL" o "paquetes de consultas").

  1. 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

(Tenga en cuenta que es posible omitir el paso anterior, ya que la opción --download descargará las consultas necesarias más adelante en el proceso de análisis).

CodeQL instalará 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 los conjuntos de consultas de controladores de Windows

Busque y copie en el equipo local los dos archivos del conjunto de consultas principal.

  • windows-driver-recommended.qls
  • windows-driver-mustfix.qls

Su contenido se muestra 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.

  1. Cree un directorio para CodeQL para colocar las bases de datos que crea. Por ejemplo: C:\codeql-home\databases

    mkdir C:\codeql-home\databases
    
  2. 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.

  1. 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

  1. Instale la versión de CodeQL como se indica en los pasos anteriores.

  2. 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

  3. 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.

  4. Use el comando git checkout para desproteger la rama identificada.

  5. Confirme que los submódulos están presentes en el directorio codeql-home.

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. 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.

  7. 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 en Formato de intercambio de resultados de análisis estáticos (SARIF) de OASIS, cómo CodeQL usa la Salida de SARIF y un ejemplo de salida de SARIF sin procesar.

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 extensión SARIF para Visual Studio Code.

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 la eliminación esté presente y se reconozca, el archivo SARIF resultante incluirá los datos de que se eliminó un resultado, 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)

  1. Coloque el archivo de resultados de SARIF en el mismo directorio que el archivo .vcxproj.
  2. En el menú Extensión de controlador, seleccione Crear registro de comprobación de controladores.
  3. 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í.
  4. Seleccione Crear.

Uso de MSBuild

  1. Coloque el archivo de resultados de SARIF en el mismo directorio que el archivo .vcxproj.

  2. 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).

  3. 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

  1. Busque el dvl.exe desde el WDK o un eWDK montado.

  2. 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.

  1. 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
    
  2. 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.

  3. 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.

  4. Seleccione Eventos de compilación y Evento posterior a la compilación en las propiedades del proyecto de controlador.

  5. Proporcione una ruta de acceso al archivo por lotes y una descripción del evento posterior a la compilación.

Configuración de eventos posteriores a la compilación de Visual Studio que muestra un archivo por lotes configurado como una opción de línea de comandos.

  1. 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 está certificando con WHCP, asegúrese primero de que usa la versión de HLK asociada a la versión de Windows que tiene como destino, la rama asociada en el repositorio 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 contiene consultas consideradas "Must-Fix" para la certificación WHCP, que se deben ejecutar y pasar para pasar la prueba de logotipo de Static Tools. Los conjuntos de consultas Must-Fix y Recommended se actualizan periódicamente.

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

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.

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
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:

  1. 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.
  2. Los ingenieros de seguridad de Microsoft desarrollan activamente las consultas CodeQL, ya que Microsoft se ha comprometido a garantizar que su ecosistema de hardware se beneficie de las mismas herramientas de alta calidad que se utilizan 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 de "corrección obligatoria" se han desarrollado y seleccionado manualmente para su uso con el programa WHCP porque nuestras exhaustivas pruebas dan como resultado casi 0 falsos positivos. Si ve falsos positivos de una consulta en el conjunto de consultas "Must-Fix", envíe un correo electrónico stlogohelp@microsoft.com inmediatamente o envíe un problema en el repositorio Windows-Driver-Developer-Supplemental-Tools y trabajaremos para resolverlo lo antes posible.

¿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.