StorPortAcquireSpinLockEx-Funktion (storport.h)
Die StorPortAcquireSpinLockEx Routine übernimmt die angegebene Drehsperre.
Syntax
ULONG StorPortAcquireSpinLockEx(
PVOID HwDeviceExtension,
STOR_SPINLOCK SpinLock,
PVOID LockContext,
PSTOR_LOCK_HANDLE LockHandle
);
Parameter
HwDeviceExtension
[in] Zeiger auf den Miniporttreiber pro Adaptergeräteerweiterung.
SpinLock
[in] Gibt einen Enumerationswert vom Typ STOR_SPINLOCK an, der die abzurufende Drehsperre angibt.
LockContext
[in] Ein Zeiger auf das DPC-Objekt, für das die Sperre gehalten wird, wenn SpinLock- auf DpcLock-festgelegt ist. Dieses Element sollte NULL sein, wenn SpinLock- einen Typ von entweder InterruptLock- oder StartIoLock-angibt.
LockHandle
[in/out] Ein Zeiger auf einen Puffer, der im Gegenzug einen Sperrpunkt enthält. Um die Sperre freizugeben, 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 Statuscode wie eine der folgenden zurückgegeben:
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 SpinLock-, den er erwerben möchte. |
Bemerkungen
Miniporttreiber müssen sicherstellen, dass sie nicht versuchen, eine Bereits gehaltene Sperre zu erwerben oder Sperren in einer falschen Reihenfolge zu erwerben. Jeder dieser Fehler führt zu System-Deadlock.
Bestimmte Sperren werden automatisch vom Porttreiber gehalten, bevor sie die Miniporttreiberrückrufroutinen aufruft. Für jede Miniporttreiberrückrufroutine gibt die folgende Tabelle an, welche Sperrungen der Porttreiber automatisch abruft, bevor die Rückrufroutine aufgerufen wird.
Miniport-Treiberroutine | Drehsperre, die vom Porttreiber gehalten wird |
---|---|
HwStorFindAdapter | Nichts |
HwStorInitialize- | Interrupt (physische Miniports), None (virtuelle Miniports) |
HwStorInterrupt | Unterbrechen |
HwMSIInterruptRoutine | Unterbrechen |
HwStorStartIo- | StartIo (physische Miniports nur, wenn gleichzeitige Kanäle angefordert <= 1) |
HwStorBuildIo- | Nichts |
HwStorTimer- | Startio, Interrupt (wenn SynchronizationModel Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplexfestgelegt ist) |
HwStorResetBus | Startio, Interrupt (wenn SynchronizationModel Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplexfestgelegt ist) |
HwStorAdapterControl- | Nichts. (In Windows Server 2003 wurde die StartIo-Drehsperre gehalten, wenn der Steuertyp ScsiStopAdapter ist.) |
HwStorUnitControl- | Nichts |
HwStorTracingEnabled- | Nichts |
HwStorPassiveInitializeRoutine | Nichts |
HwStorDpcRoutine- | Nichts |
HwStorStateChange- | Startio, Interrupt (wenn SynchronizationModel Member von PORT_CONFIGURATION_INFORMATION auf StorSynchronizeHalfDuplexfestgelegt ist) |
Die vom Porttreiber gehaltenen Sperren beeinflussen, welche Sperren die Rückrufroutinen erwerben dürfen, da Drehsperren in der folgenden Reihenfolge erworben werden müssen:
- DPC oder StartIo
- Unterbrechen
Wenn der Porttreiber z. B. die drehungssperre Interrupt abruft, bevor eine Rückrufroutine aufgerufen wird, kann diese Rückrufroutine die DPC- oder StartIo Spin-Sperre nicht mehr abrufen, da die DPC und StartIo Drehsperren eine niedrigere Reihenfolge haben als die Interrupt Drehsperre. Wenn der Porttreiber dagegen die StartIo Spin lockt, bevor eine Rückrufroutine aufgerufen wird, kann diese Rückrufroutine, wenn sie ausgeführt wird, weiterhin eine Interrupt- oder eine DPC- Spin-Sperre abrufen.
Die folgende Tabelle gibt an, welche Drehsperren jede Miniporttreiberroutine abrufen kann. In diesen Fällen, in denen die Miniporttreiberroutine sowohl die StartIo Spin-Lock als auch die Interrupt Drehsperre abrufen muss, muss die Routine immer zuerst die StartIo Drehsperre abrufen.
Miniport-Treiberroutine | Zulässige Drehsperren |
---|---|
HwStorFindAdapter | Nichts |
HwStorInitialize- | Nichts |
HwStorInterrupt | Nichts |
HwMSIInterruptRoutine | Nichts |
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, Interrupt |
HwStorTimer- | Interrupt (wenn SynchronizationModel Mitglied von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex-festgelegt ist) |
HwStorResetBus | Interrupt (wenn SynchronizationModel Mitglied von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex-festgelegt ist) |
HwStorAdapterControl- | DPC, StartIo, Interrupt. (In Windows Server 2003 ist keine Drehsperre zulässig, wenn der Steuerelementtyp ScsiStopAdapter ist.) |
HwStorUnitControl- | DPC, StartIo, Interrupt |
HwStorTracingEnabled- | DPC, StartIo, Interrupt |
HwStorPassiveInitializeRoutine | Nichts |
HwStorDpcRoutine- | DPC, StartIo, Interrupt |
HwStorStateChange- | Interrupt (wenn SynchronizationModel Mitglied von PORT_CONFIGURATION_INFORMATION nicht auf StorSynchronizeHalfDuplex-festgelegt ist) |
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10, Version 1809 |
Header- | storport.h |