ISyncFilterInfo::Serialize
将筛选器数据序列化到一个字节数组。
语法
HRESULT Serialize(
BYTE *pbBuffer,
DWORD *pcbBuffer);
参数
pbBuffer
[in, out, size_is(*pcbBuffer)] 返回序列化筛选器信息。将此值设置为 NULL 可请求所需的缓冲区大小。pcbBuffer
[in, out] 指定 pbBuffer 中的字节数。如果 pcbBuffer 太小,则返回序列化筛选器所需的字节数;否则返回写入的字节数。
返回值
S_OK。
E_INVALIDARG。
如果 pbBuffer 为 NULL,或者 pcbBuffer 太小,则返回值为 0x800700EA (HRESULT_FROM_WIN32(ERROR_MORE_DATA))。在这种情况下,则在 pcbBuffer 中返回序列化筛选器所需的字节数。
序列化格式
包含在 pbBuffer 中的序列化筛选器信息以压缩形式(无填充)的 Big-Endian 字节顺序存储。序列化筛选器信息按如下顺序包含以下元素。
一个标头部分。该标头部分包含以下元素。
数据类型
以字节为单位的长度
说明
ULONGLONG
8
筛选器信息的序列化格式的版本。当筛选器为项筛选器或变更单位筛选器时,此值为 2。当筛选器为自定义筛选器或组合筛选器时,此值为 3。
ULONG
4
与筛选器信息相关联的标志。这包含 SYNC_FILTER_INFO_FLAG 标志组中的值。
当标志包含 SYNC_FILTER_INFO_FLAG_ITEM_LIST 或 SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST 时,将序列化以下筛选器数据。
数据类型
以字节为单位的长度
说明
BOOL
1
指示包含在筛选器信息中的变更单位 ID 是固定长度还是可变长度。如果变更单位 ID 是固定长度,则此值为 0;如果变更单位 ID 是可变长度,则此值为 1。
USHORT
2
固定长度的变更单位 ID 的长度(字节),或可变长度的变更单位 ID 的最大长度。
ULONG
4
包含在筛选器信息中的变更单位 ID 数。
筛选器信息包含变更单位 ID 的列表,列表长度等于上一个 ULONG 中包含的值。
每个变更单位 ID 包含以下元素。
当变更单位 ID 是固定长度时。
数据类型
以字节为单位的长度
说明
字节序列
以变更单位 ID 格式指定的长度。
固定长度的变更单位 ID。
或者,当变更单位 ID 是可变长度时。
数据类型
以字节为单位的长度
说明
USHORT
2
可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。
字节序列
上一个 USHORT 中指定的长度。
可变长度的变更单位 ID。
当标志包含 SYNC_FILTER_INFO_FLAG_CUSTOM 时,将序列化以下筛选器数据。
数据类型
以字节为单位的长度
说明
字节序列
由自定义筛选器确定。
通过 ISyncFilter::Serialize 方法写入流中的序列化筛选器数据。
当标志包含 SYNC_FILTER_INFO_COMBINED 时,将序列化以下筛选器数据。
数据类型
以字节为单位的长度
说明
ULONG
4
组合中第一个筛选器信息对象的长度(以字节为单位)。
字节序列
上一个 ULONG 中指定的长度。
第一个筛选器的序列化筛选器信息,采用本文档指定的格式。
ULONG
4
组合中第二个筛选器信息对象的长度(以字节为单位)。
字节序列
上一个 ULONG 中指定的长度。
第二个筛选器的序列化筛选器信息,采用本文档指定的格式。