Compartilhar via


Acompanhamento de pool

O Rastreamento de Pool monitora as alocações de memória feitas pelo driver. No momento em que o driver é descarregado, o Verificador de Driver garante que todas as alocações feitas pelo driver tenham sido liberadas.

Alocações de memória não frequentes (também chamadas de vazamentos de memória) são uma causa comum do desempenho reduzido do sistema operacional. Eles podem fragmentar os pools do sistema e, eventualmente, causar falhas no sistema.

Quando essa opção estiver ativa, o Verificador de Driver emitirá marcar 0xC4 de bugs (com o Parâmetro 1 igual a 0x62) se um driver descarregar sem liberar todas as alocações.

Se o Verificador de Driver emitir esse bug marcar com o Parâmetro 1 igual a 0x51, 0x52, 0x53, 0x54 ou 0x59, o driver gravou na memória fora de suas alocações. Nesse caso, você deve habilitar o recurso Pool Especial para localizar a origem do erro.

Consulte 0xC4 de Verificação de Bugs (DRIVER_VERIFIER_DETECTED_VIOLATION) para obter uma lista dos parâmetros de marcar de bugs.

A partir do Windows Vista, habilitar a opção Acompanhamento de Pool também habilita o acompanhamento de páginas bloqueadas. Quando essa opção estiver ativa, o Verificador de Driver emitirá 0xCB de Verificação de Bugs (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS) se um driver não liberar páginas bloqueadas após uma operação de E/S.

No Windows 7 e versões posteriores do sistema operacional Windows, a opção De rastreamento de pool dá suporte à memória alocada usando as seguintes APIs de kernel:

No Windows 7 e versões posteriores do sistema operacional Windows, quando o Rastreamento de Pool é ativado, o Verificador de Driver pode detectar tentativas de alocar memória do pool de kernel com cota no contexto do processo ocioso. Essas tentativas geralmente significam que o driver está alocando memória de uma rotina DPC. O contexto de thread ou processo para rotinas de DPC não é confiável, portanto, a tentativa de cobrar cota para esse processo está incorreta.

Acompanhamento do pool de monitoramento

As estatísticas de alocação do pool de memória podem ser monitoradas separadamente para cada driver que está sendo verificado. Essas estatísticas podem ser exibidas pelo Gerenciador de Verificador de Driver, pela linha de comando Verifier.exe ou por um arquivo de log. Consulte Monitorando contadores individuais para obter detalhes.

A extensão do depurador de kernel !verifier 0x3 pode ser usada para localizar alocações de memória pendentes depois que o driver é descarregado ou para acompanhar as alocações atuais enquanto o driver está em execução. Essa extensão também mostra a marca de pool, o tamanho do pool e o endereço do alocador para cada alocação. Para obter informações sobre extensões de depurador, consulte Depuração do Windows.

Cobranças de cota de pool da rotina DPC

Os drivers de kernel podem chamar ExAllocatePoolWithQuotaTag para alocar a memória do pool de kernel e cobrar o número de bytes alocados à cota de pool do processo atual. Normalmente, os drivers usam cota para alocações de memória diretamente relacionadas a uma solicitação proveniente de um aplicativo.

Rotinas de DPC (chamada de procedimento adiado) podem ser executadas no contexto de qualquer processo. Portanto, a cobrança de cota de uma rotina de DPC cobra um processo aleatório. Pior ainda, quando a rotina DPC é executada no contexto do processo ocioso, essa condição pode resultar em falhas na memória ou no sistema.

A partir do Windows 7, o Verificador de Driver detecta chamadas ExAllocatePoolWithQuotaTag de rotinas DPC.

Ativando essa opção

Você pode ativar o recurso de Acompanhamento de Pool para um ou mais drivers usando o Gerenciador de Verificador de Driver ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando opções do verificador de driver.

  • Na linha de comando

    Na linha de comando, a opção Controle de Pool é representada pelo Bit 3 (0x8). Para ativar o Rastreamento de Pool, use um valor de sinalizador de 0x8 ou adicione 0x8 ao valor do sinalizador. Por exemplo:

    verifier /flags 0x8 /driver MyDriver.sys
    

    O recurso estará ativo após a próxima inicialização.

    No Windows Vista e versões posteriores do Windows, você também pode ativar e desativar o Rastreamento de Pool sem reinicializar o computador adicionando o parâmetro /volatile ao comando . Por exemplo:

    verifier /volatile /flags 0x8 /adddriver MyDriver.sys
    

    Essa configuração é efetiva imediatamente, mas é perdida quando você desliga ou reinicializa o computador. Para obter detalhes, consulte Usando configurações voláteis.

    O recurso de Acompanhamento de Pool também está incluído nas configurações padrão. Por exemplo:

    verifier /standard /driver MyDriver.sys
    
  • Usando o Gerenciador de Verificador de Driver

    1. Iniciar o Gerenciador de Verificador de Driver. Digite Verificador em uma janela do Prompt de Comando.
    2. Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
    3. Selecione Selecionar configurações individuais em uma lista completa.
    4. Selecione (marcar) Acompanhamento de pool.

    O recurso de Acompanhamento de Pool também está incluído nas configurações padrão. Para usar esse recurso, no Gerenciador de Verificador de Driver, clique em Criar Configurações Padrão.