Partager via


Macro NdisInterlockedRemoveHeadList (ndis.h)

La fonction NdisInterlockedRemoveHeadList supprime une entrée, généralement un paquet, du chef d’une liste doublement liée afin que l’accès à la liste soit synchronisé de manière sécurisée pour plusieurs processeurs.

Syntaxe

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

Paramètres

[in] _ListHead

Pointeur vers le début de la liste doublement liée à partir de laquelle une entrée doit être supprimée.

[in] _SpinLock

Pointeur vers un verrou de rotation fourni par l’appelant, utilisé pour synchroniser l’accès à la liste.

Valeur retournée

NdisInterlockedRemoveHeadList retourne un pointeur vers la structure LIST_ENTRY supprimée de la liste. Si la liste était vide, la routine retourne NULL.

Remarques

Avant d’appeler NdisInterlocked.. Fonction List , un pilote doit initialiser la variable à l’emplacement ListHead avec la fonction NdisInitializeListHead et la variable à SpinLock avec la fonction NdisAllocateSpinLock . Le pilote doit également fournir un stockage résident pour ces variables et pour sa file d’attente interne.

Avant d’appeler NdisInterlockedRemoveHeadList, les entrées sont mises en file d’attente avec un ou plusieurs appels au NdisInterlockedInsert.. Fonctions de liste .

Le verrou de rotation fourni par l’appelant empêche toute autre fonction d’accéder à la file d’attente interne du pilote pendant que NdisInterlockedRemoveHeadList supprime une entrée, même lorsque le pilote s’exécute sur un ordinateur multiprocesseur.

NdisInterlockedRemoveHeadList élève l’IRQL à DISPATCH_LEVEL lorsqu’il acquiert le verrou de rotation donné et restaure l’IRQL d’origine avant qu’il ne retourne le contrôle. Par conséquent, toute fonction de pilote qui appelle NdisInterlockedRemoveHeadList ne peut pas être du code paginable.

Pour convertir une valeur retournée en l’adresse de l’entrée insérée, un pilote peut utiliser la macro CONTAINING_RECORD .

Si NdisInterlockedRemoveHeadList est appelé à l’emplacement IRQL >= DISPATCH_LEVEL, le stockage du paramètre ListHead doit être résident.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir NdisInterlockedRemoveHeadList (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (consultez NdisInterlockedRemoveHeadList (NDIS 5.1)) dans Windows XP.
Plateforme cible Universal
En-tête ndis.h (inclure Ndis.h)
Bibliothèque Ndis.lib
IRQL N’importe quel niveau

Voir aussi

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList