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 |
|
DLL |
|
另请参阅