次の方法で共有


VirtualStorport の規則セット (Storport)

これらの規則を使用して、ドライバーが Storport 仮想ミニポート (VMiniport) ドライバーに特に関心のある DDI を正しく呼び出していることを確認します。

このセクションの内容

裁判官 説明

DoubleExFreePool

このルールでは、ドライバーがプール メモリの同じブロックを 2 回解放しようとしないことが検証されます。

DoubleKeSetEvent

このルールでは、KeSetEvent が同じイベント オブジェクトで 2 回呼び出されないことを確認します。 同じイベント オブジェクトがルーチンに渡された場合、ドライバーはこのルールに失敗します。

IoFreeIrp

このルールでは、IoAllocateIrpによって割り当てられた IRP がIoFreeIrp によって解放されるか、その完了ルーチンが IoSetCompletionRoutineによって設定されることを確認します。

StorPortVirtualDevice

このルールでは、 HwStorFindAdapter ルーチンを終了すると、PORT_CONFIGURATION_INFORMATION (Storport) 構造体の VirtualDevice フィールドが FALSE に設定されていることが検証されます。 このルールは、物理 StorPort ミニポートにのみ適用されます。

StorPortVirtualDevice2

このルールでは、HwStorFindAdapter ルーチンを終了すると、PORT_CONFIGURATION_INFORMATION (Storport) 構造体の VirtualDevice フィールドが TRUEに設定されていることが検証されます。 このルールは、物理 StorPort ミニポートにのみ適用されます。

WithinCriticalRegion

このルールでは、特定の同期関数へのドライバーの呼び出しが、通常のカーネル APC 配信が無効になっている間にのみ行われていることが検証されます。

ZwRegistryCreate

このルールは、ZwCreateKey で作成されたレジストリ キーへのハンドルが、その後、他の ZwXxxルーチンによって正しく使用されていることを確認します。 すでに開いているハンドルで、ZwOpenKey ルーチンを呼び出すことはできません。 ZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwQueryKeyZwQueryValueKeyZwSetValueKeyZwCloseZwDeleteKey ルーチンは、開いていないハンドルで呼び出すことはできません。 また、戻る前にハンドルを閉じる必要があります。

ZwRegistryOpen

このルールは、ZwOpenKey を使用して開かれたレジストリ キーへのハンドルが、その後、他の ZwXxx ルーチンによって正しく使用されていることを確認します。 ZwEnumerateKeyZwEnumerateValueKeyZwFlushKeyZwQueryKeyZwQueryValueKeyZwSetValueKey, ZwCloseZwDeleteKey ルーチンは、開いていないハンドルで呼び出すことはできません。 また、戻る前にハンドルを閉じる必要があります。

VirtualStorport ルール セットを選択するには

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

  2. Rules タブをクリックします。Rule Sets で、VirtualStorport を選択します。

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

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

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