Função FwpsInjectNetworkSendAsync0 (fwpsk.h)
A função FwpsInjectNetworkSendAsync0 injeta dados de pacote no caminho de dados de envio.
Sintaxe
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
Um identificador de injeção que foi criado anteriormente por uma chamada para a função FwpsInjectionHandleCreate0 com o parâmetro flags definido como FWPS_INJECTION_TYPE_NETWORK.
[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] flags
Reservado. Os drivers de texto explicativo devem definir esse parâmetro como zero.
[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 NET_BUFFER_LIST a ser usada para injetar dados de pacote chamando a função FwpsAllocateCloneNetBufferList0 ou a função FwpsAllocateNetBufferAndNetBufferList0 . A estrutura NET_BUFFER_LIST deve começar com um cabeçalho IP.
[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 , foram 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 |
---|---|
|
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. |
|
A pilha de rede TCP/IP não está pronta para aceitar a injeção de dados de pacote. |
|
O identificador de injeção está sendo fechado. |
|
O identificador de injeção não foi criado com o parâmetro Flags do Função FwpsInjectionHandleCreate0 definida como FWPS_INJECTION_TYPE_NETWORK. |
|
Ocorreu um erro. |
Comentários
Um driver de texto explicativo chama a função FwpsInjectNetworkSendAsync0 para injetar dados de pacote de rede no caminho de dados de envio. Essa função pode ser executada de forma assíncrona. Os drivers de texto explicativo normalmente injetam dados na pilha de rede ao modificar dados de pacotes. 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.
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 o FwpsFreeNetBufferList0 ou Funções FwpsFreeCloneNetBufferList0 .
O pacote injetado pode ser indicado para o driver de texto explicativo novamente. Para evitar loop infinito, o driver deve primeiro chamar o A função FwpsQueryPacketInjectionState0 antes de prosseguir com uma chamada para a função de texto explicativo classifyFn e o driver deve permitir pacotes que tenham o estado de injeção FWPS_PACKET_INJECTION_STATE definido como FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.
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 |