Condividi tramite


Funzione ExInterlockedInsertTailList (wdm.h)

La routine ExInterlockedInsertTailList inserisce una voce alla fine di un elenco collegato doubly di strutture LIST_ENTRY .

Sintassi

PLIST_ENTRY ExInterlockedInsertTailList(
  [in, out] PLIST_ENTRY                  ListHead,
  [in, out] __drv_aliasesMem PLIST_ENTRY ListEntry,
  [in, out] PKSPIN_LOCK                  Lock
);

Parametri

[in, out] ListHead

Puntatore alla struttura LIST_ENTRY che funge da intestazione elenco.

[in, out] ListEntry

Puntatore alla struttura LIST_ENTRY che rappresenta la voce da inserire nell'elenco.

[in, out] Lock

Puntatore a una struttura KSPIN_LOCK che funge da blocco di rotazione usato per sincronizzare l'accesso all'elenco. L'archiviazione per il blocco spin deve essere residente e deve essere stata inizializzata chiamando KeInitializeSpinLock. È necessario usare questo blocco di spin solo con le routine Di elencoXxxexInterlocked .

Valore restituito

ExInterlockedInsertTailList restituisce un puntatore all'ultima voce dell'elenco prima dell'inserimento della nuova voce. Se l'elenco è vuoto, la routine restituisce NULL.

Commenti

ExInterlockedInsertTailList esegue la stessa operazione di InsertTailList, ma atomicamente. Non combinare chiamate atomiche e non atomiche nello stesso elenco.

Per altre informazioni sull'uso di questa routine per implementare un elenco collegato doubly, vedere Singly e Doubly Linked Elenchi.

La routine ExInterlockedInsertTailList può essere chiamata in qualsiasi IRQL. L'archiviazione per il parametro ListHead e le voci dell'elenco devono essere residenti in tutti gli ELENCHI di integrazione.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Qualsiasi livello (vedere la sezione Osservazioni)
Regole di conformità DDI IoAllocateFree(wdm), IoReuseIrp(wdm), MarkingInterlockedQueuedIrps(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm),RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Vedi anche

ExInterlockedInsertHeadList

InitializeListHead

InsertTailList

KeInitializeSpinLock