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 |