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。
注解
调用此函数以获取指向 NET_BUFFER 结构中包含的网络数据标头的指针。 可以轻松分析此函数返回的连续数据块中存储的标头。
请求的对齐要求表示为 2 倍幂加偏移量。 例如,如果 AlignMultiple 为 4,AlignOffset 为 3,则数据地址应为 4 加 3 的倍数。 如有必要,NDIS 将分配内存以满足对齐要求。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
目标平台 | 通用 |
标头 | ndis/nblapi.h (包括 ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function (ndis) |