DEVPROP_TYPE_STRING_INDIRECT标识符表示包含间接字符串引用的 NULL 终止 Unicode 字符串的基数据类型标识符。
Remarks
间接字符串引用描述包含实际字符串的字符串资源。 间接字符串引用可以采用以下格式之一显示:
@[path\]FileName,-ResourceID
Windows从路径和 FileName 条目指定的模块中提取字符串,并且该字符串的资源标识符由 ResourceID 条目(不包括所需的减号)提供。 字符串资源从模块资源部分加载,该节最匹配调用方的首选 UI 语言之一。
路径条目是可选的。 如果指定 路径 条目,则模块必须位于系统定义的搜索路径中的目录中。
@
InfName,%strkey%
Windows从 INF 文件的 INF 字符串部分提取其名称由 InfName 条目提供的 %SystemRoot%\inf 目录中的字符串。
strkey 令牌标识符应与字符串部分中一行的密钥匹配,该键最匹配调用方的首选 UI 语言之一。 如果不存在特定于语言的字符串部分,Windows使用默认的 Strings 节。
不能将DEVPROP_TYPE_STRING_INDIRECT与任何属性数据类型修饰符组合在一起。
设置此类型的属性
若要设置基数据类型为DEVPROP_TYPE_STRING_INDIRECT的属性,请调用相应的 SetupDiSetXxx 属性函数并设置函数输入参数,如下所示:
将 PropertyType 参数设置为DEVPROP_TYPE_STRING_INDIRECT。
将 PropertyBuffer 参数设置为指向包含提供间接字符串引用的 NULL 终止字符串的缓冲区的指针。
将 PropertyBufferSize 参数设置为字符串的大小(以字节为单位)。
根据需要设置剩余的函数参数以设置属性。
检索此属性类型的值
当应用程序调用 SetupDiGetXxx 属性函数以检索此基数据类型的属性的值时,Windows尝试查找属性引用的实际字符串。 如果Windows可以检索实际字符串,它将实际字符串返回到调用方,并将检索的属性的基本数据类型标识为DEVPROP_TYPE_STRING。 否则,Windows返回间接字符串引用,并将检索的属性的基数据类型标识为DEVPROP_TYPE_STRING_INDIRECT。
本地化静态文本
从Windows Vista开始,可以通过将静态文本属性类型设置为DEVPROP_TYPE_STRING_INDIRECT,使用 PE 映像的字符串或资源表中的资源本地化自定义和标准字符串类型 PnP 静态文本属性。 还可以添加可格式化为静态文本的非本地化替换字符串数据。
位于 PE 映像的 STRINGTABLE 资源中的字符串(通常由 LoadString 执行)应使用以下格式:
“@”System32\mydll.dll,-21[;回退“字符串]”
“@System32\mydll.dll,-21[;带有 %1的回退字符串,%2,... 到 %n[;(Arg1,Arg2,...,ArgN]]”
位于 PE 映像的消息表资源中的字符串(通常由 RtlFindMessage 执行)应使用以下格式:
“@System32\drivers\mydriver.sys,#21[;回退字符串]”
“@System32\drivers\mydriver.sys,#21[;带有 %1的回退字符串,%2,... 到 %n[;(Arg1,Arg2,...,ArgN]]”
“回退字符串”是可选的,但很有用,因为如果找不到或加载资源,则可以返回它。 回退字符串也会返回到非交互式系统进程,这些进程不会模拟用户,因此无论如何都无法向用户显示本地化文本。
通过此方法,你可以本地化从与调用方的区域设置最匹配的字符串或消息表资源中提取的静态文本。
Windows从相应的资源表中检索后备参数时,会将尾随参数格式化为字符串(或回退字符串),就像 RtlFormatMessage 一样。
通过从执行集操作的组件加载资源来设置属性时,自定义和标准字符串类型 PnP 静态文本已本地化,这通常发生在系统级组件的系统默认区域设置下。
注意:PE 映像可以使用资源表类型(STRINGTABLE 资源或消息表资源)。
要求
Version |
Windows Vista及更高版本的Windows。 |
Header |
Devpropdef.h (包括 Devpropdef.h) |