KeAcquireInStackQueuedSpinLock-Funktion (wdm.h)

Die KeAcquireInStackQueuedSpinLock-Routine ruft eine Spinsperre in der Warteschlange ab.

Syntax

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Parameter

SpinLock

[ein, aus] Gibt die abzurufende Drehsperre an. Dieser Parameter muss mit KeInitializeSpinLock initialisiert worden sein.

LockHandle

[out] Ein Zeiger auf einen vom Aufrufer bereitgestellten KLOCK_QUEUE_HANDLE Variablen, die die Routine verwenden kann, um das Warteschlangenhandle der Spinsperre zurückzugeben. Der Aufrufer übergibt diesen Wert beim Freigeben der Sperre an KeReleaseInStackQueuedSpinLock . Treiber sollten normalerweise die Struktur auf dem Stapel jedes Mal zuordnen, wenn sie die Sperre erwerben. Ein Treiber sollte nicht dieselbe KLOCK_QUEUE_HANDLE von mehreren aufrufenden Standorten verwenden.

Rückgabewert

Keine

Bemerkungen

KeAcquireInStackQueuedSpinLock ruft eine Spinsperre als Spinsperre in der Warteschlange ab. Weitere Informationen finden Sie unter Spin-Sperren in Warteschlange. Der Aufrufer gibt die Drehsperre auf, indem er die KeReleaseInStackQueuedSpinLock-Routine aufruft .

Wie gewöhnliche Spinsperren dürfen Spinsperren nur unter ganz 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 Erwerb der Drehsperre. Wenn der Aufrufer garantiert bereits auf DISPATCH_LEVEL ausgeführt wird, ist es effizienter , KeAcquireInStackQueuedSpinLockAtDpcLevel aufzurufen.

Der Aufruf von KeReleaseInStackQueuedSpinLock , durch den die Spinsperre freigegeben wird, muss bei IRQL = DISPATCH_LEVEL erfolgen. Mit diesem Aufruf wird die ursprüngliche IRQL wiederhergestellt, die das Betriebssystem am Anfang des KeAcquireInStackQueuedSpinLock-Aufrufs gespeichert hat.

Treiber dürfen Aufrufe von KeAcquireSpinLock und KeAcquireInStackQueuedSpinLock nicht auf derselben Drehsperre kombinieren. Eine Spinsperre muss immer entweder als Spinsperre in der Warteschlange oder als normale Spinsperre abgerufen oder freigegeben werden.

Anforderungen

Anforderung Wert
Header wdm.h (einschließen von Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

Weitere Informationen

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock