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 的幂表示的对齐倍数。 例如,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 结构中包含的网络数据标头的指针。 可以轻松分析此函数返回的连续数据块中存储的标头。

请求的对齐要求表示为 2 倍幂加偏移量。 例如,如果 AlignMultiple4,AlignOffset 为 3,则数据地址应为 4 加 3 的倍数。 如有必要,NDIS 将分配内存以满足对齐要求。

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis/nblapi.h (包括 ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function (ndis)

另请参阅

NET_BUFFER

NET_BUFFER_DATA