801 lines
22 KiB
C
801 lines
22 KiB
C
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// ClusRes.h
|
||
|
//
|
||
|
// Description:
|
||
|
// Definition of the resource classes for the MSCLUS automation
|
||
|
// classes.
|
||
|
//
|
||
|
// Implementation File:
|
||
|
// ClusRes.cpp
|
||
|
//
|
||
|
// Author:
|
||
|
// Charles Stacy Harris (stacyh) 28-Feb-1997
|
||
|
// Galen Barbee (galenb) July 1998
|
||
|
//
|
||
|
// Revision History:
|
||
|
// July 1998 GalenB Maaaaaajjjjjjjjjoooooorrrr clean up
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef _CLUSRES_H_
|
||
|
#define _CLUSRES_H_
|
||
|
|
||
|
#ifndef __CLUSDISK_H_
|
||
|
#include "ClusDisk.h"
|
||
|
#endif // __CLUSDISK_H_
|
||
|
|
||
|
#ifndef _CLUSKEYS_H_
|
||
|
#include "ClusKeys.h"
|
||
|
#endif
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Forward Class Declarations
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class CClusResource;
|
||
|
class CResources;
|
||
|
class CClusResources;
|
||
|
class CClusResDepends;
|
||
|
class CClusResDependencies;
|
||
|
class CClusResDependents;
|
||
|
class CClusResGroupResources;
|
||
|
class CClusResTypeResources;
|
||
|
|
||
|
const IID IID_CClusResource = {0xf2e60801,0x2631,0x11d1,{0x89,0xf1,0x00,0xa0,0xc9,0x0d,0x06,0x1e}};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResource
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResource, &IID_ISClusResource, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CComCoClass< CClusResource, &CLSID_ClusResource >
|
||
|
// CClusterObject
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResource :
|
||
|
public IDispatchImpl< ISClusResource, &IID_ISClusResource, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CComCoClass< CClusResource, &CLSID_ClusResource >,
|
||
|
public CClusterObject
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResource( void );
|
||
|
~CClusResource( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResource)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResource)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
COM_INTERFACE_ENTRY_IID(IID_CClusResource, CClusResource)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResource)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
private:
|
||
|
ISClusRefObject * m_pClusRefObject;
|
||
|
HRESOURCE m_hResource;
|
||
|
CComObject< CClusProperties > * m_pCommonProperties;
|
||
|
CComObject< CClusProperties > * m_pPrivateProperties;
|
||
|
CComObject< CClusProperties > * m_pCommonROProperties;
|
||
|
CComObject< CClusProperties > * m_pPrivateROProperties;
|
||
|
CComBSTR m_bstrResourceName;
|
||
|
|
||
|
HRESULT GetProperties( OUT ISClusProperties ** ppProperties, IN BOOL bPrivate, IN BOOL bReadOnly );
|
||
|
|
||
|
DWORD ScGetResourceTypeName( OUT LPWSTR * ppwszResourceTypeName );
|
||
|
|
||
|
protected:
|
||
|
virtual DWORD ScWriteProperties( IN const CClusPropList & rcplPropList, IN BOOL bPrivate );
|
||
|
|
||
|
public:
|
||
|
HRESULT Create(
|
||
|
IN ISClusRefObject * pClusRefObject,
|
||
|
IN HGROUP hGroup,
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN long dwFlags
|
||
|
);
|
||
|
|
||
|
HRESULT Open( IN ISClusRefObject * pClusRefObject, IN BSTR bstrResourceName );
|
||
|
|
||
|
STDMETHODIMP get_Handle( OUT ULONG_PTR * phandle );
|
||
|
|
||
|
STDMETHODIMP Close( void );
|
||
|
|
||
|
STDMETHODIMP put_Name( IN BSTR bstrResourceName );
|
||
|
|
||
|
STDMETHODIMP get_Name( OUT BSTR * pbstrResourceName );
|
||
|
|
||
|
STDMETHODIMP get_State( IN CLUSTER_RESOURCE_STATE * dwState );
|
||
|
|
||
|
STDMETHODIMP get_CoreFlag( OUT CLUS_FLAGS * dwCoreFlag );
|
||
|
|
||
|
STDMETHODIMP BecomeQuorumResource( IN BSTR bstrDevicePath, IN long lMaxLogSize );
|
||
|
|
||
|
STDMETHODIMP Delete( void );
|
||
|
|
||
|
STDMETHODIMP Fail( void );
|
||
|
|
||
|
STDMETHODIMP Online( IN long nTimeout, OUT VARIANT * pvarPending );
|
||
|
|
||
|
STDMETHODIMP Offline( IN long nTimeout, OUT VARIANT * pvarPending );
|
||
|
|
||
|
STDMETHODIMP ChangeResourceGroup( IN ISClusResGroup * pResourceGroup );
|
||
|
|
||
|
STDMETHODIMP AddResourceNode( IN ISClusNode * pNode );
|
||
|
|
||
|
STDMETHODIMP RemoveResourceNode( IN ISClusNode * pNode );
|
||
|
|
||
|
STDMETHODIMP CanResourceBeDependent( IN ISClusResource * pResource, OUT VARIANT * pvarDependent );
|
||
|
|
||
|
STDMETHODIMP get_Dependencies( OUT ISClusResDependencies ** ppResDependencies );
|
||
|
|
||
|
STDMETHODIMP get_Dependents( OUT ISClusResDependents ** ppResDependents );
|
||
|
|
||
|
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_PossibleOwnerNodes( OUT ISClusResPossibleOwnerNodes ** ppOwnerNodes );
|
||
|
|
||
|
STDMETHODIMP get_Group( OUT ISClusResGroup ** ppResGroup );
|
||
|
|
||
|
STDMETHODIMP get_OwnerNode( OUT ISClusNode ** ppNode );
|
||
|
|
||
|
STDMETHODIMP get_Cluster( OUT ISCluster ** ppCluster );
|
||
|
|
||
|
STDMETHODIMP get_ClassInfo( OUT CLUSTER_RESOURCE_CLASS * prclassInfo );
|
||
|
|
||
|
STDMETHODIMP get_Disk( OUT ISClusDisk ** ppDisk );
|
||
|
|
||
|
STDMETHODIMP get_RegistryKeys( OUT ISClusRegistryKeys ** ppRegistryKeys );
|
||
|
|
||
|
STDMETHODIMP get_CryptoKeys( OUT ISClusCryptoKeys ** ppCryptoKeys );
|
||
|
|
||
|
STDMETHODIMP get_TypeName( OUT BSTR * pbstrTypeName );
|
||
|
|
||
|
STDMETHODIMP get_Type( OUT ISClusResType ** ppResourceType );
|
||
|
|
||
|
virtual HRESULT HrLoadProperties( CClusPropList & rcplPropList, BOOL bReadOnly, BOOL bPrivate );
|
||
|
|
||
|
const CComBSTR Name( void ) const { return m_bstrResourceName ; };
|
||
|
|
||
|
}; //*** Class CClusResource
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CResources
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Collection Implementation Base Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class CResources
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CResources( void );
|
||
|
~CResources( void );
|
||
|
|
||
|
HRESULT Create( ISClusRefObject* pClusRefObject );
|
||
|
|
||
|
protected:
|
||
|
typedef std::vector< CComObject< CClusResource > * > ResourceList;
|
||
|
|
||
|
ResourceList m_Resources;
|
||
|
ISClusRefObject * m_pClusRefObject;
|
||
|
|
||
|
void Clear( void );
|
||
|
|
||
|
HRESULT FindItem( IN LPWSTR lpszResourceName, OUT UINT * pnIndex );
|
||
|
|
||
|
HRESULT FindItem( IN ISClusResource * pResource, OUT UINT * pnIndex );
|
||
|
|
||
|
HRESULT GetIndex( IN VARIANT varIndex, OUT UINT * pnIndex );
|
||
|
|
||
|
HRESULT GetResourceItem( IN VARIANT varIndex, OUT ISClusResource ** ppResource );
|
||
|
|
||
|
HRESULT RemoveAt( IN size_t pos );
|
||
|
|
||
|
HRESULT DeleteItem( IN VARIANT varIndex );
|
||
|
|
||
|
}; //*** Class CResources
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResources
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Collection Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResources, &IID_ISClusResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CResources
|
||
|
// CComCoClass< CClusResources, &CLSID_ClusResources >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResources :
|
||
|
public IDispatchImpl< ISClusResources, &IID_ISClusResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CResources,
|
||
|
public CComCoClass< CClusResources, &CLSID_ClusResources >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResources( void );
|
||
|
~CClusResources( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResources)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResources)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResources)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount );
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource );
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk );
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN BSTR bstrGroupName,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex );
|
||
|
|
||
|
STDMETHODIMP Refresh( void );
|
||
|
|
||
|
}; //*** Class CClusResources
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResDepends
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Collection Automation Base Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CResources
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResDepends :
|
||
|
public CResources
|
||
|
{
|
||
|
public:
|
||
|
CClusResDepends( void );
|
||
|
~CClusResDepends( void );
|
||
|
|
||
|
HRESULT Create( IN ISClusRefObject * pClusRefObject, IN HRESOURCE hResource );
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount );
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource );
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk );
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex );
|
||
|
|
||
|
HRESULT HrRefresh( IN CLUSTER_RESOURCE_ENUM cre );
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP AddItem( IN ISClusResource * pResource );
|
||
|
|
||
|
STDMETHODIMP RemoveItem( IN VARIANT varIndex );
|
||
|
|
||
|
protected:
|
||
|
HRESOURCE m_hResource;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScAddDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts AddClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The first resource. Could be dependency or
|
||
|
// dependent, depending upon the implementation.
|
||
|
// hRes2 [IN] - The second resource. Could be dependency or
|
||
|
// dependent, depending upon the implementation.
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScAddDependency( IN HRESOURCE hRes1, IN HRESOURCE hRes2 ) = 0;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScRemoveDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts RemoveClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The first resource. Could be dependency or
|
||
|
// dependent, depending upon the implementation.
|
||
|
// hRes2 [IN] - The second resource. Could be dependency or
|
||
|
// dependent, depending upon the implementation.
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScRemoveDependency( IN HRESOURCE hRes1, IN HRESOURCE hRes2 ) = 0;
|
||
|
|
||
|
}; //*** Class CClusResDepends
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResDependencies
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Collection Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResDependencies, &IID_ISClusResDependencies, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CComCoClass< CClusResDependencies, &CLSID_ClusResDependencies >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResDependencies :
|
||
|
public CClusResDepends,
|
||
|
public IDispatchImpl< ISClusResDependencies, &IID_ISClusResDependencies, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CComCoClass< CClusResDependencies, &CLSID_ClusResDependencies >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResDependencies( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResDependencies)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResDependencies)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResDependencies)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
HRESULT Create( IN ISClusRefObject * pClusRefObject, IN HRESOURCE hResource )
|
||
|
{
|
||
|
return CClusResDepends::Create( pClusRefObject, hResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount )
|
||
|
{
|
||
|
return CClusResDepends::get_Count( plCount );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource )
|
||
|
{
|
||
|
return CClusResDepends::get_Item( varIndex, ppClusterResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk )
|
||
|
{
|
||
|
return CClusResDepends::get__NewEnum( ppunk );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex )
|
||
|
{
|
||
|
return CClusResDepends::DeleteItem( varIndex );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
)
|
||
|
{
|
||
|
return CClusResDepends::CreateItem( bstrResourceName, bstrResourceType, dwFlags, ppClusterResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP AddItem( IN ISClusResource * pResource )
|
||
|
{
|
||
|
return CClusResDepends::AddItem( pResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP RemoveItem( IN VARIANT varIndex )
|
||
|
{
|
||
|
return CClusResDepends::RemoveItem( varIndex );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP Refresh( void )
|
||
|
{
|
||
|
return HrRefresh( CLUSTER_RESOURCE_ENUM_DEPENDS );
|
||
|
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScAddDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts AddClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The dependent resource
|
||
|
// hRes2 [IN] - The depends on resource
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScAddDependency( HRESOURCE hRes1, HRESOURCE hRes2 )
|
||
|
{
|
||
|
return ::AddClusterResourceDependency( hRes1, hRes2 );
|
||
|
|
||
|
}; //*** ScAddDependency
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScRemoveDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts RemoveClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The dependent resource
|
||
|
// hRes2 [IN] - The depends on resource
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScRemoveDependency( HRESOURCE hRes1, HRESOURCE hRes2 )
|
||
|
{
|
||
|
return ::RemoveClusterResourceDependency( hRes1, hRes2 );
|
||
|
|
||
|
}; //*** ScRemoveDependency
|
||
|
|
||
|
}; //*** Class CClusResDependencies
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResDependents
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Collection Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResDependents, &IID_ISClusResDependents, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CComCoClass< CClusResDependents, &CLSID_ClusResDependents >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResDependents :
|
||
|
public CClusResDepends,
|
||
|
public IDispatchImpl< ISClusResDependents, &IID_ISClusResDependents, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CComCoClass< CClusResDependents, &CLSID_ClusResDependents >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResDependents( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResDependents)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResDependents)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResDependents)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
HRESULT Create( IN ISClusRefObject * pClusRefObject, IN HRESOURCE hResource )
|
||
|
{
|
||
|
return CClusResDepends::Create( pClusRefObject, hResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount )
|
||
|
{
|
||
|
return CClusResDepends::get_Count( plCount );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource )
|
||
|
{
|
||
|
return CClusResDepends::get_Item( varIndex, ppClusterResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk )
|
||
|
{
|
||
|
return CClusResDepends::get__NewEnum( ppunk );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex )
|
||
|
{
|
||
|
return CClusResDepends::DeleteItem( varIndex );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
)
|
||
|
{
|
||
|
return CClusResDepends::CreateItem( bstrResourceName, bstrResourceType, dwFlags, ppClusterResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP AddItem( IN ISClusResource * pResource )
|
||
|
{
|
||
|
return CClusResDepends::AddItem( pResource );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP RemoveItem( IN VARIANT varIndex )
|
||
|
{
|
||
|
return CClusResDepends::RemoveItem( varIndex );
|
||
|
|
||
|
};
|
||
|
|
||
|
STDMETHODIMP Refresh( void )
|
||
|
{
|
||
|
return HrRefresh( CLUSTER_RESOURCE_ENUM_PROVIDES );
|
||
|
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScAddDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts AddClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The depends on resource
|
||
|
// hRes2 [IN] - The dependent resource
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScAddDependency( HRESOURCE hRes1, HRESOURCE hRes2 )
|
||
|
{
|
||
|
return ::AddClusterResourceDependency( hRes2, hRes1 );
|
||
|
|
||
|
}; //*** ScAddDependency
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// ScRemoveDependency
|
||
|
//
|
||
|
// Description:
|
||
|
// Abstracts RemoveClusterResourceDependency() so the arguments can be
|
||
|
// swapped as necessary if you are making a depedency or a dependent.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hRes1 [IN] - The depends on resource
|
||
|
// hRes2 [IN] - The dependent resource
|
||
|
//
|
||
|
// Return Value:
|
||
|
// Win32 status code.
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
virtual DWORD ScRemoveDependency( HRESOURCE hRes1, HRESOURCE hRes2 )
|
||
|
{
|
||
|
return ::RemoveClusterResourceDependency( hRes2, hRes1 );
|
||
|
|
||
|
}; //*** ScRemoveDependency
|
||
|
|
||
|
}; //*** Class CClusResDependents
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResGroupResources
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Group Resources Collection Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResGroupResources, &IID_ISClusResGroupResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CResources
|
||
|
// CComCoClass< CClusResGroupResources, &CLSID_ClusResGroupResources >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResGroupResources :
|
||
|
public IDispatchImpl< ISClusResGroupResources, &IID_ISClusResGroupResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CResources,
|
||
|
public CComCoClass< CClusResGroupResources, &CLSID_ClusResGroupResources >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResGroupResources( void );
|
||
|
~CClusResGroupResources( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResGroupResources)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResGroupResources)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResGroupResources)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
HRESULT Create( IN ISClusRefObject * pClusRefObject , IN HGROUP hGroup );
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount );
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource );
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk );
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrResourceType,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex );
|
||
|
|
||
|
STDMETHODIMP Refresh( void );
|
||
|
|
||
|
private:
|
||
|
HGROUP m_hGroup;
|
||
|
|
||
|
}; //*** Class CClusResGroupResources
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CClusResTypeResources
|
||
|
//
|
||
|
// Description:
|
||
|
// Cluster Resource Type Resources Collection Automation Class.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// IDispatchImpl< ISClusResTypeResources, &IID_ISClusResTypeResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
// CSupportErrorInfo
|
||
|
// CComObjectRootEx< CComSingleThreadModel >
|
||
|
// CResources
|
||
|
// CComCoClass< CClusResTypeResources, &CLSID_ClusResTypeResources >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
class ATL_NO_VTABLE CClusResTypeResources :
|
||
|
public IDispatchImpl< ISClusResTypeResources, &IID_ISClusResTypeResources, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >,
|
||
|
public CSupportErrorInfo,
|
||
|
public CComObjectRootEx< CComSingleThreadModel >,
|
||
|
public CResources,
|
||
|
public CComCoClass< CClusResTypeResources, &CLSID_ClusResTypeResources >
|
||
|
{
|
||
|
typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass;
|
||
|
|
||
|
public:
|
||
|
CClusResTypeResources( void );
|
||
|
~CClusResTypeResources( void );
|
||
|
|
||
|
BEGIN_COM_MAP(CClusResTypeResources)
|
||
|
COM_INTERFACE_ENTRY(IDispatch)
|
||
|
COM_INTERFACE_ENTRY(ISClusResTypeResources)
|
||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
||
|
END_COM_MAP()
|
||
|
|
||
|
DECLARE_NOT_AGGREGATABLE(CClusResTypeResources)
|
||
|
DECLARE_NO_REGISTRY()
|
||
|
|
||
|
HRESULT Create( IN ISClusRefObject * pClusRefObject, IN BSTR bstrResTypeName );
|
||
|
|
||
|
STDMETHODIMP get_Count( OUT long * plCount );
|
||
|
|
||
|
STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusResource ** ppClusterResource );
|
||
|
|
||
|
STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk );
|
||
|
|
||
|
STDMETHODIMP CreateItem(
|
||
|
IN BSTR bstrResourceName,
|
||
|
IN BSTR bstrGroupName,
|
||
|
IN CLUSTER_RESOURCE_CREATE_FLAGS dwFlags,
|
||
|
OUT ISClusResource ** ppClusterResource
|
||
|
);
|
||
|
|
||
|
STDMETHODIMP DeleteItem( IN VARIANT varIndex );
|
||
|
|
||
|
STDMETHODIMP Refresh( void );
|
||
|
|
||
|
private:
|
||
|
CComBSTR m_bstrResourceTypeName;
|
||
|
|
||
|
}; //*** Class CClusResTypeResources
|
||
|
|
||
|
#endif // _CLUSRES_H_
|