Función FwpsInjectTransportSendAsync1 (fwpsk.h)

La función FwpsInjectTransportSendAsync1 inserta datos de paquetes de las capas de error de transporte, datos de datagramas o ICMP en la ruta de acceso de envío de datos. Esta función difiere de la versión anterior (FwpsInjectTransportSendAsync0) en que toma una estructura de parámetros actualizada como argumento.

NotaFwpsInjectTransportSendAsync1 es la versión específica de FwpsInjectTransportSendAsync usada en Windows 7 y versiones posteriores. Para obtener más información, vea NOMBRES DE Version-Independent DE PMA y versiones específicas de Windows dirigidas a destinatarios. Para Windows Vista, FwpsInjectTransportSendAsync0 está disponible.
 

Sintaxis

NTSTATUS FwpsInjectTransportSendAsync1(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
  [in]           ADDRESS_FAMILY              addressFamily,
  [in]           COMPARTMENT_ID              compartmentId,
  [in, out]      NET_BUFFER_LIST             *netBufferList,
  [in]           FWPS_INJECT_COMPLETE0       completionFn,
  [in, optional] HANDLE                      completionContext
);

Parámetros

[in] injectionHandle

Identificador de inyección creado previamente por una llamada a Función FwpsInjectionHandleCreate0 .

[in, optional] injectionContext

Identificador opcional para el contexto de inyección. Si se especifica, se puede obtener llamando a la función FwpsQueryPacketInjectionState0 cuando el estado de inyección de paquetes FWPS_PACKET_INJECTION_STATE es FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

[in] endpointHandle

Identificador que indica el punto de conexión de transporte de pila en la ruta de acceso de envío de datos en la que se insertará el paquete. Este identificador de punto de conexión se proporciona a una llamada a través del miembro transportEndpointHandle del FWPS_INCOMING_METADATA_VALUES0 estructura que se pasa a la función de llamada classifyFn del controlador de llamada. Los controladores de llamada deben usar el identificador proporcionado para insertar paquetes clonados en la ruta de acceso de datos lo antes posible, antes de que se cierre el socket asociado al punto de conexión de pila y el identificador deje de ser válido.

[in] flags

Este parámetro está reservado. Los controladores de llamada deben establecer este parámetro en cero.

[in, optional] sendArgs

Puntero a FWPS_TRANSPORT_SEND_PARAMS1 estructura que especifica las propiedades del paquete saliente actual. Este parámetro solo puede ser NULL si la lista de búferes netos que se va a insertar contiene un encabezado IP (por ejemplo, si el paquete se envía a través de un socket sin formato).

[in] addressFamily

Una de las siguientes familias de direcciones:

AF_INET

Familia de direcciones IPv4.

AF_INET6

Familia de direcciones IPv6.

[in] compartmentId

Identificador del compartimiento de enrutamiento en el que se insertan los datos del paquete, especificados como un tipo de COMPARTMENT_ID . Este identificador se proporciona a una llamada a través del miembro compartmentId del FWPS_INCOMING_METADATA_VALUES0 estructura que se pasa a la función de llamada classifyFn del controlador de llamada. Si el miembro compartmentId está disponible para las llamadas, FWPS_METADATA_FIELD_COMPARTMENT_ID se establecerá en el miembro currentMetadataValues . De lo contrario, establezca este parámetro en UNSPECIFIED_COMPARTMENT_ID.

[in, out] netBufferList

Puntero a una estructura NET_BUFFER_LIST que describe los datos de paquete que se insertan. Un controlador de llamada asigna una estructura de NET_BUFFER_LIST que se va a usar para insertar datos de paquetes mediante una llamada a Función FwpsAllocateCloneNetBufferList0 o Función FwpsAllocateNetBufferAndNetBufferList0 .

[in] completionFn

Puntero a una función de llamada completionFn proporcionada por el controlador de llamada. El motor de filtros llama a esta función después de que los datos del paquete, descritos por el parámetro netBufferList , se hayan insertado en la pila de red.

[in, optional] completionContext

Puntero a un contexto proporcionado por el controlador de llamada que se pasa a la función de llamada a la que apunta el parámetro completionFn . Este parámetro es opcional y puede ser NULL.

Valor devuelto

La función FwpsInjectTransportSendAsync1 devuelve uno de los siguientes códigos NTSTATUS:

Código devuelto Descripción
STATUS_SUCCESS
La inserción de datos de paquetes se inició correctamente. El motor de filtros llamará a la función de finalización después de que el motor de filtro haya completado la inserción de los datos del paquete en la pila de red, o cuando se produzca un error posteriormente. En caso de error, el miembro Status de la estructura completada NET_BUFFER_LIST indicará el motivo del error.
STATUS_FWP_TCPIP_NOT_READY
La pila de red TCP/IP no está lista para aceptar la inserción de datos de paquetes.
STATUS_FWP_INJECT_HANDLE_CLOSING
El controlador de inyección se está cerrando.
Otros códigos de estado
Se produjo un error.

Comentarios

Un controlador de llamada llama a la función FwpsInjectTransportSendAsync1 para insertar datos de paquetes de los niveles de error de transporte, datos de datagramas o ICMP en la ruta de acceso de envío de datos. En estas capas, es posible que el encabezado IP aún no esté formado y, cuando la directiva IPsec esté activa, los datos del paquete no se cifran ni firman. Por lo tanto, esta función es ideal para la inspección de paquetes en un entorno habilitado para IPsec.

Esta función se puede ejecutar de forma asincrónica.

Si el valor devuelto no es STATUS_SUCCESS, no se llamará a la función de finalización. En este caso, la lista de búferes netos a la que apunta netBufferList debe liberarse mediante una llamada a FwpsFreeNetBufferList0 o FwpsFreeCloneNetBufferList0.

Los controladores de llamada normalmente insertan datos en la pila de red cuando modifican los datos del paquete. Para obtener más información sobre cómo un controlador de llamada puede modificar los datos de paquetes, consulte Callout Driver Operations.

El paquete insertado se puede indicar de nuevo al controlador de llamada. Para evitar bucles infinitos, el controlador debe llamar primero a . Función FwpsQueryPacketInjectionState0 antes de llamar a la función de llamada classifyFn y permitir paquetes que tengan el estado de inyección FWPS_PACKET_INJECTION_STATE establecido en FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

Parámetro endpointHandle y miembros declarados en
FWPS_TRANSPORT_SEND_PARAMS1 estructura a la que apunta el parámetro sendArgs se proporciona a las llamadas de las siguientes capas de red:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4 (cuando se especifica la dirección de salida con FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_DATAGRAM_DATA_V6 (cuando se especifica la dirección de salida con FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

El datagrama pertenece a un socket sin formato si se cumplen las dos condiciones siguientes:

En las siguientes capas de red, si el datagrama pertenece a un socket sin procesar, deberá copiar los miembros headerIncludeHeader y headerIncludeHeaderLength de la estructura FWPS_INCOMING_METADATA_VALUES0 en el miembro correspondiente de la estructura FWPS_TRANSPORT_SEND_PARAMS1 a la que apunta el parámetro sendArgs :

  • FWPS_LAYER_DATAGRAM_DATA_V4 (cuando se especifica la dirección de salida con FWP_DIRECTION_OUTBOUND)
  • FWPS_LAYER_DATAGRAM_DATA_V6 (cuando se especifica la dirección de salida con FWP_DIRECTION_OUTBOUND)

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 7.
Plataforma de destino Universal
Encabezado fwpsk.h (incluya Fwpsk.h)
Library Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Consulte también

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS1

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn