Macro NdisInterlockedInsertHeadList (ndis.h)

A função NdisInterlockedInsertHeadList insere uma entrada, geralmente um pacote, na cabeça de uma lista duplamente vinculada para que o acesso à lista seja sincronizado de maneira segura para vários processadores.

Sintaxe

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

Parâmetros

[in] _ListHead

Um ponteiro para o cabeçalho da lista duplamente vinculada na qual uma entrada deve ser inserida.

[in] _ListEntry

Um ponteiro para a entrada a ser inserida no cabeçalho da lista.

[in] _SpinLock

Um ponteiro para um bloqueio de rotação fornecido pelo chamador, usado para sincronizar o acesso à lista.

Valor retornado

Nenhum

Comentários

Antes de chamar NdisInterlockedInsertHeadList, um driver deve inicializar a variável em ListHead com a função NdisInitializeListHead e a variável em SpinLock com a função NdisAllocateSpinLock . O driver também deve fornecer armazenamento residente para essas variáveis e para sua fila interna.

O bloqueio de rotação fornecido pelo chamador impede que qualquer outra função acesse a fila interna do driver enquanto NdisInterlockedInsertHeadList está inserindo a entrada fornecida, mesmo quando o driver está em execução em um computador multiprocessador.

NdisInterlockedInsertHeadList eleva o IRQL para DISPATCH_LEVEL quando ele adquire o bloqueio de rotação determinado e restaura o IRQL original antes de retornar o controle. Consequentemente, qualquer função de driver que chame NdisInterlockedInsertHeadList não pode ser um código pageable.

A maioria dos drivers do NDIS processa pacotes na ordem FIFO, portanto, qualquer driver que usa uma fila intertravada tende a calar thel A função NdisInterlockedInsertTailList é muito mais frequente do que NdisInterlockedInsertHeadList. Esse driver geralmente chama NdisInterlockedInsertHeadList apenas para redirecionar um pacote para uma operação de repetição.

Para converter um valor retornado de volta para o endereço da entrada inserida, um driver pode usar a macro CONTAINING_RECORD .

Se NdisInterlockedInsertHeadList for chamado em IRQL >= DISPATCH_LEVEL, o armazenamento do parâmetro ListHead e as entradas de lista deverão ser residentes.

Requisitos

   
Cliente mínimo com suporte Com suporte para drivers NDIS 6.0 e NDIS 5.1 (consulte NdisInterlockedInsertHeadList (NDIS 5.1)) no Windows Vista. Com suporte para drivers NDIS 5.1 (consulte NdisInterlockedInsertHeadList (NDIS 5.1)) no Windows XP.
Plataforma de Destino Universal
Cabeçalho ndis.h (inclua Ndis.h)
Biblioteca Ndis.lib
IRQL Qualquer nível

Confira também

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList