Tipos de texto explicativo
Os seguintes tipos de textos explicativos podem ser usados com o PAM:
Chamada de inspeção em linha
Esse tipo de texto explicativo sempre retorna FWP_ACTION_CONTINUE da função classifyFn e não modifica o tráfego de rede de forma alguma. Um texto explicativo que coleta estatísticas de rede é um exemplo desse tipo de texto explicativo.
Para esse tipo de texto explicativo, o tipo de ação de filtro (especificado pelo membro Tipo da estrutura FWPS_ACTION0) deve ser definido como FWP_ACTION_CALLOUT_INSPECTION.
Chamada de inspeção fora de banda
Esse tipo de texto explicativo não modifica o tráfego de rede. Em vez disso, ele adia qualquer inspeção a ser feita fora da função classifyFn "pendente" os dados indicados e, em seguida, reinjetando os dados pendentes de volta na pilha TCP/IP com uma das funções de injeção de pacotes. Pending é implementado primeiro clonando os dados indicados, seguido pelo retorno de FWP_ACTION_BLOCK da função classifyFn que tem o bit FWPS_CLASSIFY_OUT_FLAG_ABSORB definido.
Texto explicativo de modificação em linha
Esse tipo de texto explicativo modifica o tráfego de rede primeiro fazendo um clone dos dados indicados, depois modificando o clone e, finalmente, injetando o clone modificado de volta na pilha TCP/IP da função classifyFn . Esse tipo de texto explicativo também retorna FWP_ACTION_BLOCK da função classifyFn que tem o conjunto de bits FWPS_CLASSIFY_OUT_FLAG_ABSORB.
O tipo de ação de filtro para esse tipo de texto explicativo deve ser definido como FWP_ACTION_CALLOUT_TERMINATING.
Texto explicativo de modificação fora de banda
Esse tipo de texto explicativo primeiro faz referência ao pacote indicado usando a função FwpsReferenceNetBufferList0 que tem o parâmetro intentToModify definido como TRUE. Em seguida, o texto explicativo retorna FWP_ACTION_BLOCK com o bit FWPS_CLASSIFY_OUT_FLAG_ABSORB definido da função classifyFn. Quando o pacote está pronto para ser modificado fora de classifyFn, o texto explicativo clona o pacote referenciado (assim que ele é clonado, o pacote original pode ser desreferenciado). Em seguida, o texto explicativo modifica o clone e injeta o pacote modificado de volta na pilha TCP/IP.
O tipo de ação de filtro para esse tipo de texto explicativo deve ser definido como FWP_ACTION_CALLOUT_TERMINATING.
Chamada de redirecionamento
Para obter mais informações sobre esse tipo de texto explicativo, consulte Usando o redirecionamento de associação ou conexão.
Há dois tipos de textos explicativos de redirecionamento:
- Um texto explicativo de redirecionamento de associação permite que o driver de texto explicativo modifique o endereço local e a porta local de um soquete.
- Um texto explicativo de redirecionamento de conexão permite que o driver de texto explicativo modifique o endereço remoto e a porta remota de uma conexão.
O tipo de ação de filtro para esse tipo de texto explicativo deve ser definido como FWP_ACTION_PERMIT.
Para obter mais informações sobre FWPS_CLASSIFY_OUT_FLAG_ABSORB, consulte FWPS_CLASSIFY_OUT0. Esse sinalizador não é válido em nenhuma camada de descarte do WFP. Retornar FWP_ACTION_BLOCK com o sinalizador FWPS_CLASSIFY_OUT_FLAG_ABSORB definido da função classifyFn faz com que o pacote seja descartado silenciosamente, de forma que o pacote não atinja nenhuma das camadas de descarte do WFP, nem faça com que eventos de auditoria sejam gerados.
Embora as listas de buffers de rede clonadas possam ser modificadas, por exemplo, adicionando ou removendo buffers de rede ou MDLs, ou ambos, os textos explicativos devem desfazer essas modificações antes de chamar a função FwpsFreeCloneNetBufferList0 .
Para coexistir com outros textos explicativos que executam inspeção de pacotes, modificação de pacotes ou redirecionamento de conexão, antes que um pacote seja pendente com o mecanismo reference/clone-drop-reinject, um texto explicativo deve descartar "hard" o pacote original limpando o sinalizador FWPS_RIGHT_ACTION_WRITE no membro de direitos da estrutura FWPS_CLASSIFY_OUT0 retornada pela função classifyFn. Se o sinalizador FWPS_RIGHT_ACTION_WRITE for definido quando classifyFn for chamado (o que significa que o pacote pode ser pendente e posteriormente reinjetado ou modificado), o texto explicativo não deve p.
O sinalizador FWPS_RIGHT_ACTION_WRITE deve ser definido sempre que um texto explicativo pendente de uma classificação. O driver de texto explicativo deve testar o sinalizador de FWPS_RIGHT_ACTION_WRITE para verificar os direitos do texto explicativo para retornar uma ação. Se esse sinalizador não estiver definido, seu texto explicativo ainda poderá retornar uma ação FWP_ACTION_BLOCK para vetar uma ação FWP_ACTION_PERMIT que foi retornada por um texto explicativo anterior. No exemplo mostrado em Usando um texto explicativo para inspeção profunda, a função só será encerrada se o sinalizador não estiver definido.
A função FwpsPendOperation0 é usada para pacotes pendentes que se originam das camadas de filtragem de gerenciamento FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_XXX, FWPM_LAYER_ALE_AUTH_LISTEN_XXX ou FWPM_LAYER_ALE_AUTH_CONNECT_XXX.
A função FwpsPendClassify0 é usada para pend pacotes que se originam das seguintes camadas de filtragem de tempo de execução:
FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4 FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6 FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 FWPS_LAYER_ALE_BIND_REDIRECT_V4 FWPS_LAYER_ALE_BIND_REDIRECT_V6