다음 그림에서는 프로토콜 드라이버, NDIS 및 미니포트 드라이버가 포함된 기본 CoNDIS 전송 작업을 보여 줍니다.
앞의 그림과 같이 프로토콜 드라이버는 NdisCoSendNetBufferLists 함수를 호출하여 VC(가상 연결)에 NET_BUFFER_LIST 구조를 보냅니다. 그런 다음 NDIS는 미니포트 드라이버의 MiniportCoSendNetBufferLists 함수를 호출하여 NET_BUFFER_LIST 구조를 기본 미니포트 드라이버로 전달합니다.
모든 NET_BUFFER 기반 보내기 작업은 비동기입니다. 따라서 미니포트 드라이버는 항상 NdisMCoSendNetBufferListsComplete 함수를 호출하고 데이터 전송이 완료되면 적절한 상태 코드를 제공합니다. 미니포트 드라이버는 다른 NET_BUFFER_LIST 구조와 독립적으로 각 NET_BUFFER_LIST 구조에 대한 송신 작업을 완료할 수 있습니다. NDIS는 미니포트 드라이버가 NdisMCoSendNetBufferListsComplete호출할 때마다 프로토콜 드라이버의 ProtocolCoSendNetBufferListsComplete 함수를 호출합니다.
프로토콜 드라이버는 NDIS가 프로토콜 드라이버의 ProtocolCoSendNetBufferListsComplete 함수를 호출하는 즉시 NET_BUFFER_LIST 구조 및 모든 관련 구조 및 데이터의 소유권을 회수할 수 있습니다.
미니포트 드라이버 또는 NDIS는 순서에 관계없이 NET_BUFFER_LIST 구조를 반환할 수 있습니다. 그러나 프로토콜 드라이버는 각 NET_BUFFER_LIST 구조에 연결된 NET_BUFFER 구조의 목록이 수정되지 않은 것을 보장합니다.
프로토콜 드라이버는 NET_BUFFER_LIST 구조의 SourceHandle 멤버를 NdisCoSendNetBufferListsNdisVcHandle 매개 변수와 동일한 값으로 설정합니다. NDIS는 SourceHandle 멤버를 사용하여 NET_BUFFER_LIST 구조를 보낸 프로토콜 드라이버에 NET_BUFFER_LIST 구조를 반환합니다.
또한 중간 드라이버는 NET_BUFFER_LIST 구조의 SourceHandle 멤버를 NdisVcHandle 값으로 설정합니다. 중간 드라이버가 보내기 요청을 전달하는 경우 드라이버는 SourceHandle 멤버에 쓰기 전에 오버리싱 드라이버가 제공한 SourceHandle 값을 저장해야 합니다. NDIS가 전달된 NET_BUFFER_LIST 구조를 중간 드라이버에 반환하는 경우 중간 드라이버는 저장한 SourceHandle 복원해야 합니다.
프로토콜 드라이버는 연결 없는 드라이버와 동일한 메커니즘을 사용하여 보내기 요청을 취소할 수 있습니다. 보내기 요청을 취소하는 방법에 대한 자세한 내용은 송신 작업 취소참조하세요.