/*++ Copyright (c) 1997 Microsoft Corporation Module Name: connect.h Abstract: defines for event/sink interface for IIS DCOM Admin. Author: Sophia Chung (sophiac) 14-Jan-97 Revision History: --*/ #if !defined(CONNECT_H) #define CONNECT_H #ifdef __cplusplus // Types that should be in OLE2.H #ifndef PPVOID typedef LPVOID* PPVOID; #endif enum { // A constant for the number of connections to add to the allocation // of the dynamic connection array. ALLOC_CONNECTIONS = 8, // The start value for the connection key (cookie) counter. COOKIE_START_VALUE = 500 }; /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O ObjectClass: COEnumConnectionPoints Summary: COM object class for enumerating the Connection Points offered by a connectable object. Interfaces: IUnknown Standard interface providing COM object features. IEnumConnectionPoints Interface for connection point enumeration. Aggregation: COEnumConnectionPoints COM Objects are not aggregatable. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/ class COEnumConnectionPoints : public IEnumConnectionPoints { public: // Main Object Constructor & Destructor. COEnumConnectionPoints(IUnknown* pHostObj); ~COEnumConnectionPoints(void); // A general method for initializing this newly created object. // Creates any subordinate arrays, structures, or objects. HRESULT Init( ULONG cConnPts, IConnectionPoint** paConnPts, ULONG iEnumIndex); // IUnknown methods. Main object, non-delegating. STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IEnumConnectionPoints methods. STDMETHODIMP Next(ULONG, IConnectionPoint**, ULONG*); STDMETHODIMP Skip(ULONG); STDMETHODIMP Reset(void); STDMETHODIMP Clone(IEnumConnectionPoints**); private: // Private data of COEnumConnectionPoints COM objects. // Main Object reference count. ULONG m_cRefs; // IUnknown pointer to host COM object being enumerated. IUnknown* m_pHostObj; // Connection Point index variable. ULONG m_iEnumIndex; // Number of Connection Points being enumerated. ULONG m_cConnPts; // Allocated array of Connection Point interface pointers. IConnectionPoint** m_paConnPts; }; typedef COEnumConnectionPoints* PCOEnumConnectionPoints; /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O ObjectClass: COConnectionPoint Summary: Connection Point COM object class. Implements a native IConnectionPoint interface. The Advise, Unadvise, and EnumConnections methods use the CThreaded OwnThis mechanism to provide thread-safe mutually exclusive access to this connection point object. Interfaces: IUnknown Standard interface providing COM object features. IConnectionPoint Interface for connection point features. Aggregation: COConnectionPoint COM Objects are not aggregatable. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/ class COConnectionPoint : public IConnectionPoint { public: // Main Object Constructor & Destructor. COConnectionPoint(); ~COConnectionPoint(void); // A general method for initializing this newly created object. // Creates any subordinate arrays, structures, or objects. HRESULT Init(IUnknown* pHostObj, REFIID riid); // IUnknown methods. Main object, non-delegating. STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IConnectionPoint methods. STDMETHODIMP GetConnectionInterface(IID*); STDMETHODIMP GetConnectionPointContainer(IConnectionPointContainer**); STDMETHODIMP Advise(IUnknown*, DWORD*); STDMETHODIMP Unadvise(DWORD); STDMETHODIMP EnumConnections(IEnumConnections**); // Our own methods STDMETHODIMP ListenersPresent(VOID); STDMETHODIMP Terminate(VOID); STDMETHODIMP Disable(VOID); STDMETHODIMP InternalEnumSinks( CONNECTDATA **prgConnections, ULONG *pcConnections); private: // Private utility methods of COConnectionPoint. STDMETHODIMP Unadvise_Worker(DWORD dwCookie); HRESULT GetSlot(UINT* puiFreeSlot); HRESULT FindSlot(DWORD dwCookie, UINT* puiSlot); // Private data of COConnectionPoint COM objects. // Used to protect access to the member data. CReaderWriterLock3 m_Lock; // IUnknown pointer to host COM object offering this connection point. IUnknown* m_pHostObj; // The IID of the sink interface associated with this connection point. IID m_iidSink; // The current number of live sink connections to this connection point. UINT m_cConnections; // The current maximum index into the dynamic connection array. UINT m_uiMaxIndex; // The dynamic array of sink connections to this connection point. CONNECTDATA* m_paConnections; // Determines whether the host object is shuting down and force terminated us volatile BOOL m_bTerminated; BOOL m_bEnabled; IGlobalInterfaceTable* m_pGIT; }; typedef COConnectionPoint* PCOConnectionPoint; /*O+O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O+++O ObjectClass: COEnumConnections Summary: COM object class for enumerating the connections of a connection point of a connectable object. Interfaces: IUnknown Standard interface providing COM object features. IEnumConnections Interface for connection enumeration features. Aggregation: COEnumConnections COM Objects are not aggregatable. O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O---O-O*/ class COEnumConnections : public IEnumConnections { public: // Main Object Constructor & Destructor. COEnumConnections(IUnknown* pHostObj); ~COEnumConnections(void); // A general method for initializing this newly created object. // Creates any subordinate arrays, structures, or objects. HRESULT Init( ULONG cConnections, CONNECTDATA* paConnections, ULONG iEnumIndex, IGlobalInterfaceTable* pGIT = NULL ); // IUnknown methods. Main object, non-delegating. STDMETHODIMP QueryInterface(REFIID, PPVOID); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IEnumConnections methods. STDMETHODIMP Next(ULONG, CONNECTDATA*, ULONG*); STDMETHODIMP Skip(ULONG); STDMETHODIMP Reset(void); STDMETHODIMP Clone(IEnumConnections**); private: // Private data of COEnumConnections COM objects. // Main Object reference count. ULONG m_cRefs; // IUnknown pointer to host connection point COM object being // enumerated. IUnknown* m_pHostObj; // Connection index variable. ULONG m_iEnumIndex; // Number of Connections being enumerated. ULONG m_cConnections; // Allocated array of live Connections only. CONNECTDATA* m_paConnections; }; typedef COEnumConnections* PCOEnumConnections; HRESULT SetSinkCallbackSecurityBlanket( IUnknown * pUnkSink); #endif // __cplusplus #endif // CONNECT_H