Função NdisSendNetBufferLists (ndis.h)
Os drivers de protocolo chamam a função NdisSendNetBufferLists para enviar dados de rede contidos em uma lista de estruturas de NET_BUFFER_LIST .
Sintaxe
void NdisSendNetBufferLists(
[in] NDIS_HANDLE NdisBindingHandle,
[in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
);
Parâmetros
[in] NdisBindingHandle
Um identificador que identifica o adaptador de destino. Uma chamada anterior para NdisOpenAdapterEx retornou esse identificador.
[in] NetBufferLists
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 do adaptador de miniport. O número de porta padrão de um adaptador de miniporte é zero. Os drivers de protocolo que não usam portas de adaptador de miniporto devem especificar a porta padrão.
[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 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 tem efeito na verificação de loopback ou loopback em outras associações.
Retornar valor
Nenhum
Comentários
Depois que um driver de protocolo chama NdisSendNetBufferLists, o NDIS envia as estruturas de NET_BUFFER_LIST para um driver subjacente Função MiniportSendNetBufferLists .
O driver de protocolo deve alocar cada estrutura NET_BUFFER_LIST de um pool chamando uma das seguintes funções:
O driver de protocolo pode pré-alocar estruturas de NET_BUFFER_LIST , por exemplo, em sua rotina DriverEntry . Como alternativa, o driver pode alocar as estruturas pouco antes de chamar NdisSendNetBufferLists e, em seguida, liberá-las quando a operação de envio for concluída. Quando o NDIS retorna uma estrutura de NET_BUFFER_LIST para ProtocolSendNetBufferListsComplete, o driver de miniport pode preparar a estrutura NET_BUFFER_LIST e todos os recursos associados para reutilização. Reutilizar as estruturas de NET_BUFFER_LIST pode produzir melhor desempenho do que retornar as estruturas a um pool e, em seguida, realocá-las para outra operação de envio.Um driver de protocolo deve definir o membro SourceHandle de cada estrutura NET_BUFFER_LIST com o mesmo valor que ele passa para o parâmetro NdisBindingHandle . O identificador de associação fornece as informações que o NDIS requer para retornar a estrutura NET_BUFFER_LIST para o driver de protocolo após as chamadas do driver de miniporto subjacente NdisMSendNetBufferListsComplete.
Antes de chamar NdisSendNetBufferLists, um driver de protocolo pode definir informações que acompanham a solicitação de envio com a macro NET_BUFFER_LIST_INFO . O driver subjacente pode recuperar essas informações com a macro NET_BUFFER_LIST_INFO.
Antes que um driver de protocolo chame NdisSendNetBufferLists com uma lista de estruturas de NET_BUFFER_LIST, o driver de protocolo deve garantir que as estruturas de NET_BUFFER_LIST sejam configuradas na ordem em que os dados de rede devem ser enviados pela transmissão.
Assim que um driver de protocolo chama NdisSendNetBufferLists, ele abre mão da propriedade das estruturas de NET_BUFFER_LIST e de todos os recursos associados. O NDIS chama a função ProtocolSendNetBufferListsComplete para retornar as estruturas e os dados ao driver de protocolo. 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 ProtocolSendNetBufferListsComplete.
Até que o NDIS chame ProtocolSendNetBufferListsComplete, o status atual de um envio iniciado pelo driver de protocolo não está disponível para o driver de protocolo. Um driver de protocolo libera temporariamente a propriedade de todos os recursos alocados para uma solicitação de envio quando chama NdisSendNetBufferLists. Um driver de protocolo nunca deve tentar examinar as estruturas de NET_BUFFER_LIST ou quaisquer dados associados depois de chamar NdisSendNetBufferLists.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Com suporte no NDIS 6.0 e posterior. |
Plataforma de Destino | Universal |
Cabeçalho | ndis.h (inclua Ndis.h) |
Biblioteca | Ndis.lib |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade de DDI | Irql_SendRcv_Function(ndis) |