ISyncKnowledge::Serialize

ナレッジ オブジェクトのデータをバイト配列にシリアル化します。

HRESULT Serialize( 
  BOOL fSerializeReplicaKeyMap,
  BYTE *pbKnowledge,
  DWORD *pcbKnowledge);

パラメーター

  • fSerializeReplicaKeyMap
    [in] ナレッジに含まれている IReplicaKeyMap オブジェクトをシリアル化する場合は TRUE。それ以外の場合は FALSE
  • pbKnowledge
    [in, out, unique, size_is(*pcbKnowledge)] シリアル化されたナレッジ データを受け取るバイト配列です。
  • pcbKnowledge
    [in, out] pbKnowledge のバイト数を指定します。書き込まれたバイト数を返します。pbKnowledge が小さすぎる場合は、レプリカ キー マップのデータをシリアル化するために必要なバイト数を返します。

戻り値

  • S_OK

  • E_POINTER

  • E_INVALIDARG

  • E_OUTOFMEMORY

  • HRESULT_FROM_WIN32(ERROR_MORE_DATA) (pbKnowledge が小さすぎる場合。この場合、必要なバイト数が pcbKnowledge で返されます。)

解説

IProviderSyncServices::DeserializeSyncKnowledge を使用してナレッジ オブジェクトのシリアル化を解除するには、適切な IReplicaKeyMap インターフェイス オブジェクトが必要です。fSerializeReplicaKeyMap に FALSE が指定されている場合は、IReplicaKeyMap オブジェクトがナレッジ データと共にシリアル化されます。このフラグが指定されていない場合は、ナレッジ オブジェクトのシリアル化を解除できるように、別の方法で IReplicaKeyMap データを格納する必要があります。

シリアル化形式

pbKnowledge に含まれるシリアル化されたナレッジは、埋め込みなしのコンパクトな形式で、ビッグ エンディアンのバイト順に格納されています。シリアル化されたナレッジには、以下の要素が以下に示す順序で含まれます。

  1. 1 つのヘッダー セクション。ヘッダー セクションには、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    シリアル化形式のメジャー バージョンです。この値は常に 3 です。

    ULONG

    4

    シリアル化形式のマイナー バージョンです。この値は常に 0 です。

  2. fSerializeReplicaKeyMap が TRUE の場合は 1 つのレプリカ キー マップ セクション。それ以外の場合、レプリカ キー マップ セクションは存在しません。レプリカ キー マップ セクションの形式は、IReplicaKeyMap::Serialize で定義されます。

  3. 1 つの ID 形式スキーマ セクション。ID 形式スキーマ セクションには、次の要素が含まれます。

    データ型 バイト数 説明

    BOOL

    1

    ナレッジに含まれる項目 ID が固定長か可変長かを示します。この値は、ID が固定長の場合に 0、可変長の場合に 1 になります。

    USHORT

    2

    固定長 ID の場合は項目 ID の長さ (バイト数)、可変長 ID の場合は ID の最大長です。

    BOOL

    1

    ナレッジに含まれる変更単位 ID が固定長か可変長かを示します。この値は、ID が固定長の場合に 0、可変長の場合に 1 になります。

    USHORT

    2

    固定長 ID の場合は変更単位 ID の長さ (バイト数)、可変長 ID の場合は ID の最大長です。

  4. 1 つのスコープ クロック ベクター セクション。スコープ クロック ベクター セクションには、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    クロック ベクターの署名です。この値は、クロック ベクターに FeedSync フィード項目が含まれていない場合に 1、それ以外の場合 (クロック ベクターに FeedSync フィード項目が含まれている場合) に 9 になります。

    ULONG

    4

    このクロック ベクターに含まれるクロック ベクター要素の数です。

    クロック ベクターに FeedSync フィード項目が含まれている場合は、次のセクションがシリアル化されたナレッジに存在します。それ以外の場合は存在しません。

    データ型 バイト数 説明

    ULONG

    4

    このナレッジに関連付けられている FeedSync フィードにこれまでに適用された更新の数です。この値は、FeedSync フィードの updates 属性に対応します。

    BYTE

    1

    FeedSync フィードが競合を追跡するかどうかを示します。この値は、FeedSync フィードの noconflicts 属性に対応します。この値は、noconflicts 属性が設定されていない場合は 0、それ以外の場合は 1 になります。

    残りのクロック ベクター セクションには、クロック ベクター要素の一覧が含まれ、この一覧の要素の数は、上記のクロック ベクター セクションで指定した値と一致します。

    各クロック ベクター要素には、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    レプリカ キーです。

    ULONGLONG

    8

    ティック数です。

    ナレッジが FeedSync フィードに関連付けられている場合、各クロック ベクター要素には次の追加要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    FeedSync フィードの when 値の日付部分です。

    ULONG

    4

    FeedSync フィードの when 値の時刻部分です。

    BYTE

    1

    FeedSync フィードに関連付けられているフラグです。

  5. 1 つの範囲の例外セクション。範囲の例外セクションには、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    範囲の例外セクションの署名です。この値は常に 3 です。

    ULONG

    4

    ナレッジに含まれている範囲の例外の数です。

    範囲の例外セクションには、範囲の例外の一覧が含まれ、この一覧の範囲の例外の数は、上記の ULONG で指定された値と一致します。

    各範囲の例外には、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    範囲の例外の署名です。この値は常に 2 です。

    項目 ID が固定長の場合は、次のとおりです。

    データ型 バイト数 説明

    バイト シーケンス

    項目 ID 形式で指定された長さ

    項目 ID の範囲の下限の固定長項目 ID です。

    バイト シーケンス

    項目 ID 形式で指定された長さ

    項目 ID の範囲の上限の固定長項目 ID です。

    項目 ID が可変長の場合は、次のとおりです。

    データ型 バイト数 説明

    USHORT

    2

    可変長 ID の長さ (バイト数) です。この長さには、長さを示す USHORT の 2 バイトに加えて、実際の ID を示すバイト列が含まれます。

    バイト シーケンス

    上記の USHORT で指定された長さ

    項目 ID の範囲の下限の可変長項目 ID です。

    USHORT

    2

    可変長 ID の長さ (バイト数) です。この長さには、長さを示す USHORT の 2 バイトに加えて、実際の ID を示すバイト列が含まれます。

    バイト シーケンス

    上記の USHORT で指定された長さ

    項目 ID の範囲の上限の可変長項目 ID です。

    範囲の例外に関連付けられているクロック ベクターには、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    クロック ベクターの署名です。この値は、クロック ベクターに FeedSync フィード項目が含まれていない場合に 1、それ以外の場合 (クロック ベクターに FeedSync フィード項目が含まれている場合) に 9 になります。

    ULONG

    4

    このクロック ベクターに含まれるクロック ベクター要素の数です。

    クロック ベクターに FeedSync フィード項目が含まれている場合は、次のセクションがシリアル化されたナレッジに存在します。それ以外の場合は存在しません。

    データ型 バイト数 説明

    ULONG

    4

    このナレッジに関連付けられている FeedSync フィードにこれまでに適用された更新の数です。この値は、FeedSync フィードの updates 属性に対応します。

    BYTE

    1

    FeedSync フィードが競合を追跡するかどうかを示します。この値は、FeedSync フィードの noconflicts 属性に対応します。この値は、noconflicts 属性が設定されていない場合は 0、それ以外の場合は 1 になります。

    残りのクロック ベクター セクションには、クロック ベクター要素の一覧が含まれ、この一覧の要素の数は、上記のクロック ベクター セクションで指定した値と一致します。

    各クロック ベクター要素には、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    レプリカ キーです。

    ULONGLONG

    8

    ティック数です。

    ナレッジが FeedSync フィードに関連付けられている場合、各クロック ベクター要素には次の追加要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    FeedSync フィードの when 値の日付部分です。

    ULONG

    4

    FeedSync フィードの when 値の時刻部分です。

    BYTE

    1

    FeedSync フィードに関連付けられているフラグです。

  6. 単一項目の例外セクション。単一項目の例外セクションには、次の要素が含まれます。

    データ型 バイト数 説明

    ULONG

    4

    単一項目の例外セクションの署名です。この値は常に 6 です。

    ULONG

    4

    クロック ベクター テーブルの署名です。この値は常に 4 です。

    ULONG

    4

    クロック ベクター テーブルに含まれるクロック ベクターの数です。

    1. クロック ベクター テーブル。クロック ベクター テーブルには、クロック ベクターの一覧が含まれ、この一覧のクロック ベクターの数は、上記の ULONG で指定された値と一致します。各クロック ベクターには、次の要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      クロック ベクターの署名です。この値は、クロック ベクターに FeedSync フィード項目が含まれていない場合に 1、それ以外の場合 (クロック ベクターに FeedSync フィード項目が含まれている場合) に 9 になります。

      ULONG

      4

      このクロック ベクターに含まれるクロック ベクター要素の数です。

      クロック ベクターに FeedSync フィード項目が含まれている場合は、次のセクションがシリアル化されたナレッジに存在します。それ以外の場合は存在しません。

      データ型 バイト数 説明

      ULONG

      4

      このナレッジに関連付けられている FeedSync フィードにこれまでに適用された更新の数です。この値は、FeedSync フィードの updates 属性に対応します。

      BYTE

      1

      FeedSync フィードが競合を追跡するかどうかを示します。この値は、FeedSync フィードの noconflicts 属性に対応します。この値は、noconflicts 属性が設定されていない場合は 0、それ以外の場合は 1 になります。

      残りのクロック ベクター セクションには、クロック ベクター要素の一覧が含まれ、この一覧の要素の数は、上記のクロック ベクター セクションで指定した値と一致します。

      各クロック ベクター要素には、次の要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      レプリカ キーです。

      ULONGLONG

      8

      ティック数です。

      ナレッジが FeedSync フィードに関連付けられている場合、各クロック ベクター要素には次の追加要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      FeedSync フィードの when 値の日付部分です。

      ULONG

      4

      FeedSync フィードの when 値の時刻部分です。

      BYTE

      1

      FeedSync フィードに関連付けられているフラグです。

    2. 単一項目の例外テーブル。単一項目の例外テーブルには、次の要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      単一項目の例外テーブルに含まれている単一項目の例外の数です。

      テーブル内の各単一項目の例外には、次の要素が含まれます。

      項目 ID が固定長の場合は、次のとおりです。

      データ型 バイト数 説明

      バイト シーケンス

      項目 ID 形式で指定された長さ

      単一項目の例外に関連付けられている固定長の項目 ID です。

      項目 ID が可変長の場合は、次のとおりです。

      データ型 バイト数 説明

      USHORT

      2

      可変長 ID の長さ (バイト数) です。この長さには、長さを示す USHORT の 2 バイトに加えて、実際の ID を示すバイト列が含まれます。

      バイト シーケンス

      上記の USHORT で指定された長さ

      単一項目の例外に関連付けられている可変長の項目 ID です。

      各単一項目の例外には、次の追加要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      単一項目の例外が項目を参照する場合、この値は、このシリアル化されたデータに含まれるクロック ベクター テーブルへのインデックスです。単一項目の例外が 1 つ以上の変更単位の例外を参照する場合、この値は 0xFFFFFFFF になります。

      ULONG

      4

      例外に含まれている変更単位の例外の数です。この値には 0 を指定できます。

      変更単位の例外が存在する場合は、その後に変更単位の例外の一覧が続きます。この一覧には、上記の ULONG で指定された数の変更単位の例外が含まれます。

      各変更単位の例外には、次の要素が含まれます。

      変更単位 ID が固定長の場合は、次のとおりです。

      データ型 バイト数 説明

      バイト シーケンス

      変更単位 ID 形式で指定された長さ

      変更単位の例外に関連付けられている、固定長の変更単位 ID です。

      変更単位 ID が可変長の場合は、次のとおりです。

      データ型 バイト数 説明

      USHORT

      2

      可変長 ID の長さ (バイト数) です。この長さには、長さを示す USHORT の 2 バイトに加えて、実際の ID を示すバイト列が含まれます。

      バイト シーケンス

      上記の USHORT で指定された長さ

      変更単位の例外に関連付けられている、可変長の変更単位 ID です。

      各変更単位の例外には、次の追加要素が含まれます。

      データ型 バイト数 説明

      ULONG

      4

      このシリアル化されたデータに含まれているクロック ベクター テーブルへのインデックスです。

参照

リファレンス

ISyncKnowledge インターフェイス