共用方式為


篩選驅動程式緩衝區管理

篩選驅動程式會建立緩衝區,以複製從其他驅動程式取得的網路數據,或起始傳送或接收作業。

如果篩選驅動程式未建立緩衝區,驅動程式就不會管理緩衝池。 這類驅動程式只會傳遞它從其他驅動程式接收的緩衝區。

建立緩衝區以支援傳送或接收作業的篩選驅動程式,必須管理 NET_BUFFER_LIST 結構集區和 NET_BUFFER 結構集區。

若要建立這些集區,驅動程式會呼叫下列函式:

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

篩選驅動程式可以使用下列函式從集區分配結構體:

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

呼叫 NdisAllocateNetBufferAndNetBufferList 比呼叫 NdisAllocateNetBufferList 然後呼叫 NdisAllocateNetBuffer更有效率。 不過,NdisAllocateNetBufferAndNetBufferList 只會在 NET_BUFFER_LIST 結構上建立一個 NET_BUFFER 結構。 若要使用 NdisAllocateNetBufferAndNetBufferList,驅動程式必須在呼叫 NdisAllocateNetBufferListPool時,將 AllocateNetBuffer 參數設定為 TRUE

發起傳送要求的篩選驅動程式應該確定基礎驅動程式的上下文和回填空間需求。 篩選驅動程式會使用重新啟動屬性來判斷基礎驅動程式的回填需求。 篩選驅動程式應在 重新啟動 狀態中,判斷回填和上下文需求。 驅動程式應該為整個堆疊配置足夠的回填和內容空間。 如有必要,篩選器驅動程式可以釋放集區,並在 重新啟動 狀態下重新配置它們。

篩選驅動程式會使用下列函式來釋放集區:

NdisFreeNetBufferListPool

NdisFreeNetBufferPool

篩選驅動程式會使用下列函式來釋放從集區配置的結構:

NdisFreeNetBufferList

NdisFreeNetBuffer

驅動程式應該先釋放配置給 NdisAllocateNetBuffer 的 NET_BUFFER 結構體,再釋放相關聯的 NET_BUFFER_LIST 結構體。 當驅動程式針對相關聯的NET_BUFFER_LIST結構呼叫 NdisFreeNetBufferList 時,透過 NdisAllocateNetBufferAndNetBufferList 配置的NET_BUFFER結構會被釋放。