Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 |