Правило IrqlNtifsApcPassive (wdm)
Правило IrqlNtifsApcPassive указывает, что драйвер вызывает DDIs, перечисленные в правиле, только если он выполняется в IRQL = PASSIVE_LEVEL или в IRQL <= APC_LEVEL.
Модель драйвера: WDM
Проверка ошибок, обнаруженных с помощью этого правила: 0xC4 проверки ошибок: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20024)
Пример
Следующий код нарушает это правило:
//
// 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);
Дополнительные сведения об уровнях IRQL см. в разделах Подпрограммы dispatch и IRQL и Управление приоритетами оборудования.
Как тестировать
Во время компиляции |
---|
Запустите средство проверки статических драйверов и укажите правило IrqlNtifsApcPassive . Выполните следующие действия, чтобы выполнить анализ кода.
Дополнительные сведения см. в разделе Использование средства проверки статических драйверов для поиска дефектов в драйверах. |
во время выполнения |
---|
Вы можете активировать правила соответствия DDI — дополнительные правила IRQL для одного или нескольких драйверов с помощью командной строки Verifier.exe. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов. Необходимо перезагрузить компьютер, чтобы активировать или отключить правила соответствия DDI — дополнительные правила IRQL. В командной строке проверка соответствия DDI — дополнительная проверка IRQL представлена значением класса правила 35. Пример:
ИЛИ
Дополнительная проверка IRQL будет активна после перезагрузки компьютера. |
Применяется к
NtSetInformationFile
NtWriteFile
NtCreateFile
ZwWriteFile
CcCopyWrite
CcCopyWriteEx
CcDeferWrite
CcFastCopyWrite