NdisFSendNetBufferLists 함수(ndis.h)

필터 드라이버는 NdisFSendNetBufferLists 함수를 호출하여 네트워크 데이터 버퍼 목록을 보냅니다.

구문

void NdisFSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisFilterHandle,
       __drv_aliasesMem PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

매개 변수

[in] NdisFilterHandle

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

NetBufferList

NET_BUFFER_LIST 구조체의 연결된 목록에 대한 포인터입니다. 각 NET_BUFFER_LIST 구조체는 NET_BUFFER 구조의 목록을 설명합니다.

[in] PortNumber

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

[in] SendFlags

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

NDIS_SEND_FLAGS_DISPATCH_LEVEL

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

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS에서 루프백을 확인해야 임을 지정합니다. 기본적으로 NDIS는 전송 요청을 제출한 드라이버에 데이터를 루프백하지 않습니다. 오버리싱 드라이버는 이 플래그를 설정하여 이 동작을 재정의할 수 있습니다. 이 플래그가 설정되면 NDIS는 바인딩에 대한 수신 조건과 일치하는 데이터를 포함하는 모든 NET_BUFFER 구조를 식별합니다. NDIS는 오버리싱 드라이버에 대한 조건과 일치하는 NET_BUFFER 구조를 나타냅니다. 이 플래그는 다른 바인딩에서 루프백 확인 또는 루프백에 영향을 주지 않습니다.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

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

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

참고 연결된 NET_BUFFER_LIST 구조 목록의 각 패킷이 동일한 원본 포트를 사용하는 경우 확장은 보내기 요청을 완료할 때 NdisFSendNetBufferListsCompleteSendCompleteFlags 매개 변수에 NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE 플래그를 설정해야 합니다.
참고 이 플래그는 NDIS 6.30 이상에서 사용할 수 있습니다.

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

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

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

참고 이 플래그는 NDIS 6.30 이상에서 사용할 수 있습니다.

반환 값

없음

설명

필터 드라이버가 NdisFSendNetBufferLists 함수를 호출하면 NDIS는 NET_BUFFER_LIST 구조를 기본 드라이버에 제출합니다.

필터 드라이버는 전송 요청을 시작하거나 지나치게 많은 드라이버에서 수신하는 요청을 필터링할 수 있습니다. 필터 드라이버가 송신 요청을 시작하는 경우 드라이버는 버퍼 풀을 할당해야 합니다. 필터 드라이버는 풀에서 각 NET_BUFFER_LIST 구조를 할당합니다.

필터 드라이버는 NET_BUFFER_LIST 구조를 미리 할당하거나 NdisFSendNetBufferLists 를 호출하기 직전에 구조를 할당한 다음 보내기 작업이 완료되면 해제할 수 있습니다.

필터 드라이버는 각 NET_BUFFER_LIST 구조체의 SourceHandle 멤버를 NdisFilterHandle 매개 변수에 전달하는 것과 동일한 값으로 설정해야 합니다. 필터 핸들은 NDIS가 필터 드라이버에 NET_BUFFER_LIST 구조를 반환하는 데 필요한 정보를 제공합니다. 필터 드라이버는 원본이 발생하지 않은 NET_BUFFER_LIST 구조체에서 SourceHandle 멤버를 수정해서는 안 됩니다.

NdisFSendNetBufferLists를 호출하기 전에 필터 드라이버는 NET_BUFFER_LIST_INFO 매크로와 함께 보내기 요청과 함께 정보를 설정할 수 있습니다. 기본 드라이버는 NET_BUFFER_LIST_INFO 매크로를 사용하여 이 정보를 검색할 수 있습니다.

NDIS는 필터 드라이버의 FilterSendNetBufferLists 함수를 호출하여 지나치게 많은 드라이버의 송신 요청을 전달합니다. 필터 드라이버는 FilterSendNetBufferLists에서 받은 NET_BUFFER_LIST T 구조를 NdisFSendNetBufferLists에 전달하여 이러한 요청을 전달할 수 있습니다.

필터 드라이버가 NdisFSendNetBufferLists 함수를 호출하는 즉시 NET_BUFFER_LIST 구조체 및 연결된 모든 리소스의 소유권을 포기합니다. NDIS는 FilterSendNetBufferListsComplete 함수를 호출하여 구조체 및 데이터를 필터 드라이버에 반환합니다. NDIS는 여러 송신 요청의 구조 및 데이터를 FilterSendNetBufferListsComplete에 전달하기 전에 NET_BUFFER_LIST 구조체의 연결된 단일 목록으로 수집할 수 있습니다.

NDIS가 FilterSendNetBufferListsComplete를 호출할 때까지는 필터 드라이버에서 송신 요청의 현재 상태를 사용할 수 없습니다. 필터 드라이버는 NdisFSendNetBufferLists를 호출할 때 송신 요청과 연결된 모든 리소스의 소유권을 일시적으로 해제합니다. 필터 드라이버는 NdisFSendNetBufferLists를 호출한 후 NET_BUFFER_LIST 구조 또는 관련 데이터를 검사하지 않아야 합니다.

참고 필터 드라이버는 시작된 전송 요청을 추적하고 요청이 완료되면 NdisFSendNetBufferListsComplete 함수를 호출하지 않는지 확인해야 합니다.

요구 사항

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

참고 항목

FilterAttach

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisMAllocatePort