DownlevelGetStringScripts 函数

提供指定的 Unicode 字符串中使用的脚本列表。

注意

此函数仅供 Windows Vista 之前的操作系统上运行的应用程序使用。 使用它需要下载包。 仅在 Windows Vista 及更高版本上运行的应用程序应调用 GetStringScripts

 

语法

int DownlevelGetStringScripts(
  _In_  DWORD   dwFlags,
  _In_  LPCWSTR lpString,
  _In_  int     cchString,
  _Out_ LPWSTR  lpScripts,
  _In_  int     cchScripts
);

参数

dwFlags [in]

用于指定脚本检索选项的标记。

含义
GSS_ALLOW_INHERITED_COMMON
检索“Qaii”(INHERITED) 和“Zyyy”(COMMON) 脚本信息。 此值不会影响未分配字符的处理。 输入字符串中的这些字符始终会导致脚本字符串中出现“Zzzz”(UNASSIGNED 脚本)。

 

注意

默认情况下,此函数会忽略输入 Unicode 字符串中的任何继承字符或常见字符。 如果未设置 GSS_ALLOW_INHERITED_COMMON,则即使输入字符串包含此类字符,“Qaii”和“Zyyy”也不会出现在脚本字符串中。 如果设置了 GSS_ALLOW_INHERITED_COMMON,并且输入字符串包含继承和/或常见字符,则脚本字符串中会显示“Qaii”和/或“Zyyy”。 请参阅“备注”部分。

 

lpString [in]

指向要分析的 Unicode 字符串的指针。

cchString [in]

lpString 指示的 Unicode 字符串的大小(以字符为单位)。 如果字符串以 null 结尾,则应用程序将此参数设置为 -1。 如果应用程序将此参数设置为 0,则函数在 lpScripts 中检索 null Unicode 字符串(L“\0”),并返回 1

lpScripts [out]

指向缓冲区的指针,此函数使用 ISO 15924 中使用的 4 字符表示法检索表示脚本列表的以 null 结尾的字符串。 每个脚本名称由四个拉丁字符组成,名称按字母顺序检索。 每个名称(包括最后一个)都后跟一个分号。

或者,如果 cchScripts 设置为 0,则此参数可以包含 NULL。 在这种情况下,该函数返回脚本缓冲区所需的大小。

cchScripts [in]

lpScripts 指示的脚本缓冲区的大小(以字符为单位)

或者,应用程序可以将此参数设置为 0。 在这种情况下,该函数在 lpScripts 中检索 NULL,并返回脚本缓冲区所需的大小

返回值

如果成功且 cchScripts 设置为非零值,则返回输出缓冲区中检索的字符数,包括终止 null 字符。 该函数返回 1 以指示未找到任何脚本,例如,输入字符串仅包含 COMMON 或 INHERITED 字符且未设置 GSS_ALLOW_INHERITED_COMMON。 鉴于每个找到的脚本会添加五个字符(四个字符 + 分隔符),简单的数学运算将按 (return_code - 1)/5 提供脚本计数。

如果函数成功且 cchScripts 的值为 0,则返回值是脚本缓冲区的终止 null 字符(包括终止 null 字符)所需的大小。 脚本计数如上所述。

如果此函数不成功,则返回 0。 若要获取扩展错误信息,可以让应用程序调用 GetLastError,它可能会返回以下错误代码之一

  • ERROR_BADDB。 函数无法访问数据。 这种情况一般不会发生,通常表示安装错误、磁盘问题或类似情况。
  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值无效。

备注

此函数在缓解与国际化域名 (IDN) 相关的安全问题的策略中非常有用。

脚本确定基于 Unicode 联盟在 https://www.unicode.org/Public/4.1.0/ucd/Scripts.txt 发布的脚本值,但未分配的字符具有值“Zzzz”(UNASSIGNED),而不是“Zyyy”(COMMON)。

下面是此函数行为的一些示例:

输入字符串

dwFlags

lpScripts

脚本

Microsoft.com

0

Latn;

拉丁语

Microsoft.com

GSS_ALLOW_INHERITED_COMMON

Latn;Zyyy;

拉丁字符 + 常见字符

${ROWSPAN2}$Niño${REMOVE}$

004E 0069 0241 006F

${ROWSPAN2}$GSS_ALLOW_INHERITED_COMMON${REMOVE}$

${ROWSPAN2}$Latn;${REMOVE}$

${ROWSPAN2}$Latin${REMOVE}$

使用带波形符的拉丁文小写字母 N

${ROWSPAN2}$Niño${REMOVE}$

004E 0069 006E 0303 006F

${ROWSPAN2}$GSS_ALLOW_INHERITED_COMMON${REMOVE}$

${ROWSPAN2}$Latn;Qaii;${REMOVE}$

${ROWSPAN2}$Latin + Inherited${REMOVE}$

使用 COMBINING TILDE

${ROWSPAN2}$Spооf${REMOVE}$

0053 0070 043e 043e 0066

${ROWSPAN2}$0${REMOVE}$

${ROWSPAN2}$Latn;Cyrl;${REMOVE}$

${ROWSPAN2}$Latin + Cyrillic${REMOVE}$

使用西里尔文小写字母 O

U+f000

0

Zzzz;

未分配

U+f000

GSS_ALLOW_INHERITED_COMMON

Zzzz;

未分配

 

所需的标题文件和 DLL 是可从 archive.org 下载的“Microsoft 国际化域名 (IDN) 缓解 API”的一部分。

要求

要求
最低受支持的客户端
Windows XP [仅限桌面应用]
最低受支持的服务器
Windows Server 2003 [仅限桌面应用]
可再发行组件
Windows XP(SP2 或更高版本)、Windows Server 2003(SP1 或更高版本)或 Windows Vista 上的 Microsoft 国际化域名 (IDN) 缓解 API
Header
Idndl.h
DLL
Idndl.dll

另请参阅

区域语言支持

区域语言支持函数

处理国际化域名 (IDN)

DownlevelGetLocaleScripts

DownlevelVerifyScripts

GetStringScripts