Share via


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 usar 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), el archivo de catálogo del controlador debe estar firmado. La firma del controlador es necesaria porque Windows Vista y versiones posteriores de Windows muestran un cuadro de diálogo de firma de controladores para 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 versiones posteriores de Windows admiten la opción de arranque avanzado F8 ( "Deshabilitar el cumplimiento de firmas de controlador" ) que deshabilita la aplicación de firmas en tiempo de carga para un controlador en modo kernel solo para la sesión del sistema actual. Esta configuración no persiste en los reinicios del sistema.

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

La asociación de un depurador de kernel activo a un equipo de desarrollo o prueba deshabilita la aplicació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 del kernel en el equipo de desarrollo o prueba mediante la ejecución del siguiente comando:

bcdedit -debug on

Para usar BCDEdit, el usuario debe ser miembro del grupo Administradores en el sistema 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 pulsado (o haga clic con el botón derecho) en el acceso directo y seleccione Ejecutar como administrador.

Aplicación de Kernel-Mode comprobación de firma en modo de depuración de kernel

Sin embargo, hay situaciones en las que es posible que un desarrollador necesite tener asociado un depurador de kernel, pero también debe mantener la aplicació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) que no puede cargarlo puede invalidar toda la pila. Dado que la asociación de un depurador permite que el controlador sin firmar se cargue, 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 un OR bit a bit de una o varias de las marcas siguientes:

0x00000001
Este valor de marca configura el kernel para que se interrumpa en el depurador si un controlador no está firmado. Después, el desarrollador o el evaluador pueden elegir cargar el controlador sin firmar escribiendo g en el símbolo del depurador.

0x00000010
Este valor de marca configura el kernel para omitir la presencia del depurador y bloquear siempre que se cargue un controlador sin firmar.

Si este valor del Registro no existe en el Registro o tiene un valor que no se basa en las marcas descritas anteriormente, el kernel siempre carga un controlador en modo de depuración del 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 para depurar la comprobación de firma en modo kernel.