Compartilhar via


Regra IrqlNtifsApcPassive (wdm)

A regra IrqlNtifsApcPassive especifica que o driver chama os DDIs listados na regra somente quando está executando em IRQL = PASSIVE_LEVEL ou em IRQL <= APC_LEVEL.

Modelo de driver: WDM

Marcar de bug encontrado com esta regra: 0xC4 de Verificação de Bugs: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)

Exemplo

O código a seguir viola essa regra:

//
// KeAcquireSpinLock raises the IRQL to DISPATCH_LEVEL.
//

KeAcquireSpinLock (&Lock, &OldIrql);

//
// ERROR: ZwWriteFile can only be called at IRQL == PASSIVE_LEVEL.
//

ZwWriteFile (Handle,
             NULL,
             NULL,
             NULL,
             IoStatusBlock,
             Buffer,
             BufferLength,
             NULL,
             NULL);

KeReleaseSpinLock (&Lock, OldIrql);

Para obter mais informações sobre níveis de IRQL, consulte Rotinas de expedição e IRQLs e Gerenciamento de prioridades de hardware.

Como testar

Em tempo de compilação

Execute o Verificador de Driver Estático e especifique a regra IrqlNtifsApcPassive .

Use as seguintes etapas para executar uma análise do código:
  1. Prepare seu código (use declarações de tipo de função).
  2. Execute o Verificador de Driver Estático.
  3. Exiba e analise os resultados.

Para obter mais informações, consulte Usando o Verificador de Driver Estático para localizar defeitos em drivers.

Em tempo de execução

Você pode ativar as regras de CONFORMIDADE de DDI – IRQL adicionais para um ou mais drivers usando a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando opções do verificador de driver. Você deve reiniciar o computador para ativar ou desativar as regras de Conformidade de DDI – IRQL adicionais.

Na linha de comando, a verificação de Conformidade de DDI – IRQL adicional é representada por um valor de classe de regra de 35. Por exemplo:

verifier /ruleclasses 35 /driver MyDriver.sys

OU

verifier /rc 35 /driver MyDriver.sys

A verificação irql adicional estará ativa depois que o computador for reinicializado.

Aplica-se a

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite