Instalar um driver não assinado durante o desenvolvimento e teste

Por padrão, versões de 64 bits de Windows Vista e versões posteriores do Windows carregarão um driver no modo kernel somente se o kernel puder verificar a assinatura do driver. No entanto, esse comportamento padrão pode ser desabilitado durante o desenvolvimento precoce do driver e para testes não automatizados. Os desenvolvedores podem usar um dos mecanismos a seguir para desabilitar temporariamente a imposição durante o carregamento de uma assinatura de driver válida. No entanto, para automatizar totalmente o teste de um driver instalado por Plug and Play (PnP), o arquivo de catálogo do driver deve ser assinado. Assinar o driver é necessário porque o Windows Vista e versões posteriores do Windows exibem uma caixa de diálogo de assinatura de driver para drivers não assinados que exigem que um administrador do sistema autorize a instalação do driver, potencialmente impedindo que qualquer usuário sem os privilégios necessários instale o driver e use o dispositivo. Esse comportamento de instalação do driver PnP não pode ser desabilitado no Windows Vista e em versões posteriores do Windows.

Usar a opção de inicialização avançada F8

Windows Vista e versões posteriores do Windows dão suporte à Opção de Inicialização Avançada F8 – "Desabilitar imposição de assinatura de driver" – que desabilita a imposição de assinatura de tempo de carga para um driver no modo kernel somente para a sessão atual do sistema. Essa configuração não persiste entre as reinicializações do sistema.

Anexar um depurador de kernel para desabilitar a verificação de assinatura

Anexar um depurador de kernel ativo a um computador de desenvolvimento ou teste desabilita a imposição de assinatura de tempo de carga para drivers no modo kernel. Para usar essa configuração de depuração, anexe um computador de depuração a um computador de desenvolvimento ou teste e habilite a depuração de kernel no computador de desenvolvimento ou teste executando o seguinte comando:

bcdedit -debug on

Para usar BCDEdit, o usuário deve ser membro do grupo Administradores no sistema e executar o comando em um prompt de comando com privilégios elevados. Para abrir uma janela do Prompt de Comando com privilégios elevados, crie um atalho de área de trabalho para Cmd.exe, selecione e segure (ou clique com o botão direito do mouse) no atalho e selecione Executar como administrador.

Impondo a verificação de assinatura em modo kernel no modo de depuração do kernel

No entanto, há situações em que um desenvolvedor pode precisar ter um depurador de kernel anexado, mas também precisa manter a imposição de assinatura em tempo de carga. Por exemplo, quando uma pilha de driver tem um driver sem assinatura (como um driver de filtro) que falha ao carregar, pode invalidar toda a pilha. Como anexar um depurador permite que o driver não assinado seja carregado, o problema parece desaparecer assim que o depurador é anexado. Depurar esse tipo de problema pode ser difícil.

Para facilitar a depuração desses problemas, a política de assinatura de código no modo kernel dá suporte ao seguinte valor do Registro:

HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags

Esse valor do Registro é do tipo REG_DWORD e pode ser atribuído a um valor com base em um OR bit a bit de um ou mais dos seguintes sinalizadores:

0x00000001
Esse valor de sinalizador configura o kernel para interromper a execução e entrar no depurador se um driver não estiver assinado. O desenvolvedor ou o testador pode optar por carregar o driver não assinado inserindo g no prompt do depurador.

0x00000010
Esse valor de sinalizador configura o kernel para ignorar a presença do depurador e sempre bloquear o carregamento de um driver não assinado.

Se esse valor do Registro não existir no registro ou tiver um valor que não seja baseado nos sinalizadores descritos anteriormente, o kernel sempre carregará um driver no modo de depuração do kernel, independentemente de o driver ser assinado.

Observação Esse valor do Registro não existe no registro por padrão. Você deve criar o valor para depurar a verificação de assinatura em modo kernel.