共用方式為


NdisMIndicateReceiveNetBufferLists 函式 (ndis.h)

迷你埠驅動程式會呼叫 NdisMIndicateReceiveNetBufferLists 函式,以指出從網路接收數據。

語法

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

參數

[in] MiniportAdapterHandle

NDIS 傳遞至 的迷你埠句柄 MiniportInitializeEx 函式。

NetBufferList

迷你埠驅動程式配置之 NET_BUFFER_LIST 結構的連結清單。

[in] PortNumber

識別迷你埠配接器埠的埠號碼。 若要指派迷你埠埠連接埠號碼,請呼叫 NdisMAllocatePort 函式。 零值會識別迷你埠配接器的預設埠。 如果迷你埠驅動程式尚未為指定的配接器配置埠,請使用預設埠。

[in] NumberOfNetBufferLists

NetBufferLists 之結構連結清單中的 NET_BUFFER_LIST 結構數目。

[in] ReceiveFlags

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

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

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

NDIS_RECEIVE_FLAGS_RESOURCES

指定迷你埠驅動程式會在呼叫 NdisMIndicateReceiveNetBufferLists 之後,立即回收 NET_BUFFER_LIST 結構的擁有權和任何附加 NET_BUFFER 結構。

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 具有相同的通訊協定類型 (EtherType)。

迷你埠驅動程式

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE是由迷你埠驅動程序選擇性地設定,這些驅動程式確定 NBL 鏈結中的所有 NBL 具有相同的 EtherType。 藉由設定此旗標,迷你埠驅動程式會通知 NDIS 和上層通訊協定,它們不需要檢查其 EtherType 的每個封包,這會增加效能。 不需要迷你埠驅動程式才能設定此旗標。

輕量篩選條件 (LFS)

當指出小說接收時,如果確定 NBL 鏈結中的所有 NBL 具有相同的 EtherType,則輕量型篩選器 (LWF) 也可以選擇性地設定NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE。 不過,就像迷你埠驅動程序一樣,LDF 絕對不需要在此案例中設定此旗標,而且一律可以選擇清除旗標。

當從較低層傳遞接收時,如果 LWF 變更 NBL 的 EtherType,則 LWF 如果 NBL 不再具有相同的 EtherType,則必須 清除旗標。

當傳遞來自較低層的接收時,如果 LWF 變更 NBLs 的 EtherType,則如果確定 NBL 鏈結中的所有 NBL 具有相同的 EtherType,LWF 可以選擇性地設定此旗標。 在此情況下,永遠不需要 LWF 來設定此旗標,而且一律可以選擇清除它。

取用來自較低層的接收時,如果設定此旗標,LWF 可以假設鏈結中的每個 NBL 具有相同的 EtherType。 永遠不需要 LWF 才能讀取此旗標,而且可以選擇一律從每個 NBL 讀取 EtherType。

結合多個 NBL 鏈結時,LWF 必須 清除此旗標,除非確定新的 NBL 鏈結具有同質的 EtherType。

通訊協定驅動程式

從較低層取用接收時,如果已設定NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE,通訊協定就可以假設鏈結中的每個 NBL 具有相同的 EtherType。 永遠不需要通訊協定才能讀取此旗標,而且可以選擇一律從每個 NBL 讀取 EtherType。

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 都屬於相同的 VLAN。

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 只包含符合指派給迷你埠適配卡之封包篩選和多播地址清單的數據。

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 都屬於相同的 VM 佇列。 如果已在 旗標中設定 NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION 旗標,則迷你埠驅動程序必須針對佇列上的所有接收指示設定此旗標 成員配置該佇列時 NDIS_RECEIVE_QUEUE_PARAMETERS 結構。

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 包含有效的共用記憶體資訊。 當收到 NET_BUFFER_LIST上設定此旗標時,NDIS 會將共用記憶體資訊視為有效。 未設定此旗標時,NDIS 和驅動程式會忽略共用記憶體資訊。 例如,修改封包數據的中繼驅動程式可以使用這個旗標來判斷是否應該複製數據。 迷你埠驅動程式可以使用 旗標來判斷刪除佇列時如何釋放與 VM 佇列相關聯的記憶體。

NDIS_RECEIVE_FLAGS_MORE_NBLS

保留。

傳回值

沒有

言論

迷你埠驅動程式通常會從 MiniportInterruptDPC 函式呼叫 NdisMIndicateReceiveNetBufferLists 函式。 當迷你埠驅動程式呼叫 NdisMIndicateReceiveNetBufferLists時,它會指定 NetBufferLists 參數中的 NET_BUFFER_LIST 結構清單。 NDIS 會將 NET_BUFFER_LIST 結構傳遞至 ProtocolReceiveNetBufferLists 系結通訊協定驅動程式的函式。

Miniport 驅動程式必須將每個 NET_BUFFER_LIST 結構的 SourceHandle 成員設定為與 MiniportAdapterHandle 參數相同的值。

如果迷你埠驅動程式呼叫 NdisMIndicateReceiveNetBufferLists,並清除 ReceiveFlags 參數中的 NDIS_RECEIVE_FLAG_RESOURCES 旗標,NDIS 會將指定的 NET_BUFFER_LIST 結構傳回至迷你埠驅動程式的 MiniportReturnNetBufferLists 函式。 在此情況下,在 NDIS 將 NET_BUFFER_LIST 結構傳回至迷你埠驅動程式的 MiniportReturnNetBufferList s 函式之前,迷你埠驅動程式不得回收 NET_BUFFER_LIST 結構。

如果迷你埠驅動程式呼叫 NdisMIndicateReceiveNetBufferLists,並在 ReceiveFlags 參數中設定 NDIS_RECEIVE_FLAG_RESOURCES 旗標,這表示迷你埠驅動程序必須立即重新取得 NET_BUFFER_LIST 結構的擁有權。 在此情況下,NDIS 不會呼叫 miniport 驅動程式的 MiniportReturnNetBufferLists 函式來傳回 NET_BUFFER_LIST 結構。 相反地,NDIS 會在從 NdisMIndicateReceiveNetBufferLists傳回時,將 NET_BUFFER_LIST 結構傳回至迷你埠驅動程式。 迷你埠驅動程序應該會在 NdisMIndicateReceiveNetBufferLists 傳回之後立即回收 NET_BUFFER_LIST 結構。 若要回收 NET_BUFFER_LIST 結構,迷你埠驅動程式可以呼叫自己的 MiniportReturnNetBufferLists 函式。

ReceiveFlags 參數中設定 NDIS_RECEIVE_FLAG_RESOURCES 旗標,會強制通訊協定驅動程式複製網路數據,並將 NET_BUFFER_LIST 結構釋放至迷你埠驅動程式。 驅動程式寫入器應該使用足夠的預先配置 NET_BUFFER_LIST 結構來設計其迷你埠驅動程式,以避免不必要的複製。

NdisMIndicateReceiveNetBufferLists 的呼叫者 必須正確地初始化 NET_BUFFER_LIST 結構、附加 NET_BUFFER 結構和任何附加的 MDL。

要求

要求 價值
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平臺 普遍
標頭 ndis.h (包括 Ndis.h)
連結庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_SendRcv_Function(ndis)

另請參閱

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists