保留的属性标识符

保留的属性标识符不能用作属性标识符 (ID) 。 可以使用任何属性标识符 (ID) ,但 0、1 以及大于或等于0x80000000的任何值除外。 这些属性标识符值保留供应用程序使用。

下表列出了保留的属性 ID 以及保留属性 ID 的说明。

保留的属性 ID 说明
0 保留用于创建可选的 属性集显示名称字典。 这使属性集用户能够将含义附加到属性(类型指示器提供的属性除外)。
1 保留为代码页的指示符, (Windows) 或脚本 (Macintosh) 解释属性集中的字符串。
属性集中的所有字符串值都必须使用相同的代码页进行存储。 属性集标头中的原始操作系统值 (PROPERTYSETHEADER::d wOSVer) 确定代码页指示器是对应于 Windows 代码页还是 Macintosh 脚本。
0x80000000 保留作为写入属性集的区域设置的指示。
属性集的默认区域设置是系统默认区域设置 (LOCALE_SYSTEM_DEFAULT) 。 有关LOCALE_SYSTEM_DEFAULT的详细信息,请参阅 Win32 API。 如果属性集中不存在区域设置指示器,则使用默认值。
0x80000003 保留为属性集行为的指示器。 此属性 ID 值是一个VT_UI4,以包含值VT_UI4后跟指示属性集行为的 DWORD 数据类型开头。
目前,此值中唯一定义的位是低序位 (0x1) 。 如果设置了此位,则表示属性 ID 0 指示的属性集名称应被视为区分大小写。 如果未设置此位,或者不存在 (ID 0x80000003) 的行为属性,则应将名称视为不区分大小写。
0xFFFFFFFF 保留是为了方便可编程性。 它绝不应出现在序列化的属性集中。

具有高位 (即负值) 的属性标识符保留供 Microsoft 将来使用。

在保留属性中,那些 ID 值在0x80000000到0xBFFFFFFF范围内的属性被视为只读的,这些实现不了解其含义。 例如,如果实现不了解属性0x80000000的含义,则应允许读取但不能写入或删除该属性。 此类实现应允许读取、写入或删除0xC0000000 0xFFFFFFFE范围内的属性。 属性 ID 0xFFFFFFFF是保留值,不应出现在序列化的属性集中。

属性集区域设置

应用程序可以选择支持区域设置或使用默认行为。 建议应用程序允许用户指定工作区域设置。 此类应用程序应将用户指定的区域设置标识符写入 属性。 使用用户默认区域设置 (LOCALE_USER_DEFAULT) 的应用程序应将用户默认区域设置标识符写入 属性。 有关LOCALE_USER_DEFAULT的详细信息,请参阅 Win32 API。

注意

如果使用 IPropertySetStorage 接口创建属性集,则用户默认区域设置将自动编写为区域设置指示器。

应用程序还应处理外部对象的情况,即区域设置不是应用程序区域设置、用户区域设置或系统区域设置的情况。

区域设置指示符属性的类型为 VT_U14,因此由包含VT_U14的 DWORD 组成,后跟一个包含 Win32 API 中定义的区域设置标识符 (LCID) 的 DWORD

代码页指示器

当不是属性集作者的应用程序更改集中字符串类型的属性时,它应检查代码页指示器并执行以下操作之一:

  • 以代码页指示器指定的格式编写字符串。
  • 替换并重写以更改代码页。

如果应用程序无法识别此指示器,则它不应修改 属性。 属性集的所有创建者都必须编写代码页指示器;但是,如果代码页指示器不存在,则必须假定读者计算机上的当前代码页。

注意

如果使用 IPropertySetStorage 接口创建属性集,则会自动编写代码页指示器。

Win32 API (中提供了代码页的可能值,有关详细信息,请参阅 GetACP 函数) 和 Macintosh 卷 VI 第 14-111 页。 (这些资源在某些语言和国家/地区中可能不可用。) 例如,代码页 US ANSI 以十进制) 0x04E4 (1252 表示,而 Unicode 的代码页以十进制) 0x04B0 (1200 表示。

建议尽可能使用 Unicode 代码页,并使用 VT_LPWSTR 而不是VT_LPSTR,以避免在存储和检索过程中进行多字节 <Unicode> 转换。 对所有属性集使用相同的代码页是在全球范围内实现可互操作属性集的唯一方法。 在 Unicode 或非 Unicode 代码页中,请注意,VT_LPSTR或VT_BSTR开头的计数是 字节 计数,而不是 字符 计数。 此字节计数包括字符串末尾的一个或两个零字节, (字符串) 的 NULL 终止符。

属性 ID 1 是一种VT_I2类型,以包含值VT_I2后跟指示代码页的 SHORTDWORD 开头。