Função NdisAcquireReadWriteLock (ndis.h)

A função NdisAcquireReadWriteLock adquire um bloqueio que o chamador usa para acesso de gravação ou leitura aos recursos compartilhados entre threads de driver.

Nota A interface de bloqueio de leitura/gravação foi preterida para drivers NDIS 6.20 e posteriores, que devem usar NdisAcquireRWLockRead ou NdisAcquireRWLockWrite em vez de NdisAcquireReadWriteLock.
 

Sintaxe

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

Parâmetros

[in, out] Lock

Um ponteiro para uma variável opaca que representa um bloqueio. O chamador pode usar esse bloqueio para acessar recursos compartilhados.

[in] fWrite

Um valor booliano. Se o valor for TRUE, essa função será fornecida com acesso de gravação aos recursos compartilhados; se o valor for FALSE, essa função será fornecida com acesso de leitura.

[_out_] LockState

LockState. Um ponteiro para uma variável opaca que rastreia o estado do bloqueio. Essa variável existe no intervalo entre o tempo que o chamador adquire e libera o bloqueio. O chamador deve usar uma variável diferente do tipo LOCK_STATE para cada tentativa que ele faz para adquirir o bloqueio do mesmo thread de driver não ISR.

Retornar valor

Nenhum

Comentários

O driver deve inicializar uma variável do tipo NDIS_RW_LOCK usando o Função NdisInitializeReadWriteLock antes que o driver chame qualquer outra função NdisXxxReadWriteLock. O driver deve fornecer armazenamento residente para os bloqueios que usa.

Depois de adquirir um bloqueio usando NdisAcquireReadWriteLock, o chamador deve liberar esse bloqueio chamando o Função NdisReleaseReadWriteLock . Para diminuir a contagem de referência do bloqueio, um driver deve chamar
NdisReleaseReadWriteLock uma vez para cada chamada para NdisAcquireReadWriteLock.

Para modificar recursos compartilhados entre threads de driver, um thread de driver deve adquirir um bloqueio de gravação. Para simplesmente monitorar esses recursos, um thread de driver deve adquirir um bloqueio somente leitura. O acesso de leitura não requer operações interligadas ou contenção para bloqueios de rotação. Usar o acesso somente leitura ajuda a manter um bom desempenho do sistema operacional e do driver.

Um thread de driver nunca deve manter um bloqueio de gravação para mais de 25 microssegundos. Manter um bloqueio de gravação por um período prolongado degrada o desempenho do sistema operacional e do driver.

O driver não pode usar um bloqueio para proteger os recursos contra acesso de leitura ou gravação que suas outras funções compartilham com o MiniportInterrupt e/ouFunções MiniportDisableInterruptEx. Em vez disso, o driver deve chamar NdisMSynchronizeWithInterruptEx para que seu A função MiniportSynchronizeInterrupt acessa esses recursos compartilhados no mesmo DIRQL no qual sua
MiniportInterrupt e/ou As funções MiniportDisableInterruptEx fazem.

NdisAcquireReadWriteLock sempre gera o IRQL. Para uma operação de gravação, NdisAcquireReadWriteLock gera o IRQL adquirindo um bloqueio de rotação. Para uma operação de leitura, NdisAcquireReadWriteLock gera explicitamente o IRQL para IRQL = DISPATCH_LEVEL.

Para obter mais informações sobre como adquirir e liberar bloqueios de rotação do NDIS, consulte Sincronização e notificação em drivers de rede.

Requisitos

Requisito Valor
Cliente mínimo com suporte Preterido para drivers NDIS 6.20 e posteriores, que devem usar NdisAcquireRWLockRead ou NdisAcquireRWLockWrite. Com suporte para drivers NDIS 6.0 e NDIS 5.1 (consulte NdisAcquireReadWriteLock (NDIS 5.1)) no Windows Vista. Com suporte para drivers NDIS 5.1 (consulte NdisAcquireReadWriteLock (NDIS 5.1)) no Windows XP.
Plataforma de Destino Universal
Cabeçalho ndis.h (inclua Ndis.h)
Biblioteca Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI Irql_Synch_Function(ndis)

Confira também

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock