共用方式為


MINIPORT_SEND_NET_BUFFER_LISTS回呼函式 (ndis.h)

NDIS 會呼叫 MiniportSendNetBufferLists 函式,以傳輸包含在 NET_BUFFER_LIST 結構連結清單中的網路數據。

注意 您必須使用 MINIPORT_SEND_NET_BUFFER_LISTS 類型來宣告函式。 如需詳細資訊,請參閱下列範例一節。
 

語法

MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;

void MiniportSendNetBufferLists(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

參數

[in] MiniportAdapterContext

迷你埠驅動程式在其 MiniportInitializeEx 函式中配置的內容區域句柄。 迷你埠驅動程式會使用此內容區域來維護適配卡的狀態資訊。

[in] NetBufferList

NET_BUFFER_LIST 結構連結清單中第一個 NET_BUFFER_LIST 結構的指標。 清單中的每個NET_BUFFER_LIST結構都會描述 NET_BUFFER 結構清單。 清單中的每個NET_BUFFER結構都會對應至 MDL 鏈結。 MDL 包含網路數據。

[in] PortNumber

識別迷你埠配接器埠的埠號碼。 若要指派迷你埠適配卡埠號碼,請呼叫 NdisMAllocatePort 函式。 零值會識別迷你埠配接器的預設埠。

[in] SendFlags

定義傳送作業屬性的旗標。 旗標可以與 OR 作業結合。 若要清除所有旗標,請將此成員設定為零。 此函式支援下列旗標:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

指定目前的 IRQL DISPATCH_LEVEL。 如需此旗標的詳細資訊,請參閱 分派 IRQL 追蹤

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

指定 NDIS 應該檢查回送。 根據預設,NDIS 不會將數據回送至提交傳送要求的驅動程式。 過度處理驅動程式可以藉由設定此旗標來覆寫此行為。 設定此旗標時,NDIS 會識別包含符合系結接收準則之數據的所有NET_BUFFER結構。 NDIS 表示NET_BUFFER結構,這些結構符合準則與超載驅動程式。 此旗標不會影響檢查回送或其他系結上的回送或回送。

傳回值

備註

MiniportSendNetBufferLists 是迷你埠驅動程式的必要函式。 當過度使用驅動程式呼叫 NdisSendNetBufferLists 函式時,NDIS 會呼叫系結迷你埠驅動程式的 MiniportSendNetBufferLists 函式。

傳輸 NDIS 傳入 NetBufferLists 參數的網路數據時,迷你埠驅動程序必須使用下列指導方針:

  1. 必須保留每個NET_BUFFER_LIST結構中NET_BUFFER結構的順序。
  2. 如果要在相同的連接上傳輸 NET_BUFFER_LIST 結構,則應保留其順序。
  3. 如果要在不同的連線上傳輸 NET_BUFFER_LIST 結構,如果下列功能正在使用中,則可以分割成多個傳輸佇列。 在此情況下,應該保留每個連接的 NET_BUFFER_LIST 結構順序。
    • 接收端調整 (RSS) (NET_BUFFER_LIST 結構中的 RSS 哈希值可作為 RSS 間接存取數據表中的索引。)
    • 虛擬機佇列 (VMQ) (在 NetBufferListFilteringInfo OOB 資訊中設定傳出佇列的佇列標識碼。如需詳細資訊,請參閱 VMQ 傳輸路徑.)
    • IEEE 802.1 資料中心橋接 (DCB) (您可以關閉流量類別 (TC) .)
    • IEEE 802.1p (您可以關閉不含 DCB.) 的 802.1p 標記

Miniport 驅動程式會藉由呼叫 MiniportSendNetBufferLists 函式,接受 NDIS 所做的所有傳送要求。 如果迷你埠驅動程式無法立即完成傳送要求,則驅動程式必須在佇列中保存要求,才能完成要求。 當傳送要求擱置時,迷你埠驅動程式會保留NET_BUFFER_LIST結構的擁有權,以及與NET_BUFFER_LIST結構相關聯的所有通訊協定配置資源。

迷你埠驅動程序必須呼叫 NdisMSendNetBufferListsComplete 函式,以完成所有NET_BUFFER_LIST結構的傳送要求。 為了改善系統效能,驅動程式可以建立連結清單,其中包含多個傳送要求中的NET_BUFFER_LIST結構。 然後,驅動程式可以在單一呼叫 NdisMSendNetBufferListsComplete 中傳遞這類連結清單.NET_BUFFER_LIST結構和其他相關聯的資源應該在驅動程式呼叫 NdisMSendNetBufferListsComplete 時立即視為無法存取。

MiniportSendNetBufferLists 函式必須與存取相同佇列的驅動程式其他 MiniportXxx 函式同步處理其網路數據內部佇列的存取。 迷你埠驅動程式可以使用微調鎖定來同步存取佇列。

通訊協定驅動程式會根據系結迷你埠驅動程序選取的中型類型,負責判斷所需的網路數據。 不過,通訊協定驅動程式可以提供網路數據,以指定比所選媒體的最小封包大小短的封包。 在此情況下,如果選取的媒體對傳輸封包大小施加最小長度需求, MiniportSendNetBufferLists 就必須以零填補封包。

如果迷你埠驅動程式在NDIS查詢OID_GEN_MAC_OPTIONS OID時設定 NDIS_MAC_OPTION_NO_LOOPBACK 旗標,迷你埠驅動程式不得嘗試回傳任何網路數據。 NDIS 提供這類驅動程式的軟體回送支援。

NDIS 在 IRQL<= DISPATCH_LEVEL 呼叫 MiniportSendNetBufferLists

例子

若要定義 MiniportSendNetBufferLists 函式,您必須先提供函式宣告,以識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證程式 (SDV) ,以及其他驗證工具尋找錯誤,而且是撰寫 Windows 作業系統驅動程式的需求。

例如,若要定義名為 「 MySendNetBufferLists」 的 MiniportSendNetBufferLists 函式,請使用 MINIPORT_SEND_NET_BUFFER_LISTS 類型,如下列程式代碼範例所示:

MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

然後,實作您的函式,如下所示:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  MiniportAdapterContext,
    PNET_BUFFER_LIST  NetBufferList,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

MINIPORT_SEND_NET_BUFFER_LISTS函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations批註可確保使用頭檔中套用至MINIPORT_SEND_NET_BUFFER_LISTS函式類型的註釋。 如需函數宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。

如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平台 Windows
標頭 ndis.h (包含 Ndis.h)
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 NdisTimedDataHang、NdisTimedDataSend

另請參閱

MiniportInitializeEx

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisSendNetBufferLists

OID_GEN_MAC_OPTIONS