NdisCopyFromNetBufferToNetBuffer 函数 (ndis/nblapi.h)
调用 NdisCopyFromNetBufferToNetBuffer 函数,将数据从源 NET_BUFFER 结构复制到目标NET_BUFFER结构。
语法
NDIS_EXPORTED_ROUTINE NDIS_STATUS NdisCopyFromNetBufferToNetBuffer(
[in] NET_BUFFER *Destination,
[in] ULONG DestinationOffset,
[in] ULONG BytesToCopy,
[in] NET_BUFFER const *Source,
[in] ULONG SourceOffset,
[out] ULONG *BytesCopied
);
参数
[in] Destination
指向以前分配的目标NET_BUFFER结构的指针。
[in] DestinationOffset
目标中的字节偏移量NET_BUFFER结构中开始写入复制的数据。 有关 DestinationOffset 的详细信息,请参阅以下“备注”部分。
[in] BytesToCopy
要复制的字节数。
[in] Source
指向以前分配的源NET_BUFFER结构的指针。
[in] SourceOffset
源中的字节偏移量NET_BUFFER结构中开始复制数据。 有关 SourceOffset 的详细信息,请参阅以下“备注”部分。
[out] BytesCopied
指向调用方提供的变量的指针,此函数在其中返回实际复制的字节数。 如果源数据耗尽或目标空间不足,则此数字可能小于 BytesToCopy 的值。
返回值
NdisCopyFromNetBufferToNetBuffer 返回以下状态值之一:
返回代码 | 说明 |
---|---|
|
复制操作已成功完成。 |
|
由于资源不足,复制操作失败。 |
注解
NdisCopyFromNetBufferToNetBuffer 的调用方分配目标NET_BUFFER结构,可能还会分配源NET_BUFFER结构。 目标NET_BUFFER结构的 MDL 应有足够的空间来接收数据。
如果源NET_BUFFER结构用完数据或目标NET_BUFFER结构在复制指定字节数之前空间不足,则复制操作将停止。 在任一情况下, NdisCopyFromNetBufferToNetBuffer 都返回成功从源复制到目标NET_BUFFER结构的字节数。
调用方必须确保 CurrentMdlOffset 和 CurrentMdl 值在源和目标 NET_BUFFER 结构中是正确的。 NDIS 不会更改目标NET_BUFFER的成员。 在 NdisCopyFromNetBufferToNetBuffer 返回后,调用方必须更新目标NET_BUFFER中的 DataLength、DataOffset 和 CurrentMdlOffset 值。
NDIS 使用 NdisCopyFromNetBufferToNetBuffer 的 DestionationOffset 和 SourceOffset 参数中的偏移量作为当前数据偏移量的偏移量。 例如,如果目标NET_BUFFER中的 CurrentMdlOffset 值为 x,DestinationOffset 值为 y,则 NDIS 会将数据复制到目标NET_BUFFER当前Mdl 值所描述的内存中的 x+ y 偏移量。 类似的规则适用于源NET_BUFFER中的 CurrentMdlOffset 和 SourceOffset 值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
目标平台 | 通用 |
标头 | ndis/nblapi.h (包括 ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function (ndis) |