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


структура 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.
 
Физический адрес части данных кадра. Этот элемент должен быть равен нулю, если драйвер, выделенный 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, а затем задайте элемент fAllocateNetBuffer структуры NET_BUFFER_LIST_POOL_PARAMETERSTRUE при выделении пула структур NET_BUFFER_LIST. В этом случае структура 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 (include 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