逸出作業
內建作業可以增加 NET_BUFFER 結構或NET_BUFFER_LIST結構中所有 NET_BUFFER結構中 已使用的資料空間大小。
NDIS 提供下列函式:
NdisRetreatNetBufferListDataStart
內含作業有時會配置與NET_BUFFER結構相關聯的 MDL。 若要提供配置 MDL 的機制,驅動程式可以提供 NetAllocateMdl 函式的選擇性進入點。 如果進入點為 Null,NDIS 會使用預設方法來配置 MDL。 MDL 必須在 NetFreeMdl 函式內釋放,以提供用來配置 MDL 的機制相互。
若要取得新的 DataLength,NDIS 會將驅動程式指定的 DataOffsetDelta 新增至目前的 DataLength 。 如果 未使用的資料空間 大小大於 DataOffsetDelta,則一項操作會減少 DataOffset 。 在此情況下,新的DataOffset 是目前的 DataOffset減去DataOffsetDelta 。
如果 DataOffsetDelta 大於 DataOffset,則輸入作業會配置新的資料空間。 在此情況下,NDIS 會據以調整 DataOffset 。
針對傳送作業,如果沒有足夠的 未使用的資料空間 滿足要求,NDIS 會配置記憶體。 如果不需要記憶體配置,NDIS 只會調整 DataOffset 和 DataLength 。 為了獲得更好的效能,驅動程式應該在傳送之前配置足夠的總數據大小,以容納所有基礎驅動程式的逸出作業。
針對接收傳回案例,NDIS 只會據以調整 DataOffset 和 DataLength 。 進入作業會反轉在接收處理期間發生的進階作業。 在擷取作業之後, 已使用的資料空間 會包含接收處理期間所使用基礎驅動程式的標頭資料。