Compartilhar via


Macro NdisInterlockedRemoveHeadList (ndis.h)

A função NdisInterlockedRemoveHeadList remove uma entrada, geralmente um pacote, do cabeçalho de uma lista duplamente vinculada para que o acesso à lista seja sincronizado de maneira segura para vários processadores.

Sintaxe

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

Parâmetros

[in] _ListHead

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

[in] _SpinLock

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

Retornar valor

NdisInterlockedRemoveHeadList retorna um ponteiro para a estrutura LIST_ENTRY removida da lista. Se a lista estiver vazia, a rotina retornará NULL.

Comentários

Antes de chamar qualquer NdisInterlocked.. Função list , 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.

Antes de chamar NdisInterlockedRemoveHeadList, as entradas são enfileiradas com uma ou mais chamadas para o NdisInterlockedInsert.. Listar funções.

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

NdisInterlockedRemoveHeadList 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 NdisInterlockedRemoveHeadList não pode ser um código paginável.

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

Se NdisInterlockedRemoveHeadList for chamado em IRQL >= DISPATCH_LEVEL, o armazenamento do parâmetro ListHead deverá ser residente.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte para drivers NDIS 6.0 e NDIS 5.1 (consulte NdisInterlockedRemoveHeadList (NDIS 5.1)) no Windows Vista. Com suporte para drivers NDIS 5.1 (consulte NdisInterlockedRemoveHeadList (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

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList