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 |