Compartilhar via


Função FwpsStreamInjectAsync0 (fwpsk.h)

A função FwpsStreamInjectAsync0 injeta segmentos de dados TCP em um fluxo de dados TCP.

ObservaçãoFwpsStreamInjectAsync0 é uma versão específica do FwpsStreamInjectAsync. Consulte Nomes de Version-Independent WFP e Direcionamento de versões específicas do Windows para obter mais informações.
 

Sintaxe

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

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.

[in] flags

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

[in] flowId

Um identificador em tempo de execução que especifica o fluxo de dados no qual injetar os dados. O identificador de tempo de execução para um fluxo de dados é fornecido a um driver de texto explicativo por meio do valor de metadados FWPS_METADATA_FIELD_FLOW_HANDLE que o mecanismo de filtro forneceu para a função de texto explicativo classifyFn do driver de texto explicativo.

[in] calloutId

O identificador de tempo de execução para o texto explicativo no mecanismo de filtro. Esse identificador foi retornado quando o driver de texto explicativo chamou as funções FwpsCalloutRegister0 ou FwpsCalloutRegister1 para registrar o texto explicativo com o mecanismo de filtro.

[in] layerId

O identificador de tempo de execução para a camada de filtragem na qual o fluxo de dados está sendo processado. Esse valor deve ser FWPS_LAYER_STREAM_V4 ou FWPS_LAYER_STREAM_V6. O identificador de tempo de execução para a camada na qual o fluxo de dados está sendo processado é fornecido a um texto explicativo no membro layerId da estrutura FWPS_INCOMING_VALUES0 que o mecanismo de filtro passou para a função de texto explicativo classifyFn do driver de texto explicativo.

[in] streamFlags

Sinalizadores que especificam características do fluxo de dados no qual os dados devem ser injetados.

Ao injetar dados em um fluxo de dados de entrada, um driver de texto explicativo especifica um ou mais dos seguintes sinalizadores:

FWPS_STREAM_FLAG_RECEIVE

Especifica que os dados devem ser injetados no fluxo de dados de entrada. Esse sinalizador é necessário ao injetar dados em um fluxo de dados de entrada.

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

Especifica que o sinalizador FIN deve ser definido no cabeçalho TCP para os dados que estão sendo injetados no fluxo de dados de entrada.

Nota Se esse sinalizador estiver definido, o sinalizador FWPS_STREAM_FLAG_RECEIVE também deverá ser definido ou STATUS_FWP_INVALID_PARAMETER será retornado.
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

Especifica que os dados que estão sendo injetados no fluxo de dados de entrada são dados fora de banda de alta prioridade.

FWPS_STREAM_FLAG_RECEIVE_PUSH

Especifica que os dados de entrada chegaram com o sinalizador PUSH definido no cabeçalho TCP, o que indica que o remetente solicita transferência imediata de dados. Atrasos indesejados na transferência de dados podem ocorrer se esse sinalizador não estiver definido. Esse sinalizador está disponível a partir do Windows Vista com SP1.

Ao injetar dados em um fluxo de dados de saída, um driver de texto explicativo especifica um ou mais dos seguintes sinalizadores:

FWPS_STREAM_FLAG_SEND

Especifica que os dados devem ser injetados no fluxo de dados de saída. Esse sinalizador é necessário ao injetar dados em um fluxo de dados de saída.

FWPS_STREAM_FLAG_SEND_EXPEDITED

Especifica que os dados que estão sendo injetados no fluxo de dados de saída são dados fora de banda de alta prioridade.

FWPS_STREAM_FLAG_SEND_NODELAY

Especifica que o driver de texto explicativo solicita que não haja nenhum buffer dos dados que estão sendo injetados no fluxo de dados de saída.

FWPS_STREAM_FLAG_SEND_DISCONNECT

Especifica que o fluxo deve ser desconectado depois que os dados que estão sendo injetados no fluxo de dados de saída forem enviados. A pilha de rede definirá o sinalizador FIN no cabeçalho TCP do último pacote enviado.

Nota Se esse sinalizador estiver definido, o sinalizador FWPS_STREAM_FLAG_SEND também deverá ser definido ou STATUS_FWP_INVALID_PARAMETER será retornado.
 

[in, out] netBufferList

Um ponteiro para uma estrutura NET_BUFFER_LIST que descreve os dados que estão sendo injetados no fluxo de dados. Um driver de texto explicativo aloca uma estrutura NET_BUFFER_LIST a ser usada para injetar dados em um fluxo de dados chamando o FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0 ou Funções FwpsCloneStreamData0 . A estrutura NET_BUFFER_LIST pode descrever uma cadeia de listas de buffers de rede. Se o parâmetro streamFlags for FWPS_STREAM_FLAG_RECEIVE_DISCONNECT ou FWPS_STREAM_FLAG_SEND_DISCONNECT, netBufferList poderá ser NULL.

[in] dataLength

O número de bytes de dados que estão sendo injetados no fluxo de dados.

[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.

Se o parâmetro netBufferList descrever uma cadeia de NET_BUFFER_LIST , completionFn será chamado uma vez para cada NET_BUFFER_LIST na cadeia.

Se o parâmetro netBufferList for NULL e o parâmetro streamFlags tiver FWPS_STREAM_FLAG_RECEIVE_DISCONNECT ou FWPS_STREAM_FLAG_SEND_DISCONNECT definido, a função completionFn não será chamada.

Esse parâmetro é necessário e não pode ser NULL. Se for NULL, STATUS_FWP_NULL_POINTER será retornado.

[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

O FwpsStreamInjectAsync0 função um código NTSTATUS, como um dos seguintes.

Código de retorno Descrição
STATUS_SUCCESS
A injeção no fluxo de dados foi iniciada com êxito. O mecanismo de filtro chamará a função de conclusão especificada quando a estrutura NET_BUFFER_LIST foi alocada depois que o mecanismo de filtro tiver concluído a injeção dos dados no fluxo de dados.
STATUS_FWP_TCPIP_NOT_READY
A pilha de rede TCP/IP não está pronta para aceitar a injeção de dados de fluxo.
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 FwpsStreamInjectAsync0 de dentro da função de texto explicativo classifyFn de um texto explicativo para injetar dados novos ou clonados no fluxo de dados que está sendo processado no momento. Um driver de texto explicativo só poderá chamar a função FwpsStreamInjectAsync0 se estiver processando um fluxo de dados na camada de fluxo.

Um driver de texto explicativo também pode chamar a função FwpsStreamInjectAsync0 de fora da função de texto explicativo classifyFn de um texto explicativo para injetar dados em um fluxo de dados que é adiado no momento. Um fluxo de dados é adiado quando a função de texto explicativo classifyFn de um texto explicativo do texto explicativo define o membro streamAction do FWPS_STREAM_CALLOUT_IO_PACKET0 estrutura para FWPS_STREAM_ACTION_DEFER.

Além disso, um driver de texto explicativo pode chamar a função FwpsStreamInjectAsync0 de fora da função de texto explicativo classifyFn de um texto explicativo para injetar dados em um fluxo de dados depois que uma indicação fin for pendente.

Como alternativa, um driver de texto explicativo pode chamar a função FwpsStreamInjectAsync0 de um contexto de thread arbitrário fora da função de texto explicativo classifyFn de um texto explicativo se o driver de texto explicativo clonar e bloquear todos os dados indicados para processamento fora de banda. Um driver de texto explicativo que redireciona todos os dados indicados para o modo de usuário para processamento pode chamar a função FwpsStreamInjectAsync0 dessa maneira.

Um texto explicativo pode aguardar um segmento de dados clonando-o primeiro com uma chamada para a função FwpsCloneStreamData0 , seguido por bloquear o segmento de dados definindo FWP_ACTION_BLOCK no membro actionType da estrutura FWPS_CLASSIFY_OUT0 .

Os dados de fluxo injetados não serão reindispostos ao texto explicativo, mas serão disponibilizados para transmitir textos explicativos de subcamadas de menor peso.

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 de rede apontada por netBufferList deve ser liberada por uma chamada para FwpsFreeNetBufferList0 ou FwpsFreeCloneNetBufferList0.

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_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

classifyFn

completionFn