Compartir a través de


FILTER_SEND_NET_BUFFER_LISTS función de devolución de llamada (ndis.h)

NDIS llama a la función FilterSendNetBufferLists para permitir que un controlador de filtro filtre una lista vinculada de estructuras NET_BUFFER_LIST .

Nota Debe declarar la función mediante el tipo FILTER_SEND_NET_BUFFER_LISTS . Para obtener más información, consulte la sección Ejemplos siguientes.
 

Sintaxis

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parámetros

[in] FilterModuleContext

Identificador del área de contexto del módulo de filtro. El controlador de filtro creó e inicializó este área de contexto en la función FilterAttach .

NetBufferList

Puntero a una lista vinculada de estructuras de NET_BUFFER_LIST que especifican listas de estructuras de NET_BUFFER . Cada NET_BUFFER de la lista asigna una cadena de MDL que contienen los datos de transmisión.

[in] PortNumber

Número de puerto que identifica un puerto de adaptador de minipuerto. Los números de puerto del adaptador de minipuerto se asignan mediante una llamada a la función NdisMAllocatePort . Un valor cero identifica el puerto predeterminado de un adaptador de minipuerto.

[in] SendFlags

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_SEND_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_SEND_FLAGS_CHECK_FOR_LOOPBACK

Especifica que NDIS debe comprobar si hay bucle invertido. De forma predeterminada, NDIS no devuelve datos al controlador que envió la solicitud de envío. Un controlador de sobreaprovisionamiento puede invalidar este comportamiento estableciendo esta marca. Cuando se establece esta marca, NDIS identifica todas las estructuras de NET_BUFFER que contienen datos que coinciden con los criterios de recepción del enlace. NDIS indica NET_BUFFER estructuras que coinciden con los criterios del controlador de sobreaprovisionamiento. Esta marca no afecta a la comprobación de bucle invertido o bucle invertido en otros enlaces.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Si se establece esta marca, todos los paquetes de una lista vinculada de NET_BUFFER_LIST estructuras originadas en el mismo puerto de origen de conmutador extensible de Hyper-V.

Para obtener más información, vea Marcadores de envío y recepción de conmutador extensible de Hyper-V.

Nota Si cada paquete de la lista vinculada de NET_BUFFER_LIST estructuras usa el mismo puerto de origen, la extensión debe establecer la marca NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE en el parámetro SendCompleteFlags de NdisFSendNetBufferListsComplete cuando completa la solicitud de envío.
 
Nota Esta marca está disponible en NDIS 6.30 y versiones posteriores.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Si se establece esta marca, todos los paquetes de una lista vinculada de estructuras de NET_BUFFER_LIST se reenviarán al mismo puerto de destino de conmutador extensible.

Para obtener más información, vea Marcadores de envío y recepción de conmutador extensible de Hyper-V.

Nota Esta marca está disponible en NDIS 6.30 y versiones posteriores.
 

Valor devuelto

None

Observaciones

FilterSendNetBufferLists es una función opcional. Si un controlador de filtro no filtra las solicitudes de envío, puede establecer el punto de entrada de esta función en NULL cuando llama a . Función NdisFRegisterFilterDriver .

Si un controlador de filtro especifica una función FilterSendNetBufferLists y pone en cola las solicitudes de envío, también debe especificar un Función FilterCancelSendNetBufferLists .

El controlador de filtro puede llamar a la función NdisSetOptionalHandlers , desde la función FilterSetModuleOptions , para especificar una función FilterSendNetBufferLists para un módulo de filtro.

Si el controlador de filtro especifica una función FilterSendNetBufferLists , NDIS llama a esta función para filtrar los datos contenidos en una lista de NET_BUFFER estructuras a través de la red. NDIS especifica una lista de estructuras de NET_BUFFER en cada estructura de NET_BUFFER_LIST .

Si el controlador de filtro no especificó FilterSendNetBufferLists, NDIS llama al siguiente controlador de filtro inferior en la pila de controladores que ha especificado una función FilterSendNetBufferLists . Si no hay controladores de filtro subyacentes, NDIS llama a los controladores subyacentes. Función MiniportSendNetBufferLists .

El controlador de filtro puede filtrar los datos y enviar los datos filtrados a los controladores subyacentes. Para cada estructura de NET_BUFFER enviada a FilterSendNetBufferLists, un controlador de filtro puede hacer lo siguiente:

  • Pase el búfer al siguiente controlador subyacente llamando a la función NdisFSendNetBufferLists . El controlador de filtro puede modificar el contenido del búfer antes de llamar a NdisFSendNetBufferLists. En este caso, NDIS llama a Función FilterSendNetBufferListsComplete después de que los controladores subyacentes completen la solicitud de envío.
  • Rechace el búfer llamando a la función NdisFSendNetBufferListsComplete .
  • Poner en cola el búfer en una estructura de datos local para su posterior procesamiento.
  • Copie el búfer y origine una solicitud de envío con la copia. La operación de envío es similar a una solicitud de envío iniciada por el controlador de filtro. En este caso, el controlador debe devolver el búfer original al controlador de sobreaprovisionamiento llamando a la función NdisFSendNetBufferListsComplete .
Una vez completada la operación de envío, un controlador de filtro invierte las modificaciones, si las hay, en los descriptores de búfer que realizó en la función FilterSendNetBufferLists . El controlador llama a la función NdisFSendNetBufferListsComplete para devolver la lista vinculada de estructuras de NET_BUFFER_LIST a los controladores que se sobreponen y devolver el estado final de la solicitud de envío.

Si un módulo de filtro está en estado Pausado , el controlador de filtro no debe originar ninguna solicitud de envío para ese módulo de filtro. Si NDIS llama a FilterSendNetBufferLists, el controlador no debe llamar a NdisFSendNetBufferLists para pasar los datos hasta que se reinicie el controlador. El controlador debe llamar a NdisFSendNetBufferListsComplete inmediatamente para completar la operación de envío. Debe establecer el estado completo en cada estructura de NET_BUFFER_LIST en NDIS_STATUS_PAUSED.

NDIS llama a FilterSendNetBufferLists en IRQL <= DISPATCH_LEVEL.

Ejemplos

Para definir una función FilterSendNetBufferLists , primero debe proporcionar una declaración de función que identifique el tipo de función que está definiendo. 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 FilterSendNetBufferLists denominada "MySendNetBufferLists", use el tipo de FILTER_SEND_NET_BUFFER_LISTS como se muestra en este ejemplo de código:

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

A continuación, implemente la función de la siguiente manera:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

El tipo de función FILTER_SEND_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 FILTER_SEND_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

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry