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:
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.
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.
Use o Gerenciador de dispositivos para reativar o dispositivo, carregando assim o driver.
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.