Compartilhar via


Usando marcação de pacote

Um driver de texto explicativo pode marcar pacotes de interesse e receber notificação de eventos que ocorrem com os pacotes marcados. Há suporte para marcação de pacotes no Windows 7 e versões posteriores do Windows.

Para usar a marcação de pacotes, o driver de texto explicativo deve implementar a função de retorno de chamada FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 . Essa função receberá todas as notificações de status para os pacotes marcados. Antes que os pacotes individuais possam ser marcados, o driver de texto explicativo deve obter uma marca de contexto especial chamando FwpsNetBufferListGetTagForContext0. O driver de texto explicativo pode usar a mesma marca de contexto para alguns ou todos os pacotes marcados. Por exemplo, um driver de texto explicativo pode diferenciar entre tipos de pacotes marcados usando marcas de contexto diferentes.

Para marcar pacotes, o driver de texto explicativo usa estruturas NET_BUFFER_LIST . O driver de texto explicativo faz chamadas para FwpsNetBufferListAssociateContext0 para marcar estruturas de NET_BUFFER_LIST individuais. O contexto que o driver de texto explicativo associa ao pacote é um valor arbitrário sem sinal de 64 bits. Quando um evento é disparado, o retorno de chamada FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 passa o contexto como um parâmetro de entrada para que o driver de texto explicativo possa identificar pacotes marcados individuais. O contexto não é usado ou avaliado pelo mecanismo de filtragem. Ele só é passado para o retorno de chamada para uso pelo driver de texto explicativo.

Os contextos são removidos dos pacotes marcados automaticamente quando os pacotes saem da pilha. No entanto, se os pacotes nunca inserirem a pilha TCP/IP , por exemplo, no caso de um driver de filtro NDIS, os contextos precisarão ser removidos manualmente chamando FwpsNetBufferListRemoveContext0 com o parâmetro netBufferList definido como NULL.

Se um texto explicativo precisar anular as operações de marcação antecipadamente, os contextos poderão ser removidos chamando FwpsNetBufferListRemoveContext0. A remoção de um contexto geralmente dispara um evento de FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED . Para obter mais informações sobre os eventos que podem ser disparados, consulte a enumeração FWPS_NET_BUFFER_LIST_EVENT_TYPE0 . Em alguns casos, nenhum evento será disparado, como quando o pacote nunca entra na pilha TCP/IP para processamento.

Quando um pacote marcado é clonado, o driver de texto explicativo pode mover ou copiar o contexto para o pacote clone. Para mover o contexto (no caso de um clone), o driver de texto explicativo deve chamar FwpsNetBufferListRetrieveContext0 com o parâmetro removeContext definido como TRUE. Em seguida, o contexto pode ser associado ao novo pacote. O processo para copiar o contexto (no caso de uma duplicação) é o mesmo, exceto que o parâmetro removeContext de FwpsNetBufferListRetrieveContext0 deve ser definido como FALSE.

Pacotes marcados de camadas TCP/IP podem ser recuperados de um driver de filtro NDIS. O inverso também é verdadeiro. A marcação de pacotes não está disponível em camadas de fluxo em que nenhum pacote é indicado, exceto segmentos de dados.

Um driver de texto explicativo pode recuperar o contexto de um pacote fora da função FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 chamando FwpsNetBufferListRetrieveContext0. Normalmente, um driver de texto explicativo recuperará o contexto em seu retorno de chamada classifyFn .

classifyFn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

Drivers de filtro NDIS