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:
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:
O BIEN
La comprobación irQL adicional estará activa después de reiniciar el equipo. |
Se aplica a
NtSetInformationFile
NtWriteFile
NtCreateFile
ZwWriteFile
CcCopyWrite
CcCopyWriteEx
CcDeferWrite
CcFastCopyWrite