Condividi tramite


Funzione ExInterlockedInsertHeadList (wdm.h)

La routine ExInterlockedInsertHeadList inserisce atomicamente una voce all'inizio di un elenco collegato doubly di strutture LIST_ENTRY .

Sintassi

PLIST_ENTRY ExInterlockedInsertHeadList(
  [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 dell'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 selezione utilizzato per sincronizzare l'accesso all'elenco. Lo spazio di archiviazione per il blocco di rotazione deve essere residente e deve essere stato inizializzato chiamando KeInitializeSpinLock. È necessario utilizzare questo blocco spin solo con le routine ElencoXxxExInterlocked .

Valore restituito

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

Commenti

ExInterlockedInsertHeadList esegue la stessa operazione di InsertHeadList, ma in modo atomico. 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 ExInterlockedInsertHeadList può essere chiamata in qualsiasi IRQL. L'archiviazione per il parametro ListHead e le voci dell'elenco devono risiedere in tutti i valori IRQLs.

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

ExInterlockedInsertTailList

ExInterlockedRemoveHeadList

InitializeListHead

InsertHeadList

KeInitializeSpinLock