NdisSendNetBufferLists 함수(ndis.h)

프로토콜 드라이버는 NdisSendNetBufferLists 함수를 호출하여 NET_BUFFER_LIST 구조 목록에 포함된 네트워크 데이터를 보냅니다.

구문

void NdisSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisBindingHandle,
  [in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

매개 변수

[in] NdisBindingHandle

대상 어댑터를 식별하는 핸들입니다. NdisOpenAdapterEx에 대한 이전 호출은 이 핸들을 반환했습니다.

[in] NetBufferLists

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

[in] PortNumber

미니포트 어댑터 포트를 식별하는 포트 번호입니다. 미니포트 어댑터의 기본 포트 번호는 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 구조를 오버리싱 드라이버에 나타냅니다. 이 플래그는 다른 바인딩에서 루프백을 확인하거나 다시 반복하는 데 영향을 주지 않습니다.

반환 값

없음

설명

프로토콜 드라이버가 NdisSendNetBufferLists를 호출한 후 NDIS는 기본 드라이버에 NET_BUFFER_LIST 구조를 제출합니다. MiniportSendNetBufferLists 함수입니다 .

프로토콜 드라이버는 다음 함수 중 하나를 호출하여 풀에서 각 NET_BUFFER_LIST 구조를 할당해야 합니다.

프로토콜 드라이버는 driverEntry 루틴과 같은 NET_BUFFER_LIST 구조를 미리 할당할 수 있습니다. 또는 드라이버에서 NdisSendNetBufferLists 를 호출하기 직전에 구조를 할당한 다음 보내기 작업이 완료되면 해제할 수 있습니다. NDIS가 에 NET_BUFFER_LIST 구조를 반환하는 경우 ProtocolSendNetBufferListsComplete 미니포트 드라이버는 다시 사용할 NET_BUFFER_LIST 구조 및 연결된 리소스를 준비할 수 있습니다. NET_BUFFER_LIST 구조를 다시 사용하면 구조를 풀로 반환한 다음 다른 보내기 작업을 위해 재할당하는 것보다 더 나은 성능을 얻을 수 있습니다.

프로토콜 드라이버는 각 NET_BUFFER_LIST 구조체의 SourceHandle 멤버를 NdisBindingHandle 매개 변수에 전달하는 것과 동일한 값으로 설정해야 합니다. 바인딩 핸들은 기본 미니포트 드라이버가 호출된 후 NDIS가 프로토콜 드라이버에 NET_BUFFER_LIST 구조를 반환하는 데 필요한 정보를 제공합니다. NdisMSendNetBufferListsComplete.

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

프로토콜 드라이버가 NET_BUFFER_LIST 구조 목록을 사용하여 NdisSendNetBufferLists 를 호출하기 전에 프로토콜 드라이버는 네트워크 데이터를 유선으로 전송해야 하는 순서대로 NET_BUFFER_LIST 구조가 설정되었는지 확인해야 합니다.

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

NDIS가 ProtocolSendNetBufferListsComplete를 호출할 때까지 프로토콜 드라이버 시작 전송의 현재 상태 프로토콜 드라이버에서 사용할 수 없습니다. 프로토콜 드라이버는 NdisSendNetBufferLists를 호출할 때 송신 요청에 할당된 모든 리소스의 소유권을 일시적으로 해제합니다. 프로토콜 드라이버는 NdisSendNetBufferLists를 호출한 후 NET_BUFFER_LIST 구조 또는 연결된 데이터를 검사하려고 시도해서는 안 됩니다.

요구 사항

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

추가 정보

DriverEntry

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAllocateCloneNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisOpenAdapterEx

ProtocolSendNetBufferListsComplete