Правило IrqlIoRtlZwPassive (wdm)
Правило IrqlIoRtlZwPassive указывает, что драйвер вызывает DID, перечисленные в правиле, только если выполняется в irQL = PASSIVE_LEVEL.
Это правило дополняет правила IRQL проверки соответствия DDI для PASSIVE_LEVEL. Дополнительные сведения см. в разделе Набор правил Irql (WDM).
Модель драйвера: WDM
Проверка ошибок, обнаруженных с помощью этого правила: 0xC4 проверки ошибок: DRIVER_VERIFIER_DETECTED_VIOLATION (0x20023)
Пример
Следующий код нарушает это правило:
//
// 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);
Дополнительные сведения об уровнях IRQL см. в разделах Подпрограммы диспетчеризации и IRQL и Управление приоритетами оборудования.
Как тестировать
Во время компиляции |
---|
Запустите средство проверки статических драйверов и укажите правило IrqlIoRtlZwPassive . Чтобы выполнить анализ кода, выполните следующие действия.
Дополнительные сведения см. в статье Использование средства проверки статических драйверов для поиска дефектов в драйверах. |
во время выполнения |
---|
Вы можете активировать правила СООТВЕТСТВИЯ DDI — дополнительные правила IRQL для одного или нескольких драйверов с помощью командной строки Verifier.exe. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов. Необходимо перезагрузить компьютер, чтобы активировать или деактивировать правила соответствия DDI — дополнительные правила IRQL. В командной строке параметр Соответствие DDI — дополнительная проверка IRQL представлен значением класса правила 35. Пример:
ИЛИ
Дополнительная проверка IRQL будет активна после перезагрузки компьютера. |
Применяется к
IoCreateFileEx
IoCreateFileSpecifyDeviceObjectHint
IoGetDeviceDirectory
IoGetDriverDirectory
IoOpenDeviceInterfaceRegistryKey
IoOpenDeviceRegistryKey
RtlCreateRegistryKey
RtlCreateSystemVolumeInformationFolder
RtlWriteRegistryValue
ZwCreateDirectoryObject
ZwCreateFile
ZwCreateKeyTransacted
ZwDeleteFile
ZwDeleteValueKey
ZwFlushBuffersFileEx
ZwFlushBuffersFile
ZwRenameKey
ZwSetEaFile
ZwSetInformationFile
ZwSetInformationKey