Memoria compartida en búferes de recepción
En esta sección se describe el diseño de la memoria compartida en los búferes de recepción de VMQ. Para obtener más información sobre el uso de los búferes en indicaciones de recepción, consulte Ruta de acceso de recepción de VMQ.
Si el controlador de protocolo de sobresalto establece la marca de NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED en el miembro Flags de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS , el adaptador de red debe dividir un paquete recibido en un desplazamiento igual o mayor que el tamaño de lookahead solicitado y usar DMA para transferir los datos de lookahead y los datos posteriores a lookahead para separar los segmentos de memoria compartida.
Los controladores de miniport especifican la configuración del tipo lookahead (NdisSharedMemoryUsageReceiveLookahead) u otros tipos de memoria compartidos cuando se asigna la memoria compartida. Por ejemplo, el controlador de minipuerto llama a la función NdisAllocateSharedMemory y establece el miembro Usage en la estructura NDIS_SHARED_MEMORY_PARAMETERS en NdisSharedMemoryUsageReceiveLookahead. Los controladores de minipuerto deben asignar memoria compartida para una cola cuando se complete la asignación de cola. Para obtener información sobre cómo asignar y liberar recursos de memoria compartida para colas, consulte Asignación de recursos de memoria compartida.
En la ilustración siguiente se muestran las relaciones de los datos de red cuando los datos entrantes se dividen en dos búferes de memoria compartida.
La estructura NET_BUFFER_SHARED_MEMORY especifica información de memoria compartida. Puede haber una lista vinculada de estos búferes de memoria compartida asociados a una estructura de NET_BUFFER .
Use las macros NET_BUFFER_SHARED_MEM_NEXT_SEGMENT, NET_BUFFER_SHARED_MEM_FLAGS, NET_BUFFER_SHARED_MEM_HANDLE, NET_BUFFER_SHARED_MEM_OFFSET y NET_BUFFER_SHARED_MEM_LENGTH para acceder al NET_BUFFER_SHARED_MEMORY en una estructura de NET_BUFFER. El miembro SharedMemoryInfo de la estructura NET_BUFFER contiene la primera estructura NET_BUFFER_SHARED_MEMORY de la lista vinculada.
Nota A partir de NDIS 6.30, ya no se admite la división de datos de paquetes en búferes de lookahead independientes. A partir de Windows Server 2012, el controlador de protocolo excesivamente no establecerá la marca de NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED en el miembro Flags de la estructura NDIS_RECEIVE_QUEUE_PARAMETERS .