StorPortAcquireSpinLock-Funktion (storport.h)

Die StorPortAcquireSpinLock-Routine erhält die angegebene Spinsperre.

Syntax

void StorPortAcquireSpinLock(
  [in]      PVOID             DeviceExtension,
  [in]      STOR_SPINLOCK     SpinLock,
  [in]      PVOID             LockContext,
  [in, out] PSTOR_LOCK_HANDLE LockHandle
);

Parameter

[in] DeviceExtension

Ein Zeiger auf den Miniporttreiber pro Adapter-Geräteerweiterung.

[in] SpinLock

Enthält einen Aufzählungswert des Typs STOR_SPINLOCK , der die Spinsperre angibt, die abgerufen werden soll.

[in] LockContext

Ein Zeiger auf das DPC-Objekt, für das die Sperre gehalten wird, wenn SpinLock einen Typ von DpcLock angibt. Dieses Element sollte NULL sein, wenn SpinLock einen Typ von InterruptLock oder StartIoLock angibt.

[in, out] LockHandle

Ein Zeiger auf einen Puffer, der im Rückgabemodus einen Sperrpunkt enthält. Um die Sperre zu freigeben, muss der Anrufer diesen Handle an die StorPortReleaseSpinLock-Routine übergeben.

Rückgabewert

Keine

Bemerkungen

Miniport-Treiber müssen sicherstellen, dass sie nicht versuchen, eine Sperrung zu erwerben, die bereits gehalten oder sperren in einer falschen Reihenfolge erworben wird. Eine dieser Fehler führt zu system deadlock.

Bestimmte Sperren werden automatisch vom Porttreiber gehalten, bevor er die Miniport-Treiber-Rückrufroutine aufruft. Bei jeder Miniporttreiber-Rückrufroutine gibt die folgende Tabelle an, welche Sperrungen der Porttreiber automatisch erworben werden, bevor die Rückrufroutine aufgerufen wird.

Miniport-Treiberroutine Spin-Sperre, die vom Porttreiber gehalten wird
HwStorFindAdapter Keine
HwStorInitialize Interrupt (physische Miniports), None (virtuelle Miniports)
HwStorInterrupt Interrupt
HwMSIInterruptRoutine Interrupt
HwStorStartIo StartIo (physische Miniports nur bei Anforderung gleichzeitiger Kanäle <= 1)
HwStorBuildIo Keine
HwStorTimer Startio, Interrupt (wenn das SyncModel-Element von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorResetBus Startio, Interrupt (wenn das SyncModel-Element von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorAdapterControl Keine. (In Windows Server 2003 wurde die StartIo-Spin-Sperre beim Steuerelementtyp SCSIStopAdapter gehalten.)
HwStorUnitControl Keine
HwStorTracingEnabled Keine
HwStorPassiveInitializeRoutine Keine
HwStorDpcRoutine Keine
HwStorStateChange Startio, Interrupt (wenn das SyncModel-Element von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)

Die von dem Porttreiber gehaltenen Sperrungen beeinflussen, welche Sperrungen die Rückrufroutinen erwerben dürfen, da Spinsperren in der folgenden Reihenfolge erworben werden müssen:

  • DPC oder StartIo
  • Interrupt

Wenn der Porttreiber z. B. die Unterbrechungs-Spin-Sperre erhält, bevor eine Rückrufroutine aufgerufen wird, kann diese Rückrufroutine die DPC- oder StartIo-Spinsperre nicht mehr erwerben, da die DPC- und StartIo-Spinsperren eine geringere Reihenfolge haben als die Unterbrechungs-Spinsperre. Wenn der Porttreiber dagegen die StartIo-Spin-Sperre erhält, bevor eine Rückrufroutine aufgerufen wird, könnte diese Rückrufroutine beim Ausführen noch eine Unterbrechung oder eine DPC-Spin-Sperre erwerben.

In der folgenden Tabelle wird angegeben, welche Drehsperren jede Miniporttreiberroutine erwerben kann. In diesen Fällen, in denen die Miniporttreiberroutine sowohl die StartIo-Spinsperre als auch die Interrupt-Spin-Sperre abrufen muss, muss die Routine immer zuerst die StartIo-Spin-Sperre erwerben.

Miniport-Treiberroutine Zulässige Drehsperren
HwStorFindAdapter Keine
HwStorInitialize Keine
HwStorInterrupt Keine
HwMSIInterruptRoutine Keine
HwStorStartIo DPC, Interrupt. Beachten Sie, dass StartIo in einem virtuellen Miniporttreiber oder von einem physischen Miniporttreiber erworben werden kann, der mehrere gleichzeitige Kanäle verwendet.
HwStorBuildIo DPC, StartIo, Unterbrechung
HwStorTimer Interrupt (wenn das SynchronisierungModel-Element von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorResetBus Interrupt (wenn das SynchronisierungModel-Element von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorAdapterControl DPC, StartIo, Interrupt. (In Windows Server 2003 ist die Spin-Sperre zulässig, wenn der Steuerelementtyp SCSIStopAdapter ist.)
HwStorUnitControl DPC, StartIo, Unterbrechung
HwStorTracingEnabled DPC, StartIo, Unterbrechung
HwStorPassiveInitializeRoutine Keine
HwStorDpcRoutine DPC, StartIo, Unterbrechung
HwStorStateChange Interrupt (wenn das SynchronisierungModel-Element von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)

Anforderungen

   
Zielplattform Universell
Header storport.h (einschließlich Storport.h)
DDI-Complianceregeln StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport)

Siehe auch

STOR_SPINLOCK

StorPortReleaseSpinLock