mirror of https://github.com/UMSKT/xpmgr.git
1189 lines
46 KiB
Plaintext
1189 lines
46 KiB
Plaintext
//****************************************************************************
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File: SyncMgr.idl
|
|
//
|
|
// Contents: Types and interfaces for integrating with Sync Center.
|
|
//
|
|
//****************************************************************************
|
|
|
|
#ifndef DO_NO_IMPORTS
|
|
import "objidl.idl";
|
|
import "oleidl.idl";
|
|
import "shobjidl.idl"; // IShellItem
|
|
import "ocidl.idl"; // IObjectWithSite
|
|
import "comcat.idl"; // IEnumString
|
|
#endif
|
|
|
|
interface ISyncMgrHandlerCollection;
|
|
interface ISyncMgrHandler;
|
|
interface ISyncMgrHandlerInfo;
|
|
interface ISyncMgrSyncItemContainer;
|
|
interface ISyncMgrSyncItem;
|
|
interface ISyncMgrSyncItemInfo;
|
|
interface IEnumSyncMgrSyncItems;
|
|
interface ISyncMgrSessionCreator;
|
|
interface ISyncMgrSyncCallback;
|
|
interface ISyncMgrUIOperation;
|
|
interface ISyncMgrEventLinkUIOperation;
|
|
interface ISyncMgrScheduleWizardUIOperation;
|
|
interface ISyncMgrControl;
|
|
|
|
interface ISyncMgrEventStore;
|
|
interface ISyncMgrEvent;
|
|
interface IEnumSyncMgrEvents;
|
|
|
|
interface ISyncMgrConflictStore;
|
|
interface IEnumSyncMgrConflict;
|
|
interface ISyncMgrConflict;
|
|
interface ISyncMgrResolutionHandler;
|
|
interface ISyncMgrConflictPresenter;
|
|
interface ISyncMgrConflictFolder;
|
|
interface ISyncMgrConflictItems;
|
|
interface ISyncMgrConflictResolutionItems;
|
|
|
|
const ULONG MAX_SYNCMGR_ID = 64;
|
|
const ULONG MAX_SYNCMGR_PROGRESSTEXT = 260;
|
|
const ULONG MAX_SYNCMGR_NAME = 128;
|
|
|
|
//
|
|
// The ISyncMgrHandlerCollection interface allows a handler writer to add
|
|
// handlers to the Sync Center folder dynamically instead of registering each
|
|
// one in the registry. For example, a handler collection could be used to
|
|
// expose each music device in the top-level Sync Center folder.
|
|
//
|
|
// A handler ID is a string that uniquely represents the handler. The ID must
|
|
// be unique across all handlers in the system. For that reason, most handler
|
|
// IDs will be simply string-ized GUIDs.
|
|
//
|
|
[
|
|
object,
|
|
uuid(a7f337a3-d20b-45cb-9ed7-87d094ca5045)
|
|
]
|
|
interface ISyncMgrHandlerCollection : IUnknown
|
|
{
|
|
HRESULT GetHandlerEnumerator([out] IEnumString **ppenum);
|
|
HRESULT BindToHandler([in, ref, string] LPCWSTR pszHandlerID, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
|
|
}
|
|
|
|
//
|
|
// These values specify the capabilities of a handler with respect to the
|
|
// actions that can be performed against it.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_HANDLER_CAPABILITIES
|
|
{
|
|
SYNCMGR_HCM_NONE = 0x00000000,
|
|
|
|
SYNCMGR_HCM_PROVIDES_ICON = 0x00000001,
|
|
SYNCMGR_HCM_EVENT_STORE = 0x00000002,
|
|
SYNCMGR_HCM_CONFLICT_STORE = 0x00000004,
|
|
|
|
SYNCMGR_HCM_SUPPORTS_CONCURRENT_SESSIONS = 0x00000010,
|
|
|
|
SYNCMGR_HCM_CAN_BROWSE_CONTENT = 0x00010000,
|
|
SYNCMGR_HCM_CAN_SHOW_SCHEDULE = 0x00020000,
|
|
|
|
SYNCMGR_HCM_QUERY_BEFORE_ACTIVATE = 0x00100000,
|
|
SYNCMGR_HCM_QUERY_BEFORE_DEACTIVATE = 0x00200000,
|
|
SYNCMGR_HCM_QUERY_BEFORE_ENABLE = 0x00400000,
|
|
SYNCMGR_HCM_QUERY_BEFORE_DISABLE = 0x00800000,
|
|
|
|
SYNCMGR_HCM_VALID_MASK = 0x00f30017
|
|
|
|
} SYNCMGR_HANDLER_CAPABILITIES;
|
|
|
|
//
|
|
// These values specify policies a handler can specify that deviate from
|
|
// normal operations.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_HANDLER_POLICIES
|
|
{
|
|
SYNCMGR_HPM_NONE = 0x00000000,
|
|
|
|
// These policies prevent tasks from showing up in the UI.
|
|
SYNCMGR_HPM_PREVENT_ACTIVATE = 0x00000001,
|
|
SYNCMGR_HPM_PREVENT_DEACTIVATE = 0x00000002,
|
|
SYNCMGR_HPM_PREVENT_ENABLE = 0x00000004,
|
|
SYNCMGR_HPM_PREVENT_DISABLE = 0x00000008,
|
|
SYNCMGR_HPM_PREVENT_START_SYNC = 0x00000010,
|
|
SYNCMGR_HPM_PREVENT_STOP_SYNC = 0x00000020,
|
|
|
|
SYNCMGR_HPM_DISABLE_ENABLE = 0x00000100,
|
|
SYNCMGR_HPM_DISABLE_DISABLE = 0x00000200,
|
|
SYNCMGR_HPM_DISABLE_START_SYNC = 0x00000400,
|
|
SYNCMGR_HPM_DISABLE_STOP_SYNC = 0x00000800,
|
|
SYNCMGR_HPM_DISABLE_BROWSE = 0x00001000,
|
|
SYNCMGR_HPM_DISABLE_SCHEDULE = 0x00002000,
|
|
|
|
SYNCMGR_HPM_HIDDEN_BY_DEFAULT = 0x00010000,
|
|
|
|
SYNCMGR_HPM_BACKGROUND_SYNC_ONLY = (SYNCMGR_HPM_PREVENT_START_SYNC | SYNCMGR_HPM_PREVENT_STOP_SYNC),
|
|
|
|
SYNCMGR_HPM_VALID_MASK = 0x00012f3f
|
|
|
|
} SYNCMGR_HANDLER_POLICIES;
|
|
|
|
//
|
|
// ISyncMgrHandler is the primary interface implemented by a sync handler.
|
|
// Sync Center will instantiate the handler with this interface to get
|
|
// properties, to enumerate sync items. and to modify state. It will also be
|
|
// instantiated on a separate thread to perform a synchronization or a UI
|
|
// operation.
|
|
//
|
|
// The handler can implement the handler info interface on the same object or
|
|
// on a separate object.
|
|
//
|
|
// The following types of operations can be specified to GetObject():
|
|
//
|
|
// SYNCMGR_OBJECTID_Icon
|
|
// If the handler info interface doesn't return a value from the
|
|
// GetIconLocation() method, Sync Center will call GetObject() with this
|
|
// object ID to allow the handler to implement IExtractIcon.
|
|
// SYNCMGR_OBJECTID_EventStore
|
|
// Provide an event store for events specific to the handler.
|
|
// SYNCMGR_OBJECTID_ConflictStore
|
|
// Provide a conflict store for conflicts specific to the handler.
|
|
// SYNCMGR_OBJECTID_BrowseContent
|
|
// Show UI to allow the user to browse the content of the handler.
|
|
// SYNCMGR_OBJECTID_ShowSchedule
|
|
// Show UI that allows the user to configure the schedule for the
|
|
// handler.
|
|
// SYNCMGR_OBJECTID_QueryBeforeActivate
|
|
// Query the user before a handler is activated. This occurs when the
|
|
// user requests that a handler in the New Handlers folder be setup.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDeactivate
|
|
// Query the user when the user chooses to delete a partnership from the
|
|
// active partnerships folder.
|
|
// SYNCMGR_OBJECTID_QueryBeforeEnable
|
|
// Query the user before enabling the handler.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDisable
|
|
// Query the user before disabling the handler.
|
|
//
|
|
[
|
|
object,
|
|
uuid(04ec2e43-ac77-49f9-9b98-0307ef7a72a2)
|
|
]
|
|
interface ISyncMgrHandler : IUnknown
|
|
{
|
|
HRESULT GetName([out, string] LPWSTR *ppszName);
|
|
HRESULT GetHandlerInfo([out] ISyncMgrHandlerInfo **ppHandlerInfo);
|
|
HRESULT GetObject([in] REFGUID rguidObjectID, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
|
|
|
|
HRESULT GetCapabilities([out] SYNCMGR_HANDLER_CAPABILITIES *pmCapabilities);
|
|
HRESULT GetPolicies([out] SYNCMGR_HANDLER_POLICIES *pmPolicies);
|
|
|
|
HRESULT Activate([in] BOOL fActivate);
|
|
HRESULT Enable([in] BOOL fEnable);
|
|
|
|
HRESULT Synchronize(
|
|
[in, ref, string, size_is(cItems)] LPCWSTR *ppszItemIDs,
|
|
[in] ULONG cItems,
|
|
[in, unique] HWND hwndOwner,
|
|
[in] ISyncMgrSessionCreator *pSessionCreator,
|
|
[in, unique] IUnknown *punk);
|
|
}
|
|
|
|
//
|
|
// These values identify the handler to Sync Center and allow handlers to be
|
|
// easily grouped together in the folder.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_HANDLER_TYPE
|
|
{
|
|
SYNCMGR_HT_UNSPECIFIED = 0, // All handlers that do not specify or do not fit
|
|
// in the rest of the options should use this value.
|
|
SYNCMGR_HT_APPLICATION = 1, // Handler is an application.
|
|
SYNCMGR_HT_DEVICE = 2, // Handler syncs with a device.
|
|
SYNCMGR_HT_FOLDER = 3, // Handler syncs with local or remote folders.
|
|
SYNCMGR_HT_SERVICE = 4, // Handler syncs with a web service.
|
|
SYNCMGR_HT_COMPUTER = 5, // Handler syncs with a computer.
|
|
|
|
SYNCMGR_HT_MIN = 0,
|
|
SYNCMGR_HT_MAX = SYNCMGR_HT_COMPUTER
|
|
|
|
} SYNCMGR_HANDLER_TYPE;
|
|
|
|
//
|
|
// The ISyncMgrHandlerInfo interface provides all the optional properties for
|
|
// the handler. By defining this as an interface the set of properties can be
|
|
// changed in the future without requiring handlers to be recompiled. It also
|
|
// provides type-safe access to the properties.
|
|
//
|
|
[
|
|
object,
|
|
uuid(4ff1d798-ecf7-4524-aa81-1e362a0aef3a)
|
|
]
|
|
interface ISyncMgrHandlerInfo : IUnknown
|
|
{
|
|
HRESULT GetType([out] SYNCMGR_HANDLER_TYPE *pnType);
|
|
HRESULT GetTypeLabel([out, string] LPWSTR *ppszTypeLabel);
|
|
HRESULT GetComment([out, string] LPWSTR *ppszComment);
|
|
HRESULT GetLastSyncTime([out] FILETIME *pftLastSync);
|
|
|
|
HRESULT IsActive();
|
|
HRESULT IsEnabled();
|
|
HRESULT IsConnected();
|
|
}
|
|
|
|
//
|
|
// The ISyncMgrSyncItemContainer interface is implemented by handlers to
|
|
// provide information about the items contained in them. Sync Center will
|
|
// call QueryInterface() on the ISyncMgrHandler interface to query for the
|
|
// ISyncMgrItemContainer interface.
|
|
//
|
|
[
|
|
object,
|
|
uuid(90701133-be32-4129-a65c-99e616cafff4)
|
|
]
|
|
interface ISyncMgrSyncItemContainer : IUnknown
|
|
{
|
|
HRESULT GetSyncItem([in, ref, string] LPCWSTR pszItemID, [out] ISyncMgrSyncItem **ppItem);
|
|
HRESULT GetSyncItemEnumerator([out] IEnumSyncMgrSyncItems **ppenum);
|
|
HRESULT GetSyncItemCount([out] ULONG *pcItems);
|
|
}
|
|
|
|
//
|
|
// These values specify the capabilities of a sync item with respect to the
|
|
// actions that can be performed against it.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_ITEM_CAPABILITIES
|
|
{
|
|
SYNCMGR_ICM_NONE = 0x00000000,
|
|
|
|
SYNCMGR_ICM_PROVIDES_ICON = 0x00000001,
|
|
SYNCMGR_ICM_EVENT_STORE = 0x00000002,
|
|
SYNCMGR_ICM_CONFLICT_STORE = 0x00000004,
|
|
|
|
SYNCMGR_ICM_CAN_DELETE = 0x00000010,
|
|
|
|
SYNCMGR_ICM_CAN_BROWSE_CONTENT = 0x00010000,
|
|
|
|
SYNCMGR_ICM_QUERY_BEFORE_ENABLE = 0x00100000,
|
|
SYNCMGR_ICM_QUERY_BEFORE_DISABLE = 0x00200000,
|
|
SYNCMGR_ICM_QUERY_BEFORE_DELETE = 0x00400000,
|
|
|
|
SYNCMGR_ICM_VALID_MASK = 0x00710017
|
|
|
|
} SYNCMGR_ITEM_CAPABILITIES;
|
|
|
|
//
|
|
// These values specify policies an item can specify that deviate from
|
|
// normal operations.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_ITEM_POLICIES
|
|
{
|
|
SYNCMGR_IPM_NONE = 0x00000000,
|
|
|
|
SYNCMGR_IPM_PREVENT_ENABLE = 0x00000001,
|
|
SYNCMGR_IPM_PREVENT_DISABLE = 0x00000002,
|
|
SYNCMGR_IPM_PREVENT_START_SYNC = 0x00000004,
|
|
SYNCMGR_IPM_PREVENT_STOP_SYNC = 0x00000008,
|
|
|
|
SYNCMGR_IPM_DISABLE_ENABLE = 0x00000010,
|
|
SYNCMGR_IPM_DISABLE_DISABLE = 0x00000020,
|
|
SYNCMGR_IPM_DISABLE_START_SYNC = 0x00000040,
|
|
SYNCMGR_IPM_DISABLE_STOP_SYNC = 0x00000080,
|
|
SYNCMGR_IPM_DISABLE_BROWSE = 0x00000100,
|
|
SYNCMGR_IPM_DISABLE_DELETE = 0x00000200,
|
|
|
|
SYNCMGR_IPM_HIDDEN_BY_DEFAULT = 0x00010000,
|
|
|
|
SYNCMGR_IPM_VALID_MASK = 0x000102ff
|
|
|
|
} SYNCMGR_ITEM_POLICIES;
|
|
|
|
//
|
|
// The ISyncMgrSyncItem interface represents a sync item which typically
|
|
// represents a group of data (e.g. a sync item represents a folder of file).
|
|
// By defining this as an interface the item can easily be managed and
|
|
// implemented as an object, and that object maintains the state of the item
|
|
// when accessing the item.
|
|
//
|
|
// The following types of operations can be specified to GetObject():
|
|
//
|
|
// SYNCMGR_OBJECTID_Icon
|
|
// If the item info interface doesn't return a value from the
|
|
// GetIconLocation() method, Sync Center will call GetObject() with this
|
|
// object ID to allow the handler to implement IExtractIcon.
|
|
// SYNCMGR_OBJECTID_EventStore
|
|
// Provide an event store for events specific to the item.
|
|
// SYNCMGR_OBJECTID_ConflictStore
|
|
// Provide a conflict store for conflicts specific to the item.
|
|
// SYNCMGR_OBJECTID_BrowseContent
|
|
// Show UI to allow the user to browse the content of the item.
|
|
// SYNCMGR_OBJECTID_QueryBeforeEnable
|
|
// Query the user before enabling the item.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDisable
|
|
// Query the user before disabling the item.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDelete
|
|
// Query the user before deleting an item.
|
|
//
|
|
[
|
|
object,
|
|
uuid(b20b24ce-2593-4f04-bd8b-7ad6c45051cd)
|
|
]
|
|
interface ISyncMgrSyncItem : IUnknown
|
|
{
|
|
HRESULT GetItemID([out, string] LPWSTR *ppszItemID);
|
|
HRESULT GetName([out, string] LPWSTR *ppszName);
|
|
HRESULT GetItemInfo([out] ISyncMgrSyncItemInfo **ppItemInfo);
|
|
HRESULT GetObject([in] REFGUID rguidObjectID, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
|
|
|
|
HRESULT GetCapabilities([out] SYNCMGR_ITEM_CAPABILITIES *pmCapabilities);
|
|
HRESULT GetPolicies([out] SYNCMGR_ITEM_POLICIES *pmPolicies);
|
|
|
|
HRESULT Enable([in] BOOL fEnable);
|
|
HRESULT Delete();
|
|
}
|
|
|
|
//
|
|
// The ISyncMgrSyncItemInfo interface provides all the optional properties for
|
|
// the handler. Just as with handler info, by defining this as an interface
|
|
// the set of properties can be changed in the future without requiring
|
|
// handlers to be recompiled. It also provides type-safe access to the
|
|
// properties.
|
|
//
|
|
// An alternate approach would be to define a single method that returns a
|
|
// structure.
|
|
//
|
|
[
|
|
object,
|
|
uuid(e7fd9502-be0c-4464-90a1-2b5277031232)
|
|
]
|
|
interface ISyncMgrSyncItemInfo : IUnknown
|
|
{
|
|
HRESULT GetTypeLabel([out, string] LPWSTR *ppszTypeLabel);
|
|
HRESULT GetComment([out, string] LPWSTR *ppszComment);
|
|
HRESULT GetLastSyncTime([out] FILETIME *pftLastSync);
|
|
|
|
HRESULT IsEnabled();
|
|
HRESULT IsConnected();
|
|
}
|
|
|
|
//
|
|
// The IEnumSyncMgrSyncItems interface simply enumerates the sync item objects
|
|
// managed by the handler.
|
|
//
|
|
[
|
|
object,
|
|
uuid(54b3abf3-f085-4181-b546-e29c403c726b)
|
|
]
|
|
interface IEnumSyncMgrSyncItems : IUnknown
|
|
{
|
|
HRESULT Next(
|
|
[in] ULONG celt,
|
|
[out, size_is(celt), length_is(*pceltFetched)] ISyncMgrSyncItem **rgelt,
|
|
[out] ULONG *pceltFetched);
|
|
HRESULT Skip([in] ULONG celt);
|
|
HRESULT Reset();
|
|
HRESULT Clone([out] IEnumSyncMgrSyncItems **ppenum);
|
|
}
|
|
|
|
//
|
|
// These values are used to indicate the current status of the progress report
|
|
// in the call to ReportProgress().
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_PROGRESS_STATUS
|
|
{
|
|
SYNCMGR_PS_UPDATING = 1,
|
|
SYNCMGR_PS_UPDATING_INDETERMINATE = 2,
|
|
SYNCMGR_PS_SUCCEEDED = 3,
|
|
SYNCMGR_PS_FAILED = 4,
|
|
SYNCMGR_PS_CANCELED = 5,
|
|
SYNCMGR_PS_DISCONNECTED = 6,
|
|
|
|
SYNCMGR_PS_MAX = SYNCMGR_PS_DISCONNECTED
|
|
|
|
} SYNCMGR_PROGRESS_STATUS;
|
|
|
|
//
|
|
// These values are used to indicate whether the user has requested a sync
|
|
// operation be canceled when progress is being reported.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_CANCEL_REQUEST
|
|
{
|
|
SYNCMGR_CR_NONE = 0,
|
|
SYNCMGR_CR_CANCEL_ITEM = 1,
|
|
SYNCMGR_CR_CANCEL_ALL = 2,
|
|
|
|
SYNCMGR_CR_MAX = SYNCMGR_CR_CANCEL_ALL
|
|
|
|
} SYNCMGR_CANCEL_REQUEST;
|
|
|
|
//
|
|
// These values are used to indicate the error level of an event in a call to
|
|
// the ReportEvent() method.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_EVENT_LEVEL
|
|
{
|
|
SYNCMGR_EL_INFORMATION = 1,
|
|
SYNCMGR_EL_WARNING = 2,
|
|
SYNCMGR_EL_ERROR = 3,
|
|
|
|
SYNCMGR_EL_MAX = SYNCMGR_EL_ERROR
|
|
|
|
} SYNCMGR_EVENT_LEVEL;
|
|
|
|
typedef [v1_enum] enum SYNCMGR_EVENT_FLAGS
|
|
{
|
|
SYNCMGR_EF_NONE = 0x00000000,
|
|
|
|
SYNCMGR_EF_VALID = 0x00000000
|
|
|
|
} SYNCMGR_EVENT_FLAGS;
|
|
|
|
//
|
|
// If a handler is implemented to perform automatic synchronizations in an
|
|
// external process (e.g. in a service), it needs to provide progress reports
|
|
// to Sync Center to allow it to update the UI for the user. It also needs
|
|
// to be able to add events to Sync Center's Sync Results folder. To allow
|
|
// the background process to report progress and events, an external process
|
|
// can CoCreate the CLSID_SyncMgrClient object with CLSCTX_SERVER and specify
|
|
// the ISyncMgrSessionCreator interface ID. This will allow that process to
|
|
// report progress and events as well as query Sync Center to determine if
|
|
// the user canceled the sync.
|
|
//
|
|
// The ISyncMgrSessionCreator interface is also passed to the Syncrhonize()
|
|
// method on the ISyncMgrHandler interface. This allows the handler to report
|
|
// progress and events itself or to signal a background proess to report
|
|
// progress and events itself.
|
|
//
|
|
// Note that the ISyncMgrSyncCallback interface should NOT be created in the
|
|
// handler and then passed to the external process.
|
|
//
|
|
[
|
|
object,
|
|
uuid(17f48517-f305-4321-a08d-b25a834918fd)
|
|
]
|
|
interface ISyncMgrSessionCreator : IUnknown
|
|
{
|
|
HRESULT CreateSession(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique, string, size_is(cItems)] LPCWSTR *ppszItemIDs,
|
|
[in] ULONG cItems,
|
|
[out] ISyncMgrSyncCallback **ppCallback);
|
|
}
|
|
|
|
//
|
|
// The ISyncMgrSyncCallback interface will be passed to the handler in the
|
|
// Synchronize() method when starting a sync. The handler is expected to call
|
|
// this interface to update the progress UI in the folder for each item and to
|
|
// notify Sync Center when it has completed synchronization for each item.
|
|
//
|
|
// The object implementing this interface will also implement the
|
|
// ISyncMgrEvents interface.
|
|
//
|
|
[
|
|
object,
|
|
uuid(884ccd87-b139-4937-a4ba-4f8e19513fbe)
|
|
]
|
|
interface ISyncMgrSyncCallback : IUnknown
|
|
{
|
|
HRESULT ReportProgress(
|
|
[in, ref, string] LPCWSTR pszItemID,
|
|
[in, unique, string] LPCWSTR pszProgressText,
|
|
[in] SYNCMGR_PROGRESS_STATUS nStatus,
|
|
[in] ULONG uCurrentStep,
|
|
[in] ULONG uMaxStep,
|
|
[in, out, unique] SYNCMGR_CANCEL_REQUEST *pnCancelRequest);
|
|
HRESULT SetHandlerProgressText(
|
|
[in, ref, string] LPCWSTR pszProgressText,
|
|
[in, out, unique] SYNCMGR_CANCEL_REQUEST *pnCancelRequest);
|
|
HRESULT ReportEvent(
|
|
[in, unique, string] LPCWSTR pszItemID,
|
|
[in] SYNCMGR_EVENT_LEVEL nLevel,
|
|
[in] SYNCMGR_EVENT_FLAGS nFlags,
|
|
[in, ref, string] LPCWSTR pszName,
|
|
[in, ref, string] LPCWSTR pszDescription,
|
|
[in, unique, string] LPCWSTR pszLinkText,
|
|
[in, unique, string] LPCWSTR pszLinkReference,
|
|
[in, unique, string] LPCWSTR pszContext, // Handler-specific data to associate with the event
|
|
[out] GUID *pguidEventID);
|
|
HRESULT CanContinue([in, ref, string] LPCWSTR pszItemID);
|
|
|
|
HRESULT QueryForAdditionalItems([out] IEnumString **ppenumItemIDs, [out] IEnumUnknown **ppenumPunks);
|
|
HRESULT AddItemToSession([in, ref, string] LPCWSTR pszItemID);
|
|
HRESULT AddIUnknownToSession([in] IUnknown *punk);
|
|
HRESULT ProposeItem([in] ISyncMgrSyncItem *pNewItem);
|
|
HRESULT CommitItem([in, ref, string] LPCWSTR pszItemID);
|
|
|
|
// Report that a sync is being performed that was requested manually from
|
|
// outside the Sync Center UI. This will cause a notification balloon to
|
|
// be displayed for this handler the first time this is called.
|
|
HRESULT ReportManualSync();
|
|
}
|
|
|
|
|
|
//
|
|
// Handlers implement the ISyncMgrUIOperation interface to provide UI for a
|
|
// particular action. Sync Center will call the GetObject() method on the
|
|
// handler or on the item to get the right type of UI operation that
|
|
// implements this interface. A handler should only implement this interface
|
|
// for operations it wants to present UI.
|
|
//
|
|
// Sync Center will create a separate thread for the UI operation. It will
|
|
// then create a new instance of the handler to get the UI object from. If
|
|
// the operation is for an item, Sync Center will ask the handler for that
|
|
// item and then ask the item for the UI operation.
|
|
//
|
|
// The following types of operations can be specified to GetObject() on
|
|
// ISyncMgrHandler or ISyncMgrSyncItem:
|
|
//
|
|
// SYNCMGR_OBJECTID_BrowseContent
|
|
// Show UI to allow the user to browse the content of the handler or
|
|
// item.
|
|
// SYNCMGR_OBJECTID_ShowSchedule
|
|
// Show UI that allows the user to configure the schedule for the
|
|
// handler.
|
|
// SYNCMGR_OBJECTID_QueryBeforeActivate
|
|
// Query the user before a handler is activated. This occurs when the
|
|
// user requests that a handler in the New Handlers folder be setup.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDeactivate
|
|
// Query the user before removing a handler from the active partnerships
|
|
// folder.
|
|
// SYNCMGR_OBJECTID_QueryBeforeEnable
|
|
// Query the user before enabling a handler or item.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDisable
|
|
// Query the user before disabling a handler or item.
|
|
// SYNCMGR_OBJECTID_QueryBeforeDelete
|
|
// Query the user before deleting an item.
|
|
//
|
|
[
|
|
object,
|
|
uuid(fc7cfa47-dfe1-45b5-a049-8cfd82bec271)
|
|
]
|
|
interface ISyncMgrUIOperation : IUnknown
|
|
{
|
|
HRESULT Run([in, unique] HWND hwndOwner);
|
|
}
|
|
|
|
//
|
|
// The ISyncMgrEventLinkUIOperation interface will be called when event links
|
|
// are clicked in the sync results folder. Sync Center will call GetObject()
|
|
// on the ISyncMgrHandler specifying SYNCMGR_OBJECTID_EventLinkClick for the
|
|
// object ID.
|
|
//
|
|
[
|
|
object,
|
|
uuid(64522e52-848b-4015-89ce-5a36f00b94ff)
|
|
]
|
|
interface ISyncMgrEventLinkUIOperation : ISyncMgrUIOperation
|
|
{
|
|
// The Init() method allows the object to store the event ID so that when
|
|
// the Run() method is called it knows which event to operate upon.
|
|
HRESULT Init([in] REFGUID rguidEventID, [in] ISyncMgrEvent *pEvent);
|
|
}
|
|
|
|
//
|
|
// The ISyncMgrScheduleWizardUIOperation interface allows a handler to display
|
|
// the sync schedule wizard for the handler. The wizard can be invoked by
|
|
// CoCreating CLSID_SyncMgrScheduleWizard. This is typically done whe Sync
|
|
// Center calls the GetObject() method on ISyncMgrHandler specifying
|
|
// SYNCMGR_OBJECTID_ShowSchedule for the object ID.
|
|
//
|
|
[
|
|
object,
|
|
uuid(459a6c84-21d2-4ddc-8a53-f023a46066f2)
|
|
]
|
|
interface ISyncMgrScheduleWizardUIOperation : ISyncMgrUIOperation
|
|
{
|
|
HRESULT InitWizard([in, ref, string] LPCWSTR pszHandlerID);
|
|
}
|
|
|
|
//
|
|
// Applications calling ISyncMgrControl can pass this interface to get the
|
|
// result of a StartHandlerSync() or StartItemSync() call.
|
|
//
|
|
[
|
|
object,
|
|
uuid(2b90f17e-5a3e-4b33-bb7f-1bc48056b94d)
|
|
]
|
|
interface ISyncMgrSyncResult : IUnknown
|
|
{
|
|
HRESULT Result([in] SYNCMGR_PROGRESS_STATUS nStatus, [in] UINT cError, [in] UINT cConflicts);
|
|
}
|
|
|
|
//
|
|
// These values are used to modify the operations requested on the methods of
|
|
// the ISyncMgrControl interface. In particular, they are intended to allow
|
|
// the caller to specify whether the operation should be performed
|
|
// synchronously or asynchronously.
|
|
//
|
|
typedef [v1_enum] enum SYNCMGR_CONTROL_FLAGS
|
|
{
|
|
SYNCMGR_CF_NONE = 0x00000000,
|
|
|
|
SYNCMGR_CF_NOWAIT = 0x00000000,
|
|
SYNCMGR_CF_WAIT = 0x00000001,
|
|
|
|
SYNCMGR_CF_NOUI = 0x00000002,
|
|
|
|
SYNCMGR_CF_VALID = 0x00000003
|
|
} SYNCMGR_CONTROL_FLAGS;
|
|
|
|
// These values are used to modify the sync-related operations requested on
|
|
// the methods of the ISyncMgrControl interface.
|
|
typedef [v1_enum] enum SYNCMGR_SYNC_CONTROL_FLAGS
|
|
{
|
|
SYNCMGR_SCF_NONE = 0x00000000,
|
|
|
|
// Normally sync requests are queued if a synchronization is currently in
|
|
// progress. If this flag is specified, however, only items that are not
|
|
// currently syncing will be synced again once the current sync session
|
|
// has completed.
|
|
SYNCMGR_SCF_IGNORE_IF_ALREADY_SYNCING = 0x00000001,
|
|
|
|
SYNCMGR_SCF_VALID = 0x00000001
|
|
|
|
} SYNCMGR_SYNC_CONTROL_FLAGS;
|
|
|
|
// This enum is used when ISyncMgrControl::UpdateConflict is called.
|
|
typedef [v1_enum] enum SYNCMGR_UPDATE_REASON
|
|
{
|
|
SYNCMGR_UR_ADDED = 0,
|
|
SYNCMGR_UR_CHANGED = 1,
|
|
SYNCMGR_UR_REMOVED = 2,
|
|
|
|
SYNCMGR_UR_MAX = SYNCMGR_UR_REMOVED
|
|
|
|
} SYNCMGR_UPDATE_REASON;
|
|
|
|
//
|
|
// This interface is implemented by Sync Center and can be CoCreated() by an
|
|
// application or handler by specifying CLSID_SyncMgrControl and specify
|
|
// CLSCTX_SERVER. It allows the application or handler to start or stop a
|
|
// sync or to notify Sync Center of changes to the set of handlers or items
|
|
// or to properties. All methods on this interface will not block but will
|
|
// queue the request with Sync Center.
|
|
//
|
|
[
|
|
object,
|
|
uuid(9B63616C-36B2-46BC-959F-C1593952D19B)
|
|
]
|
|
interface ISyncMgrControl : IUnknown
|
|
{
|
|
// These methods add a sync request to the sync request queue for the
|
|
// specified handler to sync all items in the handler or the specified
|
|
// items respectively that are currently sync-able (excludes disabled and
|
|
// disconnected items). If an item is already syncing, it will be synced
|
|
// again after the current sync session completes unless the
|
|
// SYNCMGR_SCF_IGNORE_IF_ALREADY_SYNCING flag is specified. If a punk is
|
|
// specified, the items in the request will always be queued. If a result
|
|
// interface is specified Sync Center will notifier that interface when
|
|
// the sync request has completed.
|
|
HRESULT StartHandlerSync(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique] HWND hwndOwner,
|
|
[in, unique] IUnknown *punk,
|
|
[in] SYNCMGR_SYNC_CONTROL_FLAGS nSyncControlFlags,
|
|
[in, unique] ISyncMgrSyncResult *pResult);
|
|
HRESULT StartItemSync(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, ref, string, size_is(cItems)] LPCWSTR *ppszItemIDs,
|
|
[in] ULONG cItems,
|
|
[in, unique] HWND hwndOwner,
|
|
[in, unique] IUnknown *punk,
|
|
[in] SYNCMGR_SYNC_CONTROL_FLAGS nSyncControlFlags,
|
|
[in, unique] ISyncMgrSyncResult *pResult);
|
|
|
|
// This method places a sync request in the sync request for all handlers
|
|
// to sync all items in each handler. If the handler is already syncing
|
|
// items, those items will be synced again once the current session has
|
|
// completed.
|
|
HRESULT StartSyncAll( [in, unique] HWND hwndOwner);
|
|
|
|
// These methods signal the handler to indicate that the user wants to
|
|
// cancel a currently sync operation for the specified items.
|
|
HRESULT StopHandlerSync([in, ref, string] LPCWSTR pszHandlerID);
|
|
HRESULT StopItemSync(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, ref, string, size_is(cItems)] LPCWSTR *ppszItemIDs,
|
|
[in] ULONG cItems);
|
|
HRESULT StopSyncAll();
|
|
|
|
// This method allows Sync Center to be notified when the collection of
|
|
// handlers has changed (e.g. new handlers are available or existing
|
|
// handlers have been removed).
|
|
HRESULT UpdateHandlerCollection(
|
|
[in] REFCLSID rclsidCollectionID,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// These methods allows Sync Center to be notified when the handler or the
|
|
// item has changed in some way, such as the handler has been disabled or
|
|
// the comment string has changed.
|
|
HRESULT UpdateHandler(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
HRESULT UpdateItem(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, ref, string] LPCWSTR pszItemID,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// This method allows Sync Center to be notified when the handler's custom
|
|
// event store (implemented by ISyncMgrEventStore) has changed. This
|
|
// causes Sync Center to reread the events for the specified item or for
|
|
// the whole handler from the handler's event store and to update the
|
|
// UI and the sync tray icon.
|
|
HRESULT UpdateEvents(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique, string] LPCWSTR pszItemID,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// This method allows Sync Center to be notified when a specific conflict
|
|
// has been updated in the handler's conflit store (implemented by
|
|
// ISyncMgrConflitStore). This causes Sync Center to read the conflict
|
|
// from the handler's conflict store and to update the UI and the sync
|
|
// tray icon.
|
|
HRESULT UpdateConflict(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique, string] LPCWSTR pszItemID,
|
|
[in] ISyncMgrConflict *pConflict,
|
|
[in] SYNCMGR_UPDATE_REASON nReason);
|
|
|
|
// This method is similar to UpdateConflict() but it applies to all
|
|
// conflicts for the specified item or all items for the specified
|
|
// handler.
|
|
HRESULT UpdateConflicts(
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique, string] LPCWSTR pszItemID,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// Notifies Sync Center that the activation state of the specified handler
|
|
// has changed. This causes the handler to move between the Sync Center
|
|
// folder and the Sync Setup folder. A handler must be active before it
|
|
// can be synced.
|
|
HRESULT ActivateHandler(
|
|
[in] BOOL fActivate,
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique] HWND hwndOwner,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// Notifies Sync Center that the enabled state of the specified handler
|
|
// has changed. A handler must be enabled before it can be synced,
|
|
// although not all handlers support being disabled. A disabled handler
|
|
// and its items can be managed, unlike an inactive handler.
|
|
HRESULT EnableHandler(
|
|
[in] BOOL fEnable,
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, unique] HWND hwndOwner,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
|
|
// Notifies Sync Center that the enabled state of the specified sync item
|
|
// has changed. A sync item must be enabled before it can be synced.
|
|
HRESULT EnableItem(
|
|
[in] BOOL fEnable,
|
|
[in, ref, string] LPCWSTR pszHandlerID,
|
|
[in, ref, string] LPCWSTR pszItemID,
|
|
[in, unique] HWND hwndOwner,
|
|
[in] SYNCMGR_CONTROL_FLAGS nControlFlags);
|
|
}
|
|
|
|
//
|
|
// Sync Center provides a default event store that handlers can use for
|
|
// reporting events that are displayed in the Sync Results folder. However,
|
|
// if a component already reports events, it might be more convenient for it
|
|
// to provide its own event store that enumerates events for the Sync Results
|
|
// folder for that handler.
|
|
//
|
|
// Sync Center will query a handler for an event store if it sets the
|
|
// SYNCMGR_HC_EVENT_STORE flag in the mask returned from its
|
|
// GetCapabilities() method.
|
|
//
|
|
[
|
|
object,
|
|
uuid(37e412f9-016e-44c2-81ff-db3add774266)
|
|
]
|
|
interface ISyncMgrEventStore : IUnknown
|
|
{
|
|
HRESULT GetEventEnumerator([out] IEnumSyncMgrEvents **ppenum);
|
|
HRESULT GetEventCount([out] ULONG *pcEvents);
|
|
HRESULT GetEvent([in] REFGUID rguidEventID, [out] ISyncMgrEvent **ppEvent);
|
|
HRESULT RemoveEvent([in, ref, size_is(cEvents)] GUID *pguidEventIDs, [in] ULONG cEvents);
|
|
}
|
|
|
|
//
|
|
// An event store allows Sync Center to get an enumerator of all events in
|
|
// the store as well as toretrieve individual events. The ISyncMgrEvent
|
|
// interface provides the data for the event to Sync Center.
|
|
//
|
|
[
|
|
object,
|
|
uuid(fee0ef8b-46bd-4db4-b7e6-ff2c687313bc)
|
|
]
|
|
interface ISyncMgrEvent : IUnknown
|
|
{
|
|
HRESULT GetEventID([out, ref] GUID *pguidEventID);
|
|
HRESULT GetHandlerID([out, ref, string] LPWSTR *ppszHandlerID);
|
|
HRESULT GetItemID([out, ref, string] LPWSTR *ppszItemID);
|
|
HRESULT GetLevel([out, ref] SYNCMGR_EVENT_LEVEL *pnLevel);
|
|
HRESULT GetFlags([out, ref] SYNCMGR_EVENT_FLAGS *pnFlags);
|
|
HRESULT GetTime([out, ref] FILETIME *pfCreationTime);
|
|
HRESULT GetName([out, ref, string] LPWSTR *ppszName);
|
|
HRESULT GetDescription([out, ref, string] LPWSTR *ppszDescription);
|
|
HRESULT GetLinkText([out, ref, string] LPWSTR *ppszLinkText);
|
|
HRESULT GetLinkReference([out, ref, string] LPWSTR *ppszLinkReference);
|
|
HRESULT GetContext([out, ref, string] LPWSTR *ppszContext);
|
|
}
|
|
|
|
[
|
|
object,
|
|
uuid(c81a1d4e-8cf7-4683-80e0-bcae88d677b6)
|
|
]
|
|
interface IEnumSyncMgrEvents : IUnknown
|
|
{
|
|
HRESULT Next(
|
|
[in] ULONG celt,
|
|
[out, size_is(celt), length_is(*pceltFetched)] ISyncMgrEvent **rgelt,
|
|
[out] ULONG *pceltFetched);
|
|
HRESULT Skip([in] ULONG celt);
|
|
HRESULT Reset();
|
|
HRESULT Clone([out] IEnumSyncMgrEvents **ppenum);
|
|
}
|
|
|
|
typedef struct SYNCMGR_CONFLICT_ID_INFO
|
|
{
|
|
[unique] BYTE_BLOB *pblobID; // For comparison
|
|
[unique] BYTE_BLOB *pblobExtra; // [optional] Extra data used to init conflict objects
|
|
|
|
} SYNCMGR_CONFLICT_ID_INFO, *PSYNCMGR_CONFLICT_ID_INFO;
|
|
|
|
// ISyncMgrConflictStore
|
|
[
|
|
uuid(cf8fc579-c396-4774-85f1-d908a831156e),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrConflictStore : IUnknown
|
|
{
|
|
// Enumerate conflicts, scoped to the provided sync handler, sync item
|
|
// If the sync handler or sync item is GUID_NULL, or if the partner name is
|
|
// NULL, the conflict store should ignore that parameter.
|
|
HRESULT EnumConflicts([in, ref, string] LPCWSTR pszHandlerID, [in, unique, string] LPCWSTR pszItemID, [out] IEnumSyncMgrConflict **ppEnum);
|
|
|
|
// Bind to a particular conflict given its ID
|
|
// This is used when the conflict folder binds to a conflict given its PIDL
|
|
// or parsing name. The ID is obtained from a conflict that was previously
|
|
// extracted from the store. See the notes concerning the ISyncMgrConflict
|
|
// interface
|
|
HRESULT BindToConflict([in] const SYNCMGR_CONFLICT_ID_INFO *pConflictIdInfo, [in] REFIID riid, [out, iid_is(riid)] void **ppv);
|
|
|
|
// Remove a set of conflicts from the store given their conflict ids
|
|
HRESULT RemoveConflicts([in, size_is(cConflicts)] const SYNCMGR_CONFLICT_ID_INFO *rgConflictIdInfo, [in] DWORD cConflicts);
|
|
|
|
// Get the number of conflicts in the store
|
|
HRESULT GetCount([in, ref, string] LPCWSTR pszHandlerID, [in, unique, string] LPCWSTR pszItemID, [out] DWORD *pnConflicts);
|
|
};
|
|
|
|
// IEnumSyncMgrConflict
|
|
[
|
|
uuid(82705914-dda3-4893-ba99-49de6c8c8036),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface IEnumSyncMgrConflict : IUnknown
|
|
{
|
|
// Standard COM enumerator for ISyncMgrConflict*
|
|
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] ISyncMgrConflict **rgelt, [out] ULONG *pceltFetched);
|
|
HRESULT Skip([in] ULONG celt);
|
|
HRESULT Reset();
|
|
HRESULT Clone([out] IEnumSyncMgrConflict **ppenum);
|
|
}
|
|
|
|
// This is _enum_, not a mask
|
|
typedef [v1_enum] enum SYNCMGR_CONFLICT_ITEM_TYPE
|
|
{
|
|
SYNCMGR_CIT_UPDATED = 0x00000001, // This conflict item was updated
|
|
SYNCMGR_CIT_DELETED = 0x00000002, // This conflict item was deleted
|
|
} SYNCMGR_CONFLICT_ITEM_TYPE;
|
|
typedef DWORD SYNCMGR_CONFLICT_ITEM_TYPE_FLAG;
|
|
|
|
interface ISyncMgrConflictItems;
|
|
interface ISyncMgrConflictResolveInfo;
|
|
|
|
// ISyncMgrConflict
|
|
[
|
|
uuid(9c204249-c443-4ba4-85ed-c972681db137),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrConflict : IUnknown
|
|
{
|
|
// Get a conflict property (see propkey.h for PKEY types).
|
|
// PKEY_ItemNameDisplay - Name of the conflict
|
|
// PKEY_Sync_ConflictDescription - Summary of the conflict
|
|
// PKEY_Sync_HandlerID - Sync handler that created the conflict
|
|
// PKEY_Sync_ItemID - The sync item that created the conflict
|
|
// PKEY_DateModified - The time the conflict was detected
|
|
HRESULT GetProperty([in] REFPROPERTYKEY propkey, [out] PROPVARIANT *ppropvar);
|
|
|
|
// Information identifying a conflict within a conflict store.
|
|
// Contains two opaque blobs. One is the ID uniquely identifying a conflict
|
|
// within a conflict store. The other is optional extra information stored with the
|
|
// conflict that may be used by the implementation when creating conflict objects
|
|
// in ISyncMgrConflictStore::BindToConflict and RemoveConflicts.
|
|
// The size of of the ID blob must be kept short so that the ID may be embedded
|
|
// inside the conflict's PIDL or parsing name. Free each member using CoTaskMemFree()
|
|
HRESULT GetConflictIdInfo([out] SYNCMGR_CONFLICT_ID_INFO *pConflictIdInfo);
|
|
|
|
HRESULT GetItemsArray([out] ISyncMgrConflictItems ** ppArray);
|
|
|
|
// Resolve the conflict using its own UI (sync handler controls UI).
|
|
// If the conflict desires standard resolution behavior, it should set the
|
|
// pnPresenterNextStep parameter to SYNCMGR_PF_DEFAULT and return S_OK.
|
|
HRESULT Resolve([in] ISyncMgrConflictResolveInfo *pResolveInfo);
|
|
|
|
// Get the resolution handler for the conflict
|
|
HRESULT GetResolutionHandler([in] REFIID riid, [out, iid_is(riid)] void **ppvResolutionHandler);
|
|
}
|
|
|
|
typedef [v1_enum] enum SYNCMGR_RESOLUTION_ABILITIES
|
|
{
|
|
SYNCMGR_RA_KEEPOTHER = 0x00000001,
|
|
SYNCMGR_RA_KEEPRECENT = 0x00000002,
|
|
SYNCMGR_RA_REMOVEFROMSYNCSET = 0x00000004,
|
|
SYNCMGR_RA_KEEP_SINGLE = 0x00000008,
|
|
SYNCMGR_RA_KEEP_MULTIPLE = 0x00000010,
|
|
|
|
SYNCMGR_RA_VALID = 0x0000001f
|
|
} SYNCMGR_RESOLUTION_ABILITIES;
|
|
typedef DWORD SYNCMGR_RESOLUTION_ABILITIES_FLAGS;
|
|
|
|
typedef [v1_enum] enum SYNCMGR_RESOLUTION_FEEDBACK
|
|
{
|
|
SYNCMGR_RF_CONTINUE,
|
|
SYNCMGR_RF_REFRESH,
|
|
SYNCMGR_RF_CANCEL,
|
|
} SYNCMGR_RESOLUTION_FEEDBACK;
|
|
|
|
// ISyncMgrResolutionHandler
|
|
[
|
|
uuid(40A3D052-8BFF-4c4b-A338-D4A395700DE9),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrResolutionHandler : IUnknown
|
|
{
|
|
HRESULT QueryAbilities([out] SYNCMGR_RESOLUTION_ABILITIES_FLAGS *pdwAbilities);
|
|
|
|
// Replacing both the first and second items with a third shell item
|
|
// This usually is a merged version of the two originals
|
|
HRESULT KeepOther([in] IShellItem *psiOther, [out] SYNCMGR_RESOLUTION_FEEDBACK *pFeedback);
|
|
|
|
// Keep the more recent copy
|
|
HRESULT KeepRecent([out] SYNCMGR_RESOLUTION_FEEDBACK *pFeedback);
|
|
|
|
// Remove both items from the set of items that sync
|
|
HRESULT RemoveFromSyncSet([out] SYNCMGR_RESOLUTION_FEEDBACK *pFeedback);
|
|
|
|
HRESULT KeepItems([in] ISyncMgrConflictResolutionItems *pArray, [out] SYNCMGR_RESOLUTION_FEEDBACK *pFeedback);
|
|
}
|
|
|
|
// ISyncMgrConflictPresenter
|
|
[
|
|
uuid(0b4f5353-fd2b-42cd-8763-4779f2d508a3),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrConflictPresenter : IUnknown
|
|
{
|
|
// Present the conflict to the user.
|
|
HRESULT PresentConflict([in] ISyncMgrConflict *pConflict, [in] ISyncMgrConflictResolveInfo *pResolveInfo);
|
|
}
|
|
|
|
typedef [v1_enum] enum SYNCMGR_PRESENTER_NEXT_STEP
|
|
{
|
|
// Returned to indicate that the conflict has been resolved and subsequent
|
|
// selected conflicts should continue to be resolved.
|
|
SYNCMGR_PNS_CONTINUE,
|
|
|
|
// Returned to indicate that the default conflict presenter should be used.
|
|
SYNCMGR_PNS_DEFAULT,
|
|
|
|
// Returned to indicate the conflict resolution should be canceled. No
|
|
// more conflicts will resolved if this is returned.
|
|
SYNCMGR_PNS_CANCEL,
|
|
|
|
} SYNCMGR_PRESENTER_NEXT_STEP;
|
|
|
|
typedef [v1_enum] enum SYNCMGR_PRESENTER_CHOICE
|
|
{
|
|
// Returned if the user is skipping this conflict or if conflict
|
|
// resolution is being canceled.
|
|
SYNCMGR_PC_NO_CHOICE,
|
|
|
|
// Returned if the user chose to keep only one item.
|
|
SYNCMGR_PC_KEEP_ONE,
|
|
|
|
// Returned if the user chose to keep multiple items.
|
|
SYNCMGR_PC_KEEP_MULTIPLE,
|
|
|
|
// Returned if the user chose to keep the most recent item.
|
|
SYNCMGR_PC_KEEP_RECENT,
|
|
|
|
// Returned if the item is to be removed from the sync set.
|
|
SYNCMGR_PC_REMOVE_FROM_SYNC_SET,
|
|
|
|
// Returned if the item is not being resolved but is instead being skipped
|
|
// so that it can be resolved at another time.
|
|
SYNCMGR_PC_SKIP,
|
|
|
|
} SYNCMGR_PRESENTER_CHOICE;
|
|
|
|
// ISyncMgrConflictResolveInfo
|
|
[
|
|
object,
|
|
local, // don't allow marshaling across threads/processes
|
|
uuid(c405a219-25a2-442e-8743-b845a2cee93f)
|
|
]
|
|
interface ISyncMgrConflictResolveInfo : IUnknown
|
|
{
|
|
//
|
|
// Get information about which conflict in a set of conflicts is being
|
|
// resolved.
|
|
//
|
|
HRESULT GetIterationInfo(
|
|
[out] UINT *pnCurrentConflict, // Index of conflict in the set.
|
|
[out] UINT *pcConflicts, // Count of conflicts being resolved.
|
|
[out] UINT *pcRemainingForApplyToAll); // Remaining conflicts to which an 'apply to all' response would be applied.
|
|
|
|
//
|
|
// Get results set by a resolve operation.
|
|
//
|
|
|
|
// Get what the presenter wants to do next step.
|
|
HRESULT GetPresenterNextStep([out] SYNCMGR_PRESENTER_NEXT_STEP *pnPresenterNextStep);
|
|
|
|
// Get what kind of choice was made and whether to apply the choice to all
|
|
// subsequent conflicts in the set. If *pfApplyToAll is set to TRUE,
|
|
// GetItemChoice() and GetItemChoiceCount() will have information on how
|
|
// to apply this choice.
|
|
HRESULT GetPresenterChoice([out] SYNCMGR_PRESENTER_CHOICE *pnPresenterChoice, [out] BOOL *pfApplyToAll);
|
|
|
|
// Get the count of items user wants to keep.
|
|
HRESULT GetItemChoiceCount([out] UINT *pcChoices);
|
|
|
|
// Get the index of a specific item the user wants to keep. The index is
|
|
// the index into the conflict's item array and is passed to the resolver
|
|
// for subsequent conflicts in the same set if the user chooses to apply
|
|
// the same operation to all selected conflicts of the same type from the
|
|
// same handler.
|
|
HRESULT GetItemChoice([in] UINT iChoice, [out] UINT *piChoiceIndex);
|
|
|
|
//
|
|
// Set the results of a resolve operation.
|
|
//
|
|
|
|
// Set what the presenter wants to do next.
|
|
HRESULT SetPresenterNextStep([in] SYNCMGR_PRESENTER_NEXT_STEP nPresenterNextStep);
|
|
|
|
// Set what kind of choice was made and whether to apply the choice to
|
|
// all subsequent conflicts in the set. If fApplyToAll is set to TRUE,
|
|
// SetItemChoices() must also be called.
|
|
HRESULT SetPresenterChoice([in] SYNCMGR_PRESENTER_CHOICE nPresenterChoice, [in] BOOL fApplyToAll);
|
|
|
|
// Set the array of indexes representing which items the user wants to
|
|
// keep. This is used if the user chooses to apply the same operation to
|
|
// all selected conflicts of the same type from the same handler.
|
|
HRESULT SetItemChoices([in, ref, size_is(cChoices)] UINT *prgiConflictItemIndexes, [in] UINT cChoices);
|
|
}
|
|
|
|
// ISyncMgrConflictFolder
|
|
[
|
|
uuid(59287f5e-bc81-4fca-a7f1-e5a8ecdb1d69),
|
|
pointer_default(unique),
|
|
local
|
|
]
|
|
interface ISyncMgrConflictFolder : IUnknown
|
|
{
|
|
// Used to map a conflict to its IShellItem
|
|
HRESULT GetConflictIDList([in] ISyncMgrConflict *pConflict, [out] PIDLIST_RELATIVE *ppidlConflict);
|
|
}
|
|
|
|
typedef struct CONFIRM_CONFLICT_ITEM
|
|
{
|
|
IShellItem2 *pShellItem; // the item
|
|
LPWSTR pszOriginalName; // If NULL then IShellItem's display name will be used
|
|
LPWSTR pszAlternateName; // If multiple items will be kept then this item must be renamed to
|
|
// pszAlternateName. User may or may not have an ability to change the name.
|
|
LPWSTR pszLocationShort; // the string presented to the user the represents the "location"
|
|
LPWSTR pszLocationFull; // longer version of the above
|
|
SYNCMGR_CONFLICT_ITEM_TYPE nType; // Type of the item - updated or deleted
|
|
} CONFIRM_CONFLICT_ITEM;
|
|
|
|
cpp_quote("#if defined(__cplusplus)")
|
|
cpp_quote("__inline void FreeConfirmConflictItem(__inout CONFIRM_CONFLICT_ITEM *pcci)")
|
|
cpp_quote("{")
|
|
cpp_quote(" if (pcci->pShellItem)")
|
|
cpp_quote(" {")
|
|
cpp_quote(" pcci->pShellItem->Release();")
|
|
cpp_quote(" }")
|
|
cpp_quote(" ::CoTaskMemFree(pcci->pszOriginalName);")
|
|
cpp_quote(" ::CoTaskMemFree(pcci->pszAlternateName);")
|
|
cpp_quote(" ::CoTaskMemFree(pcci->pszLocationShort);")
|
|
cpp_quote(" ::CoTaskMemFree(pcci->pszLocationFull);")
|
|
cpp_quote(" ::ZeroMemory(pcci, sizeof(*pcci));")
|
|
cpp_quote("}")
|
|
cpp_quote("#endif // defined(__cplusplus)")
|
|
|
|
typedef struct CONFIRM_CONFLICT_RESULT_INFO
|
|
{
|
|
LPWSTR pszNewName; // Item's new name or NULL if item has not been renamed
|
|
UINT iItemIndex; // Item index
|
|
} CONFIRM_CONFLICT_RESULT_INFO;
|
|
|
|
// ISyncMgrConflictItems
|
|
[
|
|
uuid(9C7EAD52-8023-4936-A4DB-D2A9A99E436A),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrConflictItems : IUnknown
|
|
{
|
|
HRESULT GetCount([out] UINT *pCount);
|
|
|
|
// returns S_OK if successful
|
|
// returns E_INVALIDARG if iIndex is out of range
|
|
HRESULT GetItem([in] UINT iIndex, [out] CONFIRM_CONFLICT_ITEM *pItemInfo);
|
|
}
|
|
|
|
// ISyncMgrConflictResolutionItems
|
|
[
|
|
uuid(458725B9-129D-4135-A998-9CEAFEC27007),
|
|
pointer_default(unique),
|
|
object
|
|
]
|
|
interface ISyncMgrConflictResolutionItems : IUnknown
|
|
{
|
|
HRESULT GetCount([out] UINT *pCount);
|
|
|
|
// returns S_OK if successful
|
|
// returns E_INVALIDARG if iIndex is out of range
|
|
HRESULT GetItem([in] UINT iIndex, [out] CONFIRM_CONFLICT_RESULT_INFO *pItemInfo);
|
|
}
|
|
|
|
|
|
// CLSID definitions.
|
|
[
|
|
uuid(bff8075e-5a75-4c59-b35a-bd4804636dd4), // LIBID_SyncMgrObjects (not registered)
|
|
helpstring("Microsoft Sync Center Objects"),
|
|
lcid(0x0000),
|
|
version(1.0)
|
|
]
|
|
library SyncMgrObjects
|
|
{
|
|
[uuid(1202db60-1dac-42c5-aed5-1abdd432248e)] coclass SyncMgrClient { interface ISyncMgrSessionCreator; };
|
|
[uuid(1a1f4206-0688-4e7f-be03-d82ec69df9a5)] coclass SyncMgrControl { interface ISyncMgrControl; };
|
|
[uuid(8d8b8e30-c451-421b-8553-d2976afa648c)] coclass SyncMgrScheduleWizard { interface ISyncMgrScheduleWizardUIOperation; };
|
|
[uuid(9c73f5e5-7ae7-4e32-a8e8-8d23b85255bf)] coclass SyncMgrFolder { interface IShellFolder2; };
|
|
[uuid(2e9e59c0-b437-4981-a647-9c34b9b90891)] coclass SyncSetupFolder { interface IShellFolder2; };
|
|
[uuid(289978ac-a101-4341-a817-21eba7fd046d)] coclass ConflictFolder { interface IShellFolder2; };
|
|
[uuid(71d99464-3b6b-475c-b241-e15883207529)] coclass SyncResultsFolder { interface IShellFolder2; };
|
|
[uuid(7a0f6ab7-ed84-46b6-b47e-02aa159a152b)] coclass SimpleConflictPresenter { interface ISyncMgrConflictPresenter; };
|
|
};
|
|
|
|
//
|
|
// SYNCMGR_OBJECTID_* GUIDs are defined in shlguid.h.
|
|
//
|
|
|
|
|