DDI 使用の規則セット (WDM)

これらのルールを使用して、ドライバーが WDM DDI を正しく使用していることを確認します。

このセクションの内容

トピック 説明

DebugBreakUsage

DebugBreakUsage ルールは、ドライバーが DbgBreakPoint または DbgBreakPointWithStatusを呼び出してはならないことを指定します。 この規則は、ドライバーの非デバッグ バージョンをビルドする場合にのみ適用されます。

DoubleFetch

この DoubleFetch ルールは、ユーザー モードのメモリ ポインターからのダブル フェッチをチェックします。 ユーザー モード メモリの二重カーネル モード アクセスは、競合状態のセキュリティの問題につながる可能性があります。 ユーザー モード データにアクセスする場合、カーネル モード コードでは、ユーザー モード データのコピーをローカルに作成し、ユーザー モード データに複数回アクセスしないようにする必要があります。 これを行わないと、"ダブル フェッチ" と呼ばれる一種の問題が発生します。この問題は、データが最初にアクセスされた後に変更される可能性があります。

NullCheck

NullCheck ルールは、ドライバー コード内の NULL 値が後でドライバーで逆参照されないことを確認します。 次のいずれかの条件に該当する場合、このルールは欠陥を報告します。

  • 後で逆参照される NULL の代入がある。
  • 後で逆参照される NULL である可能性があるドライバーのプロシージャにはグローバル/パラメーターがあり、ポインターの初期値が NULL である可能性があることを示唆する明示的なチェックがドライバーにある。

NullCheck ルール違反では、最も関連性の高いコード ステートメントがトレース ツリー ウィンドウで強調表示されます。 レポート出力の操作の詳細については、「静的ドライバー検証ツールのレポート」および「トレース ビューアーの概要」を参照してください。

SafeStrings

SafeStrings ルールは、ドライバーが意図しない侵入や悪意のある侵入からシステムを保護する文字列操作関数のみを呼び出す指定します。 ドライバーのこれらの安全な文字列関数は Ntstrsafe.h で定義されています。

ObsoleteDDIs

ObsoleteDDIs ルールは、 FsRtlPrivateLockドライバーが FsRtlPrivateLock を呼び出してはならないことを指定します。 この関数は廃止されています。 代わりに FsRtlFastLock を使用してください。

DDI 使用量ルール セットを選択するには

  1. Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 Driver メニューから Launch Static Driver Verifier… をクリックします。

  2. ルール タブをクリックします。 ルール セット で、 DDIUsage を選択します。

    Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、 /check オプションで DDIUsage.sdv を指定します。 次に例を示します。

    msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。