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中的成员。 调用方必须更新 DataLengthDataOffset,并在 NdisCopyFromNetBufferToNetBuffer 返回后 NET_BUFFER DestinationMdlOffset 值。

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

要求

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

另请参阅

NET_BUFFER