Compartilhar via


Determinando se um driver vaza objetos da estrutura

Este tópico descreve como você pode encontrar vazamentos de memória do driver causados por referências não lançadas. Ele se aplica a drivers User-Mode Driver Framework (UMDF) versão 1 e 2.

UMDF 1

No UMDF versão 1, uma pilha de chamadas poderá causar um vazamento de memória se cada chamada para AddRef não tiver uma chamada de Versão correspondente.

Para testar se o driver UMDF versão 1 vaza objetos de estrutura, use as seguintes etapas:

  1. Use o aplicativo de controle Verificador WDF para definir as opções de verificador desejadas. Durante o teste regular, comece definindo TrackObjects e não TrackRefCounts.

    Quando o driver é descarregado, o verificador de código da estrutura entra no depurador se um objeto de estrutura não foi excluído e solicita que você use a extensão de depurador !wudfdumpobjects . Essa extensão de depurador exibe uma lista de objetos não depurados.

  2. Se o verificador de código indicar que o driver está vazando objetos de estrutura, use o aplicativo de controle para definir a opção TrackRefCounts .

    Se essa opção estiver definida, o verificador manterá o controle de referências a objetos de estrutura enquanto o driver é executado. Você pode usar a extensão de depurador !wudfrefhist para exibir cada pilha de chamadas (conjunto de chamadas de função) que incrementa ou diminui a contagem de referência de um objeto. Examinando as chamadas AddRef e Release nessas pilhas de chamadas, você deve ser capaz de encontrar uma pilha que não diminui a contagem de referência do objeto e, portanto, causa o vazamento.

Para obter informações sobre opções de verificador adicionais, consulte Usando o Verificador UMDF.

Para obter informações sobre quando excluir objetos de estrutura, consulte Gerenciando o tempo de vida dos objetos.

UMDF 2

No UMDF versão 2, as referências não lançadas são raras, mas podem ocorrer devido a incompatibilidades de chamadas ao usar WdfObjectReference e WdfObjectDereference.

Para testar se o driver UMDF versão 2 vaza objetos de estrutura, use o seguinte procedimento:

  1. Siga as etapas descritas em Práticas Recomendadas para configurar seu computador para depuração de UMDF.

  2. Para usar o acompanhamento de marcas, habilite o Verificador UMDF e o controle de identificador no registro. Ambas as configurações são armazenadas na subchave Parameters\Wdf do driver da chave de nome> do driverHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<.

    Para habilitar o Verificador UMDF, defina um valor diferente de zero para VerifierOn.

    Para habilitar o rastreamento de identificador, defina o valor de TrackHandles como o nome de um ou mais tipos de objeto ou especifique um asterisco (*) para rastrear todos os tipos de objeto.

    Você também pode modificar as configurações do Verificador UMDF usando o aplicativoWdfVerifier.exe .

  3. Reinicialize, estabeleça uma conexão de depurador e use os seguintes comandos de depurador:

Se o Verificador UMDF estiver ativado, os vazamentos de memória serão detectados no descarregamento do driver, assim como no KMDF.

Para obter informações adicionais sobre como usar contagens de referência em drivers KMDF e UMDF versão 2, consulte Ciclo de Vida do Objeto framework.