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 |