Regla IrqlNtifsApcPassive (wdm)

La regla IrqlNtifsApcPassive especifica que el controlador llama a los DDIs enumerados en la regla solo cuando se ejecuta en IRQL = PASSIVE_LEVEL o en IRQL <= APC_LEVEL.

Modelo de controlador: WDM

Comprobaciones de errores encontradas con esta regla: Comprobación de errores 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)

Ejemplo

El código siguiente infringe esta regla:

//
// 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 obtener más información sobre los niveles de IRQL, consulte Rutinas de distribución e IRQL y Administración de prioridades de hardware.

Cómo probar

En tiempo de compilación

Ejecute el Comprobador de controladores estáticos y especifique la regla IrqlNtifsApcPassive .

Usa los pasos siguientes para ejecutar un análisis de tu código:
  1. Prepara el código (usa declaraciones de tipos de rol).
  2. Ejecuta el comprobador de controlador estático.
  3. Consulta y analiza los resultados.

Para obtener más información, consulte Uso del comprobador de controladores estáticos para buscar defectos en controladores.

En tiempo de ejecución

Puede activar el cumplimiento de DDI: reglas IRQL adicionales para uno o varios controladores mediante la línea de comandos Verifier.exe. Para obtener más información, vea Seleccionar opciones del comprobador de controladores. Debe reiniciar el equipo para activar o desactivar las reglas de cumplimiento de DDI: IRQL adicionales.

En la línea de comandos, la comprobación de DDI Compliance - Additional IRQL se representa mediante un valor de clase de regla de 35. Por ejemplo:

verifier /ruleclasses 35 /driver MyDriver.sys

O BIEN

verifier /rc 35 /driver MyDriver.sys

La comprobación irQL adicional estará activa después de reiniciar el equipo.

Se aplica a

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite