///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1999 Microsoft Corporation // // Module Name: // ClusDisk.h // // Description: // Definition of the cluster disk class for the MSCLUS automation // classes. // // Implementation File: // ClusDisk.cpp // // Author: // Galen Barbee (galenb) 11-Feb-1999 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #ifndef __CLUSDISK_H_ #define __CLUSDISK_H__ #ifndef __PARTITION_H__ #include "Partition.h" #endif // __PARTITION_H__ ///////////////////////////////////////////////////////////////////////////// // Forward Class Declarations ///////////////////////////////////////////////////////////////////////////// class CClusDisk; class CClusDisks; class CClusScsiAddress; ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusDisk // // Description: // Cluster Disk Automation Class. // // Inheritance: // IDispatchImpl< ISClusDisk, &IID_ISClusDisk, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusDisk, &CLSID_ClusDisk > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusDisk : public IDispatchImpl< ISClusDisk, &IID_ISClusDisk, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusDisk, &CLSID_ClusDisk > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CClusDisk( void ); ~CClusDisk( void ); BEGIN_COM_MAP(CClusDisk) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusDisk) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusDisk) DECLARE_NO_REGISTRY() private: CComObject< CClusPartitions > * m_pPartitions; DWORD m_dwSignature; DWORD m_dwDiskNumber; CLUS_SCSI_ADDRESS m_csaScsiAddress; public: HRESULT Create( IN HRESOURCE hResource ); HRESULT HrCreate( IN OUT CClusPropValueList & rcpvl, OUT BOOL * pbEndFound ); STDMETHODIMP get_Signature( OUT long * plSignature ); STDMETHODIMP get_ScsiAddress( OUT ISClusScsiAddress ** ppScsiAddress ); STDMETHODIMP get_DiskNumber( OUT long * plDiskNumber ); STDMETHODIMP get_Partitions( OUT ISClusPartitions ** ppPartitions ); }; //*** Class CClusDisk ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusDisks // // Description: // Cluster Disk Collection Automation Class. // // Inheritance: // IDispatchImpl< ISClusDisks, &IID_ISClusDisks, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusDisks, &CLSID_ClusDisks > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusDisks : public IDispatchImpl< ISClusDisks, &IID_ISClusDisks, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusDisks, &CLSID_ClusDisks > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CClusDisks( void ); ~CClusDisks( void ); BEGIN_COM_MAP(CClusDisks) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusDisks) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusDisks) DECLARE_NO_REGISTRY() HRESULT Create( IN const CClusPropValueList & rcpvl ); HRESULT Create( ISClusRefObject * pClusRefObject, BSTR bstrResTypeName ); private: typedef std::vector< CComObject< CClusDisk > * > DiskVector; DiskVector m_dvDisks; CComBSTR m_bstrResTypeName; ISClusRefObject * m_pClusRefObject; void Clear( void ); HRESULT GetIndex( VARIANT varIndex, UINT *pnIndex ); HRESULT HrCreateDisk( IN OUT CClusPropValueList & rcpvl, OUT BOOL * pbEndFound ); public: STDMETHODIMP get_Count( OUT long * plCount ); STDMETHODIMP get_Item( IN VARIANT varIndex, OUT ISClusDisk ** ppDisk ); STDMETHODIMP get__NewEnum( OUT IUnknown ** ppunk ); STDMETHODIMP Refresh( void ); }; //*** Class CClusDisks ///////////////////////////////////////////////////////////////////////////// //++ // // class CClusScsiAddress // // Description: // Cluster SCSI Address Automation Class. // // Inheritance: // IDispatchImpl< ISClusScsiAddress, &IID_ISClusScsiAddress, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, // CSupportErrorInfo // CComObjectRootEx< CComSingleThreadModel > // CComCoClass< CClusScsiAddress, &CLSID_ClusScsiAddress > // //-- ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE CClusScsiAddress : public IDispatchImpl< ISClusScsiAddress, &IID_ISClusScsiAddress, &LIBID_MSClusterLib, MAJORINTERFACEVER, MINORINTERFACEVER >, public CSupportErrorInfo, public CComObjectRootEx< CComSingleThreadModel >, public CComCoClass< CClusScsiAddress, &CLSID_ClusScsiAddress > { typedef CComObjectRootEx< CComSingleThreadModel > BaseComClass; public: CClusScsiAddress( void ); BEGIN_COM_MAP(CClusScsiAddress) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ISClusScsiAddress) COM_INTERFACE_ENTRY(ISupportErrorInfo) END_COM_MAP() DECLARE_NOT_AGGREGATABLE(CClusScsiAddress) DECLARE_NO_REGISTRY() private: CLUS_SCSI_ADDRESS m_csa; public: HRESULT Create( IN const CLUS_SCSI_ADDRESS & rcsa ); STDMETHODIMP get_PortNumber( OUT VARIANT * pvarPortNumber ); STDMETHODIMP get_PathId( OUT VARIANT * pvarPathId ); STDMETHODIMP get_TargetId( OUT VARIANT * pvarTargetId ); STDMETHODIMP get_Lun( OUT VARIANT * pvarLun ); }; //*** Class CClusScsiAddress #endif // __CLUSDISK_H__