(Storport) 鎖定規則集
使用這些規則來確認您的驅動程式是否已正確管理共用資源。
本節內容
主題 | 描述 |
---|---|
CancelSpinLock 規則 (Storport) 規則會確認每個 IoAcquireCancelSpinLock 的呼叫都會立即接聽 IoReleaseCancelSpinLock 的呼叫。 |
|
QueuedSpinLock 規則會確認使用 KeAcquireInStackQueuedSpinLock 取得的堆棧內佇列微調鎖定會使用 KeReleaseInStackQueuedSpinLock 立即釋放。 此外,在分派或取消例程結束時,驅動程式不應該保留任何鎖定。 |
|
此規則會驗證驅動程式不會呼叫 KeReleaseInStackQueuedSpinLock ,而不需要先透過 KeAcquireInStackQueuedSpinLock 取得鎖定。 |
|
此規則會確認對 KeAcquireSpinLock 的呼叫會立即接著呼叫 KeReleaseSpinlock。 如果驅動程式在釋放鎖定之前再次呼叫 KeAcquireSpinLockRaiseToDpc 或 KeAcquireSpinLock ,它會失敗規則。 此外,在結束分派或取消例程之前,驅動程式必須釋放微調鎖定。 |
|
此規則會確認對 KeAcquireSpinLockRaiseToDpc 的呼叫會立即接聽 KeReleaseSpinlock 的呼叫。 如果驅動程式在釋放鎖定之前再次呼叫 KeAcquireSpinLock 或 KeAcquireSpinLockRaiseToDpc ,它會失敗規則。 此外,在結束分派或取消例程之前,驅動程式必須釋放微調鎖定。 |
|
此規則會驗證驅動程式不會嘗試透過KeReleaseSpinLock釋放鎖定,而不需要先透過KeAquireSpinlock或KeAcquireSpinLockRaiseToDpc取得鎖定。 當取得的微調鎖定釋放時,規則就會通過。 |
|
此規則會確認在按住微調鎖定時,不會呼叫 IoStartNextPacket 和 IoCompleteRequest 例程。 此規則會隨時追蹤保留的微調鎖定數目,如果呼叫任一例程時,該數位不是0,驅動程式就會失敗規則。 |
|
只有在將 PORT_CONFIGURATION_INFORMATION (Storport) 結構的 InterruptSynchronizationMode 成員設定為 InterruptSynchronizePerMessage 時,才需要迷你埠驅動程式才能取得訊息的 MSI 微調鎖定。 此規則會確認只有在同步處理模式為 InterruptSynchronizePerMessage 時,才會呼叫 StorPortAcquireMSISpinLock。 |
|
此規則會確認透過 StorPortAcquireSpinLock 取得的鎖定會透過 StorPortReleaseSpinLock 立即釋放。 如果迷你埠驅動程序嘗試取得已取得的鎖定,或嘗試釋放尚未取得的鎖定,則迷你埠驅動程序會失敗。 此外,在分派或取消例程結束時,驅動程式不應該保留任何微調鎖定。 |
|
StorPortSpinLock3 規則會驗證 StorPortAcquireSpinLock 例程檔中所述的鎖定擷取階層。 |
|
此規則是 StorPortSpinLock的版本對應專案。 它類似於 SpinLockRelease 規則。 |
若要選取鎖定規則集
在 Microsoft Visual Studio 中選取驅動程式項目 (.vcxProj) 。 從 [ 驅動程式 ] 功能表中,按兩下 [ 啟動靜態驅動程序驗證程式...]。
按兩下 [ 規則] 索引標籤 。在 [規則集] 底下,選取 [ 鎖定]。
若要從 Visual Studio 開發人員命令提示字元視窗中選取預設規則集,請使用 /check 選項指定 Locking.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式 和 靜態驅動程式驗證器命令 中尋找瑕疵 (MSBuild) 。