Compartir a través de


Macro NdisInterlockedRemoveHeadList (ndis.h)

La función NdisInterlockedRemoveHeadList quita una entrada, normalmente un paquete, del encabezado de una lista doblemente vinculada 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 desde 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 de LIST_ENTRY quitada de la lista. Si la lista estaba vacía, la rutina devuelve NULL.

Observaciones

Antes de llamar a cualquier NdisInterlocked.. Enumerar función, 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 la NdisInterlockedInsert.. Enumerar las funciones.

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 NdisInterlockedRemoveHeadList está quitando 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 dado 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 volver a convertir un valor devuelto en la dirección de la entrada insertada, un controlador puede usar la macro CONTAINING_RECORD.

Si se llama NdisInterlockedRemoveHeadList en IRQL >= DISPATCH_LEVEL, el almacenamiento del parámetro listHead debe estar residente.

Requisitos

Requisito Valor
cliente mínimo admitido Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulte NdisInterlockedRemoveHeadList (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulte NdisInterlockedRemoveHeadList (NDIS 5.1)) en Windows XP.
de la plataforma de destino de Universal
encabezado de ndis.h (incluya Ndis.h)
biblioteca de Ndis.lib
irQL Cualquier nivel

Consulte también

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList