MINIPORT_SEND_NET_BUFFER_LISTS 콜백 함수(ndis.h)
NDIS는 MiniportSendNetBufferLists 함수를 호출하여 NET_BUFFER_LIST 구조의 연결된 목록에 포함된 네트워크 데이터를 전송합니다.
구문
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 매개 변수에 전달하는 네트워크 데이터를 전송할 때 미니포트 드라이버는 다음 지침을 사용해야 합니다.
- 각 NET_BUFFER_LIST 구조체에서 NET_BUFFER 구조체의 순서는 유지되어야 합니다.
- 동일한 연결에서 전송되는 경우 NET_BUFFER_LIST 구조체의 순서를 유지해야 합니다.
-
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 |
참조
피드백
다음에 대한 사용자 의견 제출 및 보기