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 中傳回。
備註
若要使用 IProviderSyncServices::DeserializeSyncKnowledge 還原序列化知識物件,需要適當的 IReplicaKeyMap 介面 物件。針對 fSerializeReplicaKeyMap 指定 FALSE 時,IReplicaKeyMap 物件會與知識資料一起序列化。未指定此旗標時,必須以其他方式儲存 IReplicaKeyMap 資料,讓知識物件可以進行還原序列化。
序列化格式
pbKnowledge 中所包含的序列化知識儲存在以位元組由大到小順序排列的壓縮模式中,不帶填補。序列化的知識包含下列元素 (依下列順序)。
一個標頭區段。標頭區段包含下列元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
序列化格式的主要版本。這個值一定是 3。
ULONG
4
序列化格式的次要版本。這個值一定是 0。
一個複寫機碼對應區段 (當 fSerializeReplicaKeyMap 為 TRUE 時)。否則,沒有複寫機碼對應區段存在。複寫機碼對應區段的格式是在 IReplicaKeyMap::Serialize 中定義的。
一個識別碼格式結構描述區段。識別碼格式結構描述區段包含下列元素:
資料類型 長度 (以位元組為單位) 描述 BOOL
1
表示知識中所包含的項目識別碼是固定長度還是可變長度。如果識別碼是固定長度,這個值是 0,如果識別碼是可變長度,則為 1。
USHORT
2
固定長度識別碼的項目識別碼長度 (以位元組為單位),或可變長度識別碼的最大識別碼長度。
BOOL
1
表示知識中所包含的變更單位識別碼是固定長度還是可變長度。如果識別碼是固定長度,這個值是 0,如果識別碼是可變長度,則為 1。
USHORT
2
固定長度識別碼的變更單位識別碼長度 (以位元組為單位),或可變長度識別碼的最大識別碼長度。
一個範圍時鐘向量區段。範圍時鐘向量區段包含下列元素:
資料類型 長度 (以位元組為單位) 描述 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 摘要相關聯的旗標。
一個範圍例外狀況區段。範圍例外狀況區段包含下列元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
範圍例外狀況區段簽章。這個值一定是 3。
ULONG
4
知識中所包含的範圍例外狀況數目。
範圍例外狀況區段包含範圍例外狀況的清單,其中的範圍例外狀況數目等於先前在 ULONG 中指定的值。
每個範圍例外狀況都包含下列元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
範圍例外狀況簽章。這個值一定是 2。
當項目識別碼為固定長度時:
資料類型 長度 (以位元組為單位) 描述 位元組順序
在項目識別碼格式中指定的長度。
範圍下限項目識別碼的固定長度項目識別碼。
位元組順序
在項目識別碼格式中指定的長度。
範圍上限項目識別碼的固定長度項目識別碼。
或者,當項目識別碼為可變長度時:
資料類型 長度 (以位元組為單位) 描述 USHORT
2
可變長度識別碼的長度 (以位元組為單位)。此長度包含內含長度之 USHORT 的兩個位元組,加上包含實際識別碼的位元組。
位元組順序
在先前的 USHORT 中指定的長度。
範圍下限項目識別碼的可變長度項目識別碼。
USHORT
2
可變長度識別碼的長度 (以位元組為單位)。此長度包含內含長度之 USHORT 的兩個位元組,加上包含實際識別碼的位元組。
位元組順序
在先前的 USHORT 中指定的長度。
範圍上限項目識別碼的可變長度項目識別碼。
與範圍例外狀況相關聯的時鐘向量:
資料類型 長度 (以位元組為單位) 描述 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 摘要相關聯的旗標。
一個單一項目例外狀況區段。單一項目例外狀況區段包含下列元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
單一項目例外狀況區段簽章。這個值一定是 6。
ULONG
4
時鐘向量資料表簽章。這個值一定是 4。
ULONG
4
時鐘向量資料表內所包含的時鐘向量數目。
時鐘向量資料表。時鐘向量資料表包含時鐘向量的清單,其中的時鐘向量數目等於先前在 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 摘要相關聯的旗標。
單一項目例外狀況資料表。單一項目例外狀況資料表包含下列元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
單一項目例外狀況資料表中所包含的單一項目例外狀況數目。
資料表中的每個單一項目例外狀況都包含下列元素。
當項目識別碼為固定長度時:
資料類型 長度 (以位元組為單位) 描述 位元組順序
在項目識別碼格式中指定的長度。
與單一項目例外狀況相關聯的固定長度項目識別碼。
或者,當項目識別碼為可變長度時:
資料類型 長度 (以位元組為單位) 描述 USHORT
2
可變長度識別碼的長度 (以位元組為單位)。此長度包含內含長度之 USHORT 的兩個位元組,加上包含實際識別碼的位元組。
位元組順序
在先前的 USHORT 中指定的長度。
與單一項目例外狀況相關聯的可變長度項目識別碼。
每個單一項目例外狀況都包含下列其他的元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
當單一項目例外狀況指的是某個項目時,此值是包含在這個序列化資料中,時鐘向量資料表的索引。當單一項目例外狀況指的是一個或多個變更單位例外狀況時,此值為 0xFFFFFFFF。
ULONG
4
例外狀況中所包含的變更單位例外狀況數目。這個值可能是 0。
當變更單位例外狀況存在時,變更單位例外狀況的清單也會存在。此清單包含先前在 ULONG 中指定的變更單位例外狀況數目。
每個變更單位例外狀況都包含下列元素。
當變更單位識別碼為固定長度時:
資料類型 長度 (以位元組為單位) 描述 位元組順序
在變更單位識別碼格式中指定的長度。
與變更單位例外狀況相關聯的固定長度變更單位識別碼。
或者,當變更單位識別碼為可變長度時:
資料類型 長度 (以位元組為單位) 描述 USHORT
2
可變長度識別碼的長度 (以位元組為單位)。此長度包含內含長度之 USHORT 的兩個位元組,加上包含實際識別碼的位元組。
位元組順序
在先前的 USHORT 中指定的長度。
與變更單位例外狀況相關聯的可變長度變更單位識別碼。
每個變更單位例外狀況都包含下列其他的元素:
資料類型 長度 (以位元組為單位) 描述 ULONG
4
包含在此序列化資料中,時鐘向量資料表的索引。