getStringScripts 函数 (winnls.h)
提供指定 Unicode 字符串中使用的脚本列表。
语法
int GetStringScripts(
[in] DWORD dwFlags,
[in] LPCWSTR lpString,
[in] int cchString,
[out, optional] LPWSTR lpScripts,
[in] int cchScripts
);
参数
[in] dwFlags
指定脚本检索选项的标志。
值 | 含义 |
---|---|
|
检索“Qaii” (INHERITED) 和“Zyyy” (COMMON) 脚本信息。 此标志不会影响未分配字符的处理。 输入字符串中的这些字符始终会导致“Zzzz” (UNASSIGNED 脚本) 出现在脚本字符串中。 |
[in] lpString
指向要分析的 Unicode 字符串的指针。
[in] cchString
lpString 指示的 Unicode 字符串的大小(以字符为单位)。 如果 Unicode 字符串以 null 结尾,则应用程序将此参数设置为 -1。 如果应用程序将此参数设置为 0,则该函数将在 lpScripts 中检索 null Unicode 字符串 (L“\0”) 并返回 1。
[out, optional] lpScripts
指向缓冲区的指针,在此缓冲区中,此函数使用 ISO 15924 中使用的 4 个字符表示法检索表示脚本列表的以 null 结尾的字符串。 每个脚本名称由四个拉丁字符组成,并按字母顺序检索名称。 每个名称(包括最后一个)后跟分号。
或者,如果 cchScripts 设置为 0,则此参数包含 NULL。 在这种情况下,函数返回脚本缓冲区所需的大小。
[in] cchScripts
lpScripts 指示的脚本缓冲区的大小(以字符为单位)。
或者,应用程序可以将此参数设置为 0。 在这种情况下,函数在 lpScript 中检索 NULL,并返回脚本缓冲区所需的大小。
返回值
如果成功且 cchScripts 设置为非零值,则返回在输出缓冲区中检索到的字符数,包括终止 null 字符。 函数返回 1,指示未找到任何脚本,例如,当输入字符串仅包含 COMMON 或 INHERITED 字符且未设置GSS_ALLOW_INHERITED_COMMON时。 假设每个找到的脚本 (4 个字符加上 5 个字符 + 分隔符) ,则简单的数学运算会将脚本计数设置为 (return_code - 1) / 5。
如果函数成功,并且 cchScripts 的 值为 0,则该函数将返回脚本缓冲区所需的大小(以字符为单位,包括终止 null 字符)。 脚本计数如上所述。
如果未成功,则此函数返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_BADDB。 函数无法访问数据。 这种情况通常不应发生,通常表示安装错误、磁盘问题或类似情况。
- ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL。
- ERROR_INVALID_FLAGS。 为标志提供的值无效。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
注解
此函数是缓解与国际化域名相关的安全问题的策略的一部分, (IDN) 。
脚本确定基于 Unicode 联盟在 中 http://www.unicode.org/Public/4.1.0/ucd/Scripts.txt发布的脚本值,不同之处在于,未分配字符的值是“Zzzz” (UNASSIGNED) 而不是“Zyyy” (COMMON) 。
下面是此函数行为的一些示例:
输入字符串 | dwFlags | lpScripts | 脚本 | |
---|---|---|---|---|
Microsoft.com | 0 | 兰特; | 拉丁语 | |
Microsoft.com | GSS_ALLOW_INHERITED_COMMON | 兰特;Zyyy; | 拉丁语 + 通用 | |
现象 | 004E 0069 0241 006F | GSS_ALLOW_INHERITED_COMMON | 兰特; | 拉丁语 |
使用带 TILDE 的拉丁文小写字母 N | ||||
现象 | 004E 0069 006E 0303 006F | GSS_ALLOW_INHERITED_COMMON | 兰特;Qaii; | 拉丁语 + 继承 |
使用 COMBINING TILDE | ||||
Spооf | 0053 0070 043e 043e 0066 | 0 | 兰特;Cyrl; | 拉丁文 + 西里尔文 |
使用西里尔文小写字母 O | ||||
| U+f000 | 0 | Zzzz; | 未分配 |
| U+f000 | GSS_ALLOW_INHERITED_COMMON | Zzzz; | 未分配 |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winnls.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |