Memória compartilhada em buffers de recebimento

Esta seção descreve o layout da memória compartilhada em buffers de recebimento de VMQ. Para obter mais informações sobre como usar os buffers em indicações de recebimento, consulte Caminho de recebimento do VMQ.

Se o driver de protocolo overlying definir o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED no membro Flags da estrutura NDIS_RECEIVE_QUEUE_PARAMETERS , o adaptador de rede deverá dividir um pacote recebido em um deslocamento igual ou maior do que o tamanho do lookahead solicitado e usar o DMA para transferir os dados lookahead e os dados pós-lookahead para segmentos de memória compartilhada separados.

Os drivers de miniporto especificam as configurações para o tipo lookahead (NdisSharedMemoryUsageReceiveLookahead) ou outros tipos de memória compartilhada quando a memória compartilhada é alocada. Por exemplo, o driver de miniporto chama a função NdisAllocateSharedMemory e define o membro Usage na estrutura NDIS_SHARED_MEMORY_PARAMETERS como NdisSharedMemoryUsageReceiveLookahead. Os drivers de miniport devem alocar memória compartilhada para uma fila quando a alocação da fila for concluída. Para obter informações sobre como alocar e liberar recursos de memória compartilhada para filas, consulte Alocação de recursos de memória compartilhada.

A ilustração a seguir mostra as relações dos dados de rede quando os dados de entrada são divididos em dois buffers de memória compartilhados.

Diagrama mostrando as relações de dados de rede com dados de entrada divididos em dois buffers de memória compartilhados.

A estrutura NET_BUFFER_SHARED_MEMORY especifica informações de memória compartilhada. Pode haver uma lista vinculada desses buffers de memória compartilhada associados a uma estrutura NET_BUFFER .

Use as macros NET_BUFFER_SHARED_MEM_NEXT_SEGMENT, NET_BUFFER_SHARED_MEM_FLAGS, NET_BUFFER_SHARED_MEM_HANDLE, NET_BUFFER_SHARED_MEM_OFFSET e NET_BUFFER_SHARED_MEM_LENGTH para acessar o NET_BUFFER_SHARED_MEMORY em uma estrutura de NET_BUFFER. O membro SharedMemoryInfo da estrutura NET_BUFFER contém a primeira estrutura NET_BUFFER_SHARED_MEMORY na lista vinculada.

Nota A partir do NDIS 6.30, não há mais suporte para a divisão de dados de pacotes em buffers lookahead separados. A partir do Windows Server 2012, o driver de protocolo overlying não definirá o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED no membro Flags da estrutura NDIS_RECEIVE_QUEUE_PARAMETERS .