Función FwpsInjectNetworkSendAsync0 (fwpsk.h)
La función FwpsInjectNetworkSendAsync0 inserta datos de paquetes en la ruta de acceso de envío de datos.
Sintaxis
NTSTATUS FwpsInjectNetworkSendAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[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 anteriormente por una llamada a la función FwpsInjectionHandleCreate0 con el parámetro flags establecido en FWPS_INJECTION_TYPE_NETWORK.
[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] flags
Reservado. Los controladores de llamada deben establecer este parámetro en cero.
[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 usará para insertar datos de paquetes mediante una llamada a la función FwpsAllocateCloneNetBufferList0 o a la función FwpsAllocateNetBufferAndNetBufferList0 . La estructura NET_BUFFER_LIST debe comenzar con un encabezado IP.
[in] completionFn
Puntero a una función de llamada completionFn proporcionada por el controlador de llamada. El motor de filtro 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 FwpsInjectNetworkSendAsync0 devuelve uno de los siguientes códigos NTSTATUS.
Código devuelto | Descripción |
---|---|
|
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. |
|
La pila de red TCP/IP no está lista para aceptar la inserción de datos de paquetes. |
|
El controlador de inyección se está cerrando. |
|
El identificador de inyección no se creó con el parámetro Flags del Función FwpsInjectionHandleCreate0 establecida en FWPS_INJECTION_TYPE_NETWORK. |
|
Se produjo un error. |
Comentarios
Un controlador de llamada llama a la función FwpsInjectNetworkSendAsync0 para insertar datos de paquetes de red en la ruta de acceso de envío de datos. Esta función se puede ejecutar de forma asincrónica. Los controladores de llamada normalmente insertan datos en la pila de red al modificar los datos de paquetes. Para obtener más información sobre cómo un controlador de llamada puede modificar los datos de paquetes, consulte Callout Driver Operations.
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 Funciones FwpsFreeCloneNetBufferList0 .
El paquete insertado se puede indicar de nuevo al controlador de llamada. Para evitar bucles infinitos, el controlador debe llamar primero a . La función FwpsQueryPacketInjectionState0 antes de continuar con una llamada a la función de llamada classifyFn , y el controlador debe 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.
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 |