共用方式為


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 鏈結中可用回填空間的初始數量。 如果 MdlChainNULLDataOffset 必須是 0。

[in] DataLength

在 MDL 鏈結中使用資料空間的長度,以位元組為單位。 如果 MdlChainNULLDataLength 必須是 0。

傳回值

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

言論

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

附註NET_BUFFERNET_BUFFER_LIST 結構必須從 NDIS 緩衝池配置。 驅動程式不得從其私人記憶體集區或堆疊配置和初始化 NET_BUFFERNET_BUFFER_LIST 結構。
 
預先配置 NET_BUFFER 可以重複使用,方法是在擁有 NET_BUFFER時,使用另一個 MDL 鏈結重新初始化它,但 DataOffsetDataLengthCurrentMdl,以及 CurrentMdlOffsetNET_BUFFER 字段必須與新的 MDL 鏈結一致。

例如,如果原始 MDL 鏈結包含 XDataLengthYDataOffset,而 CurrentMdl 會從原始 MDL 鏈結中的第二個 MDL (M) 開始,CurrentMdlOffsetZNET_BUFFER_DATA 中的 [MdlChain] 字段必須指向新的 MDL 鏈結,其中包含 X 的DataLengthY'DataOffset。 如果 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 和更新版本支援。
目標平臺 普遍
標頭 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