Freigeben über


ExInterlockedInsertHeadList-Funktion (wdm.h)

Die ExInterlockedInsertHeadList-Routine fügt einen Eintrag am Anfang einer doppelt verknüpften Liste von LIST_ENTRY Strukturen atomar ein.

Syntax

PLIST_ENTRY ExInterlockedInsertHeadList(
  [in, out] PLIST_ENTRY                  ListHead,
  [in, out] __drv_aliasesMem PLIST_ENTRY ListEntry,
  [in, out] PKSPIN_LOCK                  Lock
);

Parameter

[in, out] ListHead

Ein Zeiger auf die LIST_ENTRY-Struktur , die als Listenheader dient.

[in, out] ListEntry

Ein Zeiger auf die LIST_ENTRY-Struktur , die den Eintrag darstellt, der in die Liste eingefügt werden soll.

[in, out] Lock

Ein Zeiger auf eine KSPIN_LOCK-Struktur , die als Drehsperre dient, die zum Synchronisieren des Zugriffs auf die Liste verwendet wird. Der Speicher für die Spinsperre muss resident sein und durch Aufrufen von KeInitializeSpinLock initialisiert worden sein. Sie müssen diese Spinsperre nur mit den ExInterlockedXxxList-Routinen verwenden.

Rückgabewert

ExInterlockedInsertHeadList gibt einen Zeiger auf den ersten Eintrag der Liste zurück, bevor der neue Eintrag eingefügt wurde. Wenn die Liste leer war, gibt die Routine NULL zurück.

Hinweise

ExInterlockedInsertHeadList führt den gleichen Vorgang wie InsertHeadList aus, jedoch atomar. Mischen Sie keine atomaren und nicht-atomaren Aufrufe in derselben Liste.

Weitere Informationen zur Verwendung dieser Routine zum Implementieren einer doppelt verknüpften Liste finden Sie unter Singly und Doubly Linked Listen.

Die ExInterlockedInsertHeadList-Routine kann in jedem IRQL aufgerufen werden. Der Speicher für den ListHead-Parameter und die Listeneinträge muss in allen IRQLs vorhanden sein.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Beliebige Ebene (siehe Abschnitt Hinweise)
DDI-Complianceregeln IoAllocateFree(wdm), IoReuseIrp(wdm), MarkingInterlockedQueuedIrps(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Weitere Informationen

ExInterlockedInsertTailList

ExInterlockedRemoveHeadList

InitializeListHead

InsertHeadList

KeInitializeSpinLock