Freigeben über


StorPortAcquireSpinLockEx-Funktion (storport.h)

Die StorPortAcquireSpinLockEx-Routine ruft die angegebene Drehsperre ab.

Syntax

ULONG StorPortAcquireSpinLockEx(
  PVOID             HwDeviceExtension,
  STOR_SPINLOCK     SpinLock,
  PVOID             LockContext,
  PSTOR_LOCK_HANDLE LockHandle
);

Parameter

HwDeviceExtension

[in] Zeiger auf die Geräteerweiterung des Miniporttreibers pro Adapter.

SpinLock

[in] Gibt einen Enumeratorwert vom Typ STOR_SPINLOCK an, der die abzurufende Spinsperre angibt.

LockContext

[in] Ein Zeiger auf das DPC-Objekt, für das die Sperre gehalten wird, wenn SpinLock auf DpcLock festgelegt ist. Dieser Member sollte NULL sein, wenn SpinLock einen Typ von InterruptLock oder StartIoLock angibt.

LockHandle

[ein/aus] Ein Zeiger auf einen Puffer, der bei der Rückgabe ein Sperrhandle enthält. Zum Freigeben der Sperre muss der Aufrufer dieses Handle an die StorPortReleaseSpinLock-Routine übergeben.

Rückgabewert

StorPortAcquireSpinLockEx gibt STOR_STATUS_SUCCESS zurück, wenn die Drehsperre erfolgreich erworben wurde. Andernfalls wird ein status Code zurückgegeben, z. B. einen der folgenden:

Statuscode BESCHREIBUNG
STOR_STATUS_INVALID_PARAMETER Ein Parameter ist ungültig.
STOR_STATUS_INVALID_IRQL Der Aufrufer befindet sich bei einem ungültigen IRQL für den Typ von SpinLock , den er abrufen möchte.

Hinweise

Miniport-Treiber müssen sicherstellen, dass sie nicht versuchen, eine bereits gehaltene Sperre zu erwerben oder Sperren in einer falschen Reihenfolge abzurufen. Jeder dieser Fehler führt zu einem System-Deadlock.

Bestimmte Sperren werden automatisch vom Porttreiber gehalten, bevor er die Rückrufroutinen des Miniporttreibers aufruft. Für jede Rückrufroutine für Miniporttreiber gibt die folgende Tabelle an, welche Sperren der Porttreiber vor dem Aufrufen der Rückrufroutine automatisch abruft.

Miniporttreiberroutine Vom Porttreiber gehaltene Spin-Sperre
HwStorFindAdapter Keine
HwStorInitialize Interrupt (physische Miniports), Keine (virtuelle Miniports)
HwStorInterrupt Interrupt
HwMSIInterruptRoutine Interrupt
HwStorStartIo StartIo (physische Miniports nur bei Anforderung gleichzeitiger Kanäle <= 1)
HwStorBuildIo Keine
HwStorTimer Startio, Interrupt (wenn SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorResetBus Startio, Interrupt (wenn SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorAdapterControl Keine. (In Windows Server 2003 wurde die StartIo-Spinsperre gehalten, wenn der Steuerelementtyp ScsiStopAdapter lautet.)
HwStorUnitControl Keine
HwStorTracingEnabled Keine
HwStorPassiveInitializeRoutine Keine
HwStorDpcRoutine Keine
HwStorStateChange Startio, Interrupt (wenn SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplex festgelegt ist)

Die vom Porttreiber gehaltenen Sperren beeinflussen, welche Sperren die Rückrufroutinen abrufen dürfen, da Drehsperren in der folgenden Reihenfolge abgerufen werden müssen:

  • DPC oder StartIo
  • Interrupt

Wenn instance der Porttreiber vor dem Aufrufen einer Rückrufroutine die Interrupt-Spinsperre erhält, kann diese Rückrufroutine die DPC- oder StartIo-Spinsperre nicht mehr abrufen, da die DPC- und StartIo-Spinsperren eine niedrigere Reihenfolge aufweisen als die Interrupt-Spinsperre. Wenn der Porttreiber hingegen vor dem Aufrufen einer Rückrufroutine die StartIo-Spinsperre erwirbt, könnte diese Rückrufroutine bei Ausführung dennoch eine Interrupt- oder DPC-Spinsperre abrufen.

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

Miniporttreiberroutine 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 abgerufen werden kann, der mehrere gleichzeitige Kanäle verwendet.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interrupt (wenn der SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorResetBus Interrupt (wenn der SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)
HwStorAdapterControl DPC, StartIo, Interrupt. (In Windows Server 2003 ist keine Spinsperre zulässig, wenn der Steuerelementtyp ScsiStopAdapter ist.)
HwStorUnitControl DPC, StartIo, Interrupt
HwStorTracingEnabled DPC, StartIo, Interrupt
HwStorPassiveInitializeRoutine Keine
HwStorDpcRoutine DPC, StartIo, Interrupt
HwStorStateChange Interrupt (wenn der SynchronizationModel-Member von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex festgelegt ist)

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1809
Kopfzeile storport.h

Weitere Informationen

STOR_SPINLOCK

StorPortReleaseSpinLock