下圖說明基本傳送作業,其中包含通訊協定驅動程式、NDIS 和迷你埠驅動程式。
通訊協定驅動程式會呼叫 NdisSendNetBufferLists 函式,以在系結上傳送 NET_BUFFER_LIST 結構。 NDIS 會呼叫迷你埠驅動程式的 MiniportSendNetBufferLists 函式,將NET_BUFFER_LIST結構轉送至基礎迷你埠驅動程式。
所有以NET_BUFFER為基礎的傳送作業都是異步的。 迷你埠驅動程式會在完成時,使用適當的狀態代碼呼叫 NdisMSendNetBufferListsComplete 函式。 每個 NET_BUFFER_LIST 結構的傳送可以單獨完成。 每次迷你埠驅動程式呼叫 NdisMSendNetBufferListsComplete 時,NDIS 會呼叫通訊協定驅動程序的 ProtocolSendNetBufferListsComplete 函式。
通訊協定驅動程式可以在 NDIS 呼叫通訊協定驅動程式的 ProtocolSendNetBufferListsComplete 函式時,立即回收NET_BUFFER_LIST結構的擁有權和所有相關結構和數據。
迷你埠驅動程式或 NDIS 可以依任何順序傳回 NET_BUFFER_LIST 結構。 協定驅動程式保證附加在每個 NET_BUFFER_LIST 結構上的 NET_BUFFER 結構清單未被修改。
任何 NDIS 驅動程式都可以拆分 NET_BUFFER_LIST 結構中的 NET_BUFFER 結構。 任何 NDIS 驅動程式也可以分隔NET_BUFFER結構中的 MDL。 不過,驅動程式必須一律將 NET_BUFFER_LIST 結構連同 NET_BUFFER 結構和 MDL 一起以原始形式傳回。 例如,中繼驅動程式可能會將NET_BUFFER_LIST分成兩個新的NET_BUFFER_LIST結構,並將原始數據的一部分傳遞給下一個驅動程式。 不過,當中繼驅動程式完成對原始 NET_BUFFER_LIST 的處理後,它必須傳回包含原始 NET_BUFFER 結構和 MDL 的完整 NET_BUFFER_LIST。
通訊協定驅動程式會將 NET_BUFFER_LIST 結構中的 SourceHandle 成員設定為 NDIS 在呼叫 NdisOpenAdapterEx 函式時所提供的 NdisBindingHandle。 NDIS 會使用 SourceHandle 成員,將NET_BUFFER_LIST結構傳回傳送NET_BUFFER_LIST結構的通訊協定驅動程式。
中繼驅動程式也會將 NET_BUFFER_LIST 結構中的 SourceHandle 成員設定為 NDIS 在呼叫 NdisOpenAdapterEx時提供的 NdisBindingHandle 值。 如果中繼驅動程式轉送傳送要求,驅動程式必須儲存上層驅動程式在寫入 SourceHandle 成員之前提供的 SourceHandle 值。 當 NDIS 將轉送NET_BUFFER_LIST結構傳回中繼驅動程式時,中繼驅動程式必須還原其儲存的 SourceHandle。