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


Структура NET_BUFFER

Структуры NDIS 6.0 и более поздних версий NET_BUFFER аналогичны структурам NDIS_PACKET, используемым NDIS 5.x и более ранних драйверов. Каждая структура NET_BUFFER упаковывает пакет сетевых данных.

На следующем рисунке показаны поля в структуре NET_BUFFER.

диаграмма, показывающая поля в структуре NET_BUFFER.

Структура NET_BUFFER включает структуру NET_BUFFER_HEADER в элементе NetBufferHeader. Структура NET_BUFFER_HEADER включает структуру NET_BUFFER_DATA в элементе NetBufferData. Для доступа к элементам структуры NET_BUFFER следует использовать макросы NDIS. Полный список этих макросов см. на странице справки по структуре NET_BUFFER.

Некоторые члены структуры NET_BUFFER используются только системой NDIS. Элементы, которые обычно используют драйверы, это:

ProtocolReserved
Зарезервировано для использования драйверами протокола.

MiniportReserved
Зарезервировано для использования минипорт-драйверами.

NdisPoolHandle
Указывает дескриптор пула, идентифицирующий пул сетевых буферов, из которого была выделена структура NET_BUFFER.

следующей
Указывает на указатель следующей структуры NET_BUFFER в связанном списке структур NET_BUFFER. Если это последняя структура NET_BUFFER в списке, этот элемент — NULL.

DataLength
Задает длину в байтах сетевых данных в цепочке MDL.

СмещениеДанных
Указывает смещение в байтах с начала памяти в цепочке MDL до начала сетевых данных в цепочке MDL.

CurrentMdl
Указывает указатель на первый MDL,используемый текущим драйвером. Этот указатель обеспечивает оптимизацию, которая повышает производительность, пропуская дескрипторы памяти, которые текущий драйвер не использует.

CurrentMdlOffset
Задает смещение (в байтах) к началу используемого пространства данных в MDL, заданном элементом CurrentMdl структуры NET_BUFFER.

На следующем рисунке показана связь между элементами CurrentMdl, CurrentMdlOffset, DataOffsetи DataLength и пространством данных.

Диаграмма , показывающая распределение пространства данных относительно CurrentMdl, CurrentMdlOffset, DataOffset и DataLength.

NDIS предоставляет функции для управления пространством данных в цепочке MDL. Как водители изменяют использование пространства данных в зависимости от текущего водителя. Иногда существует пространство данных, которое в настоящее время не используется текущим драйвером. Хотя неиспользуемое пространство данных в настоящее время не используется, оно может содержать допустимые данные. Например, на пути приема неиспользуемое пространство может содержать сведения о заголовке, которые использовались драйвером более низкого уровня.

Водители выполняют отступ и предварительные операции для увеличения и уменьшения используемого пространства данных. Дополнительные сведения об операциях отступления и продвижения см. в разделе "Отступление" и "Предварительные операции".

Следующие термины и определения описывают элементы пространства данных NET_BUFFER:

используемое пространство данных
используемое пространство данных содержит данные, используемые текущим драйвером в текущее время. Драйверы увеличивают используемое пространство данных с операциями отступа и сокращают используемое пространство данных с предварительными операциями.

неиспользуемое пространство данных
Текущий драйвер не использует это пространство данных в текущее время.

Общий размер данных
Общий размер данных — это сумма размера используемого пространства данных и неиспользуемого пространства данных. Чтобы вычислить общий размер, добавьте DataOffset к DataLength.

отступление
Операции отступления увеличивают размер используемого пространства данных.

Прогресс
Предварительные операции снижают размер используемого пространства данных.