217 lines
6.5 KiB
C
217 lines
6.5 KiB
C
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// Cluster.h
|
||
|
//
|
||
|
// Description:
|
||
|
// Definition of the CCluster and CClusRefObject classes.
|
||
|
//
|
||
|
// Implementation File:
|
||
|
// Cluster.cpp
|
||
|
//
|
||
|
// Author:
|
||
|
// Charles Stacy Harris (stacyh) 28-Feb-1997
|
||
|
// Galen Barbee (galenb) July 1998
|
||
|
//
|
||
|
// Revision History:
|
||
|
// July 1998 GalenB Maaaaaajjjjjjjjjoooooorrrr clean up
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef _CLUSTER_H_
|
||
|
#define _CLUSTER_H_
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Forward Class Declarations
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class CCluster;
|
||
|
class CClusRefObject;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CCluster
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISCluster, &IID_ISCluster, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CComCoClass< CCluster,&CLSID_Cluster >
|
||
|
// CClusterObject
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CCluster :
|
||
|
public IDispatchImpl< ISCluster, &IID_ISCluster, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CComCoClass< CCluster,&CLSID_Cluster >,
|
||
|
public CClusterObject
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
typedef IDispatchImpl< ISCluster, &IID_ISCluster, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER > BaseDispatchClass;
|
||
|
typedef CComCoClass< CCluster,&CLSID_Cluster > BaseCoClass;
|
||
|
|
||
|
public:
|
||
|
CCluster( void );
|
||
|
~CCluster( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CCluster)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISCluster)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CCluster)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
private:
|
||
|
CComBSTR m_bstrQuorumPath;
|
||
|
CComBSTR m_bstrQuorumResourceName;
|
||
|
long m_nQuorumLogSize;
|
||
|
ISClusApplication * m_pParentApplication;
|
||
|
ISClusRefObject * m_pClusRefObject;
|
||
|
HCLUSTER m_hCluster;
|
||
|
|
||
|
CComObject< CClusNodes > * m_pClusterNodes;
|
||
|
CComObject< CClusResGroups > * m_pClusterResourceGroups;
|
||
|
CComObject< CClusResources > * m_pClusterResources;
|
||
|
CComObject< CClusResTypes > * m_pResourceTypes;
|
||
|
CComObject< CClusNetworks > * m_pNetworks;
|
||
|
CComObject< CClusNetInterfaces > * m_pNetInterfaces;
|
||
|
|
||
|
CComObject< CClusProperties > * m_pCommonProperties;
|
||
|
CComObject< CClusProperties > * m_pPrivateProperties;
|
||
|
CComObject< CClusProperties > * m_pCommonROProperties;
|
||
|
CComObject< CClusProperties > * m_pPrivateROProperties;
|
||
|
|
||
|
STDMETHODIMP OpenResource( IN BSTR bstrResourceName, OUT ISClusResource ** ppClusterResource );
|
||
|
|
||
|
STDMETHODIMP HrGetQuorumInfo( void );
|
||
|
|
||
|
void Clear( void );
|
||
|
|
||
|
HRESULT GetProperties( OUT ISClusProperties ** ppProperties, IN BOOL bPrivate, IN BOOL bReadOnly );
|
||
|
|
||
|
protected:
|
||
|
virtual DWORD ScWriteProperties( IN const CClusPropList & rcplPropList, IN BOOL bPrivate );
|
||
|
|
||
|
public:
|
||
|
STDMETHODIMP Create( IN CClusApplication * pParentApplication );
|
||
|
|
||
|
STDMETHODIMP Close( void );
|
||
|
|
||
|
STDMETHODIMP get_Handle( OUT ULONG_PTR * phandle );
|
||
|
|
||
|
STDMETHODIMP Open( IN BSTR bstrClusterName );
|
||
|
|
||
|
STDMETHODIMP put_Name( IN BSTR bstrClusterName );
|
||
|
|
||
|
STDMETHODIMP get_Name( IN BSTR * pbstrClusterName );
|
||
|
|
||
|
STDMETHODIMP get_Version( OUT ISClusVersion ** ppClusVersion );
|
||
|
|
||
|
STDMETHODIMP put_QuorumResource( IN ISClusResource * pResource );
|
||
|
|
||
|
STDMETHODIMP get_QuorumResource( OUT ISClusResource ** ppResource );
|
||
|
|
||
|
STDMETHODIMP get_Nodes( OUT ISClusNodes ** ppClusterNodes );
|
||
|
|
||
|
STDMETHODIMP get_ResourceGroups( OUT ISClusResGroups ** ppClusterResourceGroups );
|
||
|
|
||
|
STDMETHODIMP get_Resources( OUT ISClusResources ** ppClusterResources );
|
||
|
|
||
|
STDMETHODIMP get_ResourceTypes( OUT ISClusResTypes ** ppResourceTypes );
|
||
|
|
||
|
STDMETHODIMP get_CommonProperties( OUT ISClusProperties ** ppProperties );
|
||
|
|
||
|
STDMETHODIMP get_PrivateProperties( OUT ISClusProperties ** ppProperties );
|
||
|
|
||
|
STDMETHODIMP get_CommonROProperties( OUT ISClusProperties ** ppProperties );
|
||
|
|
||
|
STDMETHODIMP get_PrivateROProperties( OUT ISClusProperties ** ppProperties );
|
||
|
|
||
|
STDMETHODIMP get_QuorumLogSize( OUT long * pnQuoromLogSize );
|
||
|
|
||
|
STDMETHODIMP put_QuorumLogSize( IN long nQuoromLogSize );
|
||
|
|
||
|
STDMETHODIMP get_QuorumPath( OUT BSTR * ppPath );
|
||
|
|
||
|
STDMETHODIMP put_QuorumPath( IN BSTR pPath );
|
||
|
|
||
|
STDMETHODIMP get_Networks( OUT ISClusNetworks ** ppNetworks );
|
||
|
|
||
|
STDMETHODIMP get_NetInterfaces( OUT ISClusNetInterfaces ** ppNetInterfaces );
|
||
|
|
||
|
virtual HRESULT HrLoadProperties( IN OUT CClusPropList & rcplPropList, IN BOOL bReadOnly, IN BOOL bPrivate );
|
||
|
|
||
|
// STDMETHODIMP get_Parent( IDispatch ** ppParent );
|
||
|
|
||
|
// STDMETHODIMP get_Application( ISClusApplication ** ppParentApplication );
|
||
|
|
||
|
const ISClusRefObject * ClusRefObject( void ) const { return m_pClusRefObject; };
|
||
|
|
||
|
void ClusRefObject( IN ISClusRefObject * pClusRefObject );
|
||
|
|
||
|
void Hcluster( IN HCLUSTER hCluster );
|
||
|
|
||
|
const HCLUSTER Hcluster( void ) const { return m_hCluster; };
|
||
|
|
||
|
}; //*** CCluster
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusRefObject
|
||
|
//
|
||
|
// Description:
|
||
|
// Automation Class that wraps the Cluster handle.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusRefObject, &IID_ISClusRefObject, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CComCoClass< CClusRefObject, &CLSID_ClusRefObject >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusRefObject :
|
||
|
public IDispatchImpl< ISClusRefObject, &IID_ISClusRefObject, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CComCoClass< CClusRefObject, &CLSID_ClusRefObject >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusRefObject( void );
|
||
|
~CClusRefObject( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusRefObject)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusRefObject)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusRefObject)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
HRESULT SetClusHandle( IN HCLUSTER hCluster ) { m_hCluster = hCluster; return S_OK;};
|
||
|
|
||
|
private:
|
||
|
HCLUSTER m_hCluster;
|
||
|
|
||
|
public:
|
||
|
STDMETHODIMP get_Handle( OUT ULONG_PTR * phandle );
|
||
|
|
||
|
}; //*** Class CClusRefObject
|
||
|
|
||
|
#endif // _CLUSTER_H_
|