다음을 통해 공유


NET_BUFFER 구조체

NDIS 6.0 이상 NET_BUFFER 구조체는 NDIS 5에서 사용하는 NDIS_PACKET 구조와 유사합니다. x 및 이전 드라이버. 각 NET_BUFFER 구조는 네트워크 데이터 패킷을 패키지합니다.

다음 그림은 NET_BUFFER 구조체의 필드를 보여줍니다.

NET_BUFFER 구조체의 필드를 보여 주는 다이어그램

NET_BUFFER 구조체에는 NetBufferHeader 멤버의 NET_BUFFER_HEADER 구조체가 포함됩니다. NET_BUFFER_HEADER 구조체에는 NetBufferData 멤버의 NET_BUFFER_DATA 구조체가 포함됩니다. NDIS 매크로를 사용하여 NET_BUFFER 구조체 멤버에 액세스해야 합니다. 이러한 매크로의 전체 목록은 NET_BUFFER 구조 참조 페이지를 참조하세요.

일부 NET_BUFFER 구조체 멤버는 NDIS에서만 사용됩니다. 드라이버에서 일반적으로 사용하는 멤버는 다음과 같습니다.

ProtocolReserved
프로토콜 드라이버에서 사용하도록 예약되었습니다.

MiniportReserved
미니포트 드라이버에서 사용하도록 예약되어 있습니다.

NdisPoolHandle
NET_BUFFER 구조가 할당된 NET_BUFFER 풀을 식별하는 풀 핸들을 지정합니다.

다음
NET_BUFFER 구조체의 연결된 목록에서 다음 NET_BUFFER 구조체에 대한 포인터를 지정합니다. 목록의 마지막 NET_BUFFER 구조체인 경우 이 멤버는 NULL입니다.

DataLength
MDL 체인에 있는 네트워크 데이터의 길이(바이트)를 지정합니다.

DataOffset
MDL 체인의 메모리 시작부터 MDL 체인의 네트워크 데이터 시작까지 오프셋(바이트)을 지정합니다.

CurrentMdl
현재 드라이버에서 사용 중인 첫 번째 MDL에 대한 포인터를 지정합니다. 이 포인터는 현재 드라이버에서 사용하지 않는 MDL을 건너뛰어 성능을 향상시키는 최적화를 제공합니다.

CurrentMdlOffset
NET_BUFFER 구조체의 CurrentMdl 멤버에 의해 지정된 MDL에서 사용된 데이터 공간의 시작 부분에 대한 오프셋(바이트)을 지정합니다.

다음 그림에서는 CurrentMdl, CurrentMdlOffset, DataOffsetDataLength 멤버와 데이터 공간 간의 관계를 보여 줍니다.

CurrentMdl, CurrentMdlOffset, DataOffset 및 DataLength와 관련된 데이터 공간 할당을 보여 주는 다이어그램

NDIS는 MDL 체인의 데이터 공간을 관리하는 함수를 제공합니다. 드라이버가 데이터 공간을 사용하는 방법은 현재 드라이버와 함께 동적으로 변경됩니다. 현재 드라이버에서 현재 사용하지 않는 데이터 공간이 있는 경우가 있습니다. 사용되지 않는 데이터 공간은 현재 사용되지 않지만 유효한 데이터를 포함할 수 있습니다. 예를 들어 수신 경로에서 사용되지 않는 데이터 공간에 는 하위 수준 드라이버에서 사용한 헤더 정보가 포함될 수 있습니다.

드라이버는 후퇴 및 고급 작업을 수행하여 사용된 데이터 공간을 늘리고 줄입니다. 퇴각 및 진행 작업에 대한 자세한 내용은 퇴각 및 사전 작업을 참조하세요.

다음 용어 및 정의는 NET_BUFFER 데이터 공간의 요소를 설명합니다.

사용된 데이터 공간
사용된 데이터 공간에 는 현재 드라이버가 현재 사용 중인 데이터가 포함됩니다. 드라이버는 퇴각 작업을 통해 사용된 데이터 공간을 늘리고 사전 작업을 통해 사용된 데이터 공간을 줄입니다.

사용되지 않는 데이터 공간
현재 드라이버가 현재 시간에 이 데이터 공간을 사용하고 있지 않습니다.

총 데이터 크기
총 데이터 크기는 사용된 데이터 공간사용되지 않는 데이터 공간의 크기 합계입니다. 총 크기를 계산하려면 DataLengthDataOffset을 추가합니다.

퇴각
퇴각 작업은 사용된 데이터 공간의 크기를 증가합니다.

촉진
고급 작업을 수행하면 사용된 데이터 공간의 크기가 줄어듭니다.