Función NdisAcquireReadWriteLock (ndis.h)
La función NdisAcquireReadWriteLock adquiere un bloqueo que el autor de la llamada usa para el acceso de escritura o lectura a los recursos que se comparten entre subprocesos de controlador.
Sintaxis
void NdisAcquireReadWriteLock(
[in, out] PNDIS_RW_LOCK Lock,
[in] BOOLEAN fWrite,
[_out_] PLOCK_STATE LockState
);
Parámetros
[in, out] Lock
Puntero a una variable opaca que representa un bloqueo. El autor de la llamada puede usar este bloqueo para acceder a los recursos compartidos.
[in] fWrite
Valor booleano. Si el valor es TRUE, esta función se proporciona con acceso de escritura a los recursos compartidos; si el valor es FALSE, esta función se proporciona con acceso de lectura.
[_out_] LockState
LockState. Puntero a una variable opaca que realiza un seguimiento del estado del bloqueo. Esta variable existe en el intervalo entre el momento en que el autor de la llamada adquiere y libera el bloqueo. El autor de la llamada debe usar una variable diferente de tipo LOCK_STATE para cada intento que realice para adquirir el bloqueo del mismo subproceso de controlador que no es ISR.
Valor devuelto
None
Observaciones
El controlador debe inicializar una variable de tipo NDIS_RW_LOCK mediante . Función NdisInitializeReadWriteLock antes de que el controlador llame a cualquier otra función NdisXxxReadWriteLock. El controlador debe proporcionar almacenamiento residente para los bloqueos que usa.
Después de adquirir un bloqueo mediante NdisAcquireReadWriteLock, el autor de la llamada debe liberar ese bloqueo llamando al Función NdisReleaseReadWriteLock . Para reducir el recuento de referencias del bloqueo, un controlador debe llamar a
NdisReleaseReadWriteLock una vez para cada llamada a NdisAcquireReadWriteLock.
Para modificar los recursos que se comparten entre subprocesos de controlador, un subproceso de controlador debe adquirir un bloqueo de escritura. Para supervisar simplemente esos recursos, un subproceso de controlador debe adquirir un bloqueo de solo lectura. El acceso de lectura no requiere operaciones interbloqueadas ni contención para bloqueos de número. El uso del acceso de solo lectura ayuda a mantener un buen rendimiento del sistema operativo y del controlador.
Un subproceso de controlador nunca debe contener un bloqueo de escritura para más de 25 microsegundos. Mantener un bloqueo de escritura durante un período prolongado degrada el rendimiento del sistema operativo y del controlador.
El controlador no puede usar un bloqueo para proteger los recursos del acceso de lectura o escritura que sus otras funciones comparten con MiniportInterrupt o Funciones MiniportDisableInterruptEx . En su lugar, el controlador debe llamar a NdisMSynchronizeWithInterruptEx para que su La función MiniportSynchronizeInterrupt accede a estos recursos compartidos en el mismo DIRQL en el que su
MiniportInterrupt y/o Funciones MiniportDisableInterruptEx sí.
NdisAcquireReadWriteLock siempre genera irQL. Para una operación de escritura, NdisAcquireReadWriteLock genera el IRQL mediante la adquisición de un bloqueo de número. Para una operación de lectura, NdisAcquireReadWriteLock genera explícitamente IRQL a IRQL = DISPATCH_LEVEL.
Para obtener más información sobre cómo adquirir y liberar bloqueos de número NDIS, consulte Sincronización y notificación en controladores de red.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | En desuso para los controladores NDIS 6.20 y versiones posteriores, que deben usar NdisAcquireRWLockRead o NdisAcquireRWLockWrite en su lugar. Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulta NdisAcquireReadWriteLock (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulta NdisAcquireReadWriteLock (NDIS 5.1)) en Windows XP. |
Plataforma de destino | Universal |
Encabezado | ndis.h (incluya Ndis.h) |
Library | Ndis.lib |
Archivo DLL | Ndis.sys |
IRQL | <= DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | Irql_Synch_Function(ndis) |