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