共用方式為


接收通訊協定驅動程序中的數據

下圖說明基本的接收作業,其中包含驅動程式堆疊中的通訊協定驅動程式、NDIS 和基礎驅動程式。

圖表,說明驅動程式堆疊中涉及通訊協定驅動程式、NDIS 和基礎驅動程式的基本接收作業。

NDIS 會呼叫通訊協定驅動程式的 ProtocolReceiveNetBufferLists 函式,以處理來自基礎驅動程式的接收指示。 在基礎驅動程式呼叫接收指示函式之後,NDIS 會呼叫 ProtocolReceiveNetBufferLists ,例如,NdisMIndicateReceiveNetBufferLists),以指出已接收的網路數據或回送數據。

如果在 ReceiveFlags 參數中的 NDIS_RECEIVE_FLAGS_RESOURCES 旗標未設定於 ProtocolReceiveNetBufferLists 函式時,通訊協定驅動程式將保留對 NET_BUFFER_LIST 結構的所有權,直到它呼叫 NdisReturnNetBufferLists 函式為止。 如果 NDIS 設定 NDIS_RECEIVE_FLAGS_RESOURCES 旗標,通訊協定驅動程式就無法保留 NET_BUFFER_LIST 結構和相關聯的資源。 設定 NDIS_RECEIVE_FLAGS_RESOURCES 標誌表示底層驅動程式的接收資源不足。 在此情況下,ProtocolReceiveNetBufferLists 函式應將收到的數據複製到通訊協定配置的記憶體中,並儘快傳回。

注意 NDIS 可以變更基礎驅動程式所指出的旗標。 例如,如果迷你埠驅動程式在 NdisMIndicateReceiveNetBufferLists 函式的 ReceiveFlags 參數中設定 NDIS_RECEIVE_FLAGS_RESOURCES 旗標,則 NDIS 可以複製指示的數據,並將複本傳遞至 ProtocolReceiveNetBufferLists 並清除 NDIS_RECEIVE_FLAGS_RESOURCES 旗標。

注意 如果已設定 NDIS_RECEIVE_FLAGS_RESOURCES 旗標,通訊協定驅動程式必須在連結清單中保留原始的一組 NET_BUFFER_LIST 結構。 例如,當設定此旗標時,驅動程式可能會處理結構,並逐一地將它們沿堆疊向上傳遞,但必須在函式傳回前還原成原始的連結清單。

通訊協定驅動程式會呼叫 NdisReturnNetBufferLists 函式,以釋放 NET_BUFFER_LIST 結構的擁有權,以及相關聯的 NET_BUFFER 結構和網路數據。