Поделиться через


Общая память в буферах приема

В этом разделе описывается структура общей памяти в буферах приема VMQ. Дополнительные сведения об использовании буферов в указаниях получения см. в разделе VmQ Receive Path.

Если драйвер протокола overlying задал флаг NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED в элементе Flags структуры NDIS_RECEIVE_QUEUE_PARAMETERS , сетевой адаптер должен разделить полученный пакет со смещением, равным или превышающим запрошенный размер lookahead, и использовать DMA для передачи данных lookahead и данных post-lookahead в отдельные сегменты общей памяти.

Драйверы минипорта указывают параметры для типа lookahead (NdisSharedMemoryUsageReceiveLookahead) или других типов общей памяти при выделении общей памяти. Например, драйвер минипорта вызывает функцию NdisAllocateSharedMemory и задает член Usage в структуре NDIS_SHARED_MEMORY_PARAMETERS значение NdisSharedMemoryUsageReceiveLookahead. Драйверы минипорта должны выделять общую память для очереди после завершения выделения очереди. Сведения о выделении и освобождении ресурсов общей памяти для очередей см. в разделе Выделение ресурсов общей памяти.

На следующем рисунке показаны связи для сетевых данных, когда входящие данные разделены на два буфера общей памяти.

Схема, показывающая связи сетевых данных с входящими данными, разделенными на два буфера общей памяти.

Структура NET_BUFFER_SHARED_MEMORY указывает сведения об общей памяти. Может существовать связанный список таких буферов общей памяти, связанных со структурой NET_BUFFER .

Используйте макросы NET_BUFFER_SHARED_MEM_NEXT_SEGMENT, NET_BUFFER_SHARED_MEM_FLAGS, NET_BUFFER_SHARED_MEM_HANDLE, NET_BUFFER_SHARED_MEM_OFFSET и NET_BUFFER_SHARED_MEM_LENGTH для доступа к NET_BUFFER_SHARED_MEMORY в структуре NET_BUFFER. Элемент SharedMemoryInfo структуры NET_BUFFER содержит первую структуру NET_BUFFER_SHARED_MEMORY в связанном списке.

Примечание Начиная с версии NDIS 6.30 разделение данных пакетов на отдельные буферы lookahead больше не поддерживается. Начиная с Windows Server 2012, драйвер протокола overlying не устанавливает флаг NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED в элементе Flags структуры NDIS_RECEIVE_QUEUE_PARAMETERS .