Partilhar via


Forçar verificação de IRQL

Embora os drivers no modo kernel sejam proibidos de acessar a memória paginável em um IRQL alto ou ao manter um bloqueio de rotação, essa ação poderá não ser notada se a página não tiver sido realmente cortada do conjunto de trabalho e paginada para o disco.

Quando o Force IRQL Checking está habilitado, o Verificador de Driver fornece uma pressão extrema sobre o uso da memória do sistema. Sempre que um driver que está sendo verificado solicita um bloqueio de rotação, chama KeSynchronizeExecution ou eleva o IRQL para DISPATCH_LEVEL ou superior, todo o pool paginável do sistema, o código e os dados (que incluem o código paginável e os dados do driver) são cortados do conjunto de trabalho. Se o driver tentar acessar qualquer uma dessas memórias, o Verificador de Driver emitirá um bug marcar.

A partir do Windows Vista, essa opção também faz com que o Verificador de Driver detecte quando determinados objetos de sincronização são incluídos na memória paginável. Esses objetos de sincronização não podem ser paginados porque o kernel do sistema operacional está acessando-os em IRQL elevado. O Verificador de Driver pode detectar as estruturas KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE e FAST_MUTEX pagináveis.

Essa pressão sobre o uso de memória não afetará diretamente os drivers que não estão selecionados para verificação. Quando um driver que não está selecionado para verificação gera o IRQL, ele não dispara a ação de corte. No entanto, quando um driver que está sendo verificado gera o IRQL, o Verificador de Driver corta páginas que podem ser usadas por drivers que não estão sendo verificados. Portanto, erros cometidos por drivers que não estão sendo verificados podem ocasionalmente ser capturados quando essa opção está ativa.

Monitoramento de aumentos de IRQL e bloqueios de rotação

O número de aumentos de IRQL, bloqueios de rotação e chamadas para KeSynchronizeExecution feitas por drivers que estão sendo verificados pode ser monitorado. O número de vezes que o Verificador de Driver cortou a memória paginável do conjunto de trabalho também pode ser monitorado. Essas estatísticas podem ser exibidas pelo Gerenciador do Verificador de Driver, pela linha de comando Verifier.exe ou por um arquivo de log. Consulte Monitorando contadores globais para obter detalhes.

A extensão !verifier do depurador de kernel também pode ser usada para monitorar essas estatísticas. Ele apresenta informações semelhantes às do Gerenciador de Verificador de Driver. No Windows XP e posterior, a extensão !verifier 0x8 exibirá um log de alterações recentes do IRQL feitas por drivers que estão sendo verificados. Para obter informações sobre extensões do depurador, consulte Depuração do Windows.

Chamando KeEnterCriticalRegion ou KeLeaveCriticalRegion em DISPATCH_LEVEL ou superior

KeEnterCriticalRegion e KeLeaveCriticalRegion são APIs que você pode usar para sincronizar a execução de uma sequência crítica de código de driver com a entrega de APCs (chamadas de procedimento assíncronas) de kernel comuns. As APIs KeEnterCriticalRegion e KeLeaveCriticalRegion não podem ser chamadas em IRQL = DISPATCH_LEVEL ou superior. Chamar KeEnterCriticalRegion ou KeLeaveCriticalRegion em DISPATCH_LEVEL ou superior pode resultar em um travamento do sistema ou corrupção de memória.

A partir do Windows 7, o Verificador de Driver detecta chamadas para essas APIs em DISPATCH_LEVEL ou superior se a opção Forçar Verificação de IRQL estiver habilitada.

Ativando essa opção

Você pode ativar o recurso Forçar Verificação de IRQL 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 Forçar Verificação de IRQL é representada pelo Bit 1 (0x2). Para ativar Forçar Verificação de IRQL, use um valor de sinalizador de 0x2 ou adicione 0x2 ao valor do sinalizador. Por exemplo:

    verifier /flags 0x2 /driver MyDriver.sys
    

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

    Você também pode ativar e desativar a Verificação de FORÇA IRQL sem reinicializar o computador adicionando o parâmetro /volatile ao comando . Por exemplo:

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

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

    O recurso Forçar Verificação de IRQL 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. Inicie 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) Forçar verificação de IRQL.

    O recurso Forçar Verificação de IRQL 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.