Compartilhar via


Função NdisFSendNetBufferLists (ndis.h)

Os drivers de filtro chamam a função NdisFSendNetBufferLists para enviar uma lista de buffers de dados de rede.

Sintaxe

void NdisFSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisFilterHandle,
       __drv_aliasesMem PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

Parâmetros

[in] NdisFilterHandle

O identificador NDIS que identifica esse módulo de filtro. O NDIS passou o identificador para o driver de filtro em uma chamada para a função FilterAttach .

NetBufferList

Um ponteiro para uma lista vinculada de estruturas de NET_BUFFER_LIST . Cada estrutura NET_BUFFER_LIST descreve uma lista de estruturas NET_BUFFER .

[in] PortNumber

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

[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 está 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 executa um loop de dados para o driver que enviou a solicitação de envio. Um driver de sobreposição 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 com o driver de sobreposição. 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 de comutador extensível do Hyper-V.

Nota Se cada pacote na lista vinculada de estruturas 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 for definido, todos os pacotes em uma lista vinculada de estruturas de NET_BUFFER_LIST deverão ser encaminhados para a mesma porta de destino do comutador extensível.

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

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

Retornar valor

Nenhum

Comentários

Depois que um driver de filtro chama a função NdisFSendNetBufferLists , o NDIS envia as estruturas de NET_BUFFER_LIST para os drivers subjacentes.

Um driver de filtro pode originar solicitações de envio ou pode filtrar as solicitações recebidas de drivers excessivamente. Se o driver de filtro originar solicitações de envio, o driver deverá alocar pools de buffers. O driver de filtro aloca cada estrutura NET_BUFFER_LIST de um pool.

O driver de filtro pode pré-alocar NET_BUFFER_LIST estruturas ou alocar as estruturas antes de chamar NdisFSendNetBufferLists e, em seguida, liberá-las quando a operação de envio for concluída.

Um driver de filtro deve definir o membro SourceHandle de cada estrutura NET_BUFFER_LIST que ele origina para o mesmo valor que ele passa para o parâmetro NdisFilterHandle . O identificador de filtro fornece as informações que o NDIS requer para retornar a estrutura NET_BUFFER_LIST para o driver de filtro. O driver de filtro não deve modificar o membro SourceHandle em nenhuma estrutura NET_BUFFER_LIST que ele não tenha se originado.

Antes de chamar NdisFSendNetBufferLists, um driver de filtro pode definir informações que acompanham a solicitação de envio com a macro NET_BUFFER_LIST_INFO . Os drivers subjacentes podem recuperar essas informações com a macro NET_BUFFER_LIST_INFO .

O NDIS chama um driver de filtro Função FilterSendNetBufferLists para transmitir solicitações de envio de drivers em excesso. Um driver de filtro pode passar essas solicitações passando as estruturas NET_BUFFER_LISTT recebidas em FilterSendNetBufferLists para NdisFSendNetBufferLists.

Assim que um driver de filtro chama a função NdisFSendNetBufferLists , ele renuncia à propriedade das estruturas de NET_BUFFER_LIST e de todos os recursos associados. O NDIS chama o Função FilterSendNetBufferListsComplete para retornar as estruturas e os dados para o driver de filtro. O NDIS pode coletar as estruturas e os dados de várias solicitações de envio em uma única lista vinculada de estruturas de NET_BUFFER_LIST antes de passar a lista para FilterSendNetBufferListsComplete.

Até que o NDIS chame FilterSendNetBufferListsComplete, o status atual da solicitação de envio não estará disponível para o driver de filtro. Um driver de filtro libera temporariamente a propriedade de todos os recursos associados a uma solicitação de envio quando chama NdisFSendNetBufferLists. Um driver de filtro nunca deve tentar examinar as estruturas de NET_BUFFER_LIST ou quaisquer dados associados depois de chamar NdisFSendNetBufferLists.

Nota Um driver de filtro deve acompanhar as solicitações de envio originadas e verificar se ele não chama o A função NdisFSendNetBufferListsComplete quando essas solicitações são concluídas.
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Plataforma de Destino Área de Trabalho
Cabeçalho ndis.h (inclua Ndis.h)
Biblioteca Ndis.lib
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI Irql_Filter_Driver_Function(ndis)

Confira também

FilterAttach

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisMAllocatePort