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 字节顺序存储。序列化筛选器信息按如下顺序包含以下元素。

  1. 一个标头部分。该标头部分包含以下元素。

    数据类型

    以字节为单位的长度

    说明

    ULONGLONG

    8

    筛选器信息的序列化格式的版本。当筛选器为项筛选器或变更单位筛选器时,此值为 2。当筛选器为自定义筛选器或组合筛选器时,此值为 3。

    ULONG

    4

    与筛选器信息相关联的标志。这包含 SYNC_FILTER_INFO_FLAG 标志组中的值。

  2. 当标志包含 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。

  3. 当标志包含 SYNC_FILTER_INFO_FLAG_CUSTOM 时,将序列化以下筛选器数据。

    数据类型

    以字节为单位的长度

    说明

    字节序列

    由自定义筛选器确定。

    通过 ISyncFilter::Serialize 方法写入流中的序列化筛选器数据。

  4. 当标志包含 SYNC_FILTER_INFO_COMBINED 时,将序列化以下筛选器数据。

    数据类型

    以字节为单位的长度

    说明

    ULONG

    4

    组合中第一个筛选器信息对象的长度(以字节为单位)。

    字节序列

    上一个 ULONG 中指定的长度。

    第一个筛选器的序列化筛选器信息,采用本文档指定的格式。

    ULONG

    4

    组合中第二个筛选器信息对象的长度(以字节为单位)。

    字节序列

    上一个 ULONG 中指定的长度。

    第二个筛选器的序列化筛选器信息,采用本文档指定的格式。

请参阅

其他资源

ISyncFilterInfo 接口