///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1996-2000 Microsoft Corporation // // Module Name: // Res.h // // Abstract: // Definition of the CResource class. // // Implementation File: // Res.cpp // // Author: // David Potter (davidp) May 6, 1996 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #ifndef _RES_H_ #define _RES_H_ ///////////////////////////////////////////////////////////////////////////// // Forward Class Declarations ///////////////////////////////////////////////////////////////////////////// class CResource; class CResourceList; ///////////////////////////////////////////////////////////////////////////// // External Class Declarations ///////////////////////////////////////////////////////////////////////////// class CGroup; class CResourceType; ///////////////////////////////////////////////////////////////////////////// // External Class Declarations ///////////////////////////////////////////////////////////////////////////// class CClusterNode; class CNodeList; ///////////////////////////////////////////////////////////////////////////// // Type Definitions ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Include Files ///////////////////////////////////////////////////////////////////////////// #ifndef _CLUSITEM_H_ #include "ClusItem.h" // for CClusterItem #endif #ifndef _RESTYPE_H_ #include "ResType.h" // for CResourceType #endif #ifndef _PROPLIST_H_ #include "PropList.h" // for CObjectProperty, CClusPropList #endif ///////////////////////////////////////////////////////////////////////////// // CResource command target ///////////////////////////////////////////////////////////////////////////// class CResource : public CClusterItem { DECLARE_DYNCREATE(CResource) // Construction public: CResource(void); // protected constructor used by dynamic creation CResource(IN BOOL bDocobj); void Init(IN OUT CClusterDoc * pdoc, IN LPCTSTR lpszName); void Create( IN OUT CClusterDoc * pdoc, IN LPCTSTR lpszName, IN LPCTSTR lpszType, IN LPCTSTR lpszGroup, IN BOOL bSeparateMonitor ); protected: void CommonConstruct(void); // Attributes protected: HRESOURCE m_hresource; CLUSTER_RESOURCE_STATE m_crs; CString m_strOwner; CClusterNode * m_pciOwner; CString m_strGroup; CGroup * m_pciGroup; BOOL m_bSeparateMonitor; DWORD m_nLooksAlive; DWORD m_nIsAlive; CRRA m_crraRestartAction; DWORD m_nRestartThreshold; DWORD m_nRestartPeriod; DWORD m_nPendingTimeout; CString m_strResourceType; CResourceType * m_pciResourceType; PCLUSPROP_REQUIRED_DEPENDENCY m_pcrd; CLUS_RESOURCE_CLASS_INFO m_rciResClassInfo; DWORD m_dwCharacteristics; DWORD m_dwFlags; CResourceList * m_plpciresDependencies; CNodeList * m_plpcinodePossibleOwners; enum { epropName = 0, epropType, epropDescription, epropSeparateMonitor, epropLooksAlive, epropIsAlive, epropRestartAction, epropRestartThreshold, epropRestartPeriod, epropPendingTimeout, epropMAX }; CObjectProperty m_rgProps[epropMAX]; public: HRESOURCE Hresource(void) const { return m_hresource; } CLUSTER_RESOURCE_STATE Crs(void) const { return m_crs; } const CString & StrOwner(void) const { return m_strOwner; } CClusterNode * PciOwner(void) const { return m_pciOwner; } const CString & StrGroup(void) const { return m_strGroup; } CGroup * PciGroup(void) const { return m_pciGroup; } const CString & StrResourceType(void) const { return m_strResourceType; } const CString & StrRealResourceType(void) const { if (PciResourceType() == NULL) return StrResourceType(); else { ASSERT_VALID(PciResourceType()); return PciResourceType()->StrName(); } } const CString & StrRealResourceTypeDisplayName(void) const { if (PciResourceType() == NULL) return StrResourceType(); else { ASSERT_VALID(PciResourceType()); if (PciResourceType()->StrDisplayName().GetLength() == 0) return PciResourceType()->StrName(); else return PciResourceType()->StrDisplayName(); } } CResourceType * PciResourceType(void) const { return m_pciResourceType; } BOOL BSeparateMonitor(void) const { return m_bSeparateMonitor; } DWORD NLooksAlive(void) const { return m_nLooksAlive; } DWORD NIsAlive(void) const { return m_nIsAlive; } CRRA CrraRestartAction(void) const { return m_crraRestartAction; } DWORD NRestartThreshold(void) const { return m_nRestartThreshold; } DWORD NRestartPeriod(void) const { return m_nRestartPeriod; } DWORD NPendingTimeout(void) const { return m_nPendingTimeout; } const PCLUSPROP_REQUIRED_DEPENDENCY Pcrd(void) const { return m_pcrd; } CLUSTER_RESOURCE_CLASS ResClass(void) const { return m_rciResClassInfo.rc; } PCLUS_RESOURCE_CLASS_INFO PrciResClassInfo(void) { return &m_rciResClassInfo; } DWORD DwCharacteristics(void) const { return m_dwCharacteristics; } DWORD DwFlags(void) const { return m_dwFlags; } BOOL BQuorumCapable( void ) const { return (m_dwCharacteristics & CLUS_CHAR_QUORUM) != 0; } BOOL BLocalQuorum( void ) const { return (m_dwCharacteristics & CLUS_CHAR_LOCAL_QUORUM) != 0; } BOOL BLocalQuorumDebug( void ) const { return (m_dwCharacteristics & CLUS_CHAR_LOCAL_QUORUM_DEBUG) != 0; } BOOL BDeleteRequiresAllNodes( void ) const { return (m_dwCharacteristics & CLUS_CHAR_DELETE_REQUIRES_ALL_NODES) != 0; } BOOL BCore( void ) const { return (m_dwFlags & CLUS_FLAG_CORE) != 0; } const CResourceList & LpciresDependencies(void) const { ASSERT(m_plpciresDependencies != NULL); return *m_plpciresDependencies; } const CNodeList & LpcinodePossibleOwners(void) const { ASSERT(m_plpcinodePossibleOwners != NULL); return *m_plpcinodePossibleOwners; } void GetStateName(OUT CString & rstrState) const; BOOL BCanBeDependent(IN CResource * pciRes); BOOL BIsDependent(IN CResource * pciRes); BOOL BGetNetworkName(OUT WCHAR * lpszNetName, IN OUT DWORD * pcchNetName); BOOL BGetNetworkName(OUT CString & rstrNetName); // Operations public: void SetOwnerState(IN LPCTSTR pszNewOwner); void SetGroupState(IN LPCTSTR pszNewGroup); void CollectPossibleOwners(IN OUT CNodeList * plpci) const; // void RemoveNodeFromPossibleOwners(IN OUT CNodeList * plpci, IN const CClusterNode * pNode); void CollectDependencies(IN OUT CResourceList * plpci, IN BOOL bFullTree = FALSE) const; void CollectProvidesFor(IN OUT CResourceList * plpci, IN BOOL bFullTree = FALSE) const; void CollectDependencyTree(IN OUT CResourceList * plpci) const; void DeleteResource(void); void Move(IN const CGroup * pciGroup); void ReadExtensions(void); void SetName(IN LPCTSTR pszName); void SetGroup(IN LPCTSTR pszGroup); void SetDependencies(IN const CResourceList & rlpci); void SetPossibleOwners(IN const CNodeList & rlpci); void SetCommonProperties( IN const CString & rstrDesc, IN BOOL bSeparate, IN DWORD nLooksAlive, IN DWORD nIsAlive, IN CRRA crra, IN DWORD nThreshold, IN DWORD nPeriod, IN DWORD nTimeout, IN BOOL bValidateOnly ); void SetCommonProperties( IN const CString & rstrDesc, IN BOOL bSeparate, IN DWORD nLooksAlive, IN DWORD nIsAlive, IN CRRA crra, IN DWORD nThreshold, IN DWORD nPeriod, IN DWORD nTimeout ) { SetCommonProperties(rstrDesc, bSeparate, nLooksAlive, nIsAlive,crra, nThreshold, nPeriod, nTimeout, FALSE /*bValidateOnly*/ ); } void ValidateCommonProperties( IN const CString & rstrDesc, IN BOOL bSeparate, IN DWORD nLooksAlive, IN DWORD nIsAlive, IN CRRA crra, IN DWORD nThreshold, IN DWORD nPeriod, IN DWORD nTimeout ) { SetCommonProperties(rstrDesc, bSeparate, nLooksAlive, nIsAlive,crra, nThreshold, nPeriod, nTimeout, TRUE /*bValidateOnly*/ ); } DWORD DwResourceControlGet( IN DWORD dwFunctionCode, IN PBYTE pbInBuf, IN DWORD cbInBuf, OUT PBYTE * ppbOutBuf ); DWORD DwResourceControlGet( IN DWORD dwFunctionCode, OUT PBYTE * ppbOutBuf ) { return DwResourceControlGet(dwFunctionCode, NULL, NULL, ppbOutBuf); } BOOL BRequiredDependenciesPresent( IN const CResourceList & rlpciRes, OUT CString & rstrMissing ); // Overrides public: virtual void Cleanup(void); virtual void ReadItem(void); virtual void UpdateState(void); virtual void Rename(IN LPCTSTR pszName); virtual BOOL BGetColumnData(IN COLID colid, OUT CString & rstrText); virtual BOOL BCanBeEdited(void) const; virtual BOOL BDisplayProperties(IN BOOL bReadOnly = FALSE); // Drag & Drop virtual BOOL BCanBeDragged(void) const { return TRUE; } virtual const CStringList * PlstrExtensions(void) const; #ifdef _DISPLAY_STATE_TEXT_IN_TREE virtual void GetTreeName(OUT CString & rstrName) const; #endif // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CResource) public: virtual void OnFinalRelease(); virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); //}}AFX_VIRTUAL virtual LRESULT OnClusterNotify(IN OUT CClusterNotify * pnotify); protected: virtual const CObjectProperty * Pprops(void) const { return m_rgProps; } virtual DWORD Cprops(void) const { return sizeof(m_rgProps) / sizeof(m_rgProps[0]); } virtual DWORD DwSetCommonProperties(IN const CClusPropList & rcpl, IN BOOL bValidateOnly = FALSE); // Implementation protected: CStringList m_lstrCombinedExtensions; BOOL m_bInitializing; BOOL m_bDeleting; const CStringList & LstrCombinedExtensions(void) const { return m_lstrCombinedExtensions; } public: virtual ~CResource(void); BOOL BInitializing(void) const { return m_bInitializing; } BOOL BDeleting(void) const { return m_bDeleting; } void SetInitializing(IN BOOL bInit = TRUE) { m_bInitializing = bInit; } protected: void DeleteResource(IN const CResourceList & rlpci); void Move(IN const CGroup * pciGroup, IN const CResourceList & rlpci); BOOL BAllowedToTakeOffline(void); void WaitForOffline( void ); public: // Generated message map functions //{{AFX_MSG(CResource) afx_msg void OnUpdateBringOnline(CCmdUI* pCmdUI); afx_msg void OnUpdateTakeOffline(CCmdUI* pCmdUI); afx_msg void OnUpdateInitiateFailure(CCmdUI* pCmdUI); afx_msg void OnUpdateMoveResource1(CCmdUI* pCmdUI); afx_msg void OnUpdateMoveResourceRest(CCmdUI* pCmdUI); afx_msg void OnUpdateDelete(CCmdUI* pCmdUI); afx_msg void OnUpdateProperties(CCmdUI* pCmdUI); afx_msg void OnCmdBringOnline(); afx_msg void OnCmdTakeOffline(); afx_msg void OnCmdInitiateFailure(); afx_msg void OnCmdDelete(); //}}AFX_MSG afx_msg void OnCmdMoveResource(IN UINT nID); DECLARE_MESSAGE_MAP() #ifdef _CLUADMIN_USE_OLE_ DECLARE_OLECREATE(CResource) // Generated OLE dispatch map functions //{{AFX_DISPATCH(CResource) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_DISPATCH DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() #endif // _CLUADMIN_USE_OLE_ }; //*** class CResource ///////////////////////////////////////////////////////////////////////////// // CResourceList ///////////////////////////////////////////////////////////////////////////// class CResourceList : public CClusterItemList { public: CResource * PciResFromName( IN LPCTSTR pszName, OUT POSITION * ppos = NULL ) { return (CResource *) PciFromName(pszName, ppos); } }; //*** class CResourceList ///////////////////////////////////////////////////////////////////////////// // Global Functions ///////////////////////////////////////////////////////////////////////////// //void DeleteAllItemData(IN OUT CResourceList & rlp); #ifdef _DEBUG class CTraceTag; extern CTraceTag g_tagResource; extern CTraceTag g_tagResNotify; #endif ///////////////////////////////////////////////////////////////////////////// #endif // _RES_H_