Freigeben über


Sperrregelsatz (Storport)

Verwenden Sie diese Regeln, um zu überprüfen, ob Ihr Treiber freigegebene Ressourcen ordnungsgemäß verwaltet.

In diesem Abschnitt

Thema BESCHREIBUNG

CancelSpinLock

Die Storport-Regel (CancelSpinLock) überprüft, ob jedem Aufruf von IoAcquireCancelSpinLock prompt ein Aufruf von IoReleaseCancelSpinLock folgt.

QueuedSpinLock

Die QueuedSpinLock-Regel überprüft, ob mit KeAcquireInStackQueuedSpinLock erworbene In-Stack-Spinsperren in der Stapelwarteschlange mithilfe von KeReleaseInStackQueuedSpinLock umgehend freigegeben werden. Darüber hinaus sollte der Treiber am Ende einer Dispatch- oder Abbruchroutine keine Sperren beibehalten.

QueuedSpinLockRelease

Diese Regel überprüft, ob der Treiber KeReleaseInStackQueuedSpinLock nicht aufruft , ohne die Sperre zuerst über KeAcquireInStackQueuedSpinLock zu erhalten.

SpinLock

Diese Regel überprüft, ob einem Aufruf von KeAcquireSpinLock sofort ein Aufruf von KeReleaseSpinlock folgt. Wenn ein Treiber vor dem Freigeben der Sperre erneut KeAcquireSpinLockRaiseToDpc oder KeAcquireSpinLock aufruft, schlägt die Regel fehl. Darüber hinaus muss der Treiber vor dem Beenden der Dispatch- oder Abbruchroutine die Spin-Sperre aufheben.

SpinLockDpc

Diese Regel überprüft, ob auf einen Aufruf von KeAcquireSpinLockRaiseToDpc prompt ein Aufruf von KeReleaseSpinlock folgt. Wenn ein Treiber keAcquireSpinLock oder KeAcquireSpinLockRaiseToDpc vor dem Freigeben der Sperre erneut aufruft, schlägt die Regel fehl. Darüber hinaus muss der Treiber vor dem Beenden der Dispatch- oder Abbruchroutine die Spin-Sperre aufheben.

SpinLockRelease

Diese Regel überprüft, ob der Treiber nicht versucht, eine Sperre über KeReleaseSpinLock freizugeben, ohne sie zuerst über KeAquireSpinlock oder KeAcquireSpinLockRaiseToDpc abzurufen. Die Regel besteht, wenn die erworbene Drehsperre aufgehoben wird.

SpinLockSafe

Diese Regel überprüft, ob die Routinen IoStartNextPacket und IoCompleteRequest nicht aufgerufen werden, während eine Drehsperre gilt. Die Regel verfolgt die Anzahl von Spinsperren, die zu einem beliebigen Zeitpunkt gehalten werden, und wenn diese Zahl nicht 0 ist, wenn eine Routine aufgerufen wird, schlägt der Treiber die Regel fehl.

StorPortMSILock

Miniport-Treiber müssen die MSI-Drehsperre für eine Nachricht abrufen, wenn und nur, wenn das InterruptSynchronizationMode-Element der PORT_CONFIGURATION_INFORMATION -Struktur (Storport) auf InterruptSynchronizePerMessage festgelegt ist. Diese Regel überprüft, ob Aufrufe von StorPortAcquireMSISpinLock nur ausgeführt werden, wenn der Synchronisierungsmodus InterruptSynchronizePerMessage lautet.

StorPortSpinLock

Diese Regel überprüft, ob Sperren, die über StorPortAcquireSpinLock abgerufen werden, über StorPortReleaseSpinLock unverzüglich freigegeben werden. Der Miniporttreiber verstößt gegen die Regel, wenn er versucht, eine Sperre zu erwerben, die er bereits erworben hatte, oder wenn er versucht, eine Sperre aufzuheben, die nicht erworben wurde. Darüber hinaus sollte der Treiber am Ende der Dispatch- oder Abbruchroutine keine Spin-Sperren beibehalten.

StorPortSpinLock3

Die StorPortSpinLock3-Regel überprüft die Hierarchie des Sperrenerwerbs, die in der Dokumentation für die StorPortAcquireSpinLock-Routine beschrieben ist.

StorPortSpinLock4

Diese Regel ist die Releaseentsprechung von StorPortSpinLock. Sie ähnelt der SpinLockRelease-Regel .

So wählen Sie den Sperrregelsatz aus

  1. Wählen Sie Ihr Treiberprojekt (VCXProj) in Microsoft Visual Studio aus. Klicken Sie im Menü Treiber auf Statische Treiberüberprüfung starten....

  2. Klicken Sie auf die Registerkarte Regeln . Wählen Sie unter Regelsätze die Option Sperren aus.

    Um den Standardregelsatz aus einem Visual Studio-Entwicklereingabeaufforderungsfenster auszuwählen, geben Sie Locking.sdv mit der Option /check an. Beispiel:

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

    Weitere Informationen finden Sie unter Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).