Compartilhar via


Macro NdisDprAcquireSpinLock (ndis.h)

A função NdisDprAcquireSpinLock adquire um bloqueio de rotação para que o chamador possa sincronizar o acesso a recursos compartilhados entre funções de driver não ISR de maneira segura para vários processadores.

Sintaxe

void NdisDprAcquireSpinLock(
  [in]  _SpinLock
);

Parâmetros

[in] _SpinLock

Ponteiro para um bloqueio de rotação opaco, já inicializado pelo chamador.

Retornar valor

Nenhum

Comentários

O driver de miniporte deve inicializar uma variável do tipo NDIS_SPIN_LOCK com NdisAllocateSpinLock antes de chamar qualquer outro Ndis.. Função SpinLock . O driver deve fornecer armazenamento residente para os bloqueios de rotação que ele usa.

NdisDprAcquireSpinLock é uma versão otimizada do NdisAcquireSpinLock que um driver de miniporte só pode chamar durante a execução em IRQL = DISPATCH_LEVEL.

Depois de adquirir um bloqueio de rotação com NdisDprAcquireSpinLock, o chamador deve liberar esse bloqueio com uma chamada para NdisDprReleaseSpinLock. Um driver de miniporto deve chamar NdisDprReleaseSpinLock seguindo cada chamada para NdisDprAcquireSpinLock. Caso contrário, ocorrerá um deadlock, pendurando o driver.

Um bloqueio de rotação adquirido com NdisDprAcquireSpinLock deve ser lançado com NdisDprReleaseSpinLock. Um bloqueio de rotação adquirido com NdisAcquireSpinLock deve ser lançado com NdisReleaseSpinLock.

Um driver nunca deve manter um bloqueio de rotação por um período estendido (mais do que algumas instruções). Manter um bloqueio de rotação por mais de 25 microssegundos degrada o desempenho do sistema e do driver.

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

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 Com suporte para drivers NDIS 6.0 e NDIS 5.1 (consulte NdisDprAcquireSpinLock (NDIS 5.1)) no Windows Vista. Com suporte para drivers NDIS 5.1 (consulte NdisDprAcquireSpinLock (NDIS 5.1)) no Windows XP.
Plataforma de Destino Universal
Cabeçalho ndis.h (inclua Ndis.h)
Biblioteca Ndis.lib
IRQL DISPATCH_LEVEL
Regras de conformidade de DDI Irql_Synch_Function(ndis), SpinLock(ndis), SpinLockBalanced(ndis), SpinLockDpr(ndis), SpinLockDprRelease(ndis), SpinlockRelease(ndis)

Confira também

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireSpinLock

NdisAllocateSpinLock

NdisDprReleaseSpinLock

NdisMSynchronizeWithInterruptEx

NetTimerCallback