NdisAllocateNetBuffer 函式 (ndis/nblapi.h)

呼叫 NdisAllocateNetBuffer 函式,從 NET_BUFFER 結構集區配置和初始化 NET_BUFFER 結構。

語法

NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
  [in]           NDIS_HANDLE PoolHandle,
  [in, optional] MDL         *MdlChain,
  [in]           ULONG       DataOffset,
  [in]           SIZE_T      DataLength
);

參數

[in] PoolHandle

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

[in, optional] MdlChain

NDIS 用來初始化新 NET_BUFFER 結構的 MDL 鏈結指標。 MdlChain 可以是 NULL

[in] DataOffset

從緩衝區開頭到 MDL 鏈結中 已使用資料空間 的開頭的初始位移,以位元組為單位。 此位移前的數據空間是 未使用的數據空間。 因此,這個值也代表 MDL 鏈結中可用回填空間的初始數量。 如果 MdlChainNULL,DataOffset 必須為 0。

[in] DataLength

MDL 鏈結中 所用數據空間的長度,以位元組為單位。 如果 MdlChainNULL,DataLength 必須為 0。

傳回值

NdisAllocateNetBuffer 會傳回 NDIS 所配置 之NET_BUFFER 結構的指標。 如果配置失敗,則此指標為 NULL

備註

呼叫 NdisFreeNetBuffer 以釋放從NET_BUFFER結構集區配置的NET_BUFFER結構。

請注意,必須 從 NDIS 緩衝池配置NET_BUFFER和 NET_BUFFER_LIST 結構。 驅動程式不得從其私人記憶體集區或堆疊配置和初始化 NET_BUFFERNET_BUFFER_LIST 結構。
 
擁有NET_BUFFER時,可以使用另一個 MDL 鏈結重新初始化預先配置NET_BUFFER,但NET_BUFFER中的 DataOffsetDataLengthCurrentMdl 和 CurrentMdlOffset 字段必須與新的 MDL 鏈結一致。

例如,如果原始 MDL 鏈結包含 XDataLengthYDataOffset,而 CurrentMdl 會從原始 MDL 鏈結中的第二個 MDL (M) 開始,則 CurrentMdlOffsetZ然後,NET_BUFFER_DATA中的 MdlChain 字段必須指向包含 X'DataLength 和 Y'DataOffset 的新 MDL 鏈結。 如果 CurrentMdl 從新 MDL 鏈結中的第三個 MDL (M') 開始, 則 CurrentMdlOffsetZ',而且必須使用下列宏來設定 NET_BUFFER中的字段:

NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';

規格需求

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

另請參閱

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer