DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 244617 - Última revisão: quarta-feira, 8 de junho de 2005 - Revisão: 5.1

Importante Este artigo contém informações sobre como modificar o Registro. Antes de modificá-lo, faça um backup e certifique-se de que sabe como restaurá-lo caso ocorra algum problema. Para obter informações adicionais sobre como fazer backup, restaurar e editar o Registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft.
256986  (http://support.microsoft.com/kb/256986/ ) Descrição do Registro do Microsoft Windows

Nesta página

Sumário

O Verificador de driver está incluído no Windows 2000, no Windows XP e no Windows Server 2003 para proporcionar estabilidade e confiabilidade. É possível usar essa ferramenta para solucionar problemas de driver. Os componentes no modo kernel do Windows podem causar corrupção ou falhas do sistema como resultado de um driver programado de modo incorreto, como, por exemplo uma versão anterior de um driver Windows Driver Model (WDM). Este artigo descreve como usar o Verificador de driver para isolar e solucionar problemas com o driver no sistema.

Mais Informações

Este artigo descreve os seguintes tópicos:
  • Recursos do Verificador de driver
  • Verificador de E/S
  • Requisitos do Verificador de driver
  • Ativando o Verificador de driver
  • Depurando as violações do Verificador de driver
  • Verificador de driver e drivers de gráfico
  • Gerenciador de verificação de driver (Verifier.exe)
  • Contadores globais
  • Rastreamento de pool
  • Configurações
  • Configurações voláteis
  • Interface de linha de comando
  • Informações adicionais para desenvolvedores de driver

Recursos do Verificador de driver

É possível usar o Verificador de driver executando o Verifier.exe e reiniciando o computador. Não é necessário fazer nenhuma outra alteração para começar a analisar os drivers no sistema.

O Verificador de driver fornece os seguintes recursos.

Alocações de pool

Tentativa de alocar todas as alocações de pool dos drivers a partir de um pool especial. Em vez de compartilhar as alocações de pool com o resto do sistema, essas alocações de drivers são isoladas e sofrem restrições de permissões Sem acesso. Esse recurso determina se um driver aloca mais do que a parte compartilhada de pool e, por isso, causa a corrupção e instabilidade do sistema. Ao ativar esse recurso e o computador de destino tiver memória física e virtual suficiente, todas as alocações de drivers serão redirecionadas automaticamente em um pool especial.

Fornece pressão extrema de memória

Pressão extrema de memória pode ser fornecida em um driver específico sem prejudicar outros drivers (independentemente do tamanho da memória do sistema). É possível fazer isso instruindo o gerenciamento de memória para invalidar todos os dados e códigos pagináveis dos drivers, assim como o pool, código e dados pagináveis do sistema. Isso permite a detecção de um driver que segura, incorretamente, os bloqueios de rotação ou aumenta o IRQL e ganha acesso a códigos ou dados pagináveis. É possível usar a pressão extrema de memória para detectar problemas intermitentes e isolar a causa.

Validação de parâmetro

Todo bloqueio de rotação, IRQL e alocação de pool que chama o driver, faz com que ele receba uma validação de parâmetro automática. Isso significa que as verificações são feitas para garantir o seguinte:
  • Um IRQL aumentado é realmente um IRQL aumentado (o IRQL atual é menor que o IRQL alvo).
  • Um IRQL mais baixo é realmente um IRQL mais baixo.
  • Liberação dupla de um bloqueio de rotação.
  • Aquisições/liberações do bloqueio de rotação são feitas no IRQL apropriado.
  • Alocações/liberações do pool paginado são feitas no IRQL correto (APC_LEVEL ou abaixo).
  • Alocações/liberações do pool não-paginado são feitas no IRQL correto (DISPATCH_LEVEL ou abaixo).
  • Valores não aleatórios (não inicializados) são especificados para essas interfaces de programação de aplicativos (APIs).

Falhas de injeção de alocação de pool

Alocações de pool que não estão marcadas com MUST_SUCCEED pelo driver podem falhar aleatoriamente para garantir que o driver possa lidar corretamente com uma situação de memória baixa.

Pool liberado

Todo pool liberado é examinado para garantir que não existam timers pendentes dentro da alocação de pool, uma vez que isso causaria falhas no sistema extremamente difíceis de serem rastreadas.

Detecção de vazamento de pool

Todas as alocações de pool dos drivers são automaticamente rastreadas. Ocorre um bug de verificação se qualquer uma das alocações não for liberada, no momento de descarregamento do driver. É possível usar o comando do depurador-kernel !verifier 3 para mostrar todas as alocações que não estão liberadas. Também é possível usar esse comando antes do descarregamento para exibir as alocações de destaque que o driver possui em qualquer momento.

Verificação de descarregamento do driver

A verificação de descarregamento do driver é executada para captar os drivers que descarregam e não limpam os recursos usados (o que aumenta a possibilidade de uma verificação de bug do sistema logo após o descarregamento do driver). Os recursos que o driver pode não excluir incluem listas look-aside, chamadas de procedimento adiadas e pendentes (DPCs), segmentos de trabalho, filas, timers e outros recursos.

Verificador de E/S

Se você ativar o sinalizador do verificador de E/S usando a ferramenta de verificação ou a chave do Registro VerifyDriverLevel (para obter mais informações, consulte a seção "Ativando o Verificador de driver" deste artigo), alguns gerenciadores de verificação de E/S serão ativados. Isso inclui:
  • Todos os IRPS alocados pelo IoAllocateIrp são alocados a partir de um pool especial.
  • As verificações são feitas em IoCallDriver, IoCompleteRequest e IoFreeIrp para captar as mensagens de erro do driver.
  • Todo bug de falha de verificação de E/S verifica com o código DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Requisitos do Verificador de driver

O único requisito é que você instale o Windows 2000, o Windows XP ou o Windows Server 2003. É possível ativar o verificador de vírus nas versões comerciais e verificadas do Windows. Consulte o artigo 251233 na Base de Dados de Conhecimento da Microsoft para obter informações sobre o que levar em consideração antes de ativar o Gerenciador de verificação de driver em servidores de produção. Se o Norton Antivirus estiver instalado, não ative a detecção de bloqueio do Verificador de driver devido às recomendações do artigo 325672 da Base de Dados de Conhecimento da Microsoft.

Ativando o Verificador de driver

É possível ativar o Verificador de driver usando o Verifier.exe. O Verifier.exe está incluído em toda cópia do Windows e é instalado automaticamente na pasta System32. Ele possui as interfaces da interface gráfica do usuário (GUI) e de linha de comando, para que você possa especificar os drivers e os níveis apropriados de verificação. Também é possível ver as estatísticas do Verificador de driver em tempo real. Para obter informações adicionais, consulte a seção "Gerenciador de verificação de driver" deste artigo.

Depurando as violações do Verificador de driver

O comando !verifier no depurador kernel e a ferramenta Verifier.exe mostram a configuração e as estatísticas atuais do Verificador de driver em tempo real.

Todas as violações do Verificador de driver resultam em verificações de bug, as mais comuns (não necessariamente todas) são:
  • IRQL_NOT_LESS_OR_EQUAL 0xA
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xBE
  • SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xC1
  • DRIVER_VERIFIER_DETECTED_VIOLATION 0xC4
  • DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xC6
  • TIMER_OR_DPC_INVALID 0xC7
  • DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xC9

Verificador de driver e drivers gráficos

Drivers gráficos no modo kernel do Windows (como impressora e driver de monitor DLLs) sofrem restrições para chamar o ponto de entrada de pool diretamente. Em vez disso, as alocações de pool são executadas indiretamente usando chamadas de retorno DDI (interface de driver de dispositivo gráfico) para Win32k.sys. Por exemplo, EngAllocMem é a chamada de retorno que um driver gráfico chama para alocar explicitamente a memória de pool. Da mesma maneira, outras chamadas de retorno especializadas como EngCreatePalette e EngCreateBitmap retornam uma memória de pool.

Para fornecer o mesmo tipo de teste automático para os drivers gráficos, um suporte para algumas das funções do Verificador de driver é incorporado em Win32k.sys. Porém, como os driver gráficos são mais restritos do que outros drivers no modo kernel, eles requerem apenas um sub-conjunto das funcionalidades do Verificador de driver. Especificamente, a verificação de IRQL e de E/S não são necessárias. As outras funcionalidades, como o uso de um pool especial, a falha aleatória de alocações de pool e o rastreamento de pool, são suportadas em diversos níveis nas diferentes chamadas de retorno de gráfico DDI.

As falhas aleatórias são suportadas para as seguintes funções de chamada de retorno de gráfico DDI:
  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath
Além disso, o uso de um pool especial e rastreamento de pool é suportado para EngAllocMem.

A ativação do Verificador de driver para os drivers gráficos é idêntica aos outros drivers (consulte a seção "Ativando o Verificador de driver" deste artigo para obter informações adicionais ). Os sinalizadores que não são suportados como Verificação de IRQL são ignorados. Além disso, é possível usar o comando do depurador kernel !gdikdx.verifier para examinar o estado atual do Verificador de driver e os rastreamentos de pool para os drivers gráficos.

OBSERVAÇÃO: Use apenas a configuração de falha de alocação aleatória para testes de resistência. O uso dessa configuração pode causar mensagens de erro de processamento, por isso não use essa configuração com testes de verificação para verificar a precisão da implementação dos drivers gráficos (por exemplo, comparando a saída do driver gráfico a uma imagem de referência).

Gerenciador de verificação de driver (Verifier.exe)

A ferramenta Gerenciador de verificação de driver (Verifier.exe) é a melhor maneira de criar e modificar as configurações do Verificador de driver e obter estatísticas do Verificador de driver. O Verifier.exe está localizado na pasta %WinDir%\System32 para toda instalação do Windows.

Status do driver

A página de propriedades de Status do driver proporciona uma imagem do status atual do Verificador de driver. É possível ver quais drivers o verificador detecta. O status pode ser um dos seguintes:
  • Carregado: O driver está atualmente carregado e verificado.
  • Descarregado: O driver não está carregado no momento mas foi carregado pelo menos uma vez desde que o computador foi reiniciado.
  • Nunca foi carregado: O driver nunca foi carregado. Esse status pode indicar que o arquivo de imagem do driver está corrompido ou que você especificou um nome de driver que não existe no sistema.
É possível clicar no cabeçalho da lista para classificá-la pelos nomes ou status do driver. Na parte superior direita da caixa de diálogo, é possível ver os tipos atuais de verificação que são usados. O status dos drivers é atualizado automaticamente se você não alterar para o modo de atualização manual. É possível modificar as taxas de atualização usando os botões de opção na parte inferior esquerda da caixa de diálogo. Também é possível forçar a atualização do status clicando em Atualizar agora.

Se você ativar o sinalizador Pool especial e menos que 95 por cento das alocações de pool forem para o pool especial, uma mensagem de aviso será exibida nessa página. Isso significa que é preciso selecionar um conjunto menor de drivers para verificar ou adicionar mais memória física ao computador para obter uma melhor cobertura da verificação das alocações de pool.

Contadores globais

A página de propriedades de Contadores globais mostra o valor atual de alguns contadores mantidos pelo Verificador de driver. Um valor zero para um contador pode indicar que o sinalizador do Verificador de driver associado não está ativado. Por exemplo, um valor 0 para o contador Outros/falhas indica que o sinalizador de simulação de recursos baixos não está ativado. É possível monitorar a atividade do verificador porque os valores dos contadores são atualizados automaticamente (por padrão). É possível alterar a taxa de atualização, alterar para atualização manual ou forçar a atualização usando o grupo de controles na parte inferior esquerda da caixa de diálogo.

Rastreamento de pool

Essa página de propriedades mostra mais estatísticas obtidas de um Verificador de driver. Todos os contadores mostrados nessa página estão relacionados ao sinalizador de rastreamento de pool do verificador. A maioria deles são contadores por driver (por exemplo, alocações atuais, bytes alocados no momento e assim por diante). Isso significa que você deve selecionar um nome de driver da caixa de combinação na parte superior para exibir os contadores para o driver específico.

Configurações

É possível usar essa página para criar e modificar as configurações do Verificador de driver. As configurações são salvas no Registro e você deve reiniciar o computador para que as alterações tenham efeito. É possível usar a lista para exibir os drivers instalados atualmente. Cada driver pode estar em um dos seguintes estados:
  • Verificação ativada: O driver foi atualmente verificado.
  • Verificação desativada: O driver não foi verificado atualmente.
  • Verificação ativada (Reinicialização necessária): O driver será verificado somente após a próxima reinicialização.
  • Verificação desativada (Reinicialização necessária): O driver foi verificado atualmente, mas não será verificado após a próxima inicialização.
É possível selecionar diversos drivers da lista e alterar o status usando os dois botões sob a lista. Também é possível clicar com o botão direito do mouse no nome de um driver para exibir o menu de contexto, o que permite executar a alternância de estado.

Na parte inferior da caixa de diálogo, é possível especificar drivers adicionais (separados por espaços) que deseja verificar após a próxima reinicialização. Você geralmente usa esse controle de edição quando deseja instalar um novo driver que não está carregado.

Se o grupo de botões de opção na parte superior da lista estiver definido como Verificar todos os drivers, a lista e os botões Verificar e Não verificar e os controles de edição não estarão disponíveis. Isso significa que após a próxima reinicialização, todos os drivers no sistema serão verificados.

É possível definir o tipo de verificação usando as caixas de seleção na parte superior direita da caixa de diálogo. É possível ativar a verificação E/S no nível 1 ou no nível 2. A verificação nível 2 é mais forte do que a de nível 1.

Salve qualquer modificação nas configurações clicando em Aplicar. Existem mais dois botões nessa página:
  • Configurações preferenciais: Esse seleciona algumas configurações usadas geralmente (com todos os drivers verificados).
  • Redefinir tudo: Esse limpa todas as configurações do Verificador de driver para que nenhum driver seja verificado.
Após clicar em Aplicar, reinicie o computador para que as alterações tenham efeito.

Configurações voláteis

É possível usar essa página de propriedades para alterar os sinalizadores do Verificador de driver imediatamente. Somente é possível alternar o estado de alguns sinalizadores do Verificador de driver e não é possível alterar a lista de drivers sob verificação. Após alterar o status de algumas caixas de seleção, clique em Aplicar para que as alterações tenham efeito. As alterações têm efeito imediatamente e duram até que você faça alterações adicionais ou até que reinicie o computador.

A interface de linha de comando

Também é possível executar o Verifier.exe a partir de uma linha de comando (para obter mais informações, digite verifier.exe /? em um prompt de comando). A lista a seguir mostra os sinalizadores de linha de comando usados mais comuns:
  • verifier.exe /flags valor [/iolevel 2]
    Especifica um valor decimal dos sinalizadores do Verificador de driver e possivelmente o nível para a verificação E/S (para uma lista de sinalizadores disponíveis, digite verifier.exe /? em um prompt de comando ou consulte a seção "Ativando o Verificador de driver" deste artigo).

    Substitua o parâmetro valor por um dos seguintes valores de bit de verificação:
    0 - Verificação de pool especial
    1 - Força a verificação de IRQL
    2 - Simulação de recursos baixo
    3 - Rastreamento de pool
    4 - Verificação de E/S
    5 - Detecção de bloqueio
    6 - Verificação de E/S reforçada
    7 - Verificação DMA
    Por exemplo, digite o seguinte comando:
    c:\verifier /flags 3 /iolevel 2
    OBSERVAÇÃO: O valor de verificação E/S padrão é 1. O valor é ignorado se o bit de verificação E/S não estiver definido em sinalizadores.
  • verifier.exe /all
    Verifica todos os drivers do sistema.
  • verifier.exe /volatile /flags valor
    Altera os sinalizadores de verificação imediatamente.
  • verifier.exe /reset
    Apaga todas as configurações atuais do Verificador de driver.
  • verifier /query
    Despeja o status atual do Verificador de driver e dos contadores para a saída padrão.
  • verifier.exe /log LOG_FILE_NAME [/interval segundos]
    Registra o status do Verificador de driver e dos contadores para um arquivo de log (no qual segundos é o período especificado por você).

Informações adicionais para desenvolvedores de driver

As seções a seguir descrevem detalhes adicionais sobre as configurações do Verificador de driver que possam ser interessantes para os desenvolvedores de driver. Essas configurações geralmente não são requisitadas por profissionais de TI.
Aviso O uso incorreto do Editor do Registro pode causar sérios problemas que talvez exijam a reinstalação do sistema operacional. A Microsoft não garante que os problemas resultantes do uso incorreto do Editor do Registro possam ser solucionados. O uso do Editor do Registro é de sua responsabilidade.
Para ativar o Verificador de driver editando o Registro, execute estas etapas:
  1. Inicie o Editor do Registro (Regedt32).
  2. Localize a seguinte chave do Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
  3. Edite a chave REG_SZ.
Defina a chave REG_SZ para os nomes que não diferenciam maiúsculas de minúsculas dos drivers que deseja testar. É possível especificar diversos drivers, mas use apenas um driver. Ao fazer isso, você verifica se os recursos do sistema disponíveis não são esgotados prematuramente. O esgotamento prematuro dos recursos não causa nenhum problema de confiabilidade do sistema, mas pode fazer com que não ocorram algumas verificações de driver.

A lista a seguir mostra exemplos de valores para a chave REG_SZ:
  • Ntfs.sys
  • Win32k.sys ftdisk.sys
  • *.sys
É possível especificar o nível de verificação de driver na seguinte chave do Registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel A lista a seguir mostra os valores em campos de bits para essa chave. É possível combinar livremente esses valores.
  • 0x01: Tenta satisfazer todas as alocações de um pool especial.
  • 0x02: Aplica a pressão de memória nesse driver para validar o uso de IRQL sobre o acesso aos códigos e dados pagináveis.
  • 0x04: Ocorre falha aleatória em diversas solicitações de alocação de pool. Essa ação é executada somente após o sistema ter iniciado e alcançado um ponto no qual o problema pode ser tratado como situações razoáveis que podem ser controladas.
  • 0x08: Ativa o rastreamento de alocação de pool. Toda alocação deve ser liberada antes que o driver descarregue ou o sistema execute uma verificação de bug.
  • 0x10: Ativa o verificador de E/S.
OBSERVAÇÃO: O valor padrão será 3 se a chave não existir ou se não especificar um nível de verificação de driver. O valor padrão será 0x1B se usar as configurações preferenciais no Utilitário de verificação. Para rastrear perda de memória, tente um valor de 0xB. Esse valor é obtido com mais facilidade clicando para selecionar a caixa de seleção configuração preferencial e desmarcando a caixa de seleção Verificação de E/S.

A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Palavras-chave: 
kbhowto kbenv kbprogramming KB244617
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store