Share via


IrqlIoRtlZwPassive ルール (wdm)

IrqlIoRtlZwPassive 規則は、ドライバーがIRQL = PASSIVE_LEVELで実行されている場合にのみ、規則に一覧表示されているDDIを呼び出すことを指定します。

この規則は、PASSIVE_LEVELの DDI コンプライアンス チェック IRQL 規則を強化します。 詳細については、 「Irql ルール セット (WDM)」 を参照してください。

ドライバーモデル: WDM

このルールで見つかったバグ チェック: バグ チェック 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x 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 規則を指定します。

コードの分析を実行するには、次の手順に従います。
  1. コードを準備します (ロール型宣言を使用します)。
  2. 静的ドライバー検証ツールを実行します。
  3. 結果を表示および分析します。

詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。

実行時

Verifier.exe コマンド ラインを使用して、1 つ以上のドライバーの DDI コンプライアンス - 追加の IRQL 規則をアクティブ化できます。 詳細については、 「ドライバー検証ツール オプションの選択」を参照してください 。 DDI コンプライアンス - 追加 IRQL 規則をアクティブ化または非アクティブ化するには、コンピューターを再起動する必要があります。

コマンド ラインでは、DDI Compliance - 追加 IRQL チェック はルール クラス値 35 で表されます。 次に例を示します。

verifier /ruleclasses 35 /driver MyDriver.sys

OR

verifier /rc 35 /driver MyDriver.sys

追加の IRQL チェックは、PC の再起動後にアクティブになります。

適用対象

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

IoGetDeviceDirectory

IoGetDriverDirectory

IoOpenDeviceInterfaceRegistryKey

IoOpenDeviceRegistryKey

RtlCreateRegistryKey

RtlCreateSystemVolumeInformationFolder

RtlWriteRegistryValue

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKeyTransacted

ZwDeleteFile

ZwDeleteValueKey

ZwFlushBuffersFileEx

ZwFlushBuffersFile

ZwRenameKey

ZwSetEaFile

ZwSetInformationFile

ZwSetInformationKey