Funzione NdisAcquireRWLockRead (ndis.h)

La funzione NdisAcquireRWLockRead ottiene un blocco di lettura usato dal chiamante per l'accesso in lettura alle risorse condivise tra i thread driver.

Sintassi

void NdisAcquireRWLockRead(
  [in]  PNDIS_RW_LOCK_EX Lock,
  [out] PLOCK_STATE_EX   LockState,
  [in]  UCHAR            Flags
);

Parametri

[in] Lock

Puntatore a una variabile NDIS_RW_LOCK_EX opaca che rappresenta un blocco. Il chiamante può usare questo blocco per ottenere l'accesso in lettura o scrittura alle risorse condivise tra thread driver non ISR.

[out] LockState

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

[in] Flags

Valore ULONG che contiene flag di blocco. Impostare questo parametro su NDIS_RWL_AT_DISPATCH_LEVEL se il chiamante corrente irQL è DISPATCH_LEVEL. In caso contrario, impostare questo parametro su zero. Per altre informazioni sul rilevamento IRQL di invio, vedere Dispatch IRQL Tracking.For more information about dispatch IRQL tracking, see Dispatch IRQL Tracking.

Nota Se il chiamante conosce l'DISPATCH_LEVEL IRQL corrente, impostare questo parametro su NDIS_RWL_AT_DISPATCH_LEVEL. Questo flag rende il blocco ancora più efficiente causando l'omettere un controllo per il irQL corrente. Se irQL corrente è sconosciuto, non testare l'irQL corrente con KeGetCurrentIrql solo per determinare se impostare questo flag, in quanto è più efficiente consentire alla funzione NdisAcquireRWLockRead di testare il irQL stesso.
 

Valore restituito

nessuno

Osservazioni

I driver NDIS chiamano la funzione NdisAcquireRWLockRead per ottenere l'accesso in sola lettura alle risorse condivise tra i thread driver.

Il driver deve allocare una variabile di tipo NDIS_RW_LOCK_EX con la funzione NdisAllocateRWLock prima che il driver chiami la funzione NdisAcquireRWLockRead .

Dopo che il driver chiama NdisAllocateRWLock, può chiamare NdisAcquireRWLockWrite o NdisAcquireRWLockRead per ottenere l'accesso in scrittura o lettura alla risorsa. Solo un thread driver non ISR alla volta può ottenere l'accesso in scrittura alla risorsa. Quando un thread non ISR ha accesso in scrittura, tutti gli accessi in lettura e scrittura da altri thread non ISR devono attendere fino a quando il titolare di accesso in scrittura rilascia il blocco. Tuttavia, se un thread non ISR ha accesso in lettura, altri thread non ISR possono ottenere simultaneamente l'accesso in lettura.

Il blocco NDIS_RW_LOCK_EX non supporta la promozione da lettura a scrittura. Dopo aver acquisito un NDIS_RW_LOCK_EX per l'accesso in lettura (chiamando NdisAcquireRWLockRead), lo stesso processore non deve tentare di acquisire l'accesso in scrittura (chiamando NdisAcquireRWLockWrite) fino al rilascio dell'accesso in lettura precedente.

Un blocco di lettura NDIS_RW_LOCK_EX può essere acquisito in modo ricorsivo sullo stesso processore. Per ogni chiamata a NdisAcquireRWLockRead, deve essere presente una chiamata corrispondente a NdisReleaseRWLock. Il blocco viene rilasciato solo dopo l'ultima chiamata a NdisReleaseRWLock.

Il driver non può usare un blocco per proteggere le risorse da accesso in lettura o scrittura che le altre funzioni condividono con MiniportInterrupt o Funzione MiniportDisableInterruptEx o entrambi. Al contrario, il driver deve chiamare NdisMSynchronizeWithInterruptEx in modo che il relativo La funzione MiniportSynchronizeInterrupt accede a tali risorse condivise allo stesso DIRQL che il suo MiniportInterrupt o Funzioni MiniportDisableInterruptEx o entrambe.

NdisAcquireRWLockRead genera sempre irQL in IRQL = DISPATCH_LEVEL.

Requisiti

Requisito Valore
Client minimo supportato Supportato in NDIS 6.20 e versioni successive.
Piattaforma di destinazione Universale
Intestazione ndis.h (includere Ndis.h)
Libreria Ndis.lib
IRQL <= DISPATCH_LEVEL

Vedi anche

LOCK_STATE_EX

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NDIS_RW_LOCK_EX

NdisAcquireRWLockWrite

NdisAllocateRWLock

NdisMSynchronizeWithInterruptEx

NdisReleaseRWLock