verifyScripts 函数 (winnls.h)
比较两个枚举的脚本列表。
语法
BOOL VerifyScripts(
[in] DWORD dwFlags,
[in] LPCWSTR lpLocaleScripts,
[in] int cchLocaleScripts,
[in] LPCWSTR lpTestScripts,
[in] int cchTestScripts
);
参数
[in] dwFlags
指定脚本验证选项的标志。
值 | 含义 |
---|---|
|
允许“Latn” (拉丁语脚本) 测试列表中,即使它不在区域设置列表中。 |
[in] lpLocaleScripts
指向区域设置列表的指针,该列表是给定区域设置的枚举脚本列表。 此列表通常通过调用 GetLocaleInfoEx 填充, LCType 设置为 LOCALE_SSCRIPTS。
[in] cchLocaleScripts
lpLocaleScripts 指示的字符串的大小(以字符为单位)。 如果字符串以 null 结尾,则应用程序将此参数设置为 -1。 如果此参数设置为 0,则函数将失败。
[in] lpTestScripts
指向测试列表的指针,第二个枚举的脚本列表。 此列表通常通过调用 GetStringScripts 进行填充。
[in] cchTestScripts
lpTestScripts 指示的字符串的大小(以字符为单位)。 如果字符串以 null 结尾,则应用程序将此参数设置为 -1。 如果此参数设置为 0,则函数将失败。
返回值
如果测试列表为非空且列表中的所有项也包含在区域设置列表中,则返回 TRUE 。 如果区域设置列表包含的脚本多于测试列表,但所有测试列表脚本都必须包含在区域设置列表中,则函数仍返回 TRUE 。 如果在 dwFlags 中指定了VS_ALLOW_LATIN,则函数的行为就像“Latn;”始终位于区域设置列表中一样。
在所有其他情况下,函数返回 FALSE。 此返回可以指示测试列表包含不在区域设置列表中的项,也可以指示错误。 若要区分这两种情况,应用程序应调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INVALID_FLAGS。 为标志提供的值无效。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
- ERROR_SUCCESS。 操作已成功完成,但未产生任何结果。
注解
此函数比较字符串,例如“Latn;Cyrl;“,由一系列 4 个字符的脚本名称组成,每个脚本名称后跟一个分号。 它还具有一个特殊情况,用于解释拉丁语脚本经常用于非本机语言和区域设置这一事实。
此函数作为缓解与 国际化域名 (IDN) 相关的安全问题的策略的一部分非常有用。
下面是此函数的返回以及各种方案中 对 GetLastError 的后续调用的示例。 最后两个示例分别说明了以下情况:测试列表缺少终止分号 (格式错误的字符串) ,以及测试列表为空的情况。
区域设置字符串 | 测试字符串 | dwFlags | 返回值 | GetLastError 返回 |
---|---|---|---|---|
哈尼族;希拉;假名; | 哈尼族; | * | TRUE | (未更改) |
哈尼族;希拉;假名; | 哈尼族;Latn; | 0 | FALSE | ERROR_SUCCESS |
哈尼族;希拉;假名; | 哈尼族;Latn; | VS_ALLOW_LATIN | TRUE | (未更改) |
哈尼族;希拉;假名; | Cyrl; | * | FALSE | ERROR_SUCCESS |
哈尼族; | 哈尼族;希拉;假名; | * | FALSE | ERROR_SUCCESS |
哈尼族;希拉;假名; | Cyrl | * | FALSE | ERROR_INVALID_PARAMETER |
哈尼族;希拉;假名; | * | TRUE | (未更改) |
- 无论在 dwFlags 参数中传递VS_ALLOW_LATIN还是未提供标志,结果都是相同的。
示例
NLS:国际化域名 (IDN) 缓解示例 演示了此函数的用法。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winnls.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |