//+--------------------------------------------------------------------------------
//	evtsnk.idl
//
//	Purpose:
//		Defines the callback interfaces that an event sink (event handler) must
//		implement to process the external event interfaces specific to the 
//		Exchange Platinum Store.
//
//	Copyright (C) 1997-1999 Microsoft Corporation
//
//+--------------------------------------------------------------------------------
import "wtypes.idl";
import "ocidl.idl";

//==================================================================================
//		Interface defs
//==================================================================================

//------------------------------------------------------------------------
// IExStoreEventInfo
// This interface is implemented by the provider and passed to the
// event handler allowing the handler to retrieve (and set) further
// information regarding the event.")
//-------------------------------------------------------------------------
[
	object,
	uuid(9da0e100-86ce-11d1-8699-00c04fb98036),
	helpstring("IExStoreEventInfo Interface"),
	pointer_default(unique)
]
interface IExStoreEventInfo : IUnknown
{
	[local]
	HRESULT GetEventItem(
			[in]	REFIID						riid, 
			[out]	DWORD *						pdwBindStatus,
			[out, iid_is(riid)]	IUnknown **		ppunkEventItem);

	[call_as(GetEventItem)]
	HRESULT RemoteGetEventItem(
			[in]	REFIID						riid, 
			[out]	DWORD *						pdwBindStatus,
			[out, iid_is(riid)]	IUnknown **		ppunkEventItem);

	[local,helpstring("Get session for this event")]
	HRESULT GetEventSession(
			[in]	REFIID						riid,
			[out, iid_is(riid)]	IUnknown **		ppSession);

	[call_as(GetEventSession)]
	HRESULT RemoteGetEventSession(
			[in]	REFIID						riid,
			[out, iid_is(riid)]	IUnknown **		ppSession);
			
	[helpstring("Abort synchronous operation on this event item")]
	HRESULT Abort(
			[in, defaultvalue(0)]	LONG		lErrorCode);
};



//---------------------------------------------------------------------------------------------------
// IExStoreDispEventInfo
//	This interface is a IDispatch compatible event info object implemented by the provider
//	and passed to the event handler.
//	VB sink implentor should use the following example.
//		Implements IExStoreSyncEvents
//		Public sub IExStoreSyncEvents_OnSyncSave(ByVal pEventInfo As ExevtsnkLib.IExStoreEventInfo,..
//		Dim dispInfo As IExStoreDispEventInfo
//		Set dispInfo = pEventInfo
//---------------------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e110-86ce-11d1-8699-00c04fb98036),
	helpstring("IExStoreDispEventInfo Interface"),
	dual,
	oleautomation,
	pointer_default(unique)
]
interface IExStoreDispEventInfo : IDispatch
{
#ifdef EXOLEDBPROXY
	[local,helpstring("Get ADO connection"),propget]
	HRESULT EventConnection([out,retval] IDispatch **ppConnection);

	[call_as(get_EventConnection),helpstring("Get ADO connection"),propget]
	HRESULT RemoteEventConnection([out,retval] IDispatch **ppConnection);
	
	[local,helpstring("Get ADO record"),propget]
	HRESULT EventRecord([out,retval] IDispatch **ppRecord);

	[call_as(get_EventRecord),helpstring("Get ADO record"),propget]
	HRESULT RemoteEventRecord([out,retval] IDispatch **ppRecord);
	
#else
				
	[helpstring("Get ADO connection"),propget]
	HRESULT EventConnection([out,retval] IDispatch **ppConnection);

	[helpstring("Get ADO record"),propget]
	HRESULT EventRecord([out,retval] IDispatch **ppRecord);

#endif

	[helpstring("Abort any change on this event item")]
	HRESULT AbortChange([in, defaultvalue(0)]	LONG	lErrorCode);

	[helpstring("Get original source URL during OnSyncSave event caused by move"), propget]
	HRESULT	SourceURL([out,retval] BSTR * pbstrURL);

	[helpstring("Get User GUID who caused this synchronous event"), propget]
	HRESULT	UserGuid([out,retval] BSTR * pvarUserGuid);

	[helpstring("Get Store GUID on which this synchronous event occurrs"), propget]
	HRESULT StoreGuid([out,retval] BSTR * pvarStoreGuid);

	[helpstring("Get User SID who caused this synchronous event"), propget]
	HRESULT UserSid([out,retval] VARIANT * pvarSid);

	[helpstring("Get Data"), propget]
	HRESULT Data([out, retval] LONG_PTR * plData);

	[helpstring("Set Data"), propput]
	HRESULT Data([in] LONG_PTR lData);
};


//---------------------------------------------------------------------------------------
// IExStoreEventRegistrationURL
//		Get URL for the event registration msg
//---------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e117-86ce-11d1-8699-00c04fb98036),
	dual,
	helpstring("IExStoreEventRegistrationURL interface"),
	pointer_default(unique)
]
interface IExStoreEventRegistrationURL : IDispatch
{
	[helpstring("URL for the event registration item"),propget]
	HRESULT EventRegistrationURL([out,retval] BSTR *pbstrURL);
};


//---------------------------------------------------------------------------------------
// IStoreGuidFromUrl
//  Get MDB GUID from the given URL
//---------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e10c-86ce-11d1-8699-00c04fb98036),
	dual,
	helpstring("IStoreGuidFromUrl interface"),
	pointer_default(unique)
]
interface IStoreGuidFromUrl : IDispatch
{
	[helpstring("Get Store GUID from URL")] HRESULT StoreGuidFromUrl(
		[in] 			BSTR	bstrUrl,
		[out,retval]	BSTR *	pbstrGuid);
};



//------------------------------------------------------------------------------------------
// IExStoreEventLogonInfo
//		This interface supplies information on the user logon which caused the sync events.
//------------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e111-86ce-11d1-8699-00c04fb98036),
	helpstring("IExStoreEventLogonInfo Interface"),
	pointer_default(unique)
]
interface IExStoreEventLogonInfo : IUnknown
{
	[helpstring("Get User GUID who caused this synchronous event")]
	HRESULT	GetUserGuid(
				[in,out] GUID	* pguid);

	[helpstring("Get Store GUID on which this synchronous event occurrs")]
	HRESULT GetStoreGuid(
				[in,out] GUID	* pguid);

	[helpstring("Get User SID who caused this synchronous event")]
	HRESULT GetUserSid(
				[out]	SID	** ppsid);
};



//----------------------------------------------------------------------------------------------------------
// IGetSourceURL
//	This interface allows to get the original source URL during OnSyncSave event caused by move operation.
//----------------------------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e10b-86ce-11d1-8699-00c04fb98036),
	helpstring("IGetSourceURL Interface"),
	pointer_default(unique)
]
interface IGetSourceURL : IUnknown
{
	[helpstring("Get original source URL during OnSyncSave event caused by move")]
	HRESULT	GetSourceURL(
				[out,retval]	BSTR	*pbstrURL);
};


//-----------------------------------------------------------------------------------------
//	IGetLockRow
//	This interface allows to get Lock row during lock/unlock events
//-----------------------------------------------------------------------------------------
[
	object,
	helpstring("IGetLockRow Interface"),
	pointer_default(unique),
	uuid(9da0e0ef-86ce-11d1-8699-00c04fb98036)
]
interface IGetLockRow : IUnknown
{
#ifdef EXOLEDBPROXY
	[local]
	HRESULT	GetLockRow(
			[in]	REFIID						riid, 
			[out]	DWORD *						pdwBindStatus,
			[out, iid_is(riid)]	IUnknown **		ppunkLockRow);

	[call_as(GetLockRow)]
	HRESULT	RemoteGetLockRow(
			[in]	REFIID						riid, 
			[out]	DWORD *						pdwBindStatus,
			[out, iid_is(riid)]	IUnknown **		ppunkLockRow);
#else
	[helpstring("Bind to LOCK row which caused this lock/unlock event")]
	HRESULT	GetLockRow(
			[in]	REFIID						riid, 
			[out]	DWORD *						pdwBindStatus,
			[out, iid_is(riid)]	IUnknown **		ppunkLockRow);
#endif
};



//-----------------------------------------------------------------------------------------------
// IAsyncNotify
//		This interface is used by server event to notify status of reliable async event.
//------------------------------------------------------------------------------------------------
[
	object,
	uuid(9da0e10a-86ce-11d1-8699-00c04fb98036),
	helpstring("IAsyncNotify Interface"),
	pointer_default(unique)
]
interface IAsyncNotify : IUnknown
{
	[helpstring("Reliable asynchronous event has finished")]
	HRESULT	Completed();
};



//-----------------------------------------------------------------------------------------
//	IExStoreAsyncEvents -- Asynchronous Event Sink Interface
//	This is the callback interface that an asynchronous event handler
//	(event sink) must implement for asynchronous event handling.
//-----------------------------------------------------------------------------------------
[
	helpstring("IExStoreAsyncEvents"),object,pointer_default(unique),
	uuid(9da0e0fe-86ce-11d1-8699-00c04fb98036)
]
interface IExStoreAsyncEvents : IUnknown
{
	HRESULT OnSave(
				[in] IExStoreEventInfo *	pEventInfo,
				[in] BSTR				bstrURLItem,
				[in] LONG 				lFlags);

	HRESULT OnDelete(
				[in] IExStoreEventInfo *	pEventInfo,
				[in] BSTR					bstrURLItem,
				[in] LONG 					lFlags);
};



//------------------------------------------------------------------------------------------
//	IExStoreSyncEvents -- Synchronous Event Sink Interface
//	This is the callback interface that a Synchronous event handler
//	(event sink) must implement.
//------------------------------------------------------------------------------------------
[
	helpstring("IExStoreSyncEvents"),object,pointer_default(unique),
	uuid(9da0e0ff-86ce-11d1-8699-00c04fb98036)
]
interface IExStoreSyncEvents : IUnknown
{
	HRESULT OnSyncSave(
				[in] IExStoreEventInfo *	pEventInfo,
				[in] BSTR					bstrURLItem,
				[in] LONG 					lFlags);

	HRESULT	OnSyncDelete(
				[in] IExStoreEventInfo *	pEventInfo,
				[in] BSTR					bstrURLItem,
				[in] LONG					lFlags);

};



//-------------------------------------------------------------------------------------------------
//	IExStoreSystemEvents -- Asynchronous System Event Sink Interface
//	This is the callback interface that a system event handler must implement.
//-------------------------------------------------------------------------------------------------
[
	helpstring("IExStoreSystemEvents"),object,pointer_default(unique),
	uuid(9da0e101-86ce-11d1-8699-00c04fb98036)
]
interface IExStoreSystemEvents : IUnknown
{
	HRESULT OnTimer(
				[in] BSTR					bstrURLItem,
				[in] LONG					lFlags);

	HRESULT OnMDBStartUp(
				[in] BSTR					bstrMDBGuid,
				[in] BSTR					bstrMDBName,
				[in] LONG					lFlags);

	HRESULT OnMDBShutDown(
				[in] BSTR					bstrMDBGuid,
				[in] LONG					lFlags);
};



//------------------------------------------------------------------------------------------
//	IExStoreLockEvents	-- Synchronous Lock Event Sink Interface
//	This is the callback interface that a Lock Event handler must implement.
//------------------------------------------------------------------------------------------
[
	helpstring("IExStoreLockEvents"),object,pointer_default(unique),
	uuid(9da0e10e-86ce-11d1-8699-00c04fb98036)
]
interface IExStoreLockEvents : IUnknown
{
	HRESULT	OnSyncLock(
				[in]	IExStoreEventInfo *	pEventInfo,
				[in]	BSTR				bstrURLItem,
				[in]	LONG				lFlags);

	HRESULT OnSyncUnlock(
				[in]	IExStoreEventInfo *	pEventInfo,
				[in]	BSTR				bstrURLItem,
				[in]	LONG				lFlags);
};


//---------------------------------------------------------------------------------------
// IUserData	--- Allows the caller to set data during Begin phase of event
//					and retrieve it during Commit/Abort phase.
//---------------------------------------------------------------------------------------
[
	helpstring("IUserData"),object,pointer_default(unique),
	uuid(9da0e116-86ce-11d1-8699-00c04fb98036)
]
interface IUserData : IUnknown
{
	HRESULT GetData(
			[out]	LONG_PTR	* plData);

	HRESULT SetData(
			[in]	LONG_PTR	lData);
};


//---------------------------------------------------------------------------------------
// IEventSinkIsCacheable
//		This interface is implemented by the event sink and tells Exchange store
//		how to handle (store) event sink object..
//		
//		Possible return values:
//			S_FALSE			not cached
//			S_OK			???
//---------------------------------------------------------------------------------------
[
	helpstring("IEventSinkIsCacheable"),
	object,
	pointer_default(unique),
	uuid(9da0e118-86ce-11d1-8699-00c04fb98036)
]
interface IEventSinkIsCacheable : IUnknown
{
	HRESULT IsCacheable();
};


//--------------------------------------------------------------------------------------
// ICreateRegistration
//		This (optional) interface is implemented by event sink and tells Exchange store
//		whether to allow or deny saving of event registration item
//		The return hr value is ignored. If phr contains
//		S_OK		allow saving of event registration item
//		S_FALSE		deny
//--------------------------------------------------------------------------------------
[
	helpstring("ICreateRegistration"),
	object,
	pointer_default(unique),
	uuid(9da0e11c-86ce-11d1-8699-00c04fb98036)
]
interface ICreateRegistration : IUnknown
{
	HRESULT	Register(
				[in] 			IExStoreEventInfo * pEventInfo,
				[in]			BSTR				bstrURLItem,
				[in]			LONG				lFlags,
				[out,retval]	long *				phr);
};


//=======================================================================================
//	Other defs
//=======================================================================================
cpp_quote("")
cpp_quote("//")
cpp_quote("// Place a \"#define INITGUID\" in just ONE of your projects source files BEFORE")
cpp_quote("// including this header file to define the IIDs below.")
cpp_quote("//")
cpp_quote("")
cpp_quote("#ifdef DEFINE_GUID")
cpp_quote("#undef DEFINE_GUID")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifdef INITGUID")
cpp_quote("#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
cpp_quote("        EXTERN_C const GUID DECLSPEC_SELECTANY name \\")
cpp_quote("                = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }")
cpp_quote("#else")
cpp_quote("#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
cpp_quote("    EXTERN_C const GUID FAR name")
cpp_quote("#endif // INITGUID")

cpp_quote("//")
cpp_quote("//	Bit flags passed to event handlers in the 'lFlags' parameter")
cpp_quote("//")

enum EVT_SINK_FLAGS
{
	EVT_NEW_ITEM		= 0x00000001,	// item is newly created
	EVT_IS_COLLECTION	= 0x00000002,	// item is folder
	EVT_REPLICATED_ITEM	= 0x00000004,
	EVT_IS_DELIVERED	= 0x00000008,	// fsfSaveDeliver: delivered item
	EVT_SYNC_BEGIN		= 0x01000000,	// sync begin event
	EVT_SYNC_COMMITTED	= 0x02000000,	// sync committed event
	EVT_SYNC_ABORTED	= 0x04000000,	// sync aborted event
	EVT_SOFTDELETE		= 0x00000010,	// fsfDeleteSoft: soft delete
	EVT_HARDDELETE		= 0x00000020,	// fsfDeleteHard: hard delete

	EVT_INITNEW			= 0x00000040,	// 1st firing of event sink. time to initialize sink
	
	EVT_MOVE			= 0x00000100,	// fsfSaveMove: save due to a move, fsfDeleteMove: deleted due to a move
	EVT_COPY			= 0x00000200,	// fsfSaveCopy: save due to a copy
	EVT_DRAFT_CREATE	= 0x00000400,	// fsfSaveCreateDraft: create of a draft
	EVT_DRAFT_SAVE		= 0x00000800,	// fsfSaveDraft: save of an update draft
	EVT_DRAFT_CHECKIN	= 0x00001000,	// fsfSaveCheckinDraft: save that makes the draft a "real row"

	EVT_INVALID_SOURCE_URL =0x20000000,	// Unable to get Source URL
	EVT_INVALID_URL		= 	0x40000000,	// Unable to get Target URL
	EVT_ERROR			= 	0x80000000,	// error during event

	// flags available during lock/unlock events
	EVT_LOCKTYPE_READ		= 0x00010000,	// locktRead
	EVT_LOCKTYPE_WRITE		= 0x00020000,	// locktWrite
	EVT_LOCKTYPE_CHECKOUT	= 0x00040000,	// locktCheckout
	EVT_LOCKTYPE_READWRITE	= 0x00030000,	// locktReadWrite
	EVT_LOCKSCOPE_SHARED	= 0x00080000,	// lockscpShared
	EVT_LOCKSCOPE_EXCLUSIVE = 0x00100000,	// lockscpExclusive
	
	// Only during Unlock event
	EVT_UNLOCK_CHECKIN_ABORT 		= 0x00200000,
	EVT_UNLOCK_CHECKIN_KEEP_LOCKED	= 0x00400000,

	// Other lock event property
	EVT_LOCKDEPTH_DEEP		=	0x00800000,		// ulDepthInifinity
	EVT_LOCK_TRANSIENT		=	0x00002000		// transient lock
};
cpp_quote("")
typedef enum EVT_SINK_FLAGS EVT_SINK_FLAGS;

cpp_quote("")
cpp_quote("//")
cpp_quote("//	Event binding property names")
cpp_quote("//")
cpp_quote("// To register event, DAV:contentclass should have the following value")
cpp_quote("#define	EVTPROPVAL_EVENTREG				L\"urn:content-class:storeeventreg\"")
cpp_quote("")
cpp_quote("// Required event registration properties")
cpp_quote("#define	EVTPROP_EVENTMETHOD				L\"http://schemas.microsoft.com/exchange/events/EventMethod\"")
cpp_quote("#define	EVTPROP_EVENTMETHOD_TYPE		DBTYPE_WSTR")

cpp_quote("#define	EVTPROP_SINKCLASS				L\"http://schemas.microsoft.com/exchange/events/SinkClass\"")
cpp_quote("#define	EVTPROP_SINKCLASS_TYPE			DBTYPE_WSTR")

cpp_quote("")
cpp_quote("// Optional event registration properties")
cpp_quote("#define	EVTPROP_PRIORITY				L\"http://schemas.microsoft.com/exchange/events/Priority\"")
cpp_quote("#define	EVTPROP_PRIORITY_TYPE			DBTYPE_I4")

cpp_quote("#define	EVTPROP_MATCHSCOPE				L\"http://schemas.microsoft.com/exchange/events/MatchScope\"")
cpp_quote("#define	EVTPROP_MATCHSCOPE_TYPE			DBTYPE_WSTR")

cpp_quote("#define	EVTPROP_CRITERIA				L\"http://schemas.microsoft.com/exchange/events/Criteria\"")
cpp_quote("#define	EVTPROP_CRITERIA_TYPE			DBTYPE_WSTR")

cpp_quote("#define	EVTPROP_TIMERINTERVAL			L\"http://schemas.microsoft.com/exchange/events/TimerInterval\"")
cpp_quote("#define	EVTPROP_TIMERINTERVAL_TYPE		DBTYPE_I4")

cpp_quote("#define	EVTPROP_TIMERSTARTTIME			L\"http://schemas.microsoft.com/exchange/events/TimerStartTime\"")
cpp_quote("#define	EVTPROP_TIMERSTARTTIME_TYPE		DBTYPE_FILETIME")

cpp_quote("#define	EVTPROP_TIMEREXPIRYTIME			L\"http://schemas.microsoft.com/exchange/events/TimerExpiryTime\"")
cpp_quote("#define	EVTPROP_TIMEREXPIRYTIME_TYPE	DBTYPE_FILETIME")

cpp_quote("#define	EVTPROP_SCRIPTURL				L\"http://schemas.microsoft.com/exchange/events/ScriptUrl\"")
cpp_quote("#define	EVTPROP_SCRIPTURL_TYPE			DBTYPE_WSTR")

cpp_quote("#define	EVTPROP_ENABLED					L\"http://schemas.microsoft.com/exchange/events/Enabled\"")
cpp_quote("#define	EVTPROP_ENABLED_TYPE			DBTYPE_BOOL")

cpp_quote("")
cpp_quote("//")
cpp_quote("//	EVTPROP_MATCHSCOPE parameter values")
cpp_quote("//")
cpp_quote("#define	EVT_MATCHSCOPE_DEEP				L\"DEEP\"")
cpp_quote("#define	EVT_MATCHSCOPE_SHALLOW			L\"SHALLOW\"")
cpp_quote("#define	EVT_MATCHSCOPE_EXACT			L\"EXACT\"")
cpp_quote("#define	EVT_MATCHSCOPE_ANY				L\"ANY\"")
cpp_quote("")
cpp_quote("//")
cpp_quote("//	Event names for the EVTPROP_EVENTMETHOD property")
cpp_quote("//")
cpp_quote("#define	EVT_ON_SAVE						L\"OnSave\"")
cpp_quote("#define	EVT_ON_DELETE					L\"OnDelete\"")
cpp_quote("#define	EVT_ON_TIMER					L\"OnTimer\"")
cpp_quote("#define	EVT_ON_MDB_STARTUP				L\"OnMDBStartUp\"")
cpp_quote("#define	EVT_ON_MDB_SHUTDOWN				L\"OnMDBShutDown\"")
cpp_quote("#define	EVT_ON_SYNC_SAVE				L\"OnSyncSave\"")
cpp_quote("#define	EVT_ON_SYNC_DELETE				L\"OnSyncDelete\"")
cpp_quote("#define	EVT_ON_SYNC_LOCK				L\"OnSyncLock\"")
cpp_quote("#define	EVT_ON_SYNC_UNLOCK				L\"OnSyncUnlock\"")
cpp_quote("")
cpp_quote("")

cpp_quote("//")
cpp_quote("// Return code for Reliable async event")
cpp_quote("#define S_PENDING	0x00000002L")
cpp_quote("//")

cpp_quote("//")
cpp_quote("// Return code for IEventSinkIsCacheable")
cpp_quote("#define S_CACHE_PER_BINDING	S_OK")
cpp_quote("")

cpp_quote("//")
cpp_quote("// Exchange Store OLEDB CLSIDs")
cpp_quote("//")
cpp_quote("")
cpp_quote("DEFINE_GUID(CLSID_CExoledbDataSource,0x9da0e0fa,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(CLSID_CExoledbBinder,0x9da0e0f3,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(CLSID_CExoledbDataSourceLS,0x9da0e120,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(CLSID_CExoledbBinderLS,0x9da0e11f,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("")
cpp_quote("")
cpp_quote("// Interface GUID")
cpp_quote("//")
cpp_quote("DEFINE_GUID(IID_IExStoreEventInfo,0x9da0e100,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreDispEventInfo,0x9da0e110,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreEventLogonInfo,0x9da0e111,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IGetSourceURL,0x9da0e10b,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IGetLockRow,0x9da0e0ef,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IAsyncNotify,0x9da0e10a,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreAsyncEvents,0x9da0e0fe,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreSyncEvents,0x9da0e0ff,0x86ce,0x11d1,0x86, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x80, 0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreSystemEvents,0x9da0e101,0x86ce,0x11d1,0x86,0x99,0x00,0xC0,0x4F,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreLockEvents,0x9da0e10e,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IStoreGuidFromUrl,0x9da0e10c,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IExStoreEventRegistrationURL,0x9da0e117,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IUserData,0x9da0e116,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_IEventSinkIsCacheable,0x9da0e118,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(IID_ICreateRegistration,0x9da0e11c,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(CLSID_StoreGuidFromUrl,0x9da0e10d,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")
cpp_quote("DEFINE_GUID(CLSID_StoreGuidFromUrlLS,0x9da0e123,0x86ce,0x11d1,0x86,0x99,0x00,0xc0,0x4f,0xb9,0x80,0x36);")


#ifndef EXOLEDBPROXY

// ===========================================================================
// Type library & CLSID
// ===========================================================================
[
	uuid(1F28FCC2-8B0D-11d2-9C95-00C04F79F1DB),
	version(1.0),
	helpstring("EXOLEDB Event Sink Type Library")
]
library ExevtsnkLib
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

// Sink defs
	EVT_SINK_FLAGS;
	interface IExStoreEventInfo;
	interface IExStoreDispEventInfo;
	interface IExStoreEventRegistrationURL;
	interface IExStoreAsyncEvents;
	interface IExStoreSyncEvents;
	interface IExStoreSystemEvents;
	interface IExStoreLockEvents;
	interface IGetLockRow;
	interface IExStoreEventLogonInfo;
	interface IGetSourceURL;
	interface IUserData;
	interface IAsyncNotify;
	interface IStoreGUIDFromURL;
	interface IEventSinkIsCacheable;
	interface ICreateRegistration;
};

#endif

