Función ExInterlockedInsertTailList (wdm.h)

La rutina ExInterlockedInsertTailList inserta de forma atómica una entrada al final de una lista doblemente vinculada de estructuras LIST_ENTRY .

Sintaxis

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

Parámetros

[in, out] ListHead

Puntero a la estructura LIST_ENTRY que actúa como encabezado de lista.

[in, out] ListEntry

Puntero a la estructura LIST_ENTRY que representa la entrada que se va a insertar en la lista.

[in, out] Lock

Puntero a una estructura de KSPIN_LOCK que actúa como bloqueo de número usado para sincronizar el acceso a la lista. El almacenamiento del bloqueo de número debe ser residente y debe haberse inicializado llamando a KeInitializeSpinLock. Debe usar este bloqueo de número solo con las rutinas ExInterlockedXxxList .

Valor devuelto

ExInterlockedInsertTailList devuelve un puntero a la última entrada de la lista antes de insertar la nueva entrada. Si la lista estaba vacía, la rutina devuelve NULL.

Comentarios

ExInterlockedInsertTailList realiza la misma operación que InsertTailList, pero atómicamente. No mezcle llamadas atómicas y no atómicas en la misma lista.

Para obtener más información sobre el uso de esta rutina para implementar una lista vinculada doblemente, consulte Singly and Doblemente vinculado Listas.

Se puede llamar a la rutina ExInterlockedInsertTailList en cualquier IRQL. El almacenamiento para el parámetro ListHead y las entradas de lista deben residir en todos los IRQL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL Cualquier nivel (consulte la sección Comentarios)
Reglas de cumplimiento de 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)

Consulte también

ExInterlockedInsertHeadList

InitializeListHead

InsertTailList

KeInitializeSpinLock