Partilhar via


Usando o verificador UMDF

A estrutura fornece funcionalidade de verificação interna que você pode usar para testar um driver UMDF (User-Mode Driver Framework) em execução. Essa funcionalidade, às vezes chamada de Verificador UMDF, 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 UMDF sozinho ou em conjunto com a ferramenta Verificador de Aplicativos (AppVerif.exe) de uso geral.

O Verificador UMDF verifica a aquisição e as hierarquias de bloqueios, verifica o cancelamento de E/S correto e o uso da fila e garante que o driver e a estrutura sigam os contratos documentados.

O Verificador UMDF causa falhas no código do driver UMDF para verificar o processo do host. No entanto, uma verificação de bug do UMDF não faz com que uma tela de texto azul apareça com informações sobre o erro. Em vez disso, uma verificação de bug do UMDF:

  • Cria um arquivo de despejo de memória e salva o arquivo no diretório de arquivos de log do computador (por exemplo, %windir%\System32\LogFiles\WUDF\Xxx.dmp).

    Observação A partir do UMDF 2.15, o diretório de log é %ProgramData%\Microsoft\WDF.

  • Cria um relatório de erros para a Microsoft (aceitação).

  • Interrompe o depurador se um estiver conectado ao computador.

  • Encerra o processo do host e desabilita o dispositivo.

A partir do UMDF 2.0, o Verificador UMDF emite pontos de interrupção em alguns casos e causa uma verificação de bug do UMDF em outros. Esse comportamento é semelhante ao do KMDF Verifier.

É altamente recomendável fazer todo o desenvolvimento e teste do driver depois de habilitar o Verificador de Aplicativos (AppVerif.exe) no WUDFHost.exe. Use o comando a seguir, anexe um depurador e reinicie.

AppVerif -enable Heaps Exceptions Handles Locks Memory TLS Leak -for WudfHost.exe

A partir da versão 2.0 do UMDF, se você executar o Verificador de Aplicativos no processo de host do driver (Wudfhost), o Verificador de UMDF será habilitado automaticamente para todos os drivers UMDF 2.0 nesse host, bem como todos os drivers UMDF 2.0 em processos de host de driver futuros.

No UMDF 1.11 e versões anteriores, o verificador da estrutura está sempre ativado e você não pode desativá-lo.

Habilitando e desabilitando o verificador UMDF

Você pode habilitar manualmente o Verificador UMDF definindo VerifierOn como um valor diferente de zero na subchave Parameters\Wdf do driver da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<driver name>.

Observação A existência de um valor VerifierOn , mesmo definido como zero, substitui a vinculação com o Verificador de Aplicativos. Como resultado, recomendamos excluir o valor se você não estiver forçando-o, em vez de defini-lo como zero.

Para determinar se o Verificador UMDF 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

Você pode controlar o comportamento do Verificador UMDF modificando valores no Registro. Como alternativa, você pode usar o aplicativo de controle WDF Verifier para definir esses valores.

Os valores do Registro a seguir podem ser usados com o UMDF 1.x , bem como drivers UMDF 2.0 e posteriores.

VerifyDownLevel (REG_DWORD)
Se VerifyDownLevel for 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. Se esse valor não existir ou estiver definido como zero, o verificador da estrutura incluirá apenas os testes que existiam quando o driver foi criado.

Por exemplo, se o driver foi criado com a versão 1.7 da estrutura e se a versão 1.9 da estrutura estiver instalada no computador, definir VerifyDownLevel como diferente de zero fará com que o verificador inclua testes que foram adicionados à versão 1.9 do verificador quando o driver for executado.

Esse valor está localizado na subchave Parameters\Wdf da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\DriverName .

TrackObjects (REG_DWORD)
Se TrackObjects for definido como um valor diferente de zero, a estrutura entrará no depurador quando o driver for descarregado, se algum objeto baseado em estrutura tiver vazado (não tiver sido excluído).

Durante os testes regulares, você deve habilitar TrackObjects e não TrackRefCounts. Se o verificador relatar que o driver está vazando objetos de estrutura, use o aplicativo de controle para habilitar a opção do verificador TrackRefCounts .

Esse valor está localizado na subchave DefaultHostProcessGuid da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services , em que DefaultHostProcessGuid é um valor que você pode encontrar na subchave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF .

TrackRefCounts (REG_DWORD)
Se TrackRefCounts for definido como um valor diferente de zero, a estrutura manterá uma contagem do número de referências a cada objeto baseado em estrutura. Você pode usar a extensão do depurador !wudfrefhist para exibir as alterações da contagem de referência de um objeto.

Definir TrackRefCounts como um valor diferente de zero degrada o desempenho do driver, portanto, você deve deixar o valor em zero, a menos que esteja depurando um bug de exclusão de objeto.

Esse valor está localizado na subchave DefaultHostProcessGuid da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services , em que DefaultHostProcessGuid é um valor que você pode encontrar na subchave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF .

Além dos valores do Registro listados acima, os drivers UMDF 2.0 e posteriores também podem usar muitos dos valores do Registro listados em Usando o Verificador KMDF.