Funzione NdisDprAcquireReadWriteLock (ndis.h)

La funzione NdisDprAcquireReadWriteLock acquisisce un blocco usato dal chiamante per la scrittura o l'accesso 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 (impostazione NDIS_RWL_AT_DISPATCH_LEVEL nel parametro Flags) anziché NdisDprAcquireReadWriteLock.
 

Sintassi

void NdisDprAcquireReadWriteLock(
  [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 l'accesso in scrittura alle risorse condivise; se il valore è FALSE, questa funzione viene fornita con l'accesso in lettura.

[out] LockState

Puntatore a una variabile opaca che tiene traccia dello stato del blocco. Questa variabile esiste nell'intervallo compreso tra il momento in cui il chiamante acquisisce e rilascia il blocco. Il chiamante deve usare una variabile diversa di tipo LOCK_STATE per ogni tentativo che esegue per acquisire il blocco dallo stesso thread driver non ISR.

Valore restituito

nessuno

Osservazioni

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

Dopo aver acquisito un blocco usando NdisDprAcquireReadWriteLock, il chiamante deve rilasciare tale blocco chiamando la funzione NdisDprReleaseReadWriteLock . Per decrerere il conteggio dei riferimenti del blocco, un driver deve chiamare
NdisDprReleaseReadWriteLock una volta per ogni chiamata a NdisDprAcquireReadWriteLock.

È sicuro usare sia NdisDprAcquireReadWriteLock che NdisDprAcquireReadWriteLock nello stesso blocco. Tuttavia, le chiamate devono essere bilanciate in modo che se il blocco viene acquisito con NdisDprAcquireReadWriteLock, deve essere rilasciato con NdisDprReleaseReadWriteLock. Analogamente, se il blocco viene acquisito con NdisAcquireReadWriteLock, deve essere rilasciato con NdisReleaseReadWriteLock.

Con alcune architetture, NdisDprAcquireReadWriteLock esegue più velocemente di NdisAcquireReadWriteLock. I driver possono usare NdisDprAcquireReadWriteLock anziché NdisAcquireReadWriteLock quando è certo che il irQL corrente sia già DISPATCH_LEVEL. Tuttavia, non è obbligatorio. Il sovraccarico della chiamata alla funzione KeGetCurrentIrql è maggiore del vantaggio delle prestazioni della chiamata a NdisDprAcquireReadWriteLock anziché NdisAcquireReadWriteLock.

Per modificare le risorse condivise tra i thread driver, un thread driver deve acquisire un blocco di scrittura. Per monitorare semplicemente queste risorse, un thread driver deve acquisire un blocco di sola lettura. L'accesso in lettura non richiede operazioni interlock o contese per i blocchi di spin. 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 da accesso in lettura o scrittura che le altre funzioni condividono con MiniportInterrupt e/o Funzioni MiniportDisableInterruptEx . Al contrario, il driver deve chiamare NdisMSynchronizeWithInterruptEx in modo che il relativo driver La funzione MiniportSynchronizeInterrupt accede a tali risorse condivise allo stesso DIRQL in corrispondenza del quale ha
MiniportInterrupt e/o Le funzioni MiniportDisableInterruptEx fanno.

Per altre informazioni sull'acquisizione e il rilascio dei blocchi di spin 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 NdisAcquireRWLockRead o NdisAcquireRWlockWrite anziché NdisDprAcquireReadWriteLock. Supportato in NDIS 6.0 e 6.1.
Piattaforma di destinazione Universale
Intestazione ndis.h (includere Ndis.h)
Libreria Ndis.lib
IRQL = DISPATCH_LEVEL

Vedi anche

LOCK_STATE

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisDprReleaseReadWriteLock

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx