FILTER_SEND_NET_BUFFER_LISTS função de retorno de chamada (ndis.h)

O NDIS chama a função FilterSendNetBufferLists para permitir que um driver de filtro filtre uma lista vinculada de estruturas de NET_BUFFER_LIST .

Nota Você deve declarar a função usando o tipo FILTER_SEND_NET_BUFFER_LISTS . Para obter mais informações, consulte a seção Exemplos a seguir.
 

Sintaxe

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parâmetros

[in] FilterModuleContext

Um identificador para a área de contexto do módulo de filtro. O driver de filtro criou e inicializou essa área de contexto na função FilterAttach .

NetBufferList

Um ponteiro para uma lista vinculada de estruturas de NET_BUFFER_LIST que especificam listas de estruturas de NET_BUFFER . Cada NET_BUFFER na lista mapeia uma cadeia de MDLs que contêm os dados de transmissão.

[in] PortNumber

Um número de porta que identifica uma porta do adaptador de miniport. Os números da porta do adaptador de miniport são atribuídos chamando a função NdisMAllocatePort . Um valor zero identifica a porta padrão de um adaptador de miniporte.

[in] SendFlags

Sinalizadores que definem atributos para a operação de envio. Os sinalizadores podem ser combinados com uma operação OR. Para limpar todos os sinalizadores, defina esse membro como zero. Essa função dá suporte aos seguintes sinalizadores:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Especifica que o IRQL atual é DISPATCH_LEVEL. Para obter mais informações sobre esse sinalizador, consulte Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Especifica que o NDIS deve marcar para loopback. Por padrão, o NDIS não faz o loop de dados de volta para o driver que enviou a solicitação de envio. Um driver sobressalo pode substituir esse comportamento definindo esse sinalizador. Quando esse sinalizador é definido, o NDIS identifica todas as estruturas de NET_BUFFER que contêm dados que correspondem aos critérios de recebimento para a associação. O NDIS indica NET_BUFFER estruturas que correspondem aos critérios ao driver sobressociado. Esse sinalizador não afeta a verificação de loopback ou loopback em outras associações.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Se esse sinalizador for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST originaram-se da mesma porta de origem do comutador extensível do Hyper-V.

Para obter mais informações, consulte Sinalizadores de envio e recebimento extensíveis do Hyper-V.

Nota Se cada pacote na lista vinculada de estruturas de NET_BUFFER_LIST usar a mesma porta de origem, a extensão deverá definir o sinalizador NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE no parâmetro SendCompleteFlags de NdisFSendNetBufferListsComplete quando concluir a solicitação de envio.
 
Nota Esse sinalizador está disponível no NDIS 6.30 e posterior.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Se esse sinalizador estiver definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST serão encaminhados para a mesma porta de destino de comutador extensível.

Para obter mais informações, consulte Sinalizadores de envio e recebimento extensíveis do Hyper-V.

Nota Esse sinalizador está disponível no NDIS 6.30 e posterior.
 

Retornar valor

Nenhum

Comentários

FilterSendNetBufferLists é uma função opcional. Se um driver de filtro não filtrar solicitações de envio, ele poderá definir o ponto de entrada dessa função como NULL quando chamar o Função NdisFRegisterFilterDriver .

Se um driver de filtro especificar uma função FilterSendNetBufferLists e as filas enviarem solicitações, ele também deverá especificar um Função FilterCancelSendNetBufferLists .

O driver de filtro pode chamar a função NdisSetOptionalHandlers , da função FilterSetModuleOptions , para especificar uma função FilterSendNetBufferLists para um módulo de filtro.

Se o driver de filtro especificar uma função FilterSendNetBufferLists , o NDIS chamará essa função para filtrar os dados contidos em uma lista de estruturas de NET_BUFFER pela rede. O NDIS especifica uma lista de estruturas de NET_BUFFER em cada estrutura NET_BUFFER_LIST .

Se o driver de filtro não especificar FilterSendNetBufferLists, o NDIS chamará o próximo driver de filtro mais baixo na pilha de driver que especificou uma função FilterSendNetBufferLists . Se não houver esses drivers de filtro subjacentes, o NDIS chamará um driver subjacente Função MiniportSendNetBufferLists .

O driver de filtro pode filtrar os dados e enviar os dados filtrados para drivers subjacentes. Para cada estrutura de NET_BUFFER enviada a FilterSendNetBufferLists, um driver de filtro pode fazer o seguinte:

  • Passe o buffer para o próximo driver subjacente chamando a função NdisFSendNetBufferLists . O driver de filtro pode modificar o conteúdo do buffer antes de chamar NdisFSendNetBufferLists. Nesse caso, o NDIS chama o Função FilterSendNetBufferListsComplete após os drivers subjacentes concluirem a solicitação de envio.
  • Rejeite o buffer chamando a função NdisFSendNetBufferListsComplete .
  • Enfileirar o buffer em uma estrutura de dados local para processamento posterior.
  • Copie o buffer e origine uma solicitação de envio com a cópia. A operação de envio é semelhante a uma solicitação de envio iniciada pelo driver de filtro. Nesse caso, o driver deve retornar o buffer original para o driver sobreposto chamando a função NdisFSendNetBufferListsComplete .
Após a conclusão da operação de envio, um driver de filtro inverte as modificações, se houver, para os descritores de buffer que ele fez na função FilterSendNetBufferLists . O driver chama a função NdisFSendNetBufferListsComplete para retornar a lista vinculada de estruturas de NET_BUFFER_LIST para os drivers sobrepostos e retornar a status final da solicitação de envio.

Se um módulo de filtro estiver no estado Pausado , o driver de filtro não deverá originar nenhuma solicitação de envio para esse módulo de filtro. Se o NDIS chamar FilterSendNetBufferLists, o driver não deverá chamar NdisFSendNetBufferLists para passar os dados até que o driver seja reiniciado. O driver deve chamar NdisFSendNetBufferListsComplete imediatamente para concluir a operação de envio. Ele deve definir a status completa em cada estrutura NET_BUFFER_LIST como NDIS_STATUS_PAUSED.

O NDIS chama FilterSendNetBufferLists em IRQL <= DISPATCH_LEVEL.

Exemplos

Para definir uma função FilterSendNetBufferLists , primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda a Análise de Código para Drivers, SDV ( Verificador de Driver Estático ) e outras ferramentas de verificação a encontrar erros e é um requisito para gravar drivers para o sistema operacional Windows.

Por exemplo, para definir uma função FilterSendNetBufferLists chamada "MySendNetBufferLists", use o tipo FILTER_SEND_NET_BUFFER_LISTS conforme mostrado neste exemplo de código:

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Em seguida, implemente sua função da seguinte maneira:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

O tipo de função FILTER_SEND_NET_BUFFER_LISTS é definido no arquivo de cabeçalho Ndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função FILTER_SEND_NET_BUFFER_LISTS no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.

Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Plataforma de Destino Windows
Cabeçalho ndis.h (inclua Ndis.h)
IRQL <= DISPATCH_LEVEL

Confira também

FilterAttach

FiltroCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry