структура 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
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 контекстных сведений о структуре.Дополнительные сведения об использовании чистых буферов см. в разделе Архитектура NET_BUFFER.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Верхняя часть | ndis/nbl.h (включая ndis.h) |
См. также раздел
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart