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 返回以下状态值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
复制操作已成功完成。
NDIS_STATUS_RESOURCES
由于资源不足,复制操作失败。

注解

NdisCopyFromNetBufferToNetBuffer 的调用方分配目标NET_BUFFER结构,可能还会分配源NET_BUFFER结构。 目标NET_BUFFER结构的 MDL 应有足够的空间来接收数据。

如果源NET_BUFFER结构用完数据或目标NET_BUFFER结构在复制指定字节数之前空间不足,则复制操作将停止。 在任一情况下, NdisCopyFromNetBufferToNetBuffer 都返回成功从源复制到目标NET_BUFFER结构的字节数。

调用方必须确保 CurrentMdlOffsetCurrentMdl 值在源和目标 NET_BUFFER 结构中是正确的。 NDIS 不会更改目标NET_BUFFER的成员。 在 NdisCopyFromNetBufferToNetBuffer 返回后,调用方必须更新目标NET_BUFFER中的 DataLengthDataOffsetCurrentMdlOffset 值。

NDIS 使用 NdisCopyFromNetBufferToNetBufferDestionationOffsetSourceOffset 参数中的偏移量作为当前数据偏移量的偏移量。 例如,如果目标NET_BUFFER中的 CurrentMdlOffset 值为 x,DestinationOffset 值为 y,则 NDIS 会将数据复制到目标NET_BUFFER当前Mdl 值所描述的内存中的 x+ y 偏移量。 类似的规则适用于源NET_BUFFER中的 CurrentMdlOffsetSourceOffset 值。

要求

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

另请参阅

NET_BUFFER