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。
如果 pbKnowledge 太小,则返回值为 HRESULT_FROM_WIN32(ERROR_MORE_DATA)。在这种情况下,将在 pcbKnowledge 中返回必需的字节数。
备注
必须利用适当的 IReplicaKeyMap 接口 对象,才能使用 IProviderSyncServices::DeserializeSyncKnowledge 反序列化知识对象。在为 fSerializeReplicaKeyMap 指定 FALSE 时,会将 IReplicaKeyMap 对象与知识数据一起进行序列化。如果未指定此标志,则必须使用其他方式存储 IReplicaKeyMap 数据,以便能够反序列化知识对象。
序列化格式
包含在 pbKnowledge 中的序列化知识以压缩形式(没有填充)并按 Big-Endian 字节顺序存储。序列化知识按如下顺序包含以下元素。
一个标头部分。该标头部分包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
序列化格式的主版本。此值始终为 3。
ULONG
4
序列化格式的次版本。此值始终为 0。
如果 fSerializeReplicaKeyMap 为 TRUE,则显示一个副本键映射部分。否则,不显示任何副本键映射部分。IReplicaKeyMap::Serialize 中定义了副本键映射部分的格式。
一个 ID 格式架构部分。该 ID 格式架构部分包含以下元素:
数据类型 以字节为单位的长度 说明 BOOL
1
指示包含在知识中的项 ID 是固定长度还是可变长度。如果项 ID 是固定长度,则此值为 0;如果项 ID 是可变长度,则此值为 1。
USHORT
2
固定长度的项 ID 的长度(以字节为单位),或可变长度的项 ID 的最大长度。
BOOL
1
指示包含在知识中的变更单位 ID 是固定长度还是可变长度。如果变更单位 ID 是固定长度,则此值为 0;如果变更单位 ID 是可变长度,则此值为 1。
USHORT
2
固定长度的变更单位 ID 的长度(字节),或可变长度的变更单位 ID 的最大长度。
一个范围时钟向量部分。该范围时钟向量部分包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 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 馈送关联的标志。
一个范围异常部分。该范围异常部分包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
范围异常部分签名。此值始终为 3。
ULONG
4
知识中包含的范围异常的数量。
范围异常部分包含一个范围异常的列表,其中范围异常的数量与上一个 ULONG 中指定的数值相等。
每个范围异常都包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
范围异常签名。此值始终为 2。
当项 ID 为固定长度时:
数据类型 以字节为单位的长度 说明 字节序列
在项 ID 格式中指定的长度。
范围的下限项 ID 的固定长度项 ID。
字节序列
在项 ID 格式中指定的长度。
范围的上限项 ID 的固定长度项 ID。
或者,当项 ID 为可变长度时:
数据类型 以字节为单位的长度 说明 USHORT
2
可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。
字节序列
上一个 USHORT 中指定的长度。
范围的下限项 ID 的可变长度项 ID。
USHORT
2
可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。
字节序列
上一个 USHORT 中指定的长度。
范围的上限项 ID 的可变长度项 ID。
与范围异常关联的时钟向量:
数据类型 以字节为单位的长度 说明 ULONG
4
时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 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 馈送关联的标志。
单个项异常部分。该单个项异常部分包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
单个项异常部分签名。此值始终为 6。
ULONG
4
时钟向量表签名。此值始终为 4。
ULONG
4
时钟向量表中包含的时钟向量的数量。
时钟向量表。时钟向量表中包含一个时钟向量的列表,其中时钟向量的数量与上一个 ULONG 中指定的数值相等。每个时钟向量都包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 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 馈送关联的标志。
单个项异常表。该单个项异常表包含以下元素:
数据类型 以字节为单位的长度 说明 ULONG
4
单个项异常表中包含的单个项异常的数量。
该表中的每个项异常包含以下元素:
当项 ID 为固定长度时:
数据类型 以字节为单位的长度 说明 字节序列
在项 ID 格式中指定的长度。
与单个项异常关联的固定长度的项 ID。
或者,当项 ID 为可变长度时:
数据类型 以字节为单位的长度 说明 USHORT
2
可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。
字节序列
上一个 USHORT 中指定的长度。
与单个项异常关联的可变长度的项 ID。
每个项异常都包含以下附加元素:
数据类型 以字节为单位的长度 说明 ULONG
4
当单个项异常引用某个项时,此值是时钟向量表中的一个索引并包含在此序列化数据中。当单个项异常引用一个或多个变更单位异常时,此值为 0xFFFFFFFF。
ULONG
4
异常中包含的变更单位异常的数量。此值可以为 0。
当存在变更单位异常时,将后跟一个变更单位异常的列表。该列表包含上一个 ULONG 中指定的变更单位异常的数量。
每个变更单位异常都包含以下元素。
当变更单位 ID 是固定长度时:
数据类型 以字节为单位的长度 说明 字节序列
以变更单位 ID 格式指定的长度。
与变更单位异常关联的固定长度的变更单位 ID。
或者,当变更单位 ID 是可变长度时:
数据类型 以字节为单位的长度 说明 USHORT
2
可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。
字节序列
上一个 USHORT 中指定的长度。
与变更单位异常关联的可变长度的变更单位 ID。
每个变更单位异常都包含以下附加元素:
数据类型 以字节为单位的长度 说明 ULONG
4
包含在此序列化数据中的时钟向量表中的索引。