Instalación de un controlador sin firmar durante el desarrollo y la prueba

De forma predeterminada, las versiones de 64 bits de Windows Vista y versiones posteriores de Windows cargarán un controlador en modo kernel solo si el kernel puede comprobar la firma del controlador. Sin embargo, este comportamiento predeterminado se puede deshabilitar durante el desarrollo temprano del controlador y para las pruebas no automatizadas. Los desarrolladores pueden utilizar uno de los mecanismos siguientes para deshabilitar temporalmente la aplicación en tiempo de carga de una firma de controlador válida. Sin embargo, para automatizar completamente las pruebas de un controlador instalado por Plug and Play (PnP), se debe firmar el archivo de catálogo del controlador. Firmar el controlador es necesario porque Windows Vista y las versiones posteriores de Windows muestran un cuadro de diálogo de firma de controladores para los controladores sin firmar que requieren que un administrador del sistema autorice la instalación del controlador, lo que podría impedir que cualquier usuario sin los privilegios necesarios instale el controlador y use el dispositivo. Este comportamiento de instalación del controlador PnP no se puede deshabilitar en Windows Vista y versiones posteriores de Windows.

Usar la opción de arranque avanzado F8

Windows Vista y las versiones posteriores de Windows admiten la opción avanzada de arranque F8 "Deshabilitar la aplicación de la firma de controladores", que deshabilita la aplicación de firma en tiempo de carga para un controlador en modo kernel solo para la sesión actual del sistema. Esta configuración no persiste en los reinicios del sistema.

Conecte un depurador de kernel para deshabilitar la comprobación de firmas

Adjuntar un depurador de kernel activo a un equipo de desarrollo o prueba deshabilita la validación de firmas en tiempo de carga para los controladores en modo kernel. Para usar esta configuración de depuración, adjunte un equipo de depuración a un equipo de desarrollo o prueba y habilite la depuración de kernel en el equipo de desarrollo o prueba mediante la ejecución del comando siguiente:

bcdedit -debug on

Para usar BCDEdit, el usuario debe ser miembro del grupo local Administradores del equipo y ejecutar el comando desde un símbolo del sistema con privilegios elevados. Para abrir una ventana del símbolo del sistema con privilegios elevados, cree un acceso directo de escritorio para Cmd.exe, seleccione y mantenga presionado (o haga clic con el botón derecho) en el acceso directo y seleccione Ejecutar como administrador.

Aplicación de la comprobación de firma en modo kernel en el modo de depuración del kernel

Sin embargo, hay situaciones en las que es posible que un desarrollador tenga conectado un depurador de kernel, pero también deba mantener la comprobación de firmas en tiempo de carga. Por ejemplo, cuando una pila de controladores tiene un controlador sin firmar (por ejemplo, un controlador de filtro) cuya carga falla, puede invalidar toda la pila. Dado que adjuntar un depurador permite cargar el controlador sin firmar, el problema parece desaparecer en cuanto se adjunta el depurador. La depuración de este tipo de problema puede ser difícil.

Para facilitar la depuración de estos problemas, la directiva de firma de código en modo kernel admite el siguiente valor del Registro:

HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags

Este valor del Registro es de tipo REG_DWORD y se puede asignar un valor basado en una operación OR bit a bit de una o varias de las marcas siguientes:

0x00000001
Este valor configura el kernel para que interrumpa el depurador si hay un controlador que no está firmado. El desarrollador o el verificador pueden entonces elegir cargar el controlador sin firmar escribiendo g en el símbolo del sistema del depurador.

0x00000010
Este valor de indicador configura el kernel para ignorar la presencia del depurador y para bloquear siempre la carga de un controlador sin firmar.

Si este valor del Registro no existe en el Registro o tiene un valor que no se basa en los indicadores descritos anteriormente, el kernel siempre carga un controlador en modo de depuración de kernel independientemente de si el controlador está firmado.

Nota Este valor del Registro no existe de forma predeterminada en el Registro. Debe crear el valor con el fin de depurar la verificación de firma en modo kernel.