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.
Los procesos de función protocolReceiveNetBufferLists de reciben indicaciones de los controladores subyacentes.
Sintaxis
PROTOCOL_RECEIVE_NET_BUFFER_LISTS ProtocolReceiveNetBufferLists;
VOID ProtocolReceiveNetBufferLists(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[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 la función NdisOpenAdapterEx.
[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] PortNumber
Número de puerto que identifica un puerto de adaptador de miniporte. El número de puerto predeterminado de un adaptador de miniport es cero. Los controladores de protocolo que no usan puertos de adaptador de miniport deben omitir este parámetro.
[in] NumberOfNetBufferLists
Número de estructuras de NET_BUFFER_LIST que se encuentran en la lista vinculada de estructuras en NetBufferLists .
[in] ReceiveFlags
Marcas que definen atributos para la operación de envío. Las marcas se pueden combinar con una operación OR. Para borrar todas las marcas, establezca este miembro en cero. Esta función admite las marcas siguientes:
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
Especifica que el IRQL actual es DISPATCH_LEVEL. Para obtener más información sobre esta marca, vea Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
Especifica que 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 ProtocolReceiveNetBufferLists devuelve.
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists tengan el mismo tipo de protocolo (EtherType).
NDIS_RECEIVE_FLAGS_SINGLE_VLAN
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists pertenecen a la misma VLAN.
NDIS_RECEIVE_FLAGS_PERFECT_FILTERED
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists incluyan solo los datos que coincidan con el filtro de paquetes y la lista de multidifusión asignados al adaptador de miniport.
NDIS_RECEIVE_FLAGS_SINGLE_QUEUE
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists pertenecen a la misma cola de máquinas virtuales. Un controlador de miniport debe establecer esta marca para todas las indicaciones de recepción en una cola si la marca de NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION se estableció en el Flags miembro del NDIS_RECEIVE_QUEUE_PARAMETERS estructura cuando se asignó esa cola.
NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists contienen información de memoria compartida válida. Cuando esta marca se establece en un NET_BUFFER_LISTrecibido, NDIS trata la información de memoria compartida como válida. Cuando no se establece esta marca, los controladores y NDIS omiten la información de memoria compartida. Por ejemplo, los controladores intermedios que modifican los datos de paquetes pueden usar esta marca para determinar si se deben copiar los datos. Los controladores de miniporte pueden usar la marca para determinar cómo liberar la memoria asociada a una cola de máquina virtual cuando se elimina una cola.
NDIS_RECEIVE_FLAGS_MORE_NBLS
Reservado.
Valor devuelto
Ninguno
Observaciones
ProtocolReceiveNetBufferLists es una función necesaria para los controladores de protocolo. NDIS llama a ProtocolReceiveNetBufferLists después de que un controlador de miniporte enlazado llame al función NdisMIndicateReceiveNetBufferLists. También se puede producir una llamada a protocolReceiveNetBufferLists como resultado de un bucle invertido.
Si no se establece la marca NDIS_RECEIVE_FLAGS_RESOURCES en el parámetro ReceiveFlags, el controlador de protocolo conserva la propiedad de las estructuras de NET_BUFFER_LIST hasta que llama al función NdisReturnNetBufferLists.
Si NDIS establece el NDIS_RECEIVE_FLAGS_RESOURCES marca el controlador de protocolo no puede conservar la estructura de NET_BUFFER_LIST y los recursos asociados. La marca set NDIS_RECEIVE_FLAGS_RESOURCES indica que un controlador subyacente se está ejecutando bajo en los recursos de recepción. En este caso, el ProtocolReceiveNetBufferLists función debe copiar los datos recibidos en el almacenamiento asignado por protocolo y devolver lo más rápido posible.
NDIS llama a ProtocolReceiveNetBufferLists en IRQL<= DISPATCH_LEVEL.
Ejemplos de
Para definir una función ProtocolReceiveNetBufferLists, 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 ProtocolReceiveNetBufferLists función denominada "MyReceiveNetBufferLists", use el tipo PROTOCOL_RECEIVE_NET_BUFFER_LISTS tal como se muestra en este ejemplo de código:
PROTOCOL_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyReceiveNetBufferLists(
NDIS_HANDLE ProtocolBindingContext,
PNET_BUFFER_LIST NetBufferLists,
NDIS_PORT_NUMBER PortNumber,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
El tipo de función PROTOCOL_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_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 |