MINIPORT_CO_SEND_NET_BUFFER_LISTS função de retorno de chamada (ndis.h)
A função MiniportCoSendNetBufferLists transmite dados de rede contidos em uma lista vinculada especificada de estruturas de NET_BUFFER_LIST .
Sintaxe
MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;
void MiniportCoSendNetBufferLists(
[in] NDIS_HANDLE MiniportVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
)
{...}
Parâmetros
[in] MiniportVcContext
Um identificador para uma área de contexto alocada pelo driver de miniporto na qual o driver de miniporto mantém seu estado de VC (conexão por virtual). O driver de miniporto forneceu esse identificador para o NDIS de sua função MiniportCoCreateVc .
[in] NetBufferLists
Um ponteiro para a primeira estrutura NET_BUFFER_LIST em uma lista vinculada de estruturas de NET_BUFFER_LIST . Cada estrutura NET_BUFFER_LIST na lista descreve uma lista de estruturas de NET_BUFFER . Cada estrutura NET_BUFFER na lista é mapeada para uma cadeia de MDLs (listas de descritores de memória). Os MDLs contêm os dados de rede que MiniportCoSendNetBufferLists transmite.
[in] SendFlags
Sinalizadores que definem atributos para a operação de envio. Os sinalizadores podem ser combinados com uma operação OR bit a bit. Para limpar todos os sinalizadores, defina esse parâmetro como zero. MiniportCoSendNetBufferLists dá suporte aos seguintes sinalizadores:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
Opcionalmente, o chamador poderá definir esse sinalizador se o IRQL atual for DISPATCH_LEVEL. Para obter mais informações sobre esse sinalizador, consulte Dispatch IRQL Tracking.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
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 overlying pode substituir esse comportamento definindo o sinalizador NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK . 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.
Retornar valor
Nenhum
Comentários
A função MiniportCoSendNetBufferLists é necessária para drivers de miniporto CoNDIS. Quando um driver sobressopido chama o Função NdisCoSendNetBufferLists , o NDIS chama a função MiniportCoSendNetBufferLists do driver de miniporto associado.
A ordem da lista vinculada de estruturas de NET_BUFFER_LIST que o NDIS passa em NetBufferLists representa a ordem na qual o driver de miniporto deve transmitir os dados de rede. Além disso, um driver de miniporte deve enviar as estruturas NET_BUFFER_LIST de várias chamadas MiniportCoSendNetBufferLists na ordem em que o driver de miniporto recebeu as estruturas.
Os drivers de miniporto coNDIS devem aceitar todas as solicitações de envio que o NDIS faz chamando a função MiniportCoSendNetBufferLists . Se um driver de miniporto não puder concluir uma solicitação de envio imediatamente, o driver deverá manter a solicitação em uma fila até que ela possa concluir a solicitação. Enquanto uma solicitação de envio está pendente, o driver de miniporto mantém a propriedade das estruturas NET_BUFFER_LIST e de todos os recursos associados às estruturas NET_BUFFER_LIST .
O driver de miniporte deve chamar o Função NdisMCoSendNetBufferListsComplete para concluir todas as solicitações de envio do CoNDIS. Para melhorar o desempenho do computador, o driver pode criar uma lista vinculada que contém as estruturas de NET_BUFFER_LIST de várias solicitações de envio. Em seguida, o driver pode passar essa lista vinculada em uma única chamada para NdisMCoSendNetBufferListsComplete.
Além disso, você deve assumir que o driver de miniporto não pode acessar as estruturas NET_BUFFER_LIST e outros recursos associados assim que o driver chamar NdisMCoSendNetBufferListsComplete.
A função MiniportCoSendNetBufferLists deve sincronizar o acesso às filas internas de dados de rede com outras funções MiniportXxx do driver que acessam as mesmas filas. Um driver de miniporte pode usar bloqueios de rotação para sincronizar o acesso às filas.
Os drivers de protocolo são responsáveis por determinar quais dados de rede são necessários, com base no tipo médio selecionado pelo driver de miniporto associado. No entanto, um driver de protocolo pode fornecer dados de rede que especificam pacotes menores que o tamanho mínimo do pacote para o meio selecionado. Nesse caso, MiniportCoSendNetBufferLists deverá preencher os pacotes com zeros se a média selecionada impor um requisito de comprimento mínimo no tamanho do pacote de transmissão.
O NDIS chama MiniportCoSendNetBufferLists em IRQL<= DISPATCH_LEVEL.
Exemplos
Para definir uma função MiniportCoSendNetBufferLists , 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 MiniportCoSendNetBufferLists chamada "MyCoSendNetBufferLists", use o tipo MINIPORT_CO_SEND_NET_BUFFER_LISTS conforme mostrado neste exemplo de código:
MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
VOID
MyCoSendNetBufferLists(
NDIS_HANDLE MiniportVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendFlags
)
{...}
O tipo de função MINIPORT_CO_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 MINIPORT_CO_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 |