Partager via


NdisAcquireReadWriteLock, fonction (ndis.h)

La fonction NdisAcquireReadWriteLock acquiert un verrou que l’appelant utilise pour l’accès en écriture ou en lecture aux ressources partagées entre les threads de pilote.

Remarque L’interface de verrouillage en lecture-écriture est déconseillée pour les pilotes NDIS 6.20 et versions ultérieures, qui doivent utiliser NdisAcquireRWLockRead ou NdisAcquireRWLockWrite au lieu de NdisAcquireReadWriteLock.
 

Syntaxe

void NdisAcquireReadWriteLock(
  [in, out] PNDIS_RW_LOCK Lock,
  [in]      BOOLEAN       fWrite,
  [_out_]   PLOCK_STATE   LockState
);

Paramètres

[in, out] Lock

Pointeur vers une variable opaque qui représente un verrou. L’appelant peut utiliser ce verrou pour accéder aux ressources partagées.

[in] fWrite

Valeur booléenne. Si la valeur est TRUE, cette fonction est fournie avec un accès en écriture aux ressources partagées ; si la valeur est FALSE, cette fonction est fournie avec un accès en lecture.

[_out_] LockState

LockState. Pointeur vers une variable opaque qui suit l’état du verrou. Cette variable existe dans l’intervalle entre le moment où l’appelant acquiert et libère le verrou. L’appelant doit utiliser une variable de type différente LOCK_STATE pour chaque tentative qu’il effectue pour acquérir le verrou à partir du même thread de pilote non-ISR.

Valeur de retour

Aucun

Remarques

Le pilote doit initialiser une variable de type NDIS_RW_LOCK à l’aide du fonction NdisInitializeReadWriteLock avant que le pilote appelle toute autre fonction NdisXxxReadWriteLock. Le pilote doit fournir un stockage résident pour les verrous qu’il utilise.

Après avoir acquis un verrou à l’aide de NdisAcquireReadWriteLock, l’appelant doit libérer ce verrou en appelant le fonction NdisReleaseReadWriteLock. Pour décrémenter le nombre de références du verrou, un pilote doit appeler
NdisReleaseReadWriteLock une fois pour chaque appel à NdisAcquireReadWriteLock.

Pour modifier les ressources partagées entre les threads de pilote, un thread de pilote doit acquérir un verrou d’écriture. Pour surveiller simplement ces ressources, un thread de pilote doit acquérir un verrou en lecture seule. L’accès en lecture ne nécessite pas d’opérations ou de contention interblocées pour les verrous de rotation. L’utilisation de l’accès en lecture seule permet de maintenir de bonnes performances de système d’exploitation et de pilote.

Un thread de pilote ne doit jamais contenir de verrou d’écriture pendant plus de 25 microsecondes. La conservation d’un verrou d’écriture pendant une période prolongée dégrade à la fois les performances du système d’exploitation et du pilote.

Le pilote ne peut pas utiliser de verrou pour protéger les ressources contre l’accès en lecture ou en écriture que ses autres fonctions partagent avec le MiniportInterrupt et/ou fonctions MiniportDisableInterruptEx. Au lieu de cela, le pilote doit appeler NdisMSynchronizeWithInterruptEx afin que son MiniportSynchronizeInterrupt fonction accède à ces ressources partagées au même niveau DIRQL auquel elle
MiniportInterrupt et/ou fonctions MiniportDisableInterruptEx le font.

NdisAcquireReadWriteLock déclenche toujours l’IRQL. Pour une opération d’écriture, NdisAcquireReadWriteLock déclenche l’IRQL en acquérant un verrou de rotation. Pour une opération de lecture, NdisAcquireReadWriteLock déclenche explicitement l’IRQL à IRQL = DISPATCH_LEVEL.

Pour plus d’informations sur l’acquisition et la publication de verrous de rotation NDIS, consultez synchronisation et notification dans les pilotes réseau.

Exigences

Exigence Valeur
client minimum pris en charge Déconseillé pour les pilotes NDIS 6.20 et ultérieurs, qui doivent utiliser NdisAcquireRWLockRead ou NdisAcquireRWLockWrite à la place. Pris en charge pour les pilotes NDIS 6.0 et NDIS 5.1 (voir NdisAcquireReadWriteLock (NDIS 5.1)) dans Windows Vista. Pris en charge pour les pilotes NDIS 5.1 (voir NdisAcquireReadWriteLock (NDIS 5.1)) dans Windows XP.
plateforme cible Universel
d’en-tête ndis.h (include Ndis.h)
bibliothèque Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
règles de conformité DDI Irql_Synch_Function(ndis)

Voir aussi

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock