Macro NdisInterlockedInsertHeadList (ndis.h)
A função NdisInterlockedInsertHeadList insere uma entrada, geralmente um pacote, no cabeçalho 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.
Retornar valor
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 especificado 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 paginável.
A maioria dos drivers NDIS processa pacotes na ordem FIFO, portanto, qualquer driver que usa uma fila intertravada tende a calar o botão 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 para o parâmetro ListHead e as entradas de lista deverão ser residentes.
Requisitos
Requisito | Valor |
---|---|
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 |