NdisAllocateFragmentNetBufferList 函式 (ndis/nblapi.h)

呼叫 NdisAllocateFragmentNetBufferList 函式,根據現有NET_BUFFER_LIST結構中的數據建立新的分散 NET_BUFFER_LIST 結構。

語法

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

參數

[in] OriginalNetBufferList

現有NET_BUFFER_LIST結構的指標。

NetBufferListPool

從呼叫取得的句柄 NdisAllocateNetBufferListPool 函式。

NetBufferPool

先前從呼叫傳回的NET_BUFFER結構集區句柄 NdisAllocateNetBufferPool

[in] StartOffset

每個 NET_BUFFER 結構中數據開頭的額外位元組位移。 這個位移除了每個NET_BUFFER結構中指定的 DataOffset 成員值之外。

[in] MaximumLength

新NET_BUFFER_LIST結構中每個片段的最大長度,以位元組為單位。 每個片段都會由NET_BUFFER結構描述。

[in] DataOffsetDelta

NDIS 應該在新的NET_BUFFER結構中提供的額外 已使用數據空間 量。

[in] DataBackFill

除了需要配置時要配置的 DataOffsetDelta 參數值之外,還需要配置的數據空間量。 如果 NDIS 必須配置記憶體來提供 DataOffsetDelta 所要求的數據空間,它也應該配置 DataBackFill 所指定的額外空間。

[in] AllocateFragmentFlags

可與 OR 作業結合的 NDIS 旗標。 將此參數設定為零。 目前沒有為此函式定義的旗標。

傳回值

NdisAllocateFragmentNetBufferList 會傳回新片段NET_BUFFER_LIST結構的指標。 如果配置失敗,則傳回值為 NULL

備註

NdisAllocateFragmentNetBufferList 會配置並初始化新的片段 NET_BUFFER_LIST 結構和 NET_BUFFER 結構,這些結構描述呼叫者傳遞給 NdisAllocateFragmentNetBufferList 之NET_BUFFER_LIST結構所描述的相同數據。

如果片段NET_BUFFER_LIST結構應具有與指定集區相關聯的屬性,呼叫端必須在 NetBufferListPoolHandleNetBufferPoolHandle 參數中指定集區句柄。 例如,NET_BUFFER_LIST 結構的 ProtocolType 成員會與集區相關聯。

針對指定來源NET_BUFFER_LIST結構中的每個NET_BUFFER結構,NDIS 會建立片段NET_BUFFER結構,如下所示:

  • NDIS 會從來源NET_BUFFER結構 中已使用之數據空間 的開頭開始建立片段,並依 StartOffset 參數中指定的值位移。
  • NDIS 會將來源NET_BUFFER結構中 StartOffset ) 的已使用數據空間 (分割成片段。
  • 每個片段 已使用之數據空間 的長度小於或等於 MaximumLength 參數中指定的值。 最後一個片段 的已使用資料空間 可以小於 MaximumLength
  • 每個片段都會由新的NET_BUFFER結構和一組新的 MDL 鏈結來描述。
  • 新的NET_BUFFER結構的數據位移會經過壓縮, (DataOffset 成員的值會減少) DataOffsetDelta 參數中指定的位元組數目。
  • 如果 NDIS 必須配置記憶體來提供 DataOffsetDelta 所要求的數據空間,它也應該配置 DataBackFill 所指定的額外空間。
NdisAllocateFragmentNetBufferList 所建立的新片段NET_BUFFER_LIST結構不包含初始 NET_BUFFER_LIST_CONTEXT 結構。

呼叫 NdisFreeFragmentNetBufferList 函式可釋放NET_BUFFER_LIST結構,以及先前呼叫 NdisAllocateFragmentNetBufferList 所配置的所有相關NET_BUFFER結構和 MDL 鏈結。

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平台 Universal
標頭 ndis/nblapi.h (包含 ndis.h)
程式庫 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 Irql_NetBuffer_Function (ndis) 、NdisAllocateFragmentNetBufferList (ndis) ,NdisAllocateFragmentNetBufferList_InitFail (ndis)

另請參閱

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList