verifyScripts 函数 (winnls.h)

比较两个枚举的脚本列表。

语法

BOOL VerifyScripts(
  [in] DWORD   dwFlags,
  [in] LPCWSTR lpLocaleScripts,
  [in] int     cchLocaleScripts,
  [in] LPCWSTR lpTestScripts,
  [in] int     cchTestScripts
);

参数

[in] dwFlags

指定脚本验证选项的标志。

含义
VS_ALLOW_LATIN
允许“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

另请参阅

DownlevelVerifyScripts

GetLocaleInfoEx

GetStringScripts

处理国际化域名 (IDN)

国家语言支持

国家语言支持函数