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

참고 이 멤버의 이름은 NDIS 6.0 드라이버의 경우 NdisReserved1 이고 NDIS 6.1 이상 드라이버의 경우 DataPhysicalAddress 입니다. NDIS 6.0 드라이버의 경우 이 멤버는 NDIS용으로 예약되어 있습니다.
 
프레임의 데이터 부분의 실제 주소입니다. NET_BUFFER 할당한 드라이버가 주소를 지정하지 않는 경우 이 멤버는 0이어야 합니다. 이 멤버는 NET_BUFFER 연결된 NET_BUFFER_LIST 구조체의 NblFlags 멤버에서 NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER 또는 NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD 플래그가 설정된 경우에만 유효합니다.
참고 미니포트 드라이버는 구조체가 분할 프레임과 연결되지 않은 경우에도 NET_BUFFER 구조체의 DataPhysicalAddress 멤버를 설정할 수 있습니다. 이 경우 DataPhysicalAddress 는 헤더 MDL의 실제 주소를 포함합니다.
 

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 구조 컨텍스트 정보를 유지 관리합니다.
참고 하나의 드라이버만 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