Função FwpsStreamInjectAsync0 (fwpsk.h)
A função FwpsStreamInjectAsync0 injeta segmentos de dados TCP em um fluxo de dados TCP.
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.
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.
[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 |
---|---|
|
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. |
|
A pilha de rede TCP/IP não está pronta para aceitar a injeção de dados de fluxo. |
|
O identificador de injeção está sendo fechado. |
|
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 |