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 |