Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

145 lines
4.3 KiB

//
// The class ID of this OneStop Handler class.
//
//
#define ODS(sz) OutputDebugString(sz)
#ifndef _SYNCHNDLR_H
#define _SYNCHNDLR_H
#include <objbase.h>
#include <mobsync.h>
#include "reg.h" // include so Handlers can call the reg helper routines.
// base structure for OfflineHandler item.
// specific implementations allocate extra space on the end for their specific data.
typedef struct _SYNCMGRHANDLERITEM
{
_SYNCMGRHANDLERITEM *pNextOfflineItem;
SYNCMGRITEM offlineItem; // array of OfflineItems
} SYNCMGRHANDLERITEM;
typedef SYNCMGRHANDLERITEM *LPSYNCMGRHANDLERITEM;
// structure for keeping track of items as a whole
typedef struct _tagSYNCMGRHANDLERITEMS
{
DWORD _cRefs; // reference count on this structure
DWORD dwNumOfflineItems; // number of items in OffItems array.
LPSYNCMGRHANDLERITEM pFirstOfflineItem; // ptr to first OfflineItem in linked list
} SYNCMGRHANDLERITEMS;
typedef SYNCMGRHANDLERITEMS *LPSYNCMGRHANDLERITEMS;
class CClassFactory : public IClassFactory
{
protected:
ULONG m_cRef;
public:
CClassFactory();
~CClassFactory();
//IUnknown members
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//IClassFactory members
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
STDMETHODIMP LockServer(BOOL);
};
typedef CClassFactory *LPCClassFactory;
// todo: need helper functions for creating and releasing
// structure so each function doesn't have to call it.
class COneStopHandler : public ISyncMgrSynchronize
{
private: // should be private
DWORD m_cRef;
LPSYNCMGRHANDLERITEMS m_pOfflineHandlerItems;
LPSYNCMGRSYNCHRONIZECALLBACK m_pOfflineSynchronizeCallback;
public:
COneStopHandler();
~COneStopHandler();
//IUnknown members
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
virtual inline STDMETHODIMP DestroyHandler() { return NOERROR; };
// IOfflineSynchroinze methods
STDMETHODIMP Initialize(DWORD dwReserved,DWORD dwSyncFlags,
DWORD cbCookie,const BYTE *lpCooke);
STDMETHODIMP GetHandlerInfo(LPSYNCMGRHANDLERINFO *ppSyncMgrHandlerInfo);
STDMETHODIMP EnumSyncMgrItems(ISyncMgrEnumItems **ppenumOffineItems);
STDMETHODIMP GetItemObject(REFSYNCMGRITEMID ItemID,REFIID riid,void** ppv);
STDMETHODIMP ShowProperties(HWND hwnd,REFSYNCMGRITEMID ItemID);
STDMETHODIMP SetProgressCallback(ISyncMgrSynchronizeCallback *lpCallBack);
STDMETHODIMP PrepareForSync(ULONG cbNumItems,SYNCMGRITEMID* pItemIDs,HWND hWndParent,
DWORD dwReserved);
STDMETHODIMP Synchronize(HWND hwnd);
STDMETHODIMP SetItemStatus(REFSYNCMGRITEMID ItemID,DWORD dwSyncMgrStatus);
STDMETHODIMP ShowError(HWND hWndParent,REFSYNCMGRERRORID ErrorID);
// functions for get/set of private variables.
inline LPSYNCMGRHANDLERITEMS GetOfflineItemsHolder() { return m_pOfflineHandlerItems; };
inline void SetOfflineItemsHolder(LPSYNCMGRHANDLERITEMS pOfflineHandlerItems)
{ m_pOfflineHandlerItems = pOfflineHandlerItems; };
inline LPSYNCMGRSYNCHRONIZECALLBACK GetOfflineSynchronizeCallback()
{ return m_pOfflineSynchronizeCallback; };
};
typedef COneStopHandler *LPCOneStopHandler;
class CEnumOfflineItems : public ISyncMgrEnumItems
{
private:
DWORD m_cRef;
DWORD m_cOffset;
LPSYNCMGRHANDLERITEMS m_pOfflineItems; // array of offline items, same format as give to OneStop
LPSYNCMGRHANDLERITEM m_pNextItem;
public:
CEnumOfflineItems(LPSYNCMGRHANDLERITEMS pOfflineItems,DWORD cOffset);
~CEnumOfflineItems();
//IUnknown members
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//IEnumOfflineItems members
STDMETHODIMP Next(ULONG celt, LPSYNCMGRITEM rgelt,ULONG *pceltFetched);
STDMETHODIMP Skip(ULONG celt);
STDMETHODIMP Reset();
STDMETHODIMP Clone(ISyncMgrEnumItems **ppenum);
};
typedef CEnumOfflineItems *LPCEnumOfflineItems;
STDAPI DllRegisterServer(void);
// helper function declarations.
// TODO: MOVE TO OWN FILE
DWORD AddRef_OfflineHandlerItemsList(LPSYNCMGRHANDLERITEMS lpOfflineItem);
DWORD Release_OfflineHandlerItemsList(LPSYNCMGRHANDLERITEMS lpOfflineItem);
LPSYNCMGRHANDLERITEMS CreateOfflineHandlerItemsList();
LPSYNCMGRHANDLERITEM AddOfflineItemToList(LPSYNCMGRHANDLERITEMS pOfflineItemsList,ULONG cbSize);
#endif // _SYNCHNDLR_H