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.
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.
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.
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) |