Freigeben über


KeAcquireInStackQueuedSpinLockAtDpcLevel-Funktion (wdm.h)

Die KeAcquireInStackQueuedSpinLockAtDpcLevel-Routine ruft eine Spinsperre in der Warteschlange ab, wenn der Aufrufer bereits unter IRQL >= DISPATCH_LEVEL ausgeführt wird.

Syntax

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Parameter

SpinLock

[ein, aus] Gibt die abzurufende Drehsperre an. Dieser Parameter muss durch einen Aufruf der KeInitializeSpinLock-Routine initialisiert worden sein.

LockHandle

[out] Zeiger auf eine vom Aufrufer bereitgestellte KLOCK_QUEUE_HANDLE Struktur, die die Routine verwenden kann, um den Warteschlangenhandle der Spinsperre zurückzugeben. Zum Freigeben der Sperre übergibt der Aufrufer diesen Wert an die KeReleaseInStackQueuedSpinLockFromDpcLevel-Routine .

Rückgabewert

Keine

Bemerkungen

Für einen Treiber, der bei IRQL >= DISPATCH_LEVEL ausgeführt wird, erhält KeAcquireInStackQueuedSpinLockAtDpcLevel eine Spinsperre als Spinsperre in Warteschlange. Weitere Informationen finden Sie unter Spin-Sperren in Warteschlange. Um die Spinsperre zu lösen, rufen Sie die KeReleaseInStackQueuedSpinLockFromDpcLevel-Routine auf.

Treiber, die bereits auf einem IRQL >= DISPATCH_LEVEL ausgeführt werden, können diese Routine aufrufen, um die Spinsperre in der Warteschlange schneller abzurufen. Andernfalls verwenden Sie die KeAcquireInStackQueuedSpinLock-Routine , um die Drehsperre abzurufen.

Für einen Treiber, der bei IRQL > DISPATCH_LEVEL ausgeführt wird, ruft diese Routine die Sperre ab, ohne den aktuellen IRQL zu ändern. Für einen Treiber, der mit IRQL = DISPATCH_LEVEL ausgeführt wird, verbessert diese Routine die Leistung, indem die Sperre abgerufen wird, ohne zuvor den IRQL auf DISPATCH_LEVEL festzulegen, was in diesem Fall ein redundanter Vorgang wäre.

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.

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 erworben oder freigegeben werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP
Kopfzeile wdm.h
IRQL IRQL >= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDDIs(storport)

Weitere Informationen

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel