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


Структура 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 структур. Если это последняя NET_BUFFER структура в списке, этот элемент имеет значение NULL.

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

DataOffset
Задает смещение (в байтах) от начала памяти в цепочке MDL до начала сетевых данных в цепочке MDL.

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

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

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

Схема выделения пространства данных относительно CurrentMdl, CurrentMdlOffset, DataOffset и DataLength.

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

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

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

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

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

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

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

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