MINIPORT_SEND_NET_BUFFER_LISTS 콜백 함수(ndis.h)

NDIS는 MiniportSendNetBufferLists 함수를 호출하여 NET_BUFFER_LIST 구조의 연결된 목록에 포함된 네트워크 데이터를 전송합니다.

참고 MINIPORT_SEND_NET_BUFFER_LISTS 형식을 사용하여 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.

구문

MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;

void MiniportSendNetBufferLists(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

매개 변수

[in] MiniportAdapterContext

miniport 드라이버가 MiniportInitializeEx 함수에 할당한 컨텍스트 영역에 대한 핸들입니다. 미니포트 드라이버는 이 컨텍스트 영역을 사용하여 어댑터에 대한 상태 정보를 유지 관리합니다.

[in] NetBufferList

NET_BUFFER_LIST 구조체의 연결된 목록에서 첫 번째 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 목록의 각 NET_BUFFER_LIST 구조체는 NET_BUFFER 구조의 목록을 설명합니다. 목록의 각 NET_BUFFER 구조체는 MDL 체인에 매핑됩니다. MDL에는 네트워크 데이터가 포함됩니다.

[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 구조를 나타냅니다. 이 플래그는 다른 바인딩에서 루프백 확인 또는 루프백에 영향을 주지 않습니다.

반환 값

없음

설명

MiniportSendNetBufferLists 는 미니포트 드라이버에 필요한 함수입니다. 지나치게 많은 드라이버가 NdisSendNetBufferLists 함수를 호출하면 NDIS는 바인딩된 미니포트 드라이버의 MiniportSendNetBufferLists 함수를 호출합니다.

NDIS가 NetBufferLists 매개 변수에 전달하는 네트워크 데이터를 전송할 때 미니포트 드라이버는 다음 지침을 사용해야 합니다.

  1. NET_BUFFER_LIST 구조체에서 NET_BUFFER 구조체의 순서는 유지되어야 합니다.
  2. 동일한 연결에서 전송되는 경우 NET_BUFFER_LIST 구조체의 순서를 유지해야 합니다.
  3. NET_BUFFER_LIST 구조체가 서로 다른 연결에서 전송되는 경우 다음 기능을 사용하는 경우 여러 전송 큐로 분할할 수 있습니다. 이 경우 각 연결에 대한 NET_BUFFER_LIST 구조의 순서가 유지되어야 합니다.
    • RSS(수신 측 크기 조정)( NET_BUFFER_LIST 구조의 RSS 해시 값을 RSS 간접 참조 테이블의 인덱스로 사용할 수 있습니다.)
    • VMQ(Virtual Machine Queue)(나가는 큐의 큐 식별자는 NetBufferListFilteringInfo OOB 정보에서 설정됩니다. 자세한 내용은 VMQ 전송 경로를 참조하세요.)
    • IEEE 802.1 DCB(데이터 센터 브리징)(TC(트래픽 클래스)를 키오프할 수 있습니다.)
    • IEEE 802.1p(DCB 없이 802.1p 태그를 키오프할 수 있습니다.)

미니포트 드라이버는 MiniportSendNetBufferLists 함수를 호출하여 NDIS가 만드는 모든 보내기 요청을 수락합니다. 미니포트 드라이버가 송신 요청을 즉시 완료할 수 없는 경우 드라이버는 요청을 완료할 때까지 큐에 요청을 보관해야 합니다. 송신 요청이 보류 중인 동안 미니포트 드라이버는 NET_BUFFER_LIST 구조체 및 NET_BUFFER_LIST 구조와 연결된 모든 프로토콜 할당 리소스의 소유권을 유지합니다.

미니포트 드라이버는 NdisMSendNetBufferListsComplete 함수를 호출하여 모든 NET_BUFFER_LIST 구조에 대한 보내기 요청을 완료해야 합니다. 시스템 성능을 향상시키기 위해 드라이버는 여러 송신 요청의 NET_BUFFER_LIST 구조를 포함하는 연결된 목록을 만들 수 있습니다. 그런 다음 드라이버는 NdisMSendNetBufferListsComplete에 대한 단일 호출에서 이러한 연결된 목록을 전달할 수 있습니다.NET_BUFFER_LIST 구조체 및 기타 연결된 리소스는 드라이버가 NdisMSendNetBufferListsComplete를 호출하는 즉시 미니포트 드라이버에서 액세스할 수 없는 것으로 처리되어야 합니다.

MiniportSendNetBufferLists 함수는 네트워크 데이터의 내부 큐에 대한 액세스를 동일한 큐에 액세스하는 드라이버의 다른 MiniportXxx 함수와 동기화해야 합니다. 미니포트 드라이버는 스핀 잠금을 사용하여 큐에 대한 액세스를 동기화할 수 있습니다.

프로토콜 드라이버는 바인딩된 미니포트 드라이버가 선택한 중간 유형에 따라 필요한 네트워크 데이터를 결정합니다. 그러나 프로토콜 드라이버는 선택한 매체의 최소 패킷 크기보다 짧은 패킷을 지정하는 네트워크 데이터를 제공할 수 있습니다. 이 경우 선택한 매체가 전송 패킷 크기에 최소 길이 요구 사항을 적용하는 경우 MiniportSendNetBufferLists 는 패킷을 0으로 채워야 합니다.

NDIS가 OID_GEN_MAC_OPTIONS OID를 쿼리할 때 미니포트 드라이버가 NDIS_MAC_OPTION_NO_LOOPBACK 플래그를 설정한 경우 미니포트 드라이버는 네트워크 데이터를 루프백하려고 시도해서는 안 됩니다. NDIS는 이러한 드라이버에 대한 소프트웨어 루프백 지원을 제공합니다.

NDIS는 IRQL<= DISPATCH_LEVEL MiniportSendNetBufferLists 를 호출합니다.

예제

MiniportSendNetBufferLists 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버, SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 Code Analysis 오류를 찾는 데 도움이 되며, Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 " MySendNetBufferLists"라는 MiniportSendNetBufferLists 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_SEND_NET_BUFFER_LISTS 형식을 사용합니다.

MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  MiniportAdapterContext,
    PNET_BUFFER_LIST  NetBufferList,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

MINIPORT_SEND_NET_BUFFER_LISTS 함수 형식은 Ndis.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 MINIPORT_SEND_NET_BUFFER_LISTS 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 NdisTimedDataHang, NdisTimedDataSend

참조

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisSendNetBufferLists

OID_GEN_MAC_OPTIONS