NdisFIndicateReceiveNetBufferLists 函式 (ndis.h)
篩選驅動程式會呼叫 NdisFIndicateReceiveNetBufferLists,以指出它已收到網路數據。 如需詳細資訊,請參閱 在篩選驅動程式中接收資料。
語法
void NdisFIndicateReceiveNetBufferLists(
[in] NDIS_HANDLE NdisFilterHandle,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
);
參數
[in] NdisFilterHandle
識別此篩選模組的 NDIS 句柄。 NDIS 在呼叫 filterAttach 函式時,將句柄傳遞至篩選驅動程式。
[in] NetBufferLists
NET_BUFFER_LIST 結構的連結清單。 每個 NET_BUFFER_LIST 結構都包含一個 NET_BUFFER 結構。
[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
指定篩選驅動程式會在呼叫 NdisFIndicateReceiveNetBufferLists 之後,立即回收 NET_BUFFER_LIST 結構的擁有權和任何附加 NET_BUFFER 結構。
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
指定 NetBufferLists 清單中的所有 NET_BUFFER_LIST 結構 具有相同的通訊協定類型 (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
保留。
NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE
如果設定此旗標,則 NET_BUFFER_LIST 結構連結清單中的所有封包都源自相同的 Hyper-V 可延伸交換器來源埠。
如需詳細資訊,請參閱 Hyper-V 可延伸交換器傳送和接收旗標。
NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP
如果設定此旗標,NET_BUFFER_LIST 結構連結清單中的所有封包都會轉送至相同的可延伸交換器目的地埠。
如需詳細資訊,請參閱 Hyper-V 可延伸交換器傳送和接收旗標。
傳回值
沒有
言論
當篩選驅動程式呼叫 NdisFIndicateReceiveNetBufferLists 函式時,它會指定 NetBufferLists 參數中的 NET_BUFFER_LIST 結構清單。 NDIS 會將 NET_BUFFER_LIST 結構傳遞給過度的驅動程式。
篩選驅動程式可以呼叫 NdisFIndicateReceiveNetBufferLists 來產生接收指示。
篩選驅動程式也可以篩選基礎驅動程序產生的接收指示。 NDIS 呼叫 FilterReceiveNetBufferLists 函式來篩選這類接收指示。
篩選驅動程式必須設定 SourceHandle 每個 NET_BUFFER_LIST 結構的成員,其來源與 NdisFilterHandle 參數的值相同。 篩選驅動程式不得修改其未產生之任何 NET_BUFFER_LIST 結構中的 SourceHandle 成員。
篩選驅動程式必須正確地初始化 NET_BUFFER_LIST 結構、附加 NET_BUFFER 結構,以及任何附加的 MDL。
如果篩選驅動程式呼叫 NdisFIndicateReceiveNetBufferLists 函式,並清除 ReceiveFlags 參數中的 NDIS_RECEIVE_FLAG_RESOURCES 旗標,NDIS 會將指定的 NET_BUFFER_LIST 結構傳回至篩選驅動程式的 FilterReturnNetBufferLists 函式。 在此情況下,在 NDIS 將 NET_BUFFER_LIST 結構傳回 至 filterReturnNetBufferLists之前,篩選驅動程式不得回收 NET_BUFFER_LIST 結構。
如果篩選驅動程式呼叫 NdisFIndicateReceiveNetBufferLists,並在 ReceiveFlags 參數中設定 NDIS_RECEIVE_FLAG_RESOURCES 旗標,這表示篩選驅動程式必須立即重新取得 NET_BUFFER_LIST 結構的擁有權。 在此情況下,NDIS 不會呼叫篩選驅動程式的 FilterReturnNetBufferLists 函式來傳回 NET_BUFFER_LIST 結構。 相反地,NDIS 會在從 NdisFIndicateReceiveNetBufferLists 傳回時,將 NET_BUFFER_LIST 結構傳回至篩選驅動程式,。 篩選驅動程序應該會在 NdisFIndicateReceiveNetBufferLists 傳回之後立即回收 NET_BUFFER_LIST 結構。 若要回收 NET_BUFFER_LIST 結構,篩選驅動程式可以呼叫自己的 FilterReturnNetBufferLists 函式。
在 ReceiveFlags 中設定 NDIS_RECEIVE_FLAG_RESOURCES 旗標, 參數會強制過度驅動程式複製網路數據,並將 NET_BUFFER_LIST 結構釋放至篩選驅動程式。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平臺 | 桌面 |
標頭 | ndis.h (包括 Ndis.h) |
連結庫 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_Filter_Driver_Function(ndis) |