Compartilhar via


Função FwpsInjectTransportSendAsync0 (fwpsk.h)

A função FwpsInjectTransportSendAsync0 injeta dados de pacote das camadas de erro transporte, datagram ou ICMP no caminho de dados de envio.

ObservaçãoFwpsInjectTransportSendAsync0 é a versão específica de FwpsInjectTransportSendAsync usada no Windows Vista e posterior. Consulte Nomes de Version-Independent WFP e Direcionamento de versões específicas do Windows para obter mais informações. Para o Windows 7, FwpsInjectTransportSendAsync1 está disponível.
 

Sintaxe

NTSTATUS FwpsInjectTransportSendAsync0(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS0 *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

Um identificador de injeção que foi criado anteriormente por uma chamada para o Função FwpsInjectionHandleCreate0 .

[in, optional] injectionContext

Um identificador opcional para o contexto de injeção. Se especificado, ele poderá ser obtido chamando a função FwpsQueryPacketInjectionState0 quando o estado de injeção de pacote FWPS_PACKET_INJECTION_STATE for FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

[in] endpointHandle

Um identificador que indica o ponto de extremidade de transporte de pilha no caminho de dados de envio no qual o pacote deve ser injetado. Esse identificador de ponto de extremidade é fornecido a um texto explicativo por meio do membro transportEndpointHandle do FWPS_INCOMING_METADATA_VALUES0 estrutura que é passada para a função de texto explicativo classifyFn do driver de texto explicativo. Os drivers de texto explicativo devem usar o identificador fornecido para injetar pacotes clonados de volta no caminho de dados o mais rápido possível, antes que o soquete associado ao ponto de extremidade de pilha seja fechado e o identificador não se torne mais válido.

[in] flags

Reservado. Os drivers de texto explicativo devem definir esse parâmetro como zero.

[in, optional] sendArgs

Um ponteiro para um FWPS_TRANSPORT_SEND_PARAMS0 estrutura que especifica as propriedades do pacote de saída atual. Só poderá ser NULL se a lista de buffers líquidos a ser injetada contiver um cabeçalho IP (por exemplo, se o pacote for enviado por meio de um soquete bruto).

[in] addressFamily

Uma das seguintes famílias de endereços:

AF_INET

A família de endereços IPv4.

AF_INET6

A família de endereços IPv6.

[in] compartmentId

O identificador do compartimento de roteamento no qual os dados do pacote são injetados, especificado como um tipo de COMPARTMENT_ID . Esse identificador é fornecido a um texto explicativo por meio do membro compartimental do FWPS_INCOMING_METADATA_VALUES0 estrutura que é passada para a função de texto explicativo classifyFn do driver de texto explicativo. Se o membro compartmentId estiver disponível para textos explicativos, FWPS_METADATA_FIELD_COMPARTMENT_ID será definido no membro currentMetadataValues . Caso contrário, defina esse parâmetro como UNSPECIFIED_COMPARTMENT_ID.

[in, out] netBufferList

Um ponteiro para uma estrutura NET_BUFFER_LIST que descreve os dados de pacote que estão sendo injetados. Um driver de texto explicativo aloca uma estrutura de NET_BUFFER_LIST a ser usada para injetar dados de pacote chamando o Função FwpsAllocateCloneNetBufferList0 ou a Função FwpsAllocateNetBufferAndNetBufferList0 .

[in] completionFn

Um ponteiro para uma função de texto explicativo completionFn fornecida pelo driver de texto explicativo. O mecanismo de filtro chama essa função depois que os dados do pacote, descritos pelo parâmetro netBufferList , são injetados na pilha de rede.

[in, optional] completionContext

Um ponteiro para um contexto fornecido pelo driver de texto explicativo que é passado para a função de texto explicativo apontada pelo parâmetro completionFn . Esse parâmetro é opcional e pode ser NULL.

Retornar valor

A função FwpsInjectNetworkSendAsync0 retorna um dos seguintes códigos NTSTATUS.

Código de retorno Descrição
STATUS_SUCCESS
A injeção de dados de pacote foi iniciada com êxito. O mecanismo de filtro chamará a função de conclusão depois que o mecanismo de filtro tiver concluído a injeção dos dados do pacote na pilha de rede ou quando ocorrer um erro posteriormente. No caso de um erro, o membro Status da estrutura de NET_BUFFER_LIST concluída indicará o motivo da falha.
STATUS_FWP_TCPIP_NOT_READY
A pilha de rede TCP/IP não está pronta para aceitar a injeção de dados de pacote.
STATUS_FWP_INJECT_HANDLE_CLOSING
O identificador de injeção está sendo fechado.
Outros códigos status
Ocorreu um erro.

Comentários

Um driver de texto explicativo chama a função FwpsInjectNetworkSendAsync0 para injetar dados de pacote das camadas de erro transporte, datagram ou ICMP no caminho de dados de envio. Nessas camadas, o cabeçalho IP pode ainda não estar formado e, quando a política IPsec está ativa, os dados do pacote não são criptografados ou assinados. Portanto, essa função é ideal para usar para inspeção de pacotes em um ambiente habilitado para IPsec.

Essa função pode ser executada de forma assíncrona.

Se o valor retornado não for STATUS_SUCCESS, a função de conclusão não será chamada. Nesse caso, a lista de buffers líquidos apontada por netBufferList precisa ser liberada por uma chamada para FwpsFreeNetBufferList0 ou FwpsFreeCloneNetBufferList0.

Os drivers de texto explicativo normalmente injetam dados na pilha de rede quando modificam os dados do pacote. Para obter mais informações sobre como um driver de texto explicativo pode modificar dados de pacotes, consulte Operações de driver de texto explicativo.

Devido à semântica de bloqueio de protocolo TCP, o TCP só pode ser injetado fora de banda em qualquer camada de transporte ou camada equivalente, portanto, FwpsInjectTransportReceiveAsync0 e FwpsInjectTransportSendAsync0 devem ser enfileirados e executados por um DPC.

O pacote injetado pode ser indicado para o driver de texto explicativo novamente. Para evitar loops infinitos, o driver deve primeiro chamar a função FwpsQueryPacketInjectionState0 antes de chamar a função de texto explicativo classifyFn e permitir pacotes que têm o estado de injeção FWPS_PACKET_INJECTION_STATE definido como FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

O parâmetro endpointHandle , bem como os membros declarados no FWPS_TRANSPORT_SEND_PARAMS0 estrutura apontada pelo parâmetro sendArgs, são fornecidas aos textos explicativos das seguintes camadas de rede:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4 (quando a direção de saída é especificada com FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_DATAGRAM_DATA_V6 (quando a direção de saída é especificada com FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

O datagrama pertence a um soquete bruto se ambos os seguintes forem verdadeiros:

Nas camadas de rede a seguir, se o datagram pertencer a um soquete bruto, a lista de buffers líquidos apontada por netBufferList deverá ser ajustada para iniciar no cabeçalho IP (que deve ser anexado à lista de buffers líquidos):

  • FWPS_LAYER_DATAGRAM_DATA_V4 (quando a direção de saída é especificada com FWP_DIRECTION_OUTBOUND)
  • FWPS_LAYER_DATAGRAM_DATA_V6 (quando a direção de saída é especificada com FWP_DIRECTION_OUTBOUND)

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows Vista.
Plataforma de Destino Universal
Cabeçalho fwpsk.h (inclua Fwpsk.h)
Biblioteca Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Confira também

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS0

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync1

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn