PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS función de devolución de llamada (ndis.h)
Los procesos de función protocolCoReceiveNetBufferLists reciben indicaciones de los controladores subyacentes.
Sintaxis
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS ProtocolCoReceiveNetBufferLists;
void ProtocolCoReceiveNetBufferLists(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] NDIS_HANDLE ProtocolVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
)
{...}
Parámetros
[in] ProtocolBindingContext
Identificador de un área de contexto que el controlador de protocolo asignó para mantener la información de estado de un enlace. Este identificador se pasó a NDIS en una llamada anterior a NdisOpenAdapterEx.
[in] ProtocolVcContext
Identificador de un área de contexto asignada por el controlador de protocolo en la que este controlador mantiene la información de estado de tiempo de ejecución por conexión virtual (VC). Un cliente o administrador de llamadas independiente proporcionó este identificador cuando llamó a la función NdisCoCreateVc o desde su función ProtocolCoCreateVc.
[in] NetBufferLists
Lista vinculada de NET_BUFFER_LIST estructuras asignadas por el controlador subyacente. Cada estructura de NET_BUFFER_LIST suele estar asociada a una estructura NET_BUFFER.
[in] NumberOfNetBufferLists
Número de estructuras de NET_BUFFER_LIST que se encuentran en la lista vinculada de estructuras que NetBufferLists especifica.
[in] ReceiveFlags
Marcas que definen atributos para la operación de envío. Las marcas se pueden combinar con una operación OR bit a bit. Para borrar todas las marcas, establezca este parámetro en cero. ProtocolCoReceiveNetBufferLists admite las marcas siguientes:
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
El IRQL actual es DISPATCH_LEVEL. Para obtener más información sobre esta marca, vea Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
NDIS reclama la propiedad de las estructuras de NET_BUFFER_LIST y las estructuras de NET_BUFFER adjuntas inmediatamente después de la llamada a ProtocolCoReceiveNetBufferLists devuelve.
Valor devuelto
Ninguno
Observaciones
La función ProtocolCoReceiveNetBufferLists es necesaria para los controladores de protocolo CoNDIS. NDIS llama a ProtocolCoReceiveNetBufferLists después de que un controlador de miniporte enlazado llame al función NdisMCoIndicateReceiveNetBufferLists. También se puede producir una llamada a ProtocolCoReceiveNetBufferLists como resultado de un bucle invertido.
Si no se establece la marca NDIS_RECEIVE_FLAGS_RESOURCES en el parámetro CoReceiveFlags, el controlador de protocolo conserva la propiedad de las estructuras de NET_BUFFER_LIST hasta que llama al función NdisReturnNetBufferLists. Si NDIS establece la marca de NDIS_RECEIVE_FLAGS_RESOURCES, el controlador de protocolo no puede conservar la estructura de NET_BUFFER_LIST y los recursos asociados. NDIS_RECEIVE_FLAGS_RESOURCES indica que un controlador subyacente tiene recursos de recepción bajos. En este caso, la función ProtocolCoReceiveNetBufferLists debe copiar los datos recibidos en el almacenamiento asignado por protocolo y devolver lo más rápido posible.
En un sistema multiprocesador, ProtocolCoReceiveNetBufferLists se pueden ejecutar simultáneamente en más de un procesador. En esta situación, aplique protección (por ejemplo, use bloqueos de número) a estructuras de datos críticas que ProtocolCoReceiveNetBufferLists accesos.
NDIS llama a ProtocolCoReceiveNetBufferLists en IRQL<= DISPATCH_LEVEL.
Ejemplos de
Para definir una función ProtocolCoReceiveNetBufferLists, primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir un ProtocolCoReceiveNetBufferLists función denominada "MyCoReceiveNetBufferLists", use el tipo PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS como se muestra en este ejemplo de código:
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS MyCoReceiveNetBufferLists;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyCoReceiveNetBufferLists(
NDIS_HANDLE ProtocolBindingContext,
NDIS_HANDLE ProtocolVcContext,
INPNET_BUFFER_LIST NetBufferLists,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
El tipo de función PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.
Para obtener información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.0 y versiones posteriores. |
de la plataforma de destino de | Windows |
encabezado de | ndis.h (incluya Ndis.h) |
irQL | <= DISPATCH_LEVEL |
Consulte también
funciones de envío y recepción del controlador de protocolo CoNDIS
miniportReturnNetBufferLists NdisMCoIndicateReceiveNetBufferLists