Compartir a través de


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

Identificador de minipuerto que NDIS pasó al función miniportInitializeEx.

NetBufferList

Lista vinculada de estructuras de NET_BUFFER_LIST asignadas por el controlador de miniport.

[in] PortNumber

Número de puerto que identifica un puerto de adaptador de miniporte. 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 miniport. Use el puerto predeterminado si el controlador de miniporte 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 es 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 tengan el mismo tipo de protocolo (EtherType).

controladores de miniporte

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE es opcionalmente establecido por los controladores de minipuerto que son ciertos todos los NCL de una cadena NBL tienen el mismo EtherType. Al establecer esta marca, el controlador de miniporte 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 miniport nunca son necesarios para establecer esta marca.

filtros ligeros (LWFs)

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 NCL de una cadena NBL tienen el mismo EtherType. Sin embargo, al igual que los controladores de miniporte, los LWF nunca son necesarios para establecer esta marca en este caso, y siempre pueden elegir borrar la marca.

Al pasar por los recibidos de la capa inferior, si un LWF cambia el EtherType de los NBLs, el LWF debe borrar la marca si las NNB ya no tienen el mismo EtherType.

Al pasar por las recepcións de la capa inferior, si un LWF cambia el EtherType de las NCL, 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 borrarlo.

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 optar por 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 de

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 incluyan solo datos que coincidan 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 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

Un controlador de miniport suele llamar a la función NdisMIndicateReceiveNetBufferLists desde su función MiniportInterruptDPC. Cuando un controlador de miniporta 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 la ProtocolReceiveNetBufferLists función de controladores de protocolo enlazados.

Los controladores de 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 miniporta llama a NdisMIndicateReceiveNetBufferLists y borra la marca de NDIS_RECEIVE_FLAG_RESOURCES en el parámetro ReceiveFlags, NDIS devuelve las estructuras NET_BUFFER_LIST indicadas al controlador de miniport 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 de NET_BUFFER_LIST a la función de miniportador MiniportReturnNetBufferLists.

Si un controlador de miniporta 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 al controlador de miniport MiniportReturnNetBufferLists función para devolver las estructuras de NET_BUFFER_LIST. En su lugar, NDIS devuelve las estructuras de NET_BUFFER_LIST al controlador de miniporte tras el retorno de NdisMIndicateReceiveNetBufferLists. El controlador de miniport debe reclamar las estructuras de NET_BUFFER_LIST inmediatamente después de NdisMIndicateReceiveNetBufferLists devuelve. Para reclamar las estructuras de NET_BUFFER_LIST, un controlador de miniporte 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 miniport. 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 las MDL adjuntas.

Requisitos

Requisito Valor
cliente mínimo admitido Se admite en NDIS 6.0 y versiones posteriores.
de la plataforma de destino de Universal
encabezado de ndis.h (incluya Ndis.h)
biblioteca de Ndis.lib
irQL <= DISPATCH_LEVEL
reglas de cumplimiento de DDI Irql_SendRcv_Function(ndis)

Consulte también

MiniportInitializeEx

miniportInterruptDPC

miniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists de