Sobre TZDEFINITION persistente em um fluxo para confirmar uma propriedade binária
As propriedades de fuso horário, PidLidAppointmentTimeZoneDefinitionEndDisplay, PidLidAppointmentTimeZoneDefinitionRecur e PidLidAppointmentTimeZoneDefinitionStartDisplay são propriedades nomeadas como binárias, cada uma contem um fluxo de mapas para o formato persistente de uma estrutura TZDEFINITION.
Este tópico descreve um pouco formato little endian que pode ser usado na persistência do fluxo TZDEFINITIONpara confirmar uma das três propriedades binárias. Usar o mesmo formato endian em um analisador para interpretar um valor de fluxo obtido a partir de uma dessas propriedades.
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
O número de versão principal é usado para alterar uma quebra. Clientes que não estejam familiarizados com o número de versão principal devem tratar a propriedade como se não estivesse lá. Clientes escrevendo a estrutura devem especificar a constante TZ_BIN_VERSION_MAJOR.
O número da versão secundária é usado para extensibilidade. Clientes que não são familiarizados com o número de versão secundária devem ler os dados que eles compreendem, e ignorar os dados que podem estar anexados a cada regra do fluxo atual. Clientes escrevendo a estrutura devem especificar a constante TZ_BIN_VERSION_MINOR.
Se uma analisador não entende a versão principal do cabeçalho, ele não deve ler o restante da estrutura e se comportar como se os dados estivessem ausentes. Se uma analisador não entende a versão secundária de cabeçalho, deverá usar cbHeaderpara ignorar partes que não entende e avançar para ler as partes do fluxo que ele entende.
O valor de wFlags sempre éTZDEFINITION_FLAG_VALID_KEYNAME. O nome da chave tem um limite de tamanho de MAX_PATH.
Se uma analisador não reconhecer a versão principal de uma regra, o cliente deve ignorar a regra e usar cbRule para avançar para a regra seguinte. Se uma analisador não reconhecer a versão secundária de uma regra, o cliente só deve analisar as partes compreensíveis da regra.
Quando uma estrutura TZDEFINITION persistir para um fluxo, o analisador não deve tentar gravar as informações que ele não entende.
O número máximo de regras é 1024.
Observe que a estruturaTZREG é mantida aqui, diferente de quando ela continua sozinha, por isso o mesmo código mesmo não pode ser usado para análise.