Compartir a través de


Macro NdisInterlockedRemoveHeadList (ndis.h)

La función NdisInterlockedRemoveHeadList quita una entrada, normalmente un paquete, del encabezado de una lista vinculada doblemente para que el acceso a la lista se sincronice de forma segura para varios procesadores.

Sintaxis

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

Parámetros

[in] _ListHead

Puntero al encabezado de la lista vinculada doble de la que se va a quitar una entrada.

[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

NdisInterlockedRemoveHeadList devuelve un puntero a la estructura LIST_ENTRY quitada de la lista. Si la lista estaba vacía, la rutina devuelve NULL.

Comentarios

Antes de llamar a cualquier NdisInterlocked.. Función List , 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.

Antes de llamar a NdisInterlockedRemoveHeadList, las entradas se ponen en cola con una o varias llamadas a NdisInterlockedInsert. Funciones de lista .

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 que NdisInterlockedRemoveHeadList quita una entrada, incluso cuando el controlador se ejecuta en un equipo con varios procesadores.

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

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 NdisInterlockedRemoveHeadList en IRQL >= DISPATCH_LEVEL, el almacenamiento del parámetro ListHead debe estar residente.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulta NdisInterlockedRemoveHeadList (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulta NdisInterlockedRemoveHeadList (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

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList