[此函数通过 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 代理项对中间的字符串。
如果 pwzSrc 和 pwzDst 缓冲区重叠,则函数的行为是未定义的。
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 或更高版本) |
另请参阅
StringCchLength