Regra IrqlIoRtlZwPassive (wdm)

A regra IrqlIoRtlZwPassive especifica que o driver chama os DDIs listados na regra somente quando está sendo executado em IRQL = PASSIVE_LEVEL.

Essa regra aumenta as regras IRQL de Verificação de Conformidade da DDI para PASSIVE_LEVEL. Para obter mais informações, consulte Conjunto de regras irql (WDM).

Modelo de driver: WDM

Marcar de bugs encontradas com esta regra: 0xC4 de Verificação de Bugs: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20023)

Exemplo

O código a seguir viola essa regra:

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

KeAcquireSpinLock (&Lock, &OldIrql);

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

IoGetDriverDirectory (DriverObject,
                      DriverDirectoryData,
                      0,
                      &DirectoryHandle);

KeReleaseSpinLock (&Lock, OldIrql);

Para obter mais informações sobre os 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 IrqlIoRtlZwPassive .

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 DDI Compliance – 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 DDI Compliance – 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

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

IoGetDeviceDirectory

IoGetDriverDirectory

IoOpenDeviceInterfaceRegistryKey

IoOpenDeviceRegistryKey

RtlCreateRegistryKey

RtlCreateSystemVolumeInformationFolder

RtlWriteRegistryValue

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKeyTransacted

ZwDeleteFile

ZwDeleteValueKey

ZwFlushBuffersFileEx

ZwFlushBuffersFile

ZwRenameKey

ZwSetEaFile

ZwSetInformationFile

ZwSetInformationKey