NET_RING 구조체(ring.h)
하나 이상의 NET_PACKET 또는 NET_FRAGMENT 구조체로 구성된 버퍼를 지정합니다.
통사론
typedef struct _NET_RING {
UINT16 OSReserved1;
UINT16 ElementStride;
UINT32 NumberOfElements;
UINT32 ElementIndexMask;
UINT32 EndIndex;
union {
UINT32 OSReserved0;
void *OSReserved2[4];
} DUMMYUNIONNAME;
UINT32 BeginIndex;
UINT32 NextIndex;
void *Scratch;
unsigned char Buffer[ANYSIZE_ARRAY];
} NET_RING;
회원
OSReserved1
예약. 클라이언트 드라이버는 이 값을 읽거나 써서는 안됩니다.
ElementStride
한 요소의 시작부터 다음 요소의 시작 부분까지의 읽기 전용 바이트 오프셋입니다.
((BYTE*)p + ElementStride)
사용하여 다음 요소의 주소를 가져옵니다.
NumberOfElements
링 버퍼의 패킷 수를 나타내는 읽기 전용 값으로, 항상 2의 힘이며 1보다 큽니다.
ElementIndexMask
[0, NumberOfElements) 인덱스를 효율적으로 고정하는 데 사용할 수 있는 읽기 전용 UINT32 마스크입니다. 클라이언트는 이 값을 사용하여 링 버퍼를 둘러싸는 인덱스를 계산할 수 있습니다. ID (x % NumberofElements) == (x & ElementIndexMask)
사용합니다.
EndIndex
포괄 범위 [0, NumberOfElements - 1]에서 클라이언트 드라이버가 소유한 마지막 요소의 읽기 전용 인덱스를 지정합니다.
DUMMYUNIONNAME
OSReserved0 및 OSReserved2 멤버를 포함하는 공용 구조체입니다.
DUMMYUNIONNAME.OSReserved0
예약. 클라이언트 드라이버는 이 값을 읽거나 써서는 안됩니다.
DUMMYUNIONNAME.OSReserved2[4]
예약. 클라이언트 드라이버는 이 값을 읽거나 써서는 안됩니다.
BeginIndex
포괄 범위 [0, NumberOfElements - 1]에서 클라이언트 드라이버가 소유한 첫 번째 요소의 인덱스를 지정합니다.
NextIndex
처리가 필요한 다음 요소의 인덱스를 지정합니다. 클라이언트 드라이버에서 선택적으로 사용합니다.
Scratch
클라이언트 드라이버가 어떤 용도로든 사용할 수 있는 버퍼에 대한 포인터입니다.
Buffer[ANYSIZE_ARRAY]
Net 링의 요소를 포함하는 바이트 배열입니다. 일반적으로 클라이언트 드라이버는 NetRingGetPacketAtIndex 또는 NetRingGetFragmentAtIndex 호출하여 링 버퍼의 요소에 액세스합니다.
발언
NET_RING 구조는 단일 스레드에서 효율적으로 액세스하기 위해 최적화된 제네릭 링 버퍼입니다. NET_RINGNET_PACKET 또는 NET_FRAGMENT 요소를 포함합니다.
패킷 및 조각 링 버퍼에 대한 자세한 내용은 패킷 설명자 및 확장참조하세요.
net 링 사용에 대한 자세한 내용은 net 링소개를 참조하세요.
요구 사항
요구 | 값 |
---|---|
최소 KMDF 버전 | 1.29 |
최소 UMDF 버전 | 2.33 |
헤더 | ring.h |