Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Структуры NDIS 6.0 и более поздних версий NET_BUFFER аналогичны структурам NDIS_PACKET, используемым NDIS 5.x и более ранних драйверов. Каждая структура 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 и пространством данных.
Диаграмма
NDIS предоставляет функции для управления пространством данных в цепочке MDL. Как водители изменяют использование пространства данных в зависимости от текущего водителя. Иногда существует пространство данных, которое в настоящее время не используется текущим драйвером. Хотя неиспользуемое пространство данных в настоящее время не используется, оно может содержать допустимые данные. Например, на пути приема неиспользуемое пространство может содержать сведения о заголовке, которые использовались драйвером более низкого уровня.
Водители выполняют отступ и предварительные операции для увеличения и уменьшения используемого пространства данных. Дополнительные сведения об операциях отступления и продвижения см. в разделе "Отступление" и "Предварительные операции".
Следующие термины и определения описывают элементы пространства данных NET_BUFFER:
используемое пространство данных
используемое пространство данных содержит данные, используемые текущим драйвером в текущее время. Драйверы увеличивают используемое пространство данных с операциями отступа и сокращают используемое пространство данных с предварительными операциями.
неиспользуемое пространство данных
Текущий драйвер не использует это пространство данных в текущее время.
Общий размер данных
Общий размер данных — это сумма размера используемого пространства данных и неиспользуемого пространства данных. Чтобы вычислить общий размер, добавьте DataOffset к DataLength.
отступление
Операции отступления увеличивают размер используемого пространства данных.
Прогресс
Предварительные операции снижают размер используемого пространства данных.