次の方法で共有


ロックの規則セット (Storport)

これらの規則を使用して、ドライバーが共有リソースを正しく管理していることを確認します。

このセクションの内容

裁判官 説明

CancelSpinLock

CancelSpinLock Rule (Storport) ルールでは、 IoAcquireCancelSpinLock への各呼び出しの後に、 IoReleaseCancelSpinLock の呼び出しが迅速に続くことを確認します。

QueuedSpinLock

QueuedSpinLock ルールは、 KeAcquireInStackQueuedSpinLock を使用して取得されたスタック内キュースピン ロックが、 KeReleaseInStackQueuedSpinLock を使用して迅速にリリースされるのを確認します。 さらに、ディスパッチ ルーチンまたはキャンセル ルーチンの終了時に、ドライバーはロックを保持できません。

QueuedSpinLockRelease

このルールでは、最初に KeAcquireInStackQueuedSpinLock を介してロックを取得せずに、ドライバーが KeReleaseInStackQueuedSpinLock を呼び出さないことが検証されます。

SpinLock

このルールでは、 KeAcquireSpinLock の呼び出しの後に KeReleaseSpinlock への呼び出しが迅速に続くことが検証されます。 ドライバーが、ロックをリリースする前に KeAcquireSpinLockRaiseToDpc または KeAcquireSpinLock を再度呼び出した場合、ルールは失敗します。 さらに、ディスパッチ ルーチンまたはキャンセル ルーチンを終了する前に、ドライバーはスピン ロックをリリースする必要があります。

SpinLockDpc

このルールでは、 KeAcquireSpinLock の呼び出しの後に KeAcquireSpinLockRaiseToDpc への呼び出しが迅速に続くことが検証されます。 ドライバーが、ロックをリリースする前に KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を再度呼び出した場合、ルールは失敗します。 さらに、ディスパッチ ルーチンまたはキャンセル ルーチンを終了する前に、ドライバーはスピン ロックをリリースする必要があります。

SpinLockRelease

この規則は、最初に KeAquireSpinlock または KeAcquireSpinLockRaiseToDpc を使用して取得しないと、ドライバーが KeReleaseSpinLock 経由でロックを解放しようとしないことを確認します。 取得したスピン ロックが解放されると、ルールが渡されます。

SpinLockSafe

この規則は、スピン ロックを 保持しているときに IoStartNextPacket ルーチンと IoCompleteRequest ルーチンが呼び出されないことを確認します。 ルールは、保持されているスピン ロックの数をいつでも追跡し、いずれかのルーチンが呼び出されたときにその数が 0 でない場合、ドライバーはルールに失敗します。

StorPortMSILock

PORT_CONFIGURATION_INFORMATION (Storport) 構造体の InterruptSynchronizationMode メンバーが InterruptSynchronizePerMessage に設定されている場合にのみ、メッセージの MSI スピン ロックを取得するには、ミニポート ドライバーが必要です。 このルールでは、同期モードが InterruptSynchronizePerMessage の場合にのみ、 StorPortAcquireMSISpinLock の呼び出しが行われることが検証されます。

StorPortSpinLock

このルールでは、 StorPortAcquireSpinLock を介して取得されたロックが、 StorPortReleaseSpinLock を介して迅速にリリースされていることが検証されます。 ミニポート ドライバーは、既に取得したロックを取得しようとした場合、または取得していないロックをリリースしようとした場合、ルールに失敗します。 さらに、ディスパッチ ルーチンまたはキャンセル ルーチンの終了時に、ドライバーはスピン ロックを保持できません。

StorPortSpinLock3

StorPortSpinLock3 ルールでは、 StorPortAcquireSpinLock ルーチンのドキュメントで説明されているロック取得階層を検証します。

StorPortSpinLock4

この規則は、 StorPortSpinLockリリース に対応します。 SpinLockRelease ルールに似ています。

Irql ルール セットをロックするには

  1. Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。

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

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

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

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