Compartilhar via


NdisMIndicateReceivePacket

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa função notifica NDIS que é uma matriz de pacotes recebidos disponível seja encaminhado para o apropriado ligado drivers protocolo.

Syntax

VOID NdisMIndicateReceivePacket(
  NDIS_HANDLE MiniportAdapterHandle,
  PPNDIS_PACKET ReceivePackets,
  UINT NumberOfPackets
);

Parameters

  • MiniportAdapterHandle
    [no] Manipular originalmente entrada para o MiniportInitialize função.
  • ReceivePackets
    [no] Ponteiro para uma matriz de pacote descritor ponteiros, com cada descritor configurado pelo chamador para especificar os dados recebidos.
  • NumberOfPackets
    [no] Especifica quantos ponteiros estão na matriz em ReceivePackets. O valor deve ser pelo menos 1.

Return Value

Nenhum.

Remarks

Drivers de barramento mestre DMA NICs são mais prováveis de apresentação ganhos significativos no desempenho fazendo multipacket receber indicações com essa função. No entanto, os drivers que indicam out - de - dados banda com receba pacotes, como pacote prioridade e / ou tempo carimbos, também pode chamar essa função com um único pacote em um tempo.

Quando uma miniporta chama essa função, NDIS passa cada ponteiro no ReceivePackets separadamente, na ordem de Miniport-determined, para o ProtocolReceivePacket função de ligado protocolos que exportar essa função. Para outro ligado protocolos, NDIS passa cada ponteiro pacote para o ProtocolReceive função.

Se a miniporta não designar médio do seu NIC como um tipo para o qual o sistema fornece um pacote filtro na resposta para o OID_GEN_MEDIA_IN_USE consulta, encaminhamentos NDIS recebe do driver que indicações para todos ligado protocolo drivers que exportar um ProtocolReceivePackets função. Caso contrário, NDIS automaticamente aplica o apropriado biblioteca filtro para a miniporta é receber indicações.

Qualquer chamador desta função deve primeiro configurar a matriz pacote, da seguinte maneira:

  • Cada elemento é o ponteiro para um descritor pacote, que o chamador deve alocar de um pool pacote. Cada descritor pacote pode ter no máximo 16 bytes em seu ProtocolReserved seção.
  • Todos os descritores reserva encadeadas para tal um descritor pacote devem ser alocadas de um pool reserva. A miniporta deve chamar o NdisAdjustBufferLength função com qualquer mapeamento descritor reserva uma buffer de recepção em de NIC que contém menos dados recebidos do que o intervalo completo do buffer de recepção so that o descritor reserva mapeia somente os dados recebidos para a indicação. O driver NIC deve reajustar o mapeamento com NdisAdjustBufferLength Quando a propriedade de tal uma reserva descritor, as well-regains.
  • Se a miniporta indica carimbos tempo para pacotes recebidos, ele deverá definir o TimeReceived e / ou TimeSent Os membros a NDIS_PACKET_OOB_DATA estrutura associado com o uso descritor o pacote de NDIS_SET_PACKET_TIME_RECEIVED e / ou NDIS_SET_PACKET_TIME_SENT As macros. Ele pode chamar o NdisGetCurrentSystemTime função uma vez para definir o carimbo tempo de recebimento para todos os pacotes de uma matriz determinado pacote.
  • O HeaderSize o out - of - dados banda bloco deve coincidir com o tamanho cabeçalho de cada pacote recebido para a mídia. De exemplo, seria um driver que seleciona Ethernet como sua mídia preferencial na inicialização inicializar o NDIS_PACKET_OOB_DATA estrutura HeaderSize Para 14 quando ele aloca o descritor pacote.
  • Se o driver indica recebe adicionais fora - de - informações banda com, ele deverá definir o SizeMediaSpecificInfo Para o número de bytes de informações fornecidas na reserva Caller-allocated no MediaSpecificInformation. A miniporta pode usar o NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO macro para definir esses valores. Caso contrário, SizeMediaSpecificInfo deve ser 0, e MediaSpecificInformation deve ser NULL.
  • A miniporta pode definir a Status membro de Out - Of - banda bloco de dados para NDIS_STATUS_RESOURCES se ele precisar reter posse do descritor pacote e reserva descritores de alguns elementos em uma indicação específica. A configuração esse status para um pacote implicitamente define o status mesmo para todos os pacotes subseqüentes da matriz indicado. Configuração NDIS_STATUS_RESOURCES força NDIS para indicar cada esse pacote, um por um tempo, para ligado ' protocolos ProtocolReceive funções, dessa maneira forçar cada protocolo para copiar os dados pacote e versão cada pacote a ser retornado para a miniporta.
  • Um driver de miniporta desserializado deve salvar o membro de status de Out - Of - bloco de dados banda em um variável local antes indicando até o descritor pacote. Como explicado em mais detalhes abaixo, ao NdisMIndicateReceivePacket retorna, um driver de miniporta desserializado deve verificar o status para determinar se ele pode imediatamente pacote salvo recuperar o descritor pacote e o associado buffers.

Se um serializado driver de miniporta não define status de um pacote em Status membro de NDIS_PACKET_OOB_DATA Para NDIS_STATUS_RESOURCES, a chamar para NdisMIndicateReceivePacket Fornece interessado acessar exclusivo, Read-only protocolos para os buffers encadeados para cada pacote. O driver de miniporta regains posse do descritor de pacote e o associado buffers da seguinte maneira:

  • Se a pasta Status de Out - Of - dados banda bloco é definido como NDIS_STATUS_SUCCESS no retorno de NdisMIndicateReceivePacket, o driver de miniporta imediatamente regains posse do descritor de pacote e todos os buffers encadeados para o pacote. Ele pode preparar esses descritores para reutilização em subseqüentes receber indicações.
  • Se a pasta Status é definido para NDIS_STATUS_PENDING no retorno de NdisMIndicateReceivePacket, o driver de miniporta posse regains do descritor de pacote e todos os buffers encadeados para o pacote quando função MiniportReturnPacket do driver de miniporta NDIS chama posteriormente. Ela pode, em seguida, preparar esses descritores para reutilização em subseqüentes receber indicações.

Um driver de miniporta deve usar NDIS_GET_PACKET_STATUS para determinar se ele tiver regained a propriedade de serializado indicado pacotes quando NdisMIndicateReceivePacket controle retorna.

Um driver de miniporta serializado não deve examinar o Status de pacotes indicados no retorno de NdisMIndicateReceivePacket. Em vez disso, um driver de miniporta desserializado deve salvar de um pacote Status Em um variável local antes indicando até o descritor pacote. Quando NdisMIndicateReceivePacket Retorna, o driver de miniporta deve verificar o pacote salvo Status. Se o driver de miniporta definido do o pacote Status Para NDIS_STATUS_RESOURCES antes indicando até o descritor pacote, ele deve recuperar o descritor pacote imediatamente após NdisMIndicateReceivePacket Retorna, preferência por chamado sua própria função MiniportReturnPacket. Neste maiúsculas e minúsculas, NDIS não da chamar o driver de miniporta MiniportReturnPacket função para retornar o descritor pacote. Se o driver de miniporta definir status do pacote para NDIS_STATUS_SUCCESS antes indicando até o descritor pacote, o driver de miniporta não deve recuperar o descritor pacote até NDIS subseqüentemente retorna o descritor pacote para do driver de miniporta MiniportReturnPacket função.

A miniporta deve usar NDIS_GET_PACKET_STATUS para determinar se ele tiver regained a propriedade de pacotes indicados quando essa função retorna controle. Quando a miniporta regains a propriedade de um descritor pacote indicado, ele prepara o associado out - de - bloco de dados banda para reutilização, passando o ponteiro retornado por NDIS_OOB_DATA_FROM_PACKET para o registro ou alerta NdisZeroMemory função. Como um alternativo, a miniporta pode simplesmente redefinir os membros relevantes no subseqüentes recebem com o NDIS_SET_PACKET_XXX As macros ou com o ponteiro retornado por NDIS_OOB_DATA_FROM_PACKET.

Uma miniporta não deve transmitir um ponteiro descritor pacote para NdisZeroMemory. Isso destrói descritor de pacote, processamento-inutilizável para indicações subseqüentes. Para Clear o associado out - de - bloco de dados banda, o driver deve transmitir o ponteiro retornado por NDIS_OOB_DATA_FROM_PACKET.

Matrizes de Pacotes passados para essa função podem ser alocados na pilha.

Qualquer miniporta que chama essa função deve indicar Pacotes completos. Conseqüentemente, tal um driver tiver não MiniportTransferData função.

Requirements

Header ndis.h
Library ndis.dll
Windows Embedded CE Windows CE .NET 4.0 and later

See Also

Reference

MiniportInitialize
MiniportReturnPacket
MiniportTransferData
NDIS_OOB_DATA_FROM_PACKET
NDIS_PACKET_OOB_DATA
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO
NDIS_SET_PACKET_TIME_RECEIVED
NDIS_SET_PACKET_TIME_SENT
NdisAdjustBufferLength
NdisAllocatePacket
NdisChainBufferAtBack
NdisChainBufferAtFront
NdisGetCurrentSystemTime
NdisZeroMemory
OID_GEN_MEDIA_IN_USE
ProtocolReceive
ProtocolReceivePacket