SHUnicodeToUnicode 函数 (shlwapi.h)

[此函数通过 Windows XP 和 Windows Server 2003 提供。 在后续版本的 Windows 中,可能会更改或不可用。

复制 Unicode 字符串。

Syntax

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 相同。

要求

Requirement 价值
最低支持的客户端 Windows 2000 Professional、Windows XP [仅限桌面应用]
支持的最低服务器 Windows 2000 Server、Windows Server 2003 [仅限桌面应用]
目标平台 Windows操作系统
Header shlwapi.h
Library mincore_downlevel.lib
DLL Shlwapi.dll (版本 5.0 或更高版本)

另请参阅

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength