共用方式為


篩選驅動程式緩衝區管理

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

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

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

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

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

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

NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisAllocateNetBuffer

呼叫 NdisAllocateNetBufferAndNetBufferList 比呼叫 NdisAllocateNetBufferListNdisAllocateNetBuffer更有效率。 不過, 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結構。