SHUnicodeToUnicode 函数 (shlwapi.h)

[此函数可通过 Windows XP 和 Windows Server 2003 使用。 在后续版本的 Windows 中,它可能已更改或不可用。]

复制 Unicode 字符串。

语法

int SHUnicodeToUnicode(
  [in]  PCWSTR pwzSrc,
  [out] PWSTR  pwzDst,
        int    cwchBuf
);

参数

[in] pwzSrc

类型: PCWSTR

指向要复制到输出缓冲区的以 null 结尾的 Unicode 字符串的指针。

[out] pwzDst

类型: PWSTR

指向输出缓冲区的指针,用于接收复制的字符。 缓冲区必须足够大,才能包含 cwchBuf 指定的 WCHAR 字符数,包括终止 null 字符的空间。

cwchBuf

类型: int

pwzDst 参数指向的缓冲区可以包含的 WCHAR 字符数。 此参数必须大于零。

返回值

类型: int

返回写入输出缓冲区的 WCHAR 字符数,包括终止 null 字符。 如果失败,则返回 0。

注解

安全警告: 错误使用此函数可能会危及应用程序的安全性。 例如,如果 pwzDst 缓冲区的大小不足以包含 cwchBuf 指定的字符数,则可能会发生缓冲区溢出。 如果发生访问冲突,缓冲区溢出可能会导致对应用程序的拒绝服务攻击。 在最坏的情况下,缓冲区溢出可能允许攻击者将可执行代码注入进程,尤其是在 pwzDst 是基于堆栈的缓冲区时。 复制整个字符串时,请注意 sizeof 返回字节数,这不是 用于 cwchBuf 参数的正确值。 请改用 sizeof (pwzDst) /sizeof (WCHAR) 。 请注意,此方法假定 pwzDst 是数组,而不是指针。 另请注意,如果缓冲区不够大,函数会以无提示方式截断输出字符串。 这可能会导致规范化或其他安全漏洞。

如果 pwzDst 缓冲区的大小不足以包含整个转换后的输出字符串,则字符串将被截断以适应缓冲区。 无法检测返回字符串已被截断。 字符串将始终以 null 结尾,即使它已被截断。 这可确保将不超过 cwchBuf 字符复制到 pwzDst。 不会尝试避免截断 Unicode 代理项对中间的字符串。

如果 pwzSrcpwzDst 缓冲区重叠,则函数的行为未定义。

注意 不要假定 函数未更改输出缓冲区中字符串的终止 null 字符后的任何字符。 字符串终止 null 字符之后的输出缓冲区的内容未定义,最多包括缓冲区中的最后一个字符。
 
SHTCharToUnicode 定义为与 SHUnicodeToUnicode 相同。

SHUnicodeToTChar 定义为与 SHUnicodeToUnicode 相同。

要求

要求
最低受支持的客户端 Windows 2000 专业版、Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 shlwapi.h
DLL Shlwapi.dll (5.0 或更高版本)

另请参阅

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength