Поделиться через


Правило 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 .

Выполните следующие действия, чтобы выполнить анализ кода.
  1. Подготовьте код (используйте объявления типов ролей).
  2. Запустите средство проверки статических драйверов.
  3. Просмотр и анализ результатов.

Дополнительные сведения см. в разделе Использование средства проверки статических драйверов для поиска дефектов в драйверах.

во время выполнения

Вы можете активировать правила соответствия DDI — дополнительные правила IRQL для одного или нескольких драйверов с помощью командной строки Verifier.exe. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов. Необходимо перезагрузить компьютер, чтобы активировать или отключить правила соответствия DDI — дополнительные правила IRQL.

В командной строке проверка соответствия DDI — дополнительная проверка IRQL представлена значением класса правила 35. Пример:

verifier /ruleclasses 35 /driver MyDriver.sys

ИЛИ

verifier /rc 35 /driver MyDriver.sys

Дополнительная проверка IRQL будет активна после перезагрузки компьютера.

Применяется к

NtSetInformationFile

NtWriteFile

NtCreateFile

ZwWriteFile

CcCopyWrite

CcCopyWriteEx

CcDeferWrite

CcFastCopyWrite