///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998-1999 Microsoft Corporation // // Module Name: // ClusApp.h // // Description: // Definition of CClusApplication and it's supporting classes. // // Implementation File: // ClusApp.cpp // // Author: // Galen Barbee (GalenB) 10-Dec-1998 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #ifndef _CLUSAPPLICATION_H_ #define _CLUSAPPLICATION_H_ #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // Forward Class Declarations ///////////////////////////////////////////////////////////////////////////// class CClusApplication; class CClusterNames; class CDomainNames; ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusterNames // // Description: // Cluster Names Collection Automation Class. // // Inheritance: // IDispatchImpl< ISClusterNames, &IID_ISClusterNames, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusterNames, &CLSID_ClusterNames > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusterNames : public IDispatchImpl< ISClusterNames, &IID_ISClusterNames, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusterNames, &CLSID_ClusterNames > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CClusterNames( void ); ~CClusterNames( void ); BEGIN_COM_MAP(CClusterNames) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusterNames) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusterNames) DECLARE_NO_REGISTRY() HRESULT Create( IN BSTR bstrDomainName ); private: typedef std::vector< CComBSTR * > ClusterNameList; ClusterNameList m_Clusters; CComBSTR m_bstrDomainName; void Clear( void ); public: STDMETHODIMP get_DomainName( OUT BSTR * pbstrDomainName ); STDMETHODIMP get_Count( OUT long * plCount ); STDMETHODIMP get_Item( IN VARIANT varIndex, OUT BSTR * bstrClusterName ); STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk ); STDMETHODIMP Refresh( void ); // STDMETHODIMP get_Application( OUT ISClusApplication ** ppParentApplication ); // STDMETHODIMP get_Parent( OUT ISClusApplication ** ppParent ) // { // return get_Application( ppParent ); // } protected: HRESULT GetIndex( IN VARIANT varIndex, OUT UINT * pnIndex ); }; //*** CClusterNames ///////////////////////////////////////////////////////////////////////////// //++ // // class CDomainNames // // Description: // Cluster Domain Names Collection Automation Class. // // Inheritance: // IDispatchImpl< ISDomainNames, &IID_ISDomainNames, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CDomainNames, &CLSID_DomainNames > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CDomainNames : public IDispatchImpl< ISDomainNames, &IID_ISDomainNames, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CDomainNames, &CLSID_DomainNames > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CDomainNames( void ); ~CDomainNames( void ); BEGIN_COM_MAP(CDomainNames) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISDomainNames) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CDomainNames) DECLARE_NO_REGISTRY() private: typedef std::vector< CComBSTR * > DomainList; DomainList m_DomainList; STDMETHODIMP ScBuildTrustList( IN LPWSTR pszTarget ); DWORD ScOpenPolicy( IN LPWSTR ServerName, IN DWORD DesiredAccess, OUT PLSA_HANDLE PolicyHandle ); void InitLsaString( OUT PLSA_UNICODE_STRING LsaString, IN LPWSTR String ); DWORD ScIsDomainController( IN LPWSTR pszServer, OUT LPBOOL pbIsDC ); DWORD ScEnumTrustedDomains( IN LSA_HANDLE PolicyHandle ); DWORD ScAddTrustToList( IN PLSA_UNICODE_STRING UnicodeString ); void Clear( void ); public: STDMETHODIMP get_Count( OUT long * plCount ); STDMETHODIMP get_Item( IN VARIANT varIndex, OUT BSTR * bstrDomainName ); STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk ); STDMETHODIMP Refresh( void ); // STDMETHODIMP get_Application( OUT ISClusApplication ** ppParentApplication ); // STDMETHODIMP get_Parent( OUT ISClusApplication ** ppParent ) // { // return get_Application( ppParent ); // } protected: HRESULT GetIndex( IN VARIANT varIndex, OUT UINT * pnIndex ); }; //*** Class CDomainNames ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusApplication // // Description: // Cluster Application Automation Class. // // Inheritance: // IDispatchImpl< ISClusApplication, &IID_ISClusApplication, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusApplication, &CLSID_ClusApplication > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusApplication : public IDispatchImpl< ISClusApplication, &IID_ISClusApplication, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusApplication, &CLSID_ClusApplication > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; typedef CComCoClass< CClusApplication, &CLSID_ClusApplication > BaseCoClass; typedef IDispatchImpl< ISClusApplication, &IID_ISClusApplication, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER > BaseDispatchClass; public: CClusApplication( void ); ~CClusApplication( void ); BEGIN_COM_MAP(CClusApplication) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusApplication) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusApplication) DECLARE_REGISTRY_RESOURCEID(IDR_MSCLUS) public: STDMETHODIMP get_DomainNames( OUT ISDomainNames ** ppDomainNames ); STDMETHODIMP OpenCluster( IN BSTR bstrClusterName, OUT ISCluster ** ppCluster ); STDMETHODIMP get_ClusterNames( IN BSTR bstrDomainName, OUT ISClusterNames ** ppClusterNames ); // STDMETHODIMP get_Application( OUT ISClusApplication ** ppParentApplication ); // STDMETHODIMP get_Parent( OUT ISClusApplication ** ppParent ) // { // return get_Application( ppParent ); // } private: CComObject< CDomainNames > * m_pDomainNames; }; //*** Class CClusApplication #endif // _CLUSAPPLICATION_H_