Función NdisMIndicateReceiveNetBufferLists (ndis.h)
Los controladores de Miniport llaman a la función NdisMIndicateReceiveNetBufferLists para indicar la recepción de datos de la red.
Sintaxis
void NdisMIndicateReceiveNetBufferLists(
[in] NDIS_HANDLE MiniportAdapterHandle,
PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
);
Parámetros
[in] MiniportAdapterHandle
Controlador de minipuerto que NDIS pasó al Función MiniportInitializeEx .
NetBufferList
Lista vinculada de estructuras de NET_BUFFER_LIST asignadas por el controlador de minipuerto.
[in] PortNumber
Número de puerto que identifica un puerto de adaptador de minipuerto. Para asignar un número de puerto del adaptador de miniporte, llame a la función NdisMAllocatePort . Un valor cero identifica el puerto predeterminado de un adaptador de minipuerto. Use el puerto predeterminado si el controlador de minipuerto no ha asignado puertos para el adaptador especificado.
[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 está DISPATCH_LEVEL. Para obtener más información sobre esta marca, vea Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
Especifica que el controlador de miniporte reclama la propiedad de las estructuras de NET_BUFFER_LIST y las estructuras de NET_BUFFER adjuntas inmediatamente después de la llamada a NdisMIndicateReceiveNetBufferLists devuelve.
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Especifica que todas las estructuras de NET_BUFFER_LIST de la lista de NetBufferLists tienen el mismo tipo de protocolo (EtherType).
Controladores de minipuerto
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE opcionalmente se establece mediante controladores de minipuerto que son ciertos todos los NBL de una cadena NBL tienen el mismo EtherType. Al establecer esta marca, el controlador de minipuerto informa a NDIS y protocolos de capa superior que no tienen que examinar cada paquete para su EtherType, lo que aumenta el rendimiento. Los controladores de minipuerto nunca son necesarios para establecer esta marca.
Filtros ligeros (LWF)
Al indicar que recibe una novela, un filtro ligero (LWF) también puede establecer opcionalmente NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE si está seguro de que todas las NTL de una cadena NBL tienen el mismo EtherType. Sin embargo, al igual que los controladores de minipuerto, los LWF nunca son necesarios para establecer esta marca en este caso, y siempre pueden elegir borrar la marca.
Cuando el paso a través recibe de la capa inferior, si un LWF cambia el EtherType de las NBL, el LWF debe borrar la marca si las N NBL ya no tienen el mismo EtherType.
Cuando el paso a través recibe de la capa inferior, si un LWF cambia el EtherType de los NBLs, el LWF puede establecer opcionalmente esta marca si está seguro de que todas las NCL de una cadena NBL tienen el mismo EtherType. En este caso, el LWF nunca es necesario para establecer esta marca y siempre puede elegir borrarla.
Cuando se consume la recepción de la capa inferior, si se establece esta marca, un LWF puede suponer que cada NBL de la cadena tiene el mismo EtherType. El LWF nunca es necesario para leer esta marca y, en su lugar, puede elegir leer siempre el EtherType de cada NBL.
Al combinar varias cadenas NBL, un LWF debe borrar esta marca a menos que esté seguro de que la nueva cadena NBL tiene un EtherType homogéneo.
Controladores de protocolo
Al consumir las recepcións de la capa inferior, si se establece NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE, el protocolo puede suponer que cada NBL de la cadena tiene el mismo EtherType. Nunca se requiere un protocolo para leer esta marca y, en su lugar, puede elegir leer siempre el EtherType de cada NBL.
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 incluyen solo los datos que coinciden con el filtro de paquetes y la lista de direcciones de multidifusión que se asignan 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 minipuerto 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 miembro Flags 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_LIST recibido, 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 minipuerto 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
None
Observaciones
Un controlador de miniport suele llamar a la función NdisMIndicateReceiveNetBufferLists desde su función MiniportInterruptDPC . Cuando un controlador de minipuerto llama a NdisMIndicateReceiveNetBufferLists, especifica una lista de estructuras de NET_BUFFER_LIST en el parámetro NetBufferLists . NDIS pasa las estructuras de NET_BUFFER_LIST a Función ProtocolReceiveNetBufferLists de controladores de protocolo enlazados.
Los controladores miniport deben establecer el miembro SourceHandle de cada estructura de NET_BUFFER_LIST en el mismo valor que el parámetro MiniportAdapterHandle .
Si un controlador de minipuerto llama a NdisMIndicateReceiveNetBufferLists y borra la marca NDIS_RECEIVE_FLAG_RESOURCES en el parámetro ReceiveFlags , NDIS devuelve las estructuras de NET_BUFFER_LIST indicadas al controlador de miniporte. Función MiniportReturnNetBufferLists . En este caso, el controlador de minipuerto no debe reclamar las estructuras de NET_BUFFER_LIST hasta que NDIS devuelva las estructuras NET_BUFFER_LIST a la función MiniportReturnNetBufferLists del controlador de miniporte.
Si un controlador de minipuerto llama a NdisMIndicateReceiveNetBufferLists y establece la marca NDIS_RECEIVE_FLAG_RESOURCES en el parámetro ReceiveFlags , esto indica que el controlador de miniporte debe recuperar la propiedad de las estructuras de NET_BUFFER_LIST inmediatamente. En este caso, NDIS no llama a la función MiniportReturnNetBufferLists del controlador miniport para devolver las estructuras de NET_BUFFER_LIST . En su lugar, NDIS devuelve las estructuras de NET_BUFFER_LIST al controlador de minipuerto al volver de NdisMIndicateReceiveNetBufferLists. El controlador de minipuerto debe reclamar las estructuras de NET_BUFFER_LIST inmediatamente después de que se devuelva NdisMIndicateReceiveNetBufferLists . Para reclamar las estructuras de NET_BUFFER_LIST , un controlador de minipuerto puede llamar a su propio Función MiniportReturnNetBufferLists .
Al establecer la marca de NDIS_RECEIVE_FLAG_RESOURCES en el parámetro ReceiveFlags , los controladores de protocolo obligan a los controladores de protocolo a copiar los datos de red y liberar las estructuras de NET_BUFFER_LIST en el controlador de minipuerto. Los escritores de controladores deben diseñar sus controladores de minipuerto con suficientes estructuras de NET_BUFFER_LIST previamente asignados para evitar la copia innecesaria.
El autor de la llamada de NdisMIndicateReceiveNetBufferLists debe inicializar correctamente las estructuras de NET_BUFFER_LIST , las estructuras de NET_BUFFER adjuntas y los MDL adjuntos.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Compatible con NDIS 6.0 y versiones posteriores. |
Plataforma de destino | Universal |
Encabezado | ndis.h (incluya Ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | Irql_SendRcv_Function(ndis) |