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 del driver.
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 effettuato 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 usando NdisAcquireReadWriteLock, il chiamante deve rilasciare tale blocco chiamando
funzione NdisReleaseReadWriteLock. Per decrementare il numero di 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 tali 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 selezione. L'uso dell'accesso in sola lettura consente di mantenere prestazioni ottimali del sistema operativo e del driver.
Un thread del driver non deve mai contenere un blocco di scrittura per più di 25 microsecondi. Mantenere un 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 il MiniportInterrupt e/o
funzioni miniportDisableInterruptEx. Al contrario, il driver deve chiamare
NdisMSynchronizeWithInterruptEx in modo che
MiniportSynchronizeInterrupt funzione accede a tali risorse condivise allo stesso DIRQL in cui il relativo
miniportInterrupt e/o
funzioni di MiniportDisableInterruptEx.
NdisAcquireReadWriteLock genera sempre IRQL. Per un'operazione di scrittura, NdisAcquireReadWriteLock genera irQL acquisendo un blocco di selezione. 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 di nei driver di rete.