NdisAllocateRWLock, fonction (ndis.h)
La fonction NdisAllocateRWLock alloue une variable de verrou en lecture/écriture de type NDIS_RW_LOCK_EX.
Syntaxe
PNDIS_RW_LOCK_EX NdisAllocateRWLock(
NDIS_HANDLE NdisHandle
);
Paramètres
NdisHandle
Handle retourné par l’une des fonctions suivantes :
NdisMRegisterMiniportDriver
MiniportInitializeEx
NdisRegisterProtocolDriver
NdisOpenAdapterEx
NdisFRegisterFilterDriver
FilterAttach
Windows 8 et Windows Server 2012 et versions ultérieures : Si le verrou en lecture/écriture est alloué dans DriverEntry avant la disponibilité d’un handle NDIS, l’appelant peut passer une valeur NULL pour ce paramètre.
Valeur de retour
NdisAllocateRWLock retourne un pointeur vers une structure NDIS_RW_LOCK_EX si vous pouvez en allouer un ; sinon, elle retourne NULL .
Remarques
Les pilotes NDIS appellent la fonction NdisAllocateRWLock pour allouer une structure NDIS_RW_LOCK_EX qui contrôle l’accès en lecture/écriture aux ressources partagées entre les threads de pilote. Les pilotes utilisent un verrou en lecture/écriture pour les ressources fréquemment consultées pour la lecture et l’écriture rarement sollicitées.
Chaque verrou qu’un pilote alloue peut effectuer l’une des opérations suivantes :
- Protégez un ensemble discret de ressources partagées contre l’accès en écriture et en lecture simultanés par les threads de pilote qui s’exécutent sur IRQL <= DISPATCH_LEVEL.
- Exposez un ensemble discret de ressources partagées à l’accès en lecture simultané par les threads de pilote qui s’exécutent sur IRQL <= DISPATCH_LEVEL.
Une NDIS_RW_LOCK_EX n’est pas juste. Autrement dit, un processeur en attente d’acquérir le verrou pour un accès exclusif peut être affamé par les processeurs qui contiennent le verrou pour l’accès en lecture. Par conséquent, n’utilisez pas de NDIS_RW_LOCK_EX dans les situations où la majorité des accès seront destinés à l’accès en écriture. Si la majorité des accès auront besoin d’un accès en écriture, il est plus efficace d’utiliser simplement un verrou de rotation du noyau. Pour plus d’informations sur les verrous de rotation, consultez Présentation des verrous de rotation.
Dans les situations où il existe de nombreuses acquisitions pour l’accès en lecture sur plusieurs processeurs, le NDIS_RW_LOCK_EX fonctionne généralement mieux qu’un verrou de rotation du noyau. Utilisez NDIS_RW_LOCK_EX lorsque vous attendez de nombreux accès en lecture par seconde répartis sur plusieurs processeurs.
Une structure NDIS_RW_LOCK_EX définit des attributs qui limitent l’accès en écriture aux ressources partagées à un thread de pilote non ISR à la fois. La structure NDIS_RW_LOCK_EX peut autoriser plusieurs threads de pilote non-ISR à avoir un accès en lecture simultané aux ressources associées. Ce type d’accès en lecture n’est pas autorisé pendant un accès en écriture.
Pour modifier les ressources protégées, un thread de pilote doit obtenir un verrou d’écriture avec la fonction NdisAcquireRWLockWrite. Pour simplement lire ces ressources, un thread de pilote doit obtenir un verrou en lecture seule avec la fonction NdisAcquireRWLockRead. L’accès en lecture ne nécessite pas d’opérations ou de contention interblocées pour les verrous de rotation. L’accès en lecture seule permet de maintenir de bonnes performances de système d’exploitation et de pilote.
Une fois l’accès aux ressources terminé, le pilote appelle la fonction NdisReleaseRWLock.
Un pilote doit appeler la fonction NdisFreeRWLock pour libérer la structure NDIS_RW_LOCK_EX qu’elle a allouée avec la fonction NdisAllocateRWLock.
Vous pouvez utiliser l’extension !ndiskd.ndisrwlock débogueur pour inspecter un NDIS_RW_LOCK_EX, voir le nombre de lecteurs qu’il contient et voir qui est son enregistreur actuel. Pour plus d’informations, consultez extensions NDIS (Ndiskd.dll).
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Pris en charge dans NDIS 6.20 et versions ultérieures. |
plateforme cible | Universel |
d’en-tête | ndis.h (include Ndis.h) |
bibliothèque | Ndis.lib |
IRQL | <=DISPATCH_LEVEL |