Função ExInterlockedInsertHeadList (wdm.h)
A rotina ExInterlockedInsertHeadList insere atomicamente uma entrada no início de uma lista duplamente vinculada de estruturas LIST_ENTRY .
Sintaxe
PLIST_ENTRY ExInterlockedInsertHeadList(
[in, out] PLIST_ENTRY ListHead,
[in, out] __drv_aliasesMem PLIST_ENTRY ListEntry,
[in, out] PKSPIN_LOCK Lock
);
Parâmetros
[in, out] ListHead
Um ponteiro para a estrutura LIST_ENTRY que serve como o cabeçalho da lista.
[in, out] ListEntry
Um ponteiro para a estrutura LIST_ENTRY que representa a entrada a ser inserida na lista.
[in, out] Lock
Um ponteiro para uma estrutura KSPIN_LOCK que serve como o bloqueio de rotação usado para sincronizar o acesso à lista. O armazenamento do bloqueio de rotação deve ser residente e deve ter sido inicializado chamando KeInitializeSpinLock. Você deve usar esse bloqueio de rotação somente com as rotinas da ListaXxxExInterlocked .
Retornar valor
ExInterlockedInsertHeadList retorna um ponteiro para a primeira entrada da lista antes da nova entrada ser inserida. Se a lista estiver vazia, a rotina retornará NULL.
Comentários
ExInterlockedInsertHeadList executa a mesma operação que InsertHeadList, mas atomicamente. Não misture chamadas atômicas e não atômicas na mesma lista.
Para obter mais informações sobre como usar essa rotina para implementar uma lista duplamente vinculada, consulte Singly e Doubly Linked Listas.
A rotina ExInterlockedInsertHeadList pode ser chamada em qualquer IRQL. O armazenamento para o parâmetro ListHead e as entradas de lista devem ser residentes em todas as IRQLs.