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


структура NET_BUFFER (ndis/nbl.h)

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

Синтаксис

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

Члены

Next

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

CurrentMdl

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

CurrentMdlOffset

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

DataLength

Длина (в байтах) используемого пространства данных в цепочке MDL. Максимальная длина составляет 0xFFFFFFFF байт.

stDataLength

Длина (в байтах) используемого пространства данных в цепочке MDL. Максимальная длина составляет 0xFFFFFFFF байт. Этот элемент совпадает с DataLength, но его тип SIZE_T вместо ULONG.

MdlChain

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

DataOffset

Смещение в байтах от начала цепочки MDL до начала сетевых данных в цепочке MDL. Это смещение также представляет собой размер неиспользуемого пространства данных в байтах.

Link

Зарезервировано для NDIS.

NetBufferHeader

Структура NET_BUFFER_HEADER . Это дубликат приведенного выше объединения из соображений совместимости.

ChecksumBias

Число байтов, которые необходимо пропустить с начала буфера данных при вычислении контрольной суммы. Этот элемент используется протоколом TCP/IP.

Reserved

Зарезервировано для последующего использования.

NdisPoolHandle

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

NdisReserved[2]

Зарезервировано для NDIS.

ProtocolReserved[6]

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

MiniportReserved[4]

Зарезервировано для использования драйверами минипорта. Водители минипорта и промежуточные водители NDIS могут использовать эту область для своих целей.

DataPhysicalAddress

Примечание Имя этого элемента — NdisReserved1 для драйверов NDIS 6.0 и DataPhysicalAddress для драйверов NDIS 6.1 и более поздних версий. Для драйверов NDIS 6.0 этот элемент зарезервирован для NDIS.
 
Физический адрес части данных кадра. Этот элемент должен иметь значение 0, если драйвер, который выделил NET_BUFFER, не указывает адрес. Этот элемент действителен, только если флаг NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER или NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD установлен в элементе NblFlagsструктуры NET_BUFFER_LIST, связанной с NET_BUFFER.
Примечание Драйвер мини-порта может задать элемент DataPhysicalAddress структуры NET_BUFFER, даже если структура не связана с разделенным кадром. В этом случае DataPhysicalAddress содержит физический адрес MDL заголовка.
 

SharedMemoryInfo

Указатель на NET_BUFFER_SHARED_MEMORY структура.

ScatterGatherList

Структура SCATTER_GATHER_LIST описывает список точечной и сборной для DMA.

Комментарии

Драйверы NDIS могут вызывать следующие функции для выделения и инициализации структуры NET_BUFFER:

Драйверы NDIS могут вызывать Функция NdisAllocateNetBufferListPool, а затем при выделении пула структуры NET_BUFFER_LIST присвойте элементу fAllocateNetBuffer структуры NET_BUFFER_LIST_POOL_PARAMETERS значение TRUE. В этом случае предварительно выделяется NET_BUFFER структура с каждой NET_BUFFER_LIST структурой, которую драйвер выделяет из пула.

С каждой NET_BUFFER структурой связаны один или несколько дескрипторов буфера, которые сопоставляют буферы, содержащие данные сетевых пакетов. Эти дескрипторы буфера указываются в виде цепочки MDL в элементе NetBufferHeader . Такие данные сетевых пакетов были получены или будут переданы.

Для доступа к дополнительному пространству данных в цепочке MDL драйверы NDIS могут вызывать следующие функции:

Драйверы NDIS обычно используют элементы MiniportReserved или ProtocolReserved структуры NET_BUFFER для хранения NET_BUFFER контекстных сведений о структуре.
Примечание Только один драйвер может использовать элементы MiniportReserved или ProtocolReserved . Таким образом, если другой драйвер использовал один из этих элементов, промежуточный драйвер не может использовать их.
 
Чтобы получить доступ к членам структуры NET_BUFFER, используйте следующие макросы и функции:

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

Дополнительные сведения об использовании чистых буферов см. в разделе Архитектура NET_BUFFER.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Верхняя часть ndis/nbl.h (включая ndis.h)

См. также раздел

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST