下圖說明基本的 CoNDIS 傳送作業,其中包含通訊協定驅動程式、NDIS 和迷你埠驅動程式。
如上圖所示,通訊協定驅動程式會呼叫 NdisCoSendNetBufferLists 函式,以在虛擬連線 (VC) 上傳送 NET_BUFFER_LIST 結構。 NDIS 接著會呼叫迷你埠驅動程式的 MiniportCoSendNetBufferLists 函式,將NET_BUFFER_LIST結構轉送至基礎迷你埠驅動程式。
所有以NET_BUFFER為基礎的傳送作業都是異步的。 因此,迷你埠驅動程式一律會呼叫 NdisMCoSendNetBufferListsComplete 函式,並在完成傳送數據時提供適當的狀態代碼。 迷你埠驅動程式可以完成與其他 NET_BUFFER_LIST 結構無關的每個 NET_BUFFER_LIST 結構的傳送作業。 每次迷你埠驅動程式呼叫 NdisMCoSendNetBufferListsComplete時,NDIS 會呼叫通訊協定驅動程式的 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。
通訊協定驅動程式可以使用與無連線驅動程式相同的機制來取消傳送要求。 如需取消傳送要求的詳細資訊,請參閱 取消傳送作業。