IrqlZwPassive ルール (wdm)
IrqlZwPassive ルールでは、ドライバーが IRQL = PASSIVE_LEVEL で実行されている場合にのみ、 ZwClose を呼び出す必要があります。
ドライバーモデル: WDM
このルールで見つかったバグ チェック: バグ チェック 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x 0x2001F)
例
規則に違反するコード例を次に示します。
NTSTATUS
DriverCloseResources (
_In_ PDRIVER_CONTEXT Context
)
{
…
NT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
//
// ExAcquireFastMutex sets the IRQL to APC_LEVEL, and the caller continues
// to run at APC_LEVEL after ExAcquireFastMutex returns.
//
ExAcquireFastMutex(&Context->FastMutex);
....
if (NULL != Context->Handle) {
//
// RULE VIOLATION! - ZwClose can be called only at PASSIVE_LEVEL
//
ZwClose(Context->Handle);
Context->Handle = NULL;
}
....
//
// N.B. ExReleaseFastMutex restores the original IRQL.
//
ExReleaseFastMutex(&Context->FastMutex);
....
}
テスト方法
コンパイル時 |
---|
静的ドライバー検証ツール を実行し、 IrqlZwPassive 規則を指定します。 コードの分析を実行するには、次の手順に従います。詳細については、 「静的ドライバー検証ツールを使用してドライバー の欠陥を見つける」を参照してください。 |
実行時 |
---|
ドライバー検証ツール を実行し、 DDI コンプライアンス チェック オプションを選択します。 |
適用対象
ZwCloseZwCreateKeyZwDeleteKeyZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwOpenKeyZwQueryKeyZwQueryValueKeyZwSetValueKey