NdisGetDataBuffer 函式 (ndis/nblapi.h)

呼叫 NdisGetDataBuffer 函式,以從 NET_BUFFER 結構取得連續數據區塊的存取權。

語法

NDIS_EXPORTED_ROUTINE PVOID NdisGetDataBuffer(
  [in]           NET_BUFFER *NetBuffer,
  [in]           ULONG      BytesNeeded,
  [in, optional] PVOID      Storage,
  [in]           ULONG      AlignMultiple,
  [in]           ULONG      AlignOffset
);

參數

[in] NetBuffer

NET_BUFFER 結構的指標。

[in] BytesNeeded

要求的連續位元組數目。

[in, optional] Storage

緩衝區的指標,如果呼叫端未提供任何緩衝區,則為 NULL 。 緩衝區的大小必須大於或等於 BytesNeeded 中指定的位元元組數目。 如果此值為非 NULL,而且所要求的數據不連續,NDIS 會將要求的數據複製到 記憶體 所指示的區域。

[in] AlignMultiple

以兩個乘冪表示的對齊方式。 例如,2、4、8、16 等等。 如果 AlignMultiple 為1,則不需要對齊。

[in] AlignOffset

位移,以位元組為單位,從對齊倍數。

傳回值

NdisGetDataBuffer 會傳回連續數據開頭的指標,或傳回 NULL

如果 NetBuffer 參數指向的 NET_BUFFER 結構中NET_BUFFER_DATA結構的 DataLength 成員小於 BytesNeeded 參數中的值,則傳回值為 NULL

如果緩衝區中要求的數據連續,則傳回值是 NDIS 提供之位置的指標。 如果數據不是連續的,NDIS 會使用 Storage 參數,如下所示:

  • 如果 Storage 參數不是 NULL,NDIS 會將數據複製到 記憶體上的緩衝區。 傳回值是傳遞至 Storage 參數的指標。
  • 如果 Storage 參數為 NULL,則傳回值為 NULL
傳回值也可能是 NULL ,因為無法對應數據緩衝區的低資源條件。 即使數據是連續的,或 Storage 參數為非 NULL,也可能會發生此情況。

備註

呼叫此函式,以取得 NET_BUFFER 結構中包含的 網路數據標頭指標。 您可以輕鬆地剖析此函式傳回之連續數據區塊中所儲存的標頭。

要求的對齊需求會以兩個乘冪加上位移來表示。 例如,如果 AlignMultiple 為 4 且 AlignOffset 為 3,則數據地址應該是 4 加上 3 的倍數。 如有必要,NDIS 會配置記憶體以滿足對齊需求。

規格需求

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

另請參閱

NET_BUFFER

NET_BUFFER_DATA