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 UMDF Verifier sozinho ou junto com o utilitário Application Verifier (AppVerif.exe) de uso geral.

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

UMDF Verifier provoca falhas no código do driver UMDF para verificação de erros no processo do host. No entanto, uma verificação de bug 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 UMDF:

  • Cria um arquivo de despejo de memória e salva o arquivo no diretório do arquivo 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).

  • Invade o depurador se um estiver conectado ao computador.

  • Encerra o processo de host e desativa 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 UMDF em outros. Esse comportamento é semelhante ao do verificador KMDF.

É altamente recomendável fazer todo o desenvolvimento e teste do seu driver depois de ativar o Application Verifier (AppVerif.exe) no WUDFHost.exe. Use o seguinte comando, 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 executar o Application Verifier no processo de host do driver (Wudfhost), o UMDF Verifier é automaticamente ativado para todos os drivers UMDF 2.0 nesse host, assim como para todos os drivers UMDF 2.0 em futuros processos de host de driver.

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

Ativando e desativando o verificador UMDF

Você pode habilitar manualmente o Verificador UMDF ao definir VerifierOn para um valor diferente de zero na subchave Parameters\Wdf do driver na chave de registo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<nome> do driver.

Observação A existência de um valor VerifierOn, mesmo definido como zero, sobrepõe-se à ligação com o Application Verifier. Como resultado, recomendamos excluir o valor se não estiver a forçá-lo, em vez de configurá-lo para zero.

Para determinar se o Verificador UMDF está ativado, defina um ponto de interrupção em um local depois que o driver chamar WdfDriverCreate e use o comando da 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 Framework.

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 seguintes valores do registo podem ser usados com controladores UMDF 1.x, bem como com UMDF 2.0 e controladores posteriores.

VerificarNívelInferior (REG_DWORD)
Se VerifyDownLevel estiver 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 é 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 estiver 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 da estrutura, use o aplicativo de controle para habilitar a opção de verificador TrackRefCounts .

Esse valor está localizado na subchave DefaultHostProcessGuid da chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services , onde 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 , onde 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.