バイナリ プロパティにコミットするためにストリームに TZDEFINITION を保持することについて
タイム ゾーン プロパティ PidLidAppointmentTimeZoneDefinitionEndDisplay、 PidLidAppointmentTimeZoneDefinitionRecur、 PidLidAppointmentTimeZoneDefinitionStartDisplay はバイナリの名前付きプロパティであり、それぞれに TZDEFINITION 構造体の永続化された形式にマップされるストリームが含まれています。
このトピックでは、 TZDEFINITION をストリームに永続化して 3 つのバイナリ プロパティのいずれかにコミットするときに使用できる、少しエンディアン形式について説明します。 パーサーで同じエンディアン形式を使用して、これらのプロパティの 1 つから取得されたストリーム値を解釈します。
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 構造体は、単独で永続化される場合とは異なる方法で永続化されるため、同じコードを使用して解析することはできません。