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.