Compartilhar via


NdisAllocateSpinLock

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa função inicializa uma variável do tipo NDIS_SPIN_LOCK, usado para sincronizar acesso aos recursos compartilhadas entre funções driver não relacionado ao interrupções.

Syntax

VOID NdisAllocateSpinLock(
  PNDIS_SPIN_LOCK SpinLock
);

Parameters

  • SpinLock
    [no] Ponteiro para uma opacidade variável que representa um bloqueio de rotação.

Return Value

Nenhum.

Remarks

Antes de que chama um driver NdisAcquireSpinLock, NdisDprAcquireSpinLock, ou qualquer um do NdisInterlockedXXX funções, ela deve chamar esta função para inicializar o bloqueio de rotação passado como um exigido parâmetro para esses NDISXXX funções. O chamador deve fornecer armazenamento para a variável no SpinLock.

Após chamado essa função, o driver pode chamar NdisAcquireSpinLock Para obter uso exclusivo dos recursos que protege o bloqueio de rotação. Quando acessar recurso estiver completo, chamadas de driver NdisReleaseSpinLock Para que outras funções driver podem acessar os recursos protegidos por que rotação bloqueio.

Em geral, um driver não deve transmitir a mesma rotação bloqueio a cada NDISXXXSpinLock e NdisInterlockedXXX Que ele chama posteriormente. Dessa forma, qualquer driver pode inicializar more than um bloqueio de rotação com essa função.

Cada bloqueio de rotação que aloca um driver protege um conjunto separado de recursos compartilhados de acessar simultânea. De exemplo, um driver que mantém uma fila interna de pacotes pode inicializar rotação um bloqueio para proteger sua fila e outro para proteger um conjunto de estado variáveis que várias funções driver, não incluindo o MiniportISR Ou MiniportDisableInterrupt função, acessar enquanto o driver está pacotes processamento.

Um driver nunca deve usar dois bloqueios de rotação para proteger os mesmos recursos porque aninhados de rotação-bloqueio aquisições freqüentes causar bloqueios. Mesmo se um driver poderia ser projetado para evitar bloqueios, rotação aninhada-bloqueio aquisições têm um efeito adverso no driver desempenho e a taxa de transferência E/S.

Um driver de miniporta não é possível usar um bloqueio de rotação para proteger os recursos que compartilhar sua funções non-ISR com seu MiniportISR ou o MiniportDisableInterrupt função. Para acessar recursos compartilhados com um MiniportISR Ou MiniportDisableInterrupt função, uma miniporta deve chamar NdisMSynchronizeWithInterrupt Para ter sua MiniportSynchronizeISR função acessar esses recursos.

Quando um driver não requer recurso proteção, de exemplo, quando um NIC é que está sendo removido e o driver está liberando os recursos que ele alocado para que NIC, chamadas de driver NdisFreeSpinLock.

Liberar um bloqueio de rotação e liberar um bloqueio de rotação devem ser distinto. NdisFreeSpinLock Limpa a memória em SpinLock Portanto, ele não representa um bloqueio de rotação. Liberar um bloqueio de rotação adquirida com NdisReleaseSpinLock Permite que outro segmento de execução para adquirir esse bloqueio de rotação.

Requirements

Header ndis.h
Library ndis.lib
Windows Embedded CE Windows CE .NET 4.0 and later

See Also

Reference

MiniportDisableInterrupt
MiniportISR
MiniportSynchronizeISR
NdisAcquireSpinLock
NdisDprAcquireSpinLock
NdisDprReleaseSpinLock
NdisFreeSpinLock
NdisMSynchronizeWithInterrupt
NdisReleaseSpinLock