次の方法で共有


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

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

このセクションの内容

裁判官 説明

CancelSpinLock

CancelSpinLock 規則は、ドライバーが IoReleaseCancelSpinLock を呼び出す前に IoAcquireCancelSpinLock を呼び出すことと、後続の IoAcquireCancelSpinLock の呼び出しの前に IoReleaseCancelSpinLock を呼び出すことを指定します。

CancelSpinlockRelease

CancelSpinlockRelease ルールは、厳密な代替で IoAcquireCancelSpinLockIoReleaseCancelSpinLock の呼び出しを使用することを指定します。 つまり、 IoAcquireCancelSpinLock のすべての呼び出しには、対応する IoReleaseCancelSpinLock の呼び出しが必要です。

CriticalRegions

CriticalRegions 規則は、ドライバーが KeLeaveCriticalRegion を呼び出す前に KeEnterCriticalRegion を呼び出す必要があり、その後の KeEnterCriticalRegion への呼び出しの前に、ドライバーが KeLeaveCriticalRegion を呼び出す必要があることを指定します。 (入れ子になった呼び出しは許可されます。)

ExclusiveResourceAccess

ExclusiveResourceAccess ルールは、 ExReleaseResourceLite または ExReleaseResourceForThreadLite を呼び出す前に、ドライバーが ExAcquireResourceExclusiveLite を呼び出し、 ExAcquireResourceExclusiveLite への後続の呼び出しの前に ExReleaseResourceLite または ExReleaseResourceForThreadLite を呼び出すよう指定します。

GuardedRegions

GuardedRegions 規則は、 KeEnterGuardedRegionKeLeaveGuardedRegion の呼び出しが厳密な代替で使用されていることを確認します。

QueuedSpinLock

QueuedSpinLock 規則は、ドライバーが KeReleaseInStackQueuedSpinLock を呼び出す前に KeAcquireInStackQueuedSpinLock を呼び出し、ドライバーが KeAcquireInStackQueuedSpinLock への後続の呼び出しの前に KeReleaseInStackQueuedSpinLock を呼び出すことを指定します。

QueuedSpinLockRelease

QueuedSpinLockRelease ルールは、 KeAcquireInStackQueuedSpinLockKeReleaseInStackQueuedSpinLock の呼び出しが厳密な変更で使用されることを指定します。

SpinLock

SpinLock 規則では、 KeAcquireSpinLock を呼び出した後、ドライバーは KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc への後続の呼び出しの前に KeReleaseSpinLock を呼び出します。

SpinLockDpc

SpinLockDpc ルールは、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpcKeReleaseSpinLock の呼び出しを厳密な代替で実施する必要があることを指定します。 つまり、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出した後、ドライバーは、KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc への後続の呼び出しの前に、KeReleaseSpinLock を呼び出す必要があります。

SpinlockRelease

SpinlockRelease ルールは、 KeReleaseSpinLock または KeAcquireSpinLockKeAcquireSpinLockRaiseToDpc の呼び出しを厳密な代替で実施する必要があることを指定します。 つまり、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出した後、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出す前に、ドライバは KeReleaseSpinLock を呼び出さなければなりません。

SpinLockSafe

SpinLockSafe ルールは、スピン ロックを保持しているときに IoStartNextPacketIoCompleteRequest が呼び出されないことを指定します。

WithinCriticalRegion

WithinCriticalRegion ルールは、特定の同期関数に対するドライバーの呼び出しが、 KeEnterCriticalRegion を呼び出した後、および KeLeaveCriticalRegion を呼び出す前にのみ表示されるように指定します。

影響を受ける同期関数は次のとおりです。

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)」を参照してください。