MINIPORT_CO_SEND_NET_BUFFER_LISTS 콜백 함수(ndis.h)

MiniportCoSendNetBufferLists 함수는 NET_BUFFER_LIST 구조체의 지정된 연결된 목록에 포함된 네트워크 데이터를 전송합니다.

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

구문

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

반환 값

없음

설명

CoNDIS 미니포트 드라이버에는 MiniportCoSendNetBufferLists 함수가 필요합니다. 지나치게 많은 드라이버가 를 호출하는 경우 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

추가 정보

MiniportCoCreateVc

NET_BUFFER

NET_BUFFER_LIST

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete