Compartir a través de


Función ExInterlockedInsertHeadList (wdm.h)

El ExInterlockedInsertHeadList de forma atómica inserta una entrada al principio de una lista doblemente vinculada de estructuras de LIST_ENTRY.

Sintaxis

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

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 estar residente y debe haberse inicializado llamando a KeInitializeSpinLock. Debe usar este bloqueo de giro solo con las rutinas deXxxList ExInterlocked.

Valor devuelto

ExInterlockedInsertHeadList devuelve un puntero a la primera entrada de la lista antes de se insertó la nueva entrada. Si la lista estaba vacía, la rutina devuelve NULL.

Observaciones

ExInterlockedInsertHeadList realiza la misma operación que InsertHeadList, pero atómicamente. No combine 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 doble, consulte listas vinculadas duplicadas y duplicadas.

Se puede llamar a la rutina ExInterlockedInsertHeadList en cualquier IRQL. El almacenamiento del parámetro ListHead de y las entradas de lista deben estar residentes en todos los IRQL.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL Cualquier nivel (consulte la sección Comentarios)
reglas de cumplimiento de DDI ioAllocateFree(wdm), ioReuseIrp(wdm), MarkingInterlockedQueuedIrps(wdm), LockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDevice Control(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), QuitarLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm)RemoveLockReleaseDeviceControl(wdm) ,RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockRelease Power(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Consulte también

ExInterlockedInsertTailList

ExInterlockedRemoveHeadList

initializeListHead

InsertHeadList

keInitializeSpinLock