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:
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:
OU
A verificação irql adicional estará ativa depois que o computador for reinicializado. |
Aplica-se a
NtSetInformationFile
NtWriteFile
NtCreateFile
ZwWriteFile
CcCopyWrite
CcCopyWriteEx
CcDeferWrite
CcFastCopyWrite