KeAcquireInStackQueuedSpinLock-Funktion (wdm.h)
Die KeAcquireInStackQueuedSpinLock Routine erwirbt eine Drehsperre in der Warteschlange.
Syntax
void KeAcquireInStackQueuedSpinLock(
PKSPIN_LOCK SpinLock,
PKLOCK_QUEUE_HANDLE LockHandle
);
Parameter
SpinLock
[in, out] Gibt die drehungssperre an, die erworben werden soll. Dieser Parameter muss mit KeInitializeSpinLockinitialisiert worden sein.
LockHandle
[out] Ein Zeiger auf eine vom Aufrufer bereitgestellte KLOCK_QUEUE_HANDLE Variable, die von der Routine verwendet werden kann, um den Drehschloss-Warteschlangenziehpunkt zurückzugeben. Der Aufrufer übergibt diesen Wert an KeReleaseInStackQueuedSpinLock beim Loslassen der Sperre. Treiber sollten normalerweise die Struktur auf dem Stapel jedes Mal zuordnen, wenn sie die Sperre erwerben. Ein Treiber sollte nicht dasselbe KLOCK_QUEUE_HANDLE von mehreren Anrufstandorten verwenden.
Rückgabewert
Nichts
Bemerkungen
KeAcquireInStackQueuedSpinLock eine Drehsperre als in die Warteschlange eingereihte Spin-Sperre. Weitere Informationen finden Sie unter Schlösser in der Warteschlange. Der Aufrufer gibt die Drehsperre frei, indem die KeReleaseInStackQueuedSpinLock Routine aufgerufen wird.
Wie gewöhnliche Drehsperren dürfen in die Warteschlange eingereihte Drehsperren nur unter besonderen Umständen verwendet werden. Eine Beschreibung der Verwendung von Drehsperren finden Sie unter KeAcquireSpinLock.
Diese Routine erhöht die IRQL-Ebene auf DISPATCH_LEVEL beim Abrufen der Drehsperre. Wenn der Aufrufer garantiert bereits bei DISPATCH_LEVEL ausgeführt wird, ist es effizienter, KeAcquireInStackQueuedSpinLockAtDpcLevelaufzurufen.
Der Aufruf von KeReleaseInStackQueuedSpinLock, die die Drehsperre loslässt, muss bei IRQL = DISPATCH_LEVEL auftreten. Dieser Aufruf stellt die ursprüngliche IRQL wieder her, die das Betriebssystem am Anfang des KeAcquireInStackQueuedSpinLock Aufrufs gespeichert hat. Wenn ein Treiber mehrere Drehsperren in der Warteschlange in Serie erwirbt, muss er sie in umgekehrter Reihenfolge freigeben, um die ursprüngliche IRQL ordnungsgemäß wiederherzustellen.
Treiber dürfen keine Aufrufe von KeAcquireSpinLock und KeAcquireInStackQueuedSpinLock auf derselben Drehsperre kombinieren. Eine Drehsperre muss immer als in die Warteschlange eingereihte Drehsperre oder als normale Drehsperre abgerufen oder losgelassen werden.
Anforderungen
Anforderung | Wert |
---|---|
Header- | wdm.h (include Wdm.h) |
IRQL- | IRQL-<= DISPATCH_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm) |