共用方式為


(Storport) 鎖定規則集

使用這些規則來確認您的驅動程式是否已正確管理共用資源。

本節內容

主題 描述

CancelSpinLock

CancelSpinLock 規則 (Storport) 規則會確認每個 IoAcquireCancelSpinLock 的呼叫都會立即接聽 IoReleaseCancelSpinLock 的呼叫。

QueuedSpinLock

QueuedSpinLock 規則會確認使用 KeAcquireInStackQueuedSpinLock 取得的堆棧內佇列微調鎖定會使用 KeReleaseInStackQueuedSpinLock 立即釋放。 此外,在分派或取消例程結束時,驅動程式不應該保留任何鎖定。

QueuedSpinLockRelease

此規則會驗證驅動程式不會呼叫 KeReleaseInStackQueuedSpinLock ,而不需要先透過 KeAcquireInStackQueuedSpinLock 取得鎖定。

SpinLock

此規則會確認對 KeAcquireSpinLock 的呼叫會立即接著呼叫 KeReleaseSpinlock。 如果驅動程式在釋放鎖定之前再次呼叫 KeAcquireSpinLockRaiseToDpcKeAcquireSpinLock ,它會失敗規則。 此外,在結束分派或取消例程之前,驅動程式必須釋放微調鎖定。

SpinLockDpc

此規則會確認對 KeAcquireSpinLockRaiseToDpc 的呼叫會立即接聽 KeReleaseSpinlock 的呼叫。 如果驅動程式在釋放鎖定之前再次呼叫 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpc ,它會失敗規則。 此外,在結束分派或取消例程之前,驅動程式必須釋放微調鎖定。

SpinLockRelease

此規則會驗證驅動程式不會嘗試透過KeReleaseSpinLock釋放鎖定,而不需要先透過KeAquireSpinlock或KeAcquireSpinLockRaiseToDpc取得鎖定。 當取得的微調鎖定釋放時,規則就會通過。

SpinLockSafe

此規則會確認在按住微調鎖定時,不會呼叫 IoStartNextPacketIoCompleteRequest 例程。 此規則會隨時追蹤保留的微調鎖定數目,如果呼叫任一例程時,該數位不是0,驅動程式就會失敗規則。

StorPortMSILock

只有在將 PORT_CONFIGURATION_INFORMATION (Storport) 結構的 InterruptSynchronizationMode 成員設定為 InterruptSynchronizePerMessage 時,才需要迷你埠驅動程式才能取得訊息的 MSI 微調鎖定。 此規則會確認只有在同步處理模式為 InterruptSynchronizePerMessage 時,才會呼叫 StorPortAcquireMSISpinLock

StorPortSpinLock

此規則會確認透過 StorPortAcquireSpinLock 取得的鎖定會透過 StorPortReleaseSpinLock 立即釋放。 如果迷你埠驅動程序嘗試取得已取得的鎖定,或嘗試釋放尚未取得的鎖定,則迷你埠驅動程序會失敗。 此外,在分派或取消例程結束時,驅動程式不應該保留任何微調鎖定。

StorPortSpinLock3

StorPortSpinLock3 規則會驗證 StorPortAcquireSpinLock 例程檔中所述的鎖定擷取階層。

StorPortSpinLock4

此規則是 StorPortSpinLock的版本對應專案。 它類似於 SpinLockRelease 規則。

若要選取鎖定規則集

  1. 在 Microsoft Visual Studio 中選取驅動程式項目 (.vcxProj) 。 從 [ 驅動程式 ] 功能表中,按兩下 [ 啟動靜態驅動程序驗證程式...]。

  2. 按兩下 [ 規則] 索引標籤 。在 [規則集] 底下,選取 [ 鎖定]。

    若要從 Visual Studio 開發人員命令提示字元視窗中選取預設規則集,請使用 /check 選項指定 Locking.sdv。 例如:

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

    如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式靜態驅動程式驗證器命令 中尋找瑕疵 (MSBuild) 。