MINIPORT_CO_SEND_NET_BUFFER_LISTS 콜백 함수(ndis.h)
MiniportCoSendNetBufferLists 함수는 지정된 연결된 NET_BUFFER_LIST 구조 목록에 포함된 네트워크 데이터를 전송합니다.
통사론
MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;
void MiniportCoSendNetBufferLists(
[in] NDIS_HANDLE MiniportVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
)
{...}
매개 변수
[in] MiniportVcContext
미니포트 드라이버가 VC(가상별 연결) 상태를 유지하는 미니포트 드라이버 할당 컨텍스트 영역에 대한 핸들입니다. 미니포트 드라이버는 MiniportCoCreateVc 함수에서 NDIS에 이 핸들을 제공했습니다.
[in] NetBufferLists
연결된 NET_BUFFER_LIST 구조 목록의 첫 번째 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 목록의 각 NET_BUFFER_LIST 구조체는 NET_BUFFER 구조의 목록을 설명합니다. 목록의 각 NET_BUFFER 구조체는 MDL(메모리 설명자 목록) 체인에 매핑됩니다. MDL에는 MiniportCoSendNetBufferLists가 전송할 네트워크 데이터가 포함됩니다.
[in] SendFlags
보내기 작업에 대한 특성을 정의하는 플래그입니다. 플래그를 비트 OR 연산과 결합할 수 있습니다. 모든 플래그를 지우려면 이 매개 변수를 0으로 설정합니다. MiniportCoSendNetBufferLists 다음 플래그를 지원합니다.
NDIS_SEND_FLAGS_DISPATCH_LEVEL
현재 IRQL이 DISPATCH_LEVEL 경우 호출자는 필요에 따라 이 플래그를 설정할 수 있습니다. 이 플래그에 대한 자세한 내용은 디스패치 IRQL 추적참조하세요.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
NDIS는 루프백을 확인해야 합니다. 기본적으로 NDIS는 전송 요청을 제출한 드라이버에 데이터를 루프백하지 않습니다. 오버리싱 드라이버는 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 플래그를 설정하여 이 동작을 재정의할 수 있습니다. 이 플래그가 설정되면 NDIS는 바인딩에 대한 수신 조건과 일치하는 데이터를 포함하는 모든 NET_BUFFER 구조를 식별합니다. NDIS는 기준과 일치하는 NET_BUFFER 구조를 오버리싱 드라이버에 나타냅니다. 이 플래그는 다른 바인딩에서 루프백 확인 또는 루프백에 영향을 주지 않습니다.
반환 값
없음
발언
MiniportCoSendNetBufferLists 함수는 CoNDIS 미니포트 드라이버에 필요합니다. 지나치게 많은 드라이버가 다음을 호출하는 경우 NdisCoSendNetBufferLists 함수를 NDIS는 바인딩된 미니포트 드라이버의 MiniportCoSendNetBufferLists 함수를 호출합니다.
NDIS가 NetBufferLists 전달하는 NET_BUFFER_LIST 구조체의 연결된 목록 순서는 미니포트 드라이버가 네트워크 데이터를 전송해야 하는 순서를 나타냅니다. 또한 미니포트 드라이버는 미니포트 드라이버가 구조를 받은 순서대로 여러 MiniportCoSendNetBufferLists 호출에서 NET_BUFFER_LIST 구조를 보내야 합니다.
CoNDIS 미니포트 드라이버는 MiniportCoSendNetBufferLists 함수를 호출하여 NDIS가 만드는 모든 송신 요청을 수락해야 합니다. 미니포트 드라이버가 송신 요청을 즉시 완료할 수 없는 경우 드라이버는 요청을 완료할 때까지 큐에 요청을 보관해야 합니다. 송신 요청이 보류 중인 동안 미니포트 드라이버는 NET_BUFFER_LIST 구조체 및 NET_BUFFER_LIST 구조와 연결된 모든 리소스의 소유권을 유지합니다.
미니포트 드라이버는 다음을 호출해야 합니다. NdisMCoSendNetBufferListsComplete 함수를 사용하여 모든 CoNDIS 보내기 요청을 완료합니다. 컴퓨터 성능을 향상시키기 위해 드라이버는 여러 송신 요청의 NET_BUFFER_LIST 구조를 포함하는 연결된 목록을 만들 수 있습니다. 그런 다음 드라이버는 NdisMCoSendNetBufferListsComplete대한 단일 호출에서 이러한 연결된 목록을 전달할 수 있습니다.
또한 미니포트 드라이버는 드라이버가 NdisMCoSendNetBufferListsComplete호출하는 즉시 NET_BUFFER_LIST 구조 및 기타 관련 리소스에 액세스할 수 없다고 가정해야 합니다.
MiniportCoSendNetBufferLists 함수는 동일한 큐에 액세스하는 드라이버의 다른 MiniportXxx 함수와 네트워크 데이터의 내부 큐에 대한 액세스를 동기화해야 합니다. 미니포트 드라이버는 스핀 잠금을 사용하여 큐에 대한 액세스를 동기화할 수 있습니다.
프로토콜 드라이버는 바인딩된 미니포트 드라이버가 선택한 중간 유형에 따라 필요한 네트워크 데이터를 결정합니다. 그러나 프로토콜 드라이버는 선택한 매체의 최소 패킷 크기보다 짧은 패킷을 지정하는 네트워크 데이터를 제공할 수 있습니다. 이 경우 MiniportCoSendNetBufferLists 선택한 매체가 전송 패킷 크기에 최소 길이 요구 사항을 적용하는 경우 패킷을 0으로 채워야 합니다.
NDIS는 IRQL<= DISPATCH_LEVEL MiniportCoSendNetBufferLists 호출합니다.
예제
MiniportCoSendNetBufferLists 함수를 정의하려면 먼저 정의하는 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버 , SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 코드 분석을데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.예를 들어 "MyCoSendNetBufferLists"라는 MiniportCoSendNetBufferLists 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_CO_SEND_NET_BUFFER_LISTS 형식을 사용합니다.
MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;
그런 다음 다음과 같이 함수를 구현합니다.
_Use_decl_annotations_
VOID
MyCoSendNetBufferLists(
NDIS_HANDLE MiniportVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendFlags
)
{...}
MINIPORT_CO_SEND_NET_BUFFER_LISTS 함수 형식은 Ndis.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 MINIPORT_CO_SEND_NET_BUFFER_LISTS 함수 형식에 적용되는 주석이 사용되는지 확인합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버함수 역할 형식을 사용하여 함수 선언을 참조하세요.
Use_decl_annotations대한 자세한 내용은 함수 동작 주석참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
대상 플랫폼 | Windows |
헤더 | ndis.h(Ndis.h 포함) |
IRQL | <= DISPATCH_LEVEL |