Funzione NdisAcquireReadWriteLock (ndis.h)

La funzione NdisAcquireReadWriteLock acquisisce un blocco usato dal chiamante per l'accesso in scrittura o in lettura alle risorse condivise tra i thread driver.

Nota L'interfaccia di blocco di lettura/scrittura è deprecata per i driver NDIS 6.20 e versioni successive, che devono usare NdisAcquireRWLockRead o NdisAcquireRWLockWrite anziché NdisAcquireReadWriteLock.
 

Sintassi

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

Parametri

[in, out] Lock

Puntatore a una variabile opaca che rappresenta un blocco. Il chiamante può usare questo blocco per accedere alle risorse condivise.

[in] fWrite

Valore booleano. Se il valore è TRUE, questa funzione viene fornita con accesso in scrittura alle risorse condivise; se il valore è FALSE, questa funzione viene fornita con accesso in lettura.

[_out_] LockState

LockState. Puntatore a una variabile opaca che tiene traccia dello stato del blocco. Questa variabile esiste nell'intervallo tra l'acquisizione e il rilascio del blocco da parte del chiamante. Il chiamante deve usare una variabile di tipo diversa LOCK_STATE per ogni tentativo eseguito per acquisire il blocco dallo stesso thread del driver non ISR.

Valore restituito

nessuno

Osservazioni

Il driver deve inizializzare una variabile di tipo NDIS_RW_LOCK utilizzando Funzione NdisInitializeReadWriteLock prima che il driver chiami qualsiasi altra funzione NdisXxxReadWriteLock. Il driver deve fornire spazio di archiviazione residente per i blocchi usati.

Dopo aver acquisito un blocco tramite NdisAcquireReadWriteLock, il chiamante deve rilasciare tale blocco chiamando Funzione NdisReleaseReadWriteLock . Per decrementare il conteggio dei riferimenti del blocco, un driver deve chiamare
NdisReleaseReadWriteLock una volta per ogni chiamata a NdisAcquireReadWriteLock.

Per modificare le risorse condivise tra i thread driver, un thread del driver deve acquisire un blocco di scrittura. Per monitorare semplicemente queste risorse, un thread del driver deve acquisire un blocco di sola lettura. L'accesso in lettura non richiede operazioni interlock o conflitti per i blocchi di rotazione. L'uso dell'accesso in sola lettura consente di mantenere buone prestazioni del sistema operativo e del driver.

Un thread driver non deve mai contenere un blocco di scrittura per più di 25 microsecondi. Il blocco di scrittura per un periodo prolungato degrada sia le prestazioni del sistema operativo che del driver.

Il driver non può usare un blocco per proteggere le risorse dall'accesso in lettura o scrittura condiviso dalle altre funzioni con MiniportInterrupt e/o Funzioni MiniportDisableInterruptEx . Al contrario, il driver deve chiamare NdisMSynchronizeWithInterruptEx in modo che La funzione MiniportSynchronizeInterrupt accede a tali risorse condivise allo stesso DIRQL in cui il relativo
MiniportInterrupt e/o Le funzioni MiniportDisableInterruptEx .

NdisAcquireReadWriteLock genera sempre irQL. Per un'operazione di scrittura, NdisAcquireReadWriteLock genera irQL acquisendo un blocco spin. Per un'operazione di lettura, NdisAcquireReadWriteLock genera in modo esplicito IRQL a IRQL = DISPATCH_LEVEL.

Per altre informazioni sull'acquisizione e il rilascio di blocchi di selezione NDIS, vedere Sincronizzazione e notifica nei driver di rete.

Requisiti

Requisito Valore
Client minimo supportato Deprecato per i driver NDIS 6.20 e versioni successive, che devono usare invece NdisAcquireRWLockRead o NdisAcquireRWLockWrite. Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisAcquireReadWriteLock (NDIS 5.1)) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisAcquireReadWriteLock (NDIS 5.1)) in Windows XP.
Piattaforma di destinazione Universale
Intestazione ndis.h (include Ndis.h)
Libreria Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI Irql_Synch_Function(ndis)

Vedi anche

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock