Freigeben über


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)

Siehe auch

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock