IrqlNtifsApcPassive ルール (wdm)
IrqlNtifsApcPassive ルールは、ドライバーが IRQL = PASSIVE_LEVEL または IRQL= <APC_LEVELで実行されている場合にのみ、ルールに記載されている DDI を呼び出すように指定します。
ドライバーモデル: WDM
このルールで見つかったバグ チェック: バグ チェック 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x 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 レベルの詳細については、「ディスパッチ ルーチンと IRQL」および「ハードウェア優先度の管理」を参照してください。
テスト方法
コンパイル時 |
---|
静的ドライバー検証ツール を実行し、 IrqlNtifsApcPassive 規則を指定します。 コードの分析を実行するには、次の手順に従います。詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。 |
実行時 |
---|
Verifier.exe コマンド ラインを使用して、1 つ以上のドライバーの DDI コンプライアンス - 追加の IRQL 規則をアクティブ化できます。 詳細については、 「ドライバー検証ツール オプションの選択」を参照してください 。 DDI コンプライアンス - 追加 IRQL 規則をアクティブ化または非アクティブ化するには、コンピューターを再起動する必要があります。 コマンド ラインでは、DDI Compliance - 追加 IRQL チェック はルール クラス値 35 で表されます。 次に例を示します。
OR
追加の IRQL チェックは、PC の再起動後にアクティブになります。 |
適用対象
NtSetInformationFile
NtWriteFile
NtCreateFile
ZwWriteFile
CcCopyWrite
CcCopyWriteEx
CcDeferWrite
CcFastCopyWrite