Usando o Verificador KMDF

A estrutura fornece funcionalidade de verificação interna que você pode usar para testar um driver KMDF em execução. Essa funcionalidade, chamada Verificador KMDF, valida extensivamente o estado do driver e os argumentos que o driver passa para métodos de objeto de estrutura. Você pode usar o verificador da estrutura sozinho ou em conjunto com a ferramenta Verificador de Driver (Verifier.exe) de uso geral.

Se o Verificador KMDF estiver habilitado, a estrutura verificará a aquisição de bloqueios e hierarquias, garantirá que as chamadas para a estrutura ocorram no IRQL correto, verificará o cancelamento de E/S correto e o uso da fila e garantirá que o driver e a estrutura sigam os contratos documentados. Ele também pode simular condições de falta de memória para que o desenvolvedor do driver possa testar se o driver responde corretamente sem falhar, travar ou não descarregar.

Quando o Verificador KMDF está habilitado, a estrutura é interrompida no depurador se um período de tempo limite padrão de 60 segundos expirar antes que alguns dos eventos descritos anteriormente sejam concluídos. Neste ponto, você pode depurar o problema ou digitar "g" no depurador para reiniciar o período de tempo limite. Você pode alterar o período de tempo limite padrão usando o valor do Registro DbgWaitForSignalTimeoutInSec descrito em Controlando o comportamento do verificador.

Recomendamos executar o Verificador de Driver (Verifier.exe) durante o teste e adicionar seu próprio driver e wdf01000.sys à lista de verificação.

Observação

O KMDF Verifier é habilitado automaticamente ao usar as configurações do Verificador de /standard Driver. Se você estiver usando /flags em vez da configuração do /standard verificador de driver, lembre-se de que, /flags no Windows 10, a versão 1803 ou builds mais recentes foi preterida em favor do /ruleclasses. A classe de regra para WDF é 34. Para habilitar o verificador WDF quando /standard não for usado, use /ruleclasses 34.

Você também pode usar o Aplicativo de Controle do Verificador WDF (WdfVerifier.exe) para habilitar e desabilitar o Verificador KMDF.

Habilitando e desabilitando a verificação interna da estrutura

Você pode habilitar manualmente o KMDF Verifier usando este procedimento:

  1. Se o driver já estiver carregado, use o Gerenciador de dispositivos para desabilitar o dispositivo. Desativar o dispositivo faz com que o driver seja descarregado.

  2. Use RegEdit para definir VerifierOn como um valor diferente de zero na subchave Parameters\Wdf do driver da chave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services no Registro do Windows. Um valor diferente de zero indica que o Verificador KMDF está habilitado.

    Talvez seja necessário adicionar VerifierOn manualmente à subchave se ela ainda não estiver presente.

  3. Use o Gerenciador de dispositivos para reativar o dispositivo, carregando assim o driver.

  4. Quando o driver chama WdfDriverCreate, a estrutura examina o registro e habilita o verificador da estrutura se VerifierOn para um valor diferente de zero.

Para desabilitar o verificador da estrutura, siga as mesmas etapas, mas defina o valor de VerifierOn como zero.

Para determinar se o verificador da estrutura está habilitado, defina um ponto de interrupção em um local depois que o driver chamar WdfDriverCreate e use o comando de extensão do depurador !wdfdriverinfo:

!wdfkd.wdfdriverinfo <seu nome **** >de driver 0x1

Para obter mais informações sobre os comandos de extensão do depurador, consulte Extensões do depurador para drivers baseados em estrutura.

Controlando o comportamento do verificador

Recomendamos que você use o aplicativo de controle do Verificador do WDF para controlar as opções abaixo. No entanto, você pode modificar diretamente os valores a seguir no Registro.

Os valores relevantes estão localizados na subchave Parameters\Wdf da chave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .

VerifyOn (REG_DWORD)
Defina esse valor como um valor diferente de zero para habilitar a macro WDFVERIFIC.

DbgBreakOnError (REG_DWORD)
Se esse valor for definido como um valor diferente de zero, a estrutura será interrompida no depurador (se disponível) sempre que um driver chamar WdfVerifierDbgBreakPoint.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
A partir do Windows 8, quando VerifierOn e DbgBreakOnError são definidos como valores diferentes de zero, o driver pode alterar o período de tempo limite padrão definindo DbgWaitForSignalTimeoutInSec.

VerifierAllocateFailCount (REG_DWORD)
Se esse valor for definido como um valor n, a estrutura falhará em todas as tentativas de alocar memória para os objetos do driver após a enésima alocação.

Alças de trilha (REG_MULTI_SZ)
Se esse valor for definido como uma lista de um ou mais nomes de tipo de identificadores de objeto de estrutura, a estrutura rastreará referências a todos os identificadores de objeto que correspondem aos tipos de identificador especificados.

Opções aprimoradas de Verifier (REG_DWORD)
Somente KMDF

Contém um bitmap que você pode usar para habilitar recursos opcionais do verificador da estrutura.

VerifyDownLevel (REG_DWORD)
Se definido como um valor diferente de zero e se o driver tiver sido criado com uma versão da estrutura mais antiga que a versão atual, o verificador da estrutura incluirá testes que foram adicionados depois que o driver foi criado.

Como regra geral, se você definir os valores do Registro acima, exclua-os quando eles não forem mais necessários.

Para obter descrições completas desses valores do Registro, consulte Valores do Registro para depuração de drivers baseados em estrutura.