다음을 통해 공유


수신 버퍼의 공유 메모리

이 섹션에서는 VMQ 수신 버퍼의 공유 메모리 레이아웃에 대해 설명합니다. 수신 표시에서 버퍼를 사용하는 방법에 대한 자세한 내용은 VMQ 수신 경로를 참조하세요.

오버리싱 프로토콜 드라이버가 NDIS_RECEIVE_QUEUE_PARAMETERS 구조의 Flags 멤버에서 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 플래그를 설정하는 경우 네트워크 어댑터는 수신된 패킷을 요청된 lookahead 크기보다 크거나 같은 오프셋으로 분할하고 DMA를 사용하여 lookahead 데이터와 사후 조회 데이터를 별도의 공유 메모리 세그먼트로 전송해야 합니다.

미니포트 드라이버는 공유 메모리가 할당될 때 lookahead 형식(NdisSharedMemoryUsageReceiveLookahead) 또는 기타 공유 메모리 형식에 대한 설정을 지정합니다. 예를 들어 미니포트 드라이버는 NdisAllocateSharedMemory 함수를 호출하고 NDIS_SHARED_MEMORY_PARAMETERS 구조의 Usage 멤버를 NdisSharedMemoryUsageReceiveLookahead로 설정합니다. 미니포트 드라이버는 큐 할당이 완료되면 큐에 공유 메모리를 할당해야 합니다. 큐에 대한 공유 메모리 리소스 할당 및 해제에 대한 자세한 내용은 공유 메모리 리소스 할당을 참조하세요.

다음 그림에서는 들어오는 데이터가 두 개의 공유 메모리 버퍼로 분할되는 경우 네트워크 데이터의 관계를 보여 줍니다.

들어오는 데이터가 두 개의 공유 메모리 버퍼로 분할된 네트워크 데이터 관계를 보여 주는 다이어그램

NET_BUFFER_SHARED_MEMORY 구조는 공유 메모리 정보를 지정합니다. NET_BUFFER 구조와 연결된 이러한 공유 메모리 버퍼의 연결된 목록이 있을 수 있습니다.

NET_BUFFER_SHARED_MEM_NEXT_SEGMENT, NET_BUFFER_SHARED_MEM_FLAGS, NET_BUFFER_SHARED_MEM_HANDLE, NET_BUFFER_SHARED_MEM_OFFSET 및 NET_BUFFER_SHARED_MEM_LENGTH 매크로를 사용하여 NET_BUFFER 구조의 NET_BUFFER_SHARED_MEMORY 액세스합니다. NET_BUFFER 구조체의 SharedMemoryInfo 멤버에는 연결된 목록의 첫 번째 NET_BUFFER_SHARED_MEMORY 구조체가 포함됩니다.

참고 NDIS 6.30부터 패킷 데이터를 별도의 lookahead 버퍼로 분할하는 것은 더 이상 지원되지 않습니다. Windows Server 2012부터 오버리싱 프로토콜 드라이버는 NDIS_RECEIVE_QUEUE_PARAMETERS 구조의 Flags 멤버에서 NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 플래그를 설정하지 않습니다.