Compartilhar via


Processando classificar textos explicativos de forma assíncrona

Um driver de texto explicativo WFP pode autorizar ou negar uma operação de rede, ou admitir ou descartar um pacote de rede, retornando os tipos de ação FWP_ACTION_PERMIT, FWP_ACTION_CONTINUE ou FWP_ACTION_BLOCK da função de texto explicativo classifyFn . Frequentemente, um driver de texto explicativo não pode retornar uma decisão de inspeção de sua função classifyFn até que as informações indicadas, como campos classificáveis, metadados ou pacotes, possam ser encaminhadas para processamento para outro componente, como um aplicativo de modo de usuário. Nesses casos, uma decisão pode ter que ser tomada de forma assíncrona em algum momento posterior.

Regras gerais para processamento assíncrono

O WFP dá suporte ao processamento assíncrono da função de texto explicativo classifyFn . No entanto, o mecanismo para fazer isso difere de acordo com as diferentes camadas.

Classificação assíncrona do ALE
Um driver de texto explicativo deve chamar a função FwpsPendOperation0 de classifyFn. A operação assíncrona deve ser concluída com uma chamada para a função FwpsCompleteOperation0 .

Classificação de pacotes assíncronos
Um driver de texto explicativo deve retornar FWP_ACTION_BLOCK da função classifyFn , com o sinalizador FWPS_CLASSIFY_OUT_FLAG_ABSORB definido. Os pacotes de rede devem ser referenciados ou clonados. A operação assíncrona é concluída reinjetando o pacote clonado ou modificado ou descartando silenciosamente o pacote.

Classificação ALE assíncrona que inclui pacotes
Uma combinação dos dois procedimentos anteriores é usada: a operação de classificação está pendente e o pacote é referenciado ou clonado e, em algum momento posterior, a chamada para classifyFn é concluída e o pacote clonado é reinjetado ou descartado.

Casos e considerações especiais

Camadas ALE Connect vs. Receive/Accept
Quando FwpsCompleteOperation0 é chamado para concluir uma operação de classificação pendente em uma camada de conexão ALE (FWPS_LAYER_ALE_AUTH_CONNECT_V4 ou FWPS_LAYER_ALE_AUTH_CONNECT_V6), uma operação de classificação de reautorização ALE é disparada na respectiva camada de conexão ALE. O driver de texto explicativo deve retornar uma decisão de inspeção dessa operação de classificação de reautorização. Você pode detectar uma operação de classificação de reautorização do ALE verificando se o sinalizador FWP_CONDITION_FLAG_IS_REAUTHORIZE está definido.

O driver de texto explicativo deve manter um estado exclusivo para cada operação pendente ALE_AUTH_CONNECT classificar de forma que a decisão de inspeção para cada operação de classificação possa ser pesquisada durante uma reautorização disparada por FwpsCompleteOperation0. Se os pacotes forem referenciados ou clonados durante uma operação de classificação de ALE_AUTH_CONNECT pendente (por exemplo, para conexões não TCP), eles poderão ser reinjetados após a reautorização.

Quando FwpsCompleteOperation0 é chamado durante com uma operação de classificação em uma camada de recebimento/aceitação ALE (FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4 ou FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6), FwpsCompleteOperation0 não dispara uma reautorização ALE. Em vez disso, uma nova chamada para classificarFn será feita novamente quando o pacote clonado for reinjetado de entrada se a modificação não for significativa o suficiente para ignorar o filtro. Permitir o clone auto-injetado da camada de ALE_RECV_ACCEPT autoriza efetivamente a conexão de entrada. Se a conexão de entrada não for permitida, descarte o pacote de entrada depois de chamar FwpsCompleteOperation0.

Reautorização do ALE
Um driver de texto explicativo pode ser reclassificado em uma camada de conexão ou recebimento/aceita do ALE para eventos como uma alteração de política (por exemplo, adicionar ou remover um filtro na camada), detectar uma interface de nova chegada e rechaxar uma conexão usando IPsec. Essa reautorização não pode ser pendente chamando FwpsCompleteOperation0 e não é necessário fazer isso. Um driver de texto explicativo deve usar as regras listadas anteriormente para processar pacotes indicados durante a reautorização.

Lembre-se de que os pacotes de entrada e saída podem ser reautorizados em camadas de ALE_AUTH_CONNECT ou ALE_RECV_ACCEPT. Por exemplo, um pacote de entrada pode ser reautorizado na camada ALE_AUTH_CONNECT. Um driver de texto explicativo não deve assumir que a direção do pacote é a mesma que a direção da conexão.

Camadas de ALE_FLOW_ESTABLISHED
Não há suporte para processamento assíncrono nessas camadas (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 ou FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6).

Camadas de INBOUND_TRANSPORT
Um driver de texto explicativo não deve executar o processamento assíncrono de pacotes que exigem que o ALE classifique o processamento em uma camada de transporte de entrada (entrada) (FWPS_LAYER_INBOUND_TRANSPORT_V4 ou FWPS_LAYER_INBOUND_TRANSPORT_V6). Fazer isso pode interferir na criação de fluxo. Quando o WFP chama a função de texto explicativo classifyFn em uma camada de transporte de entrada, ele define o sinalizador FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED para os pacotes que exigem o processamento de classificação ALE. Um driver de texto explicativo deve permitir esses pacotes de uma camada de INBOUND_TRANSPORT e deve adiar o processamento deles até atingir uma camada ALE_RECV_ACCEPT.

Camadas STREAM
Em uma camada de fluxo (FWPS_LAYER_STREAM_V4 ou FWPS_LAYER_STREAM_V6), segmentos de dados TCP são indicados em vez de um cabeçalho IP ou TCP. A camada de fluxo também é onde uma cadeia de listas de buffers líquidos pode ser indicada em uma chamada para a função de texto explicativo classifyFn . O WFP disponibiliza funções especializadas de clonagem e injeção, FwpsCloneStreamData0 e FwpsStreamInjectAsync0, para que os textos explicativos da camada de fluxo sejam usados.

Devido à natureza de entrega ordenada dos dados da camada de fluxo, um driver de texto explicativo deve continuar a clonar e absorver dados enquanto qualquer dado de fluxo ainda estiver pendente. A combinação de operações assíncronas e síncronas para um determinado fluxo de fluxo pode resultar em um comportamento indefinido.