Compartir a través de


Función FwpsStreamInjectAsync0 (fwpsk.h)

La función FwpsStreamInjectAsync0 inserta segmentos de datos TCP en un flujo de datos TCP.

NotaFwpsStreamInjectAsync0 es una versión específica de FwpsStreamInjectAsync. Para obtener más información, consulte NOMBRES de PMA Version-Independent y versiones específicas de destino de Windows .
 

Sintaxis

NTSTATUS FwpsStreamInjectAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           UINT64                flowId,
  [in]           UINT32                calloutId,
  [in]           UINT16                layerId,
  [in]           UINT32                streamFlags,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           SIZE_T                dataLength,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

Parámetros

[in] injectionHandle

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

[in, optional] injectionContext

Identificador opcional para el contexto de inyección.

[in] flags

Reservado. Los controladores de llamada deben establecer este parámetro en cero.

[in] flowId

Identificador en tiempo de ejecución que especifica el flujo de datos en el que se insertan los datos. El identificador en tiempo de ejecución de un flujo de datos se proporciona a un controlador de llamada a través del valor de metadatos de FWPS_METADATA_FIELD_FLOW_HANDLE que el motor de filtro proporcionó a la función de llamada classifyFn del controlador de llamada.

[in] calloutId

Identificador en tiempo de ejecución de la llamada en el motor de filtro. Este identificador se devolvió cuando el controlador de llamada llamó a las funciones FwpsCalloutRegister0 o FwpsCalloutRegister1 para registrar la llamada con el motor de filtro.

[in] layerId

Identificador en tiempo de ejecución de la capa de filtrado en la que se está procesando el flujo de datos. Este valor debe ser FWPS_LAYER_STREAM_V4 o FWPS_LAYER_STREAM_V6. El identificador en tiempo de ejecución de la capa en la que se está procesando el flujo de datos se proporciona a una llamada en el miembro layerId de la estructura FWPS_INCOMING_VALUES0 que el motor de filtros pasó a la función de llamada classifyFn del controlador de llamada.

[in] streamFlags

Marcas que especifican las características del flujo de datos en las que se van a insertar los datos.

Al insertar datos en un flujo de datos entrante, un controlador de llamada especifica una o varias de las marcas siguientes:

FWPS_STREAM_FLAG_RECEIVE

Especifica que los datos se van a insertar en el flujo de datos entrante. Esta marca es necesaria al insertar datos en un flujo de datos entrante.

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

Especifica que la marca FIN se va a establecer en el encabezado TCP de los datos que se insertan en el flujo de datos entrante.

Nota Si se establece esta marca, también se debe establecer la marca FWPS_STREAM_FLAG_RECEIVE o, de lo contrario, se devolverá STATUS_FWP_INVALID_PARAMETER .
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

Especifica que los datos que se insertan en el flujo de datos entrantes son datos de prioridad alta y fuera de banda.

FWPS_STREAM_FLAG_RECEIVE_PUSH

Especifica que los datos entrantes han llegado con la marca PUSH establecida en el encabezado TCP, lo que indica que el remitente solicita una transferencia de datos inmediata. Los retrasos no deseados en la transferencia de datos pueden producirse si no se establece esta marca. Esta marca está disponible a partir de Windows Vista con SP1.

Al insertar datos en un flujo de datos saliente, un controlador de llamada especifica una o varias de las marcas siguientes:

FWPS_STREAM_FLAG_SEND

Especifica que los datos se van a insertar en el flujo de datos de salida. Esta marca es necesaria al insertar datos en un flujo de datos saliente.

FWPS_STREAM_FLAG_SEND_EXPEDITED

Especifica que los datos que se insertan en el flujo de datos de salida son datos de prioridad alta y fuera de banda.

FWPS_STREAM_FLAG_SEND_NODELAY

Especifica que el controlador de llamada solicita que no haya ningún almacenamiento en búfer de los datos que se insertan en el flujo de datos de salida.

FWPS_STREAM_FLAG_SEND_DISCONNECT

Especifica que la secuencia se va a desconectar después de enviar los datos que se insertan en el flujo de datos de salida. La pila de red establecerá la marca FIN en el encabezado TCP del último paquete que se envía.

Nota Si se establece esta marca, también se debe establecer la marca FWPS_STREAM_FLAG_SEND o, de lo contrario, se devolverá STATUS_FWP_INVALID_PARAMETER .
 

[in, out] netBufferList

Puntero a una estructura NET_BUFFER_LIST que describe los datos que se insertan en el flujo de datos. Un controlador de llamada asigna una estructura de NET_BUFFER_LIST que se va a usar para insertar datos en un flujo de datos mediante una llamada a . FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0 o FwpsCloneStreamData0 funciones. La estructura NET_BUFFER_LIST puede describir una cadena de listas de búferes de red. Si el parámetro streamFlags es FWPS_STREAM_FLAG_RECEIVE_DISCONNECT o FWPS_STREAM_FLAG_SEND_DISCONNECT, netBufferList puede ser NULL.

[in] dataLength

Número de bytes de datos que se insertan en el flujo de datos.

[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 los datos del paquete, descritos por el parámetro netBufferList , se ha insertado en la pila de red.

Si el parámetro netBufferList describe una cadena de NET_BUFFER_LIST , se llamará a completionFn una vez por cada NET_BUFFER_LIST de la cadena.

Si el parámetro netBufferList es NULL y el parámetro streamFlags tiene FWPS_STREAM_FLAG_RECEIVE_DISCONNECT o FWPS_STREAM_FLAG_SEND_DISCONNECT establecido, no se llamará a la función completionFn .

Este parámetro es obligatorio y no puede ser NULL. Si es NULL, se devolverá STATUS_FWP_NULL_POINTER .

[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 FwpsStreamInjectAsync0 es un código NTSTATUS, como uno de los siguientes.

Código devuelto Descripción
STATUS_SUCCESS
La inserción en el flujo de datos se inició correctamente. El motor de filtros llamará a la función de finalización que se especificó cuando se asignó la estructura de NET_BUFFER_LIST después de que el motor de filtros haya terminado de insertar los datos en el flujo de datos.
STATUS_FWP_TCPIP_NOT_READY
La pila de red TCP/IP no está lista para aceptar la inyección de datos de flujo.
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 FwpsStreamInjectAsync0 desde dentro de la función de llamada classifyFn de una llamada para insertar datos nuevos o clonados en el flujo de datos que se está procesando actualmente. Un controlador de llamada puede llamar a la función FwpsStreamInjectAsync0 solo si está procesando un flujo de datos en la capa de flujo.

Un controlador de llamada también puede llamar a la función FwpsStreamInjectAsync0 desde fuera de la función de llamada classifyFn de una llamada de llamada para insertar datos en un flujo de datos que se aplaza actualmente. Un flujo de datos se aplaza cuando la función de llamada classifyFn de una llamada establece el miembro streamAction del FWPS_STREAM_CALLOUT_IO_PACKET0 estructura que se va a FWPS_STREAM_ACTION_DEFER.

Además, un controlador de llamada puede llamar a la función FwpsStreamInjectAsync0 desde fuera de la función de llamada classifyFn de una llamada para insertar datos en un flujo de datos después de que se haya escrito una indicación FIN.

Como alternativa, un controlador de llamada puede llamar a la función FwpsStreamInjectAsync0 desde un contexto de subproceso arbitrario fuera de la función de llamada classifyFn de una llamada si el controlador de llamada clona y bloquea todos los datos indicados para el procesamiento fuera de banda. Un controlador de llamada que redirige todos los datos indicados al modo de usuario para su procesamiento puede llamar a la función FwpsStreamInjectAsync0 de esta manera.

Una llamada puede crear un segmento de datos clonando primero con una llamada a la función FwpsCloneStreamData0 , seguida de bloquear el segmento de datos estableciendo FWP_ACTION_BLOCK en el miembro actionType de la estructura FWPS_CLASSIFY_OUT0 .

Los datos de flujo insertados no se volverán a indicar a la llamada, pero estarán disponibles para transmitir llamadas de subcapas de menor peso.

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 de red a la que apunta netBufferList debe liberarse mediante una llamada a FwpsFreeNetBufferList0 o FwpsFreeCloneNetBufferList0.

Requisitos

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

Consulte también

FWPS_INCOMING_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

classifyFn

completionFn