Miniport 驅動程式緩衝區管理
Miniport 驅動程式通常會從MiniportInitializeEx呼叫NdisAllocateNetBufferListPool,以建立NET_BUFFER_LIST結構的集區。 迷你埠驅動程式會使用這些結構來指出已接收的資料。
一般而言,配置NET_BUFFER_LIST結構的迷你埠驅動程式將會在該NET_BUFFER_LIST結構上配置並排入一個 NET_BUFFER 結構。 當您配置NET_BUFFER_LIST結構的集區,而不是個別配置NET_BUFFER_LIST結構和NET_BUFFER結構時,預先配置NET_BUFFER結構會更有效率。
迷你埠驅動程式可以呼叫 NdisAllocateNetBufferListPool ,並將 AllocateNetBuffer 參數設定為 TRUE ,表示已預先配置 NET_BUFFER 結構。 在此情況下,NET_BUFFER結構會預先配置驅動程式從集區配置的每個NET_BUFFER_LIST結構。 這類驅動程式必須呼叫 NdisAllocateNetBufferAndNetBufferList ,以從這個集區配置結構。
一般而言,迷你埠驅動程式會從MiniportInitializeEx呼叫NdisAllocateNetBufferAndNetBufferList,以配置後續接收作業所需的緩衝區數目。 在此情況下,驅動程式會管理可用緩衝區的內部清單。
MiniportReturnNetBufferLists函式可以準備傳回的NET_BUFFER_LIST結構,以便在後續接收指示中重複使用。 例如 ,雖然 MiniportReturnNetBufferLists 可以將NET_BUFFER_LIST結構傳回集區 (,但是它可以呼叫 NdisFreeNetBufferList) ,但重複使用結構而不將它們傳回集區會更有效率。
當 NDIS 停止配接器時,迷你埠驅動程式應該釋放所有NET_BUFFER_LIST結構和相關聯的資料。 驅動程式可以呼叫 NdisFreeNetBufferList 釋放結構和 NdisFreeNetBufferListPool 函式來釋放NET_BUFFER_LIST集區。