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.
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 |