Partager via


Fonction ExInterlockedInsertHeadList (wdm.h)

La routine ExInterlockedInsertHeadList insère atomiquement une entrée au début d’une liste doublement liée de structures LIST_ENTRY .

Syntaxe

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

Paramètres

[in, out] ListHead

Pointeur vers la structure LIST_ENTRY qui sert d’en-tête de liste.

[in, out] ListEntry

Pointeur vers la structure LIST_ENTRY qui représente l’entrée à insérer dans la liste.

[in, out] Lock

Un pointeur vers une structure de KSPIN_LOCK qui sert de verrou de rotation utilisé pour synchroniser l’accès à la liste. Le stockage du verrou de rotation doit être résident et doit avoir été initialisé en appelant KeInitializeSpinLock. Vous devez utiliser ce verrou de rotation uniquement avec les routines ExInterlockedXxxList .

Valeur retournée

ExInterlockedInsertHeadList renvoie un pointeur vers la première entrée de la liste avant l’insertion de la nouvelle entrée. Si la liste était vide, la routine retourne NULL.

Remarques

ExInterlockedInsertHeadList effectue la même opération que InsertHeadList, mais de manière atomique. Ne mélangez pas d’appels atomiques et non atomiques sur la même liste.

Pour plus d’informations sur l’utilisation de cette routine pour implémenter une liste doublement liée, consultez Singly and Doubly Linked Listes.

La routine ExInterlockedInsertHeadList peut être appelée au niveau de n’importe quel IRQL. Le stockage du paramètre ListHead et des entrées de liste doit être résident à tous les IRQL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL N’importe quel niveau (voir la section Remarques)
Règles de conformité DDI 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)

Voir aussi

ExInterlockedInsertTailList

ExInterlockedRemoveHeadList

InitializeListHead

InsertHeadList

KeInitializeSpinLock