关于将 TZDEFINITION 保存到流以提交到二进制属性
时区属性 PidLidAppointmentTimeZoneDefinitionEndDisplay、 PidLidAppointmentTimeZoneDefinitionRecur 和 PidLidAppointmentTimeZoneDefinitionStartDisplay 是二进制命名属性,其中每个属性都包含映射到 TZDEFINITION 结构的持久格式的流。
本主题介绍将 TZDEFINITION 保存到流以提交到三个二进制属性之一时可以使用的小 endian 格式。 在分析器中使用相同的 endian 格式来解释从这些属性之一获取的流值。
BYTE bMajorVersion; // breaking change
BYTE bMinorVersion; // extensibility
WORD cbHeader; // size of following data until TZREG sub structure
WORD wFlags;
if (TZDEFINITION_FLAG_VALID_GUID)
GUID guid; // guid
if (TZDEFINITION_FLAG_VALID_KEYNAME)
WORD cchKeyName; // does not include null char
WCHAR rgchKeyName; // not null terminated
WORD cRules; // number of rules
// for each rule
BYTE bMajorVersion; // breaking change
BYTE bMinorVersion; // extensibility
WORD cbRule; // size of following data
WORD wFlags; // flags
SYSTEMTIME stStart; // GMT when this rule starts
// Following are the fields of the TZREG sub structure
long lBias; // offset from GMT
long lStandardBias; // offset from bias during standard time
long lDaylightBias; // offset from bias during daylight time
SYSTEMTIME stStandardDate; // time to switch to standard time
SYSTEMTIME stDaylightDate; // time to switch to daylight time
主版本号用于进行中断性变更。 不熟悉主版本号的客户端应将 属性视为不存在。 编写结构的客户端应指定常 量TZ_BIN_VERSION_MAJOR。
次要版本号用于扩展性。 不熟悉次要版本号的客户端应读取其理解的数据,并跳过可能附加到每个规则或整个流的数据。 编写结构的客户端应指定 常量TZ_BIN_VERSION_MINOR。
如果分析程序不了解标头的主版本,则它不应读取结构的其余部分,并且其行为就像缺少数据一样。 如果分析程序不了解标头的次要版本,则它应使用 cbHeader 忽略它不理解的部分,然后继续读取它理解的流部分。
wFlags 的值始终TZDEFINITION_FLAG_VALID_KEYNAME。 密钥名称的最大大小为 MAX_PATH。
如果分析程序无法识别规则的主版本,则客户端应忽略该规则,并使用 cbRule 前进到下一个规则。 如果分析程序无法识别规则的次要版本,则客户端应仅分析它理解的规则部分。
将 TZDEFINITION 结构保存到流时,分析程序不应尝试写入它不理解的任何信息。
最大规则数为 1024。
请注意, 此处保留 TZREG 结构与单独保留不同,因此不能使用相同的代码来分析它。