NdisMIndicateReceiveNetBufferLists 함수(ndis.h)

미니포트 드라이버는 NdisMIndicateReceiveNetBufferLists 함수를 호출하여 네트워크에서 데이터를 수신했음을 나타냅니다.

구문

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

매개 변수

[in] MiniportAdapterHandle

NDIS가 에 전달한 미니포트 핸들 MiniportInitializeEx 함수입니다.

NetBufferList

미니포트 드라이버가 할당한 NET_BUFFER_LIST 구조체의 연결된 목록입니다.

[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

미니포트 드라이버가 NdisMIndicateReceiveNetBufferLists를 호출한 직후 NET_BUFFER_LIST 구조체 및 연결된 NET_BUFFER 구조체의 소유권을 회수하도록 지정합니다.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

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

미니포트 드라이버

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE 선택적으로 NBL 체인의 모든 NBL이 동일한 EtherType을 갖는 미니포트 드라이버에 의해 설정됩니다. 이 플래그를 설정하면 미니포트 드라이버가 NDIS 및 상위 계층 프로토콜에 EtherType에 대한 각 패킷을 검사할 필요가 없음을 알리므로 성능이 향상됩니다. 미니포트 드라이버는 이 플래그를 설정할 필요가 없습니다.

LWF(경량 필터)

새 수신을 나타낼 때 LWF(경량 필터)는 NBL 체인의 모든 NBL이 동일한 EtherType을 갖는 것이 확실한 경우 필요에 따라 NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE 설정할 수 있습니다. 그러나 미니포트 드라이버와 마찬가지로 LWF는 이 경우 이 플래그를 설정할 필요가 없으며 항상 플래그를 지우도록 선택할 수 있습니다.

하위 계층에서 수신을 전달할 때 LWF가 NLL의 EtherType을 변경하는 경우 NCL에 더 이상 동일한 EtherType이 없으면 LWF에서 플래그를 지워 야 합니다 .

LWF가 NLL의 EtherType을 변경하는 경우 LWF는 하위 계층에서 수신을 전달할 때 NBL 체인의 모든 NBL이 동일한 EtherType을 갖는 것이 확실한 경우 필요에 따라 이 플래그를 설정할 수 있습니다. 이 경우 LWF는 이 플래그를 설정할 필요가 없으며 항상 지우도록 선택할 수 있습니다.

소비가 하위 계층에서 수신될 때 이 플래그가 설정된 경우 LWF는 체인의 각 NBL에 동일한 EtherType이 있다고 가정할 수 있습니다. LWF는 이 플래그를 읽을 필요가 없으며 모든 NBL에서 항상 EtherType을 읽도록 선택할 수 있습니다.

여러 NBL 체인을 결합할 때 LWF는 새 NBL 체인에 동종 EtherType이 있는지 확실하지 않은 한 이 플래그를 지워 야 합니다 .

프로토콜 드라이버

소비가 하위 계층에서 수신되는 경우 NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE 설정된 경우 프로토콜은 체인의 각 NBL이 동일한 EtherType을 가지고 있다고 가정할 수 있습니다. 프로토콜은 이 플래그를 읽을 필요가 없으며 모든 NBL에서 항상 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

예약되어 있습니다.

반환 값

없음

설명

미니포트 드라이버는 일반적으로 MiniportInterruptDPC 함수에서 NdisMIndicateReceiveNetBufferLists 함수를 호출합니다. 미니포트 드라이버가 NdisMIndicateReceiveNetBufferLists를 호출하는 경우 NetBufferLists 매개 변수의 NET_BUFFER_LIST 구조 목록을 지정합니다. NDIS는 NET_BUFFER_LIST 구조를 에 전달합니다. ProtocolReceiveNetBufferLists 바인딩된 프로토콜 드라이버의 함수입니다.

미니포트 드라이버는 각 NET_BUFFER_LIST 구조체의 SourceHandle 멤버를 MiniportAdapterHandle 매개 변수와 동일한 값으로 설정해야 합니다.

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

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

ReceiveFlags 매개 변수에서 NDIS_RECEIVE_FLAG_RESOURCES 플래그를 설정하면 프로토콜 드라이버가 네트워크 데이터를 복사하고 NET_BUFFER_LIST 구조를 미니포트 드라이버로 해제합니다. 드라이버 작성자는 불필요한 복사를 방지하기 위해 미리 할당된 NET_BUFFER_LIST 구조로 미니포트 드라이버를 디자인해야 합니다.

NdisMIndicateReceiveNetBufferLists의 호출자는 NET_BUFFER_LIST 구조체, 연결된 NET_BUFFER 구조체 및 연결된 MDL을 제대로 초기화해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_SendRcv_Function(ndis)

추가 정보

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists