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 를 호출하기 직전에 구조를 할당한 다음 보내기 작업이 완료되면 해제할 수 있습니다.

필터 드라이버는 NdisFilterHandle 매개 변수에 전달하는 것과 동일한 값으로 시작되는 각 NET_BUFFER_LIST 구조체의 SourceHandle 멤버를 설정해야 합니다. 필터 핸들은 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