RtlStringCbCopyNA 函数 (ntstrsafe.h)

RtlStringCbCopyNWRtlStringCbCopyNA 函数将字节计数字符串复制到缓冲区,同时限制复制字符串的大小。

语法

NTSTRSAFEDDI RtlStringCbCopyNA(
  [out] NTSTRSAFE_PSTR pszDest,
  [in]  size_t         cbDest,
  [in]  STRSAFE_PCNZCH pszSrc,
        size_t         cbToCopy
);

参数

[out] pszDest

指向接收复制字符串的调用方提供的缓冲区的指针。 pszSrc(最多 cbSrc 字节)的字符串将复制到 pszDest 的缓冲区,并使用 null 字符终止。

[in] cbDest

目标缓冲区的大小(以字节为单位)。 缓冲区对于字符串和终止 null 字符必须足够大。

对于 Unicode 字符串,最大字节数为 NTSTRSAFE_MAX_CCH * sizeof(WCHAR)。

对于 ANSI 字符串,最大字节数为 NTSTRSAFE_MAX_CCH * sizeofchar)。

[in] pszSrc

指向调用方提供的 null 终止字符串的指针。

cbToCopy

要从 pszSrc 复制到 pszDest的最大字节数。

返回值

该函数返回下表中列出的 NTSTATUS 值之一。 有关如何测试 NTSTATUS 值的信息,请参阅 使用 NTSTATUS 值

返回代码 描述
STATUS_SUCCESS
成功 状态意味着源数据存在,字符串在没有截断的情况下复制,生成的目标缓冲区为 null 终止。
STATUS_BUFFER_OVERFLOW
警告 状态意味着复制作由于目标缓冲区中的空间不足而未完成。 目标缓冲区包含复制的字符串的截断版本。
STATUS_INVALID_PARAMETER
错误 状态意味着函数收到了无效的输入参数。 有关详细信息,请参阅以下段落。

此函数在以下情况下返回STATUS_INVALID_PARAMETER值:

  • cbDest 中的值大于最大缓冲区大小。
  • 目标缓冲区已满。
  • 存在 NULL 指针。
  • 目标缓冲区的长度为零,但存在非零长度源字符串。

言论

应使用 RtlStringCbCopyNWRtlStringCbCopyNA,而不是使用 strncpy。 但是,这些函数的行为有所不同。 如果 cbSrc 大于 pszSrc中的字节数,RtlStringCbCopyN 函数(与 strncpy不同)不会使用 null 字符填充 pszDest,直到复制 cbSrc 字节。

RtlStringCbCopyN 从源字符串复制给定的字节数。 目标缓冲区的大小(以字节为单位)提供给函数,以确保 RtlStringCbCopyN 不会写入此缓冲区的末尾。

使用 RtlStringCbCopyNW 来处理 Unicode 字符串,并使用 RtlStringCbCopyNA 来处理 ANSI 字符串。 所使用的窗体取决于你的数据,如下表所示。

字符串数据类型 字符串文本 功能
WCHAR L“string” RtlStringCbCopyNW
char “string” RtlStringCbCopyNA
 

如果 pszSrcpszDest 指向重叠字符串,则函数的行为是未定义的。

pszSrcpszDest 都不能 NULL。 如果需要处理 NULL 字符串指针值,请参阅 RtlStringCbCopyNEx

有关安全字符串函数的详细信息,请参阅 使用安全字符串函数

要求

要求 价值
最低支持的客户端 在 Windows XP 中提供 Service Pack 1(SP1)和更高版本的 Windows。
目标平台 桌面
标头 ntstrsafe.h (包括 Ntstrsafe.h)
Ntstrsafe.lib
IRQL 如果正在作的字符串始终驻留在内存中,则为任何字符串,否则PASSIVE_LEVEL

另请参阅

RtlStringCbCopy

RtlStringCbCopyNEx

RtlStringCchCopyN