中繼驅動程式會從較高層級驅動程式接收具有一或多個相關聯 MDL 的 NET_BUFFER_LIST 結構,以透過網路傳送。 如果驅動程式具有無連線的下邊緣,中繼驅動程式可以呼叫 NdisSendNetBufferLists ,或在驅動程式具有連線導向的下邊緣時呼叫 NdisCoSendNetBufferLists ,將資料傳遞至基礎驅動程式。 或者,中介驅動程式可以採取一些措施來調整鏈結的緩衝區的內容,或調整接收的數據相對於其他傳輸的順序或時間安排。
根據中繼驅動程式的用途,這類驅動程式可以重新封裝鏈結至傳入NET_BUFFER_LIST結構的緩衝區。 例如,在下列情況下,中繼驅動程式會重新封裝網路資料:
中繼驅動程式從上層通訊協定驅動程式接收的資料緩衝區,比能透過基礎媒體單一緩衝區傳送的資料緩衝區來得大。 因此,中繼驅動程式必須將傳入數據分割成較小的緩衝區。
中繼驅動程式會在將每個傳送轉送至基礎驅動程式之前,先壓縮或加密數據,以變更網路數據的長度或內容。
如需建立網路資料管理的相關資訊,請參閱 通訊協定驅動程式緩衝區管理。
NDIS 提供用於複製和分割NET_BUFFER_LIST 結構的介面。 如需有關克隆和分割結構的詳細資訊,請參閱 衍生NET_BUFFER_LIST結構。
您可以視需要配置NET_BUFFER_LIST結構,在驅動程式初始化時或在 ProtocolBindAdapterEx 函式中。 如有必要,中繼驅動程式開發人員可以基於效能理由,在初始化時配置一些結構,讓 ProtocolReceiveNetBufferLists 預先配置資源,將傳入數據複製到其中,以指出更高層級的驅動程式,讓 MiniportSendNetBufferLists 有可用的 NET_BUFFER_LIST 結構 (,以及可能的緩衝區) ,以將傳入的傳送網路數據傳遞至下一個較低的驅動程式。
如果中繼驅動程式將傳送數據或接收數據複製到新的緩衝區或緩衝區,而且最後一個緩衝區中實際數據的長度小於緩衝區的配置長度,則中繼驅動程式可以呼叫 NdisAdjustMdlLength 將緩衝區調整為數據的實際長度。
具有無連線下邊緣的中繼驅動程式一律會從其 ProtocolReceiveNetBufferLists 函式從基礎迷你埠配接器接收傳入數據。
具有連線導向下邊緣的中繼驅動程式一律會從其 ProtocolCoReceiveNetBufferLists 函式接收來自基礎迷你埠配接器的傳入資料。