Partager via


Macro NdisInterlockedInsertHeadList (ndis.h)

La fonction NdisInterlockedInsertHeadList insère une entrée, généralement un paquet, en tête 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

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

Paramètres

[in] _ListHead

Pointeur vers le début de la liste doublement liée dans laquelle une entrée doit être insérée.

[in] _ListEntry

Pointeur vers l’entrée à insérer en haut de la liste.

[in] _SpinLock

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

Valeur de retour

None

Remarques

Avant d’appeler NdisInterlockedInsertHeadList, 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.

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 NdisInterlockedInsertHeadList insère l’entrée donnée, même lorsque le pilote s’exécute sur un ordinateur multiprocesseur.

NdisInterlockedInsertHeadList élève 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 NdisInterlockedInsertHeadList ne peut pas être du code paginable.

La plupart des pilotes NDIS traitent les paquets dans l’ordre FIFO, de sorte que tout pilote qui utilise une file d’attente verrouillée a tendance à caler le Fonction NdisInterlockedInsertTailList beaucoup plus fréquemment que NdisInterlockedInsertHeadList. Un tel pilote appelle généralement NdisInterlockedInsertHeadList uniquement pour mettre en file d’attente un paquet pour une opération de nouvelle tentative.

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 NdisInterlockedInsertHeadList est appelé à l’emplacement IRQL >= DISPATCH_LEVEL, le stockage pour le paramètre ListHead et les entrées de liste doivent être résidents.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir NdisInterlockedInsertHeadList (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (consultez NdisInterlockedInsertHeadList (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

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList