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 controlador de protocolo en la que este controlador mantiene la información de estado en 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 estructuras de NET_BUFFER_LIST asignadas por el controlador subyacente. Cada estructura NET_BUFFER_LIST normalmente está 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 especifica NetBufferLists .
[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
None
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 a . Función NdisReturnNetBufferLists . Si NDIS establece la marca 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 puede ejecutar simultáneamente en más de un procesador. En esta situación, aplique la protección (por ejemplo, use bloqueos de número) a estructuras de datos críticas a las que accede ProtocolCoReceiveNetBufferLists .
NDIS llama a ProtocolCoReceiveNetBufferLists en IRQL<= DISPATCH_LEVEL.
Ejemplos
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 Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir una función ProtocolCoReceiveNetBufferLists denominada "MyCoReceiveNetBufferLists", use el tipo de 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, consulte 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, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite en NDIS 6.0 y versiones posteriores. |
Plataforma de destino | Windows |
Encabezado | ndis.h (incluya Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
Consulte también
Funciones de envío y recepción del controlador del protocolo CoNDIS
MiniportReturnNetBufferLists NdisMCoIndicateReceiveNetBufferLists