ロックの規則セット (WDM)
これらの規則を使用して、ドライバーが共有リソースを正しく管理していることを確認します。
このセクションの内容
裁判官 | 説明 |
---|---|
CancelSpinLock 規則は、ドライバーが IoReleaseCancelSpinLock を呼び出す前に IoAcquireCancelSpinLock を呼び出すことと、後続の IoAcquireCancelSpinLock の呼び出しの前に IoReleaseCancelSpinLock を呼び出すことを指定します。 |
|
CancelSpinlockRelease ルールは、厳密な代替で IoAcquireCancelSpinLock と IoReleaseCancelSpinLock の呼び出しを使用することを指定します。 つまり、 IoAcquireCancelSpinLock のすべての呼び出しには、対応する IoReleaseCancelSpinLock の呼び出しが必要です。 |
|
CriticalRegions 規則は、ドライバーが KeLeaveCriticalRegion を呼び出す前に KeEnterCriticalRegion を呼び出す必要があり、その後の KeEnterCriticalRegion への呼び出しの前に、ドライバーが KeLeaveCriticalRegion を呼び出す必要があることを指定します。 (入れ子になった呼び出しは許可されます。) |
|
ExclusiveResourceAccess ルールは、 ExReleaseResourceLite または ExReleaseResourceForThreadLite を呼び出す前に、ドライバーが ExAcquireResourceExclusiveLite を呼び出し、 ExAcquireResourceExclusiveLite への後続の呼び出しの前に ExReleaseResourceLite または ExReleaseResourceForThreadLite を呼び出すよう指定します。 |
|
GuardedRegions 規則は、 KeEnterGuardedRegion と KeLeaveGuardedRegion の呼び出しが厳密な代替で使用されていることを確認します。 |
|
QueuedSpinLock 規則は、ドライバーが KeReleaseInStackQueuedSpinLock を呼び出す前に KeAcquireInStackQueuedSpinLock を呼び出し、ドライバーが KeAcquireInStackQueuedSpinLock への後続の呼び出しの前に KeReleaseInStackQueuedSpinLock を呼び出すことを指定します。 |
|
QueuedSpinLockRelease ルールは、 KeAcquireInStackQueuedSpinLock と KeReleaseInStackQueuedSpinLock の呼び出しが厳密な変更で使用されることを指定します。 |
|
SpinLock 規則では、 KeAcquireSpinLock を呼び出した後、ドライバーは KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc への後続の呼び出しの前に KeReleaseSpinLock を呼び出します。 |
|
SpinLockDpc ルールは、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc と KeReleaseSpinLock の呼び出しを厳密な代替で実施する必要があることを指定します。 つまり、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出した後、ドライバーは、KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc への後続の呼び出しの前に、KeReleaseSpinLock を呼び出す必要があります。 |
|
SpinlockRelease ルールは、 KeReleaseSpinLock または KeAcquireSpinLock と KeAcquireSpinLockRaiseToDpc の呼び出しを厳密な代替で実施する必要があることを指定します。 つまり、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出した後、 KeAcquireSpinLock または KeAcquireSpinLockRaiseToDpc を呼び出す前に、ドライバは KeReleaseSpinLock を呼び出さなければなりません。 |
|
SpinLockSafe ルールは、スピン ロックを保持しているときに IoStartNextPacket と IoCompleteRequest が呼び出されないことを指定します。 |
|
WithinCriticalRegion ルールは、特定の同期関数に対するドライバーの呼び出しが、 KeEnterCriticalRegion を呼び出した後、および KeLeaveCriticalRegion を呼び出す前にのみ表示されるように指定します。 影響を受ける同期関数は次のとおりです。 |
Irql ルール セットをロックするには
Microsoft Visual Studio でドライバー プロジェクト (.vcxProj) を選択します。 [ドライバー] メニューから [静的ドライバー検証ツールの起動...] をクリックします。
[ルール] タブをクリックします。 [ルール セット] で、 [Locking] を選択します。
Visual Studio の開発者コマンド プロンプト ウィンドウから既定のルール セットを選択するには、/check オプションで Locking.sdv を指定します。 次に例を示します。
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
詳細については、「静的ドライバー検証ツールを使用して、ドライバーの欠陥を検出する」と「静的ドライバー検証ツールコマンド (MSBuild)」を参照してください。