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에 대한 포인터입니다. 이 멤버는 현재 드라이버가 사용하지 않는 MDL을 건너뛰어 성능을 향상시키는 최적화를 제공합니다.
CurrentMdlOffset
CurrentMdl 멤버에 의해 지정된 MDL에서 사용된 데이터 공간의 시작 부분까지의 오프셋(바이트)입니다.
DataLength
MDL 체인에서 사용된 데이터 공간의 길이(바이트)입니다. 최대 길이는 0xFFFFFFFF 바이트입니다.
stDataLength
MDL 체인에서 사용된 데이터 공간의 길이(바이트)입니다. 최대 길이는 0xFFFFFFFF 바이트입니다. 이 멤버는 DataLength와 동일하지만 해당 형식은 ULONG 대신 SIZE_T.
MdlChain
데이터 버퍼를 매핑하는 연결된 MDL 목록에 대한 포인터입니다. 데이터 버퍼는 네트워크 데이터를 저장합니다.
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 구조체 풀을 할당할 때 NET_BUFFER_LIST_POOL_PARAMETERS 구조체의 fAllocateNetBuffer 멤버를 TRUE로 설정합니다. 이 경우 NET_BUFFER 구조체는 드라이버가 풀에서 할당하는 각 NET_BUFFER_LIST 구조체로 미리 할당됩니다.각 NET_BUFFER 구조에 연결된 은 네트워크 패킷 데이터를 포함하는 버퍼를 매핑하는 하나 이상의 버퍼 설명자입니다. 이러한 버퍼 설명자는 NetBufferHeader 멤버에서 MDL 체인으로 지정됩니다. 이러한 네트워크 패킷 데이터가 수신되었거나 전송됩니다.
MDL 체인의 추가 데이터 공간에 액세스하기 위해 NDIS 드라이버는 다음 함수를 호출할 수 있습니다.
NDIS 드라이버는 일반적으로 NET_BUFFER 구조의 MiniportReserved 또는 ProtocolReserved 멤버를 사용하여 NET_BUFFER 구조 컨텍스트 정보를 유지 관리합니다.순 버퍼를 사용하는 방법에 대한 자세한 내용은 NET_BUFFER 아키텍처를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
머리글 | ndis/nbl.h(ndis.h 포함) |
추가 정보
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart