共用方式為


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)

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

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

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

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

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

通訊協議驅動程式

從較低層取用接收時,如果已設定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 佇列。 迷你埠驅動程序必須在 的 Flags 成員中設定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 函式。

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

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

如果迷你埠驅動程式呼叫 NdisMIndicateReceiveNetBufferLists 並在 ReceiveFlags 參數中設定NDIS_RECEIVE_FLAG_RESOURCES旗標,這表示迷你埠驅動程式必須立即重新取得NET_BUFFER_LIST結構的擁有權。 在此情況下,NDIS 不會呼叫迷你埠驅動程式的 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 和更新版本支援。
目標平台 Universal
標頭 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