NdisFIndicateReceiveNetBufferLists 함수(ndis.h)

필터 드라이버는 NdisFIndicateReceiveNetBufferLists 를 호출하여 네트워크 데이터를 수신했음을 나타냅니다. 자세한 내용은 필터 드라이버에서 데이터 수신을 참조하세요.

구문

void NdisFIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      NdisFilterHandle,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

매개 변수

[in] NdisFilterHandle

이 필터 모듈을 식별하는 NDIS 핸들입니다. NDIS는 FilterAttach 함수 호출에서 필터 드라이버에 핸들을 전달했습니다.

[in] NetBufferLists

NET_BUFFER_LIST 구조체의 연결된 목록입니다. 각 NET_BUFFER_LIST 구조체에는 하나의 NET_BUFFER 구조가 포함됩니다.

[in] PortNumber

미니포트 어댑터 포트를 식별하는 포트 번호입니다. 미니포트 어댑터 포트 번호는 NdisMAllocatePort 함수를 호출하여 할당됩니다. 0 값은 미니포트 어댑터의 기본 포트를 식별합니다.

[in] NumberOfNetBufferLists

NetBufferLists 의 연결된 구조 목록에 있는 NET_BUFFER_LIST 구조체의 수입니다.

[in] ReceiveFlags

수신 표시에 대한 특성을 정의하는 플래그입니다. 플래그를 OR 작업과 결합할 수 있습니다. 모든 플래그를 지우려면 이 멤버를 0으로 설정합니다. 이 함수는 다음 플래그를 지원합니다.

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

현재 IRQL이 DISPATCH_LEVEL 지정합니다. 이 플래그에 대한 자세한 내용은 디스패치 IRQL 추적을 참조하세요.

NDIS_RECEIVE_FLAGS_RESOURCES

NdisFIndicateReceiveNetBufferLists에 대한 호출이 반환된 직후 필터 드라이버가 NET_BUFFER_LIST 구조체 및 연결된 NET_BUFFER 구조체의 소유권을 회수하도록 지정합니다.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

NetBufferLists 목록의 모든 NET_BUFFER_LIST 구조체가 동일한 프로토콜 형식(EtherType)을 가지게 지정합니다.

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

NetBufferLists 목록의 모든 NET_BUFFER_LIST 구조체가 동일한 VLAN에 속하도록 지정합니다.

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

NetBufferLists 목록의 모든 NET_BUFFER_LIST 구조에 미니포트 어댑터에 할당된 패킷 필터 및 멀티캐스트 주소 목록과 일치하는 데이터만 포함하도록 지정합니다.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

NetBufferLists 목록의 모든 NET_BUFFER_LIST 구조체가 동일한 VM 큐에 속하도록 지정합니다. 미니포트 드라이버는 NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION 플래그가 의 Flags 멤버에 설정된 경우 큐의 모든 수신 표시에 대해 이 플래그를 설정해야 합니다. 해당 큐가 할당된 NDIS_RECEIVE_QUEUE_PARAMETERS 구조입니다.

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

NetBufferLists 목록의 모든 NET_BUFFER_LIST 구조에 유효한 공유 메모리 정보가 포함되도록 지정합니다. 수신된 NET_BUFFER_LIST 이 플래그가 설정되면 NDIS는 공유 메모리 정보를 유효한 것으로 처리합니다. 이 플래그를 설정하지 않으면 NDIS 및 드라이버는 공유 메모리 정보를 무시합니다. 예를 들어 패킷 데이터를 수정하는 중간 드라이버는 이 플래그를 사용하여 데이터를 복사해야 하는지 여부를 결정할 수 있습니다. 미니포트 드라이버는 플래그를 사용하여 큐가 삭제될 때 VM 큐와 연결된 메모리를 해제하는 방법을 결정할 수 있습니다.

NDIS_RECEIVE_FLAGS_MORE_NBLS

예약되어 있습니다.

NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE

이 플래그를 설정하면 NET_BUFFER_LIST 구조체의 연결된 목록에 있는 모든 패킷이 동일한 Hyper-V 확장 가능한 스위치 원본 포트에서 시작됩니다.

자세한 내용은 Hyper-V 확장 가능 스위치 보내기 및 받기 플래그를 참조하세요.

참고연결된 NET_BUFFER_LIST 구조 목록의 각 패킷이 동일한 원본 포트를 사용하는 경우 수신 요청이 완료될 때 확장은 FilterReturnNetBufferListsReturnFlags 매개 변수에 NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE 플래그를 설정해야 합니다. 확장은 NdisFReturnNetBufferLists를 호출하여 시작되거나 복제되지 않은 패킷을 반환하는 경우 ReturnFlags 매개 변수에서 이 플래그를 설정해야 합니다.
 

NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP

이 플래그를 설정하면 NET_BUFFER_LIST 구조체의 연결된 목록에 있는 모든 패킷을 동일한 확장 가능한 스위치 대상 포트로 전달해야 합니다.

자세한 내용은 Hyper-V 확장 가능 스위치 보내기 및 받기 플래그를 참조하세요.

반환 값

없음

설명

필터 드라이버가 NdisFIndicateReceiveNetBufferLists 함수를 호출하면 NetBufferLists 매개 변수의 NET_BUFFER_LIST 구조 목록을 지정합니다. NDIS는 NET_BUFFER_LIST 구조를 지나치게 많은 드라이버에 전달합니다.

필터 드라이버는 NdisFIndicateReceiveNetBufferLists 를 호출하여 수신 표시를 시작합니다.

필터 드라이버는 기본 드라이버에서 시작된 수신 표시를 필터링할 수도 있습니다. NDIS는 다음을 호출합니다. FilterReceiveNetBufferLists 함수는 이러한 수신 표시를 필터링합니다.

필터 드라이버는 NdisFilterHandle 매개 변수와 동일한 값으로 시작되는 각 NET_BUFFER_LIST 구조체의 SourceHandle 멤버를 설정해야 합니다. 필터 드라이버는 원본이 발생하지 않은 NET_BUFFER_LIST 구조체에서 SourceHandle 멤버를 수정해서는 안 됩니다.

필터 드라이버는 NET_BUFFER_LIST 구조체, 연결된 NET_BUFFER 구조체 및 연결된 MDL을 올바르게 초기화해야 합니다.

필터 드라이버가 NdisFIndicateReceiveNetBufferLists 함수를 호출하고 ReceiveFlags 매개 변수에서 NDIS_RECEIVE_FLAG_RESOURCES 플래그를 지우면 NDIS는 표시된 NET_BUFFER_LIST 구조를 필터 드라이버의 에 반환합니다. FilterReturnNetBufferLists 함수입니다 . 이 경우 필터 드라이버는 NDIS가 NET_BUFFER_LIST 구조를 FilterReturnNetBufferLists로 반환할 때까지 NET_BUFFER_LIST 구조를 회수해서는 안 됩니다.

필터 드라이버가 NdisFIndicateReceiveNetBufferLists를 호출하고 ReceiveFlags 매개 변수에서 NDIS_RECEIVE_FLAG_RESOURCES 플래그를 설정하는 경우 필터 드라이버가 NET_BUFFER_LIST 구조체의 소유권을 즉시 되찾아야 했음을 나타냅니다. 이 경우 NDIS는 필터 드라이버의 FilterReturnNetBufferLists 함수를 호출하여 NET_BUFFER_LIST 구조를 반환하지 않습니다. 대신 NDIS는 NdisFIndicateReceiveNetBufferLists에서 반환될 때 필터 드라이버에 NET_BUFFER_LIST 구조를 반환합니다. 필터 드라이버는 NdisFIndicateReceiveNetBufferLists가 반환된 직후에 NET_BUFFER_LIST 구조를 회수해야 합니다. NET_BUFFER_LIST 구조를 회수하기 위해 필터 드라이버는 자체 FilterReturnNetBufferLists 함수를 호출할 수 있습니다.

ReceiveFlags 매개 변수에서 NDIS_RECEIVE_FLAG_RESOURCES 플래그를 설정하면 오버레이싱 드라이버가 네트워크 데이터를 복사하고 필터 드라이버에 NET_BUFFER_LIST 구조를 해제합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 데스크톱
머리글 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_Filter_Driver_Function(ndis)

추가 정보

FilterAttach

FilterReceiveNetBufferLists

FilterReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

필터 드라이버에서 데이터 수신