Partilhar via


Forçar verificação IRQL

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

Quando Force IRQL Checking está ativado, o Driver Verifier fornece pressão extrema sobre o uso da memória do sistema. Sempre que um driver que está a ser verificado solicita um spin lock, chama KeSynchronizeExecution ou eleva o IRQL para DISPATCH_LEVEL ou superior, todo o pool, código e dados pagináveis do sistema (que incluem o código paginável e os dados do driver) são removidos do conjunto ativo. Se o driver tentar acessar qualquer uma dessas memórias, o Verificador de Driver emitirá uma verificação de bug.

A partir do Windows Vista, essa opção também faz com que o Verificador de Driver detete 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 detetar as estruturas pagináveis KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE e FAST_MUTEX.

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 aciona a ação de corte. No entanto, quando um driver em verificação eleva o IRQL, o Driver Verifier reduz páginas que podem ser usadas por drivers que não estão em verificação. Assim, erros cometidos por drivers que não estão sendo verificados podem ocasionalmente ser detetados quando esta 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 a ser verificados pode ser monitorizado. O número de vezes que o Verificador de Controlador reduziu a memória paginável do conjunto ativo também pode ser monitorado. Essas estatísticas podem ser exibidas pelo Driver Verifier Manager, pela linha de comando Verifier.exe ou em um arquivo de log. Consulte Monitoramento de contadores globais para obter detalhes.

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

Chamando KeEnterCriticalRegion ou KeLeaveCriticalRegion em DISPATCH_LEVEL ou acima

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

A partir do Windows 7, o Driver Verifier deteta chamadas para estas APIs em DISPATCH_LEVEL ou acima, se a opção Verificação de IRQL Forçada estiver habilitada.

#B0 #A1 Ativar Esta Opção

Você pode ativar o recurso Force IRQL Checking para um ou mais drivers usando o Driver Verifier Manager ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando Opções do Verificador de Controladores.

  • Na linha de comando

    Na linha de comando, a opção Verificação de IRQL Forçada é representada pelo bit 1 (0x2). Para ativar a Verificação de IRQL, use um valor de marcador de 0x2 ou adicione 0x2 ao valor do marcador. 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 Force IRQL Checking sem reiniciar 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 reinicia o computador. Para obter detalhes, consulte Usando Configuração Volátil.

    O recurso Force IRQL Checking também está incluído nas configurações padrão. Por exemplo:

    verifier /standard /driver MyDriver.sys
    
  • Usando o Gestor do Verificador de Drivers

    1. Inicie o Driver Verifier Manager. Digite Verifier numa janela da Linha de Comandos.
    2. Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
    3. Selecione configurações individuais de uma lista completa.
    4. Selecione (marque) Forçar verificação IRQL.

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