Compartir a través de


Macro NdisInterlockedInsertHeadList (ndis.h)

La función NdisInterlockedInsertHeadList inserta una entrada, normalmente un paquete, al principio de una lista vinculada doblemente para que el acceso a la lista se sincronice de forma segura para varios procesadores.

Sintaxis

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

Parámetros

[in] _ListHead

Puntero al encabezado de la lista vinculada doblemente en la que se va a insertar una entrada.

[in] _ListEntry

Puntero a la entrada que se va a insertar en el encabezado de la lista.

[in] _SpinLock

Puntero a un bloqueo de número proporcionado por el autor de la llamada, que se usa para sincronizar el acceso a la lista.

Valor devuelto

None

Observaciones

Antes de llamar a NdisInterlockedInsertHeadList, un controlador debe inicializar la variable en ListHead con la función NdisInitializeListHead y la variable en SpinLock con la función NdisAllocateSpinLock . El controlador también debe proporcionar almacenamiento residente para estas variables y para su cola interna.

El bloqueo de número proporcionado por el autor de la llamada impide que cualquier otra función acceda a la cola interna del controlador mientras NdisInterlockedInsertHeadList inserta la entrada especificada, incluso cuando el controlador se ejecuta en un equipo con varios procesadores.

NdisInterlockedInsertHeadList genera IRQL para DISPATCH_LEVEL cuando adquiere el bloqueo de número especificado y restaura el IRQL original antes de que devuelva el control. Por lo tanto, cualquier función de controlador que llame a NdisInterlockedInsertHeadList no puede ser código paginable.

La mayoría de los controladores NDIS procesan paquetes en orden FIFO, por lo que cualquier controlador que use una cola interbloqueada tiende a calar el La función NdisInterlockedInsertTailList es mucho más frecuente que NdisInterlockedInsertHeadList. Este controlador normalmente llama a NdisInterlockedInsertHeadList solo para volver a poner en cola un paquete para una operación de reintento.

Para convertir un valor devuelto en la dirección de la entrada insertada, un controlador puede usar la macro CONTAINING_RECORD .

Si se llama a NdisInterlockedInsertHeadList en IRQL >= DISPATCH_LEVEL, el almacenamiento del parámetro ListHead y las entradas de lista deben estar residentes.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulta NdisInterlockedInsertHeadList (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulta NdisInterlockedInsertHeadList (NDIS 5.1)) en Windows XP.
Plataforma de destino Universal
Encabezado ndis.h (incluya Ndis.h)
Library Ndis.lib
IRQL Cualquier nivel

Consulte también

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList