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

Por padrão, as versões de 64 bits do 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 inicial do driver e para testes não automatizados. Os desenvolvedores podem usar um dos mecanismos a seguir para desabilitar temporariamente a imposição de tempo de carga de uma assinatura de driver válida. No entanto, para automatizar totalmente o teste de um driver instalado pelo Plug and Play (PnP), o arquivo de catálogo do driver deve ser assinado. A assinatura do driver é necessária 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

O 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 de modo kernel somente para a sessão atual do sistema. Essa configuração não persiste entre 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 comandos 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) o atalho e selecione Executar como administrador.

Impor verificação de assinatura Kernel-Mode no modo de depuração de 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 não assinado (como um driver de filtro) que falha ao carregá-lo pode invalidar toda a pilha. Como anexar um depurador permite que o driver sem sinal 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 invadir o depurador se um driver não estiver assinado. O desenvolvedor ou 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 sem sinal.

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

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