Considerações sobre programação de driver de texto explicativo
Considere os tópicos a seguir ao programar um driver de texto explicativo da Plataforma de Filtragem do Windows.
Modo de Usuário versus Modo Kernel
Se a filtragem desejada puder ser feita usando a funcionalidade de filtragem padrão incorporada à Plataforma de Filtragem do Windows, os ISVs (fornecedores independentes de software) devem escrever aplicativos de gerenciamento do modo de usuário para configurar o mecanismo de filtro em vez de escrever drivers de texto explicativo no modo kernel. Um driver de texto explicativo no modo kernel só deve ser gravado quando você deve processar os dados de rede de maneiras que não podem ser tratadas pela funcionalidade de filtragem interna padrão. Para obter informações sobre como escrever um aplicativo de gerenciamento da Plataforma de Filtragem do Windows no modo de usuário, consulte a documentação da Plataforma de Filtragem do Windows no SDK do Microsoft Windows.
Escolha da camada de filtragem
Um driver de texto explicativo deve filtrar os dados de rede na camada de filtragem mais alta possível na pilha de rede. Por exemplo, se a tarefa de filtragem desejada puder ser tratada na camada de fluxo, ela não deverá ser implementada na camada de rede. Para obter mais informações sobre as recomendações das camadas de filtragem que seu driver deve usar para garantir a compatibilidade com o IPsec no Windows, consulte Desenvolvendo drivers de texto explicativo IPsec-Compatible.
Bloqueio nas camadas estabelecidas do fluxo de Imposição da Camada de Aplicativo (ALE)
Normalmente, se um texto explicativo tiver sido adicionado ao mecanismo de filtro em uma das camadas de filtragem estabelecidas pelo fluxo ALE (FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 ou FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6), sua função de texto explicativo classifyFn nunca deverá retornar FWP_ACTION_BLOCK para a ação. Uma decisão de autorizar ou rejeitar uma conexão não deve ser tomada em uma das camadas de filtragem estabelecidas pelo fluxo ALE. Essa decisão sempre deve ser tomada em uma das outras camadas de filtragem do ALE.
O único motivo válido para essa função de texto explicativo classifyFn retornar FWP_ACTION_BLOCK para a ação é se ocorrer um erro que pode representar um risco de segurança potencial se a conexão estabelecida não for encerrada. Nesse caso, retornar FWP_ACTION_BLOCK para a ação fecha a conexão para evitar que o risco potencial de segurança seja explorado.
Tempo de execução da função de texto explicativo
Como o mecanismo de filtro normalmente chama as funções de texto explicativo de um texto explicativo em IRQL = DISPATCH_LEVEL, verifique se essas funções completam a execução o mais rápido possível para manter o sistema em execução com eficiência. Execução estendida em IRQL = DISPATCH_LEVEL pode afetar negativamente o desempenho geral do sistema.
Injetando no caminho de dados de recebimento
Os textos explicativos devem recalcular somas de verificação de IP antes de chamarem funções de injeção de pacote que injetam no caminho de dados de recebimento porque a soma de verificação no pacote original pode não estar correta quando o pacote é remontado de fragmentos de pacote IP. Não há nenhum mecanismo confiável que indique se uma lista de buffers líquidos é remontada de fragmentos.
Injeção embutida de pacote TCP de camadas de transporte
Devido ao comportamento de bloqueio da pilha TCP, um texto explicativo na camada de transporte não pode injetar um pacote TCP novo ou clonado da função de texto explicativo classifyFn . Se a injeção embutida for desejada, o texto explicativo deverá enfileirar um DPC para executar a injeção.
Alinhamento do cabeçalho IP de saída
O MDL que descreve o cabeçalho IP em uma lista de buffers líquidos (NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(netBufferList))) deve ser alinhado ao ponteiro quando uma das funções de injeção de pacotes é usada para injetar dados de pacote em um caminho de saída. Como o MDL do cabeçalho IP de um pacote de entrada pode estar alinhado ao ponteiro, um texto explicativo deve recompilar o cabeçalho IP (se ainda não estiver alinhado) ao injetar um pacote de entrada em um caminho de saída.
Tópicos relacionados
Drivers de texto explicativo da plataforma de filtragem do Windows