Partager via


Fonction ExInterlockedPushEntryList (wdm.h)

La routine ExInterlockedPushEntryList insère atomiquement une entrée au début d’une liste liée de SINGLE_LIST_ENTRY structures.

Syntaxe

PSINGLE_LIST_ENTRY ExInterlockedPushEntryList(
  [in, out] PSINGLE_LIST_ENTRY                  ListHead,
  [in, out] __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry,
  [in, out] PKSPIN_LOCK                         Lock
);

Paramètres

[in, out] ListHead

Pointeur vers la structure SINGLE_LIST_ENTRY qui sert d’en-tête de liste. Le stockage pour ListHead doit être résident à tous les IRQL.

[in, out] ListEntry

Pointeur vers la structure SINGLE_LIST_ENTRY qui représente l’entrée à insérer dans la liste. Le stockage de ListEntry doit être résident à tous les IRQL.

[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

ExInterlockedPushEntryList retourne 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

ExInterlockedPushEntryList effectue la même opération que PushEntryList, 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 liée de manière unique, consultez Listes liés à deux fois.

La routine ExInterlockedPushEntryList peut être appelée à 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

ExInitializesListHead

ExInterlockedInsertTailList

ExInterlockedPopEntryList

ExInterlockedPushEntrysList

KeInitializeSpinLock

PushEntryList