/*++ Copyright (c) 1994-2001 Microsoft Corporation Module Name : shts.h Abstract: IIS Property sheet definitions Author: Ronald Meijer (ronaldm) Sergei Antonov (sergeia) Project: Internet Services Manager Revision History: --*/ #ifndef __SHTS_H__ #define __SHTS_H__ #include "iisobj.h" // // Sheet Definitions // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // // Sheet -> page crackers // #define BEGIN_META_INST_READ(sheet)\ { \ sheet * pSheet = (sheet *)GetSheet(); \ do \ { \ if (FAILED(pSheet->QueryInstanceResult())) \ { \ break; \ } #define FETCH_INST_DATA_FROM_SHEET(value)\ value = pSheet->GetInstanceProperties().value; \ TRACEEOLID(value); #define END_META_INST_READ(err)\ \ } \ while(FALSE); \ } #define BEGIN_META_DIR_READ(sheet)\ { \ sheet * pSheet = (sheet *)GetSheet(); \ do \ { \ if (FAILED(pSheet->QueryDirectoryResult())) \ { \ break; \ } #define FETCH_DIR_DATA_FROM_SHEET(value)\ value = pSheet->GetDirectoryProperties().value; \ TRACEEOLID(value); #define END_META_DIR_READ(err)\ \ } \ while(FALSE); \ } #define BEGIN_META_INST_WRITE(sheet)\ { \ sheet * pSheet = (sheet *)GetSheet(); \ \ do \ { \ #define STORE_INST_DATA_ON_SHEET(value)\ pSheet->GetInstanceProperties().value = value; #define STORE_INST_DATA_ON_SHEET_REMEMBER(value, dirty)\ pSheet->GetInstanceProperties().value = value; \ dirty = MP_D(((sheet *)GetSheet())->GetInstanceProperties().value); #define FLAG_INST_DATA_FOR_DELETION(id)\ pSheet->GetInstanceProperties().FlagPropertyForDeletion(id); #define END_META_INST_WRITE(err)\ \ } \ while(FALSE); \ \ err = pSheet->GetInstanceProperties().WriteDirtyProps(); \ } #define BEGIN_META_DIR_WRITE(sheet)\ { \ sheet * pSheet = (sheet *)GetSheet(); \ \ do \ { \ #define STORE_DIR_DATA_ON_SHEET(value)\ pSheet->GetDirectoryProperties().value = value; #define STORE_DIR_DATA_ON_SHEET_REMEMBER(value, dirty)\ pSheet->GetDirectoryProperties().value = value; \ dirty = MP_D(pSheet->GetDirectoryProperties().value); #define INIT_DIR_DATA_MASK(value, mask)\ MP_V(pSheet->GetDirectoryProperties().value).SetMask(mask); #define FLAG_DIR_DATA_FOR_DELETION(id)\ pSheet->GetDirectoryProperties().FlagPropertyForDeletion(id); #define END_META_DIR_WRITE(err)\ \ } \ while(FALSE); \ \ err = pSheet->GetDirectoryProperties().WriteDirtyProps(); \ } class CInetPropertyPage; class CInetPropertySheet : public CPropertySheet /*++ Class Description: IIS Object configuration property sheet. Public Interface: CInetPropertySheet : Constructor ~CInetPropertySheet : Destructor cap : Get capabilities --*/ { DECLARE_DYNAMIC(CInetPropertySheet) // // Construction/destruction // public: CInetPropertySheet( IN CComAuthInfo * pAuthInfo, IN LPCTSTR lpszMetaPath, IN CWnd * pParentWnd = NULL, IN LPARAM lParam = 0L, IN LPARAM lParamParentObject = 0L, IN UINT iSelectPage = 0 ); virtual ~CInetPropertySheet(); // // Overrides // protected: //{{AFX_VIRTUAL(CInetPropertySheet) //}}AFX_VIRTUAL // // Access // public: BOOL IsLocal() const { return m_auth.IsLocal(); } BOOL IsMasterInstance() const { return m_fIsMasterPath; } BOOL HasAdminAccess() const { return m_fHasAdminAccess; } BOOL RestartRequired() const { return m_fRestartRequired; } DWORD QueryInstance() const { return m_dwInstance; } LPCTSTR QueryServerName() const { return m_auth.QueryServerName(); } LPCTSTR QueryMetaPath() const { return m_strMetaPath; } LPCTSTR QueryServicePath() const { return m_strServicePath; } LPCTSTR QueryInstancePath() const { return m_strInstancePath; } LPCTSTR QueryDirectoryPath() const { return m_strDirectoryPath; } LPCTSTR QueryInfoPath() const { return m_strInfoPath; } CComAuthInfo * QueryAuthInfo() { return &m_auth; } CServerCapabilities & cap() { return *m_pCap; } LPARAM GetParameter() {return m_lParam;} LPARAM GetParameterParent() {return m_lParamParentObject;} public: void AddRef() { ++m_refcount; } void Release(CInetPropertyPage * pPage) { DetachPage(pPage); if (--m_refcount <= 0) delete this; } void AttachPage(CInetPropertyPage * pPage); void NotifyMMC(); void NotifyMMC_Node(CIISObject * pNode); void SetNotifyFlag(DWORD flag) { m_prop_change_flag |= flag; } void ResetNotifyFlag() { m_prop_change_flag = 0; } void SetModeless(); BOOL IsModeless() const { return m_bModeless; } public: virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT); // // Override in derived class to load delayed values // virtual HRESULT LoadConfigurationParameters(); virtual void SetObjectsHwnd(); virtual void FreeConfigurationParameters(); void SetRestartRequired(BOOL flag, DWORD update_flag = PROP_CHANGE_REENUM_VDIR | PROP_CHANGE_REENUM_FILES); WORD QueryMajorVersion() const; WORD QueryMinorVersion() const; // // Generated message map functions // protected: //{{AFX_MSG(CInetPropertySheet) //}}AFX_MSG DECLARE_MESSAGE_MAP() void Initialize(); void DetachPage(CInetPropertyPage * pPage); // // Attempt to resolve admin/operator access for the given // metbase path (instance path) // HRESULT DetermineAdminAccess(DWORD * pdwMetabaseSystemChangeNum); void SetIsMasterInstance(BOOL flag) {m_fIsMasterPath = flag;} protected: int m_refcount; DWORD m_prop_change_flag; BOOL m_fChanged; DWORD m_dwInstance; CString m_strMetaPath; CString m_strServicePath; CString m_strInstancePath; CString m_strDirectoryPath; CString m_strInfoPath; CComAuthInfo m_auth; private: BOOL m_bModeless; BOOL m_fHasAdminAccess; BOOL m_fIsMasterPath; BOOL m_fRestartRequired; LPARAM m_lParam; LPARAM m_lParamParentObject; CServerCapabilities * m_pCap; CList m_pages; }; // // Page Definitions // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class CInetPropertyPage : public CPropertyPage /*++ Class Description: IIS Configuration property page class Public Interface: CInetPropertyPage : Constructor ~CInetPropertyPage : Destructor SaveInfo : Save info on this page if dirty --*/ { DECLARE_DYNAMIC(CInetPropertyPage) // // Construction/Destruction // public: CInetPropertyPage( IN UINT nIDTemplate, IN CInetPropertySheet * pSheet, IN UINT nIDCaption = USE_DEFAULT_CAPTION, IN BOOL fEnableEnhancedFonts = FALSE ); ~CInetPropertyPage(); // // Dialog Data // protected: //{{AFX_DATA(CInetPropertyPage) //enum { IDD = _UNKNOWN_RESOURCE_ID_ }; //}}AFX_DATA // // Overrides // public: // // Derived classes must provide their own equivalents // /* PURE */ virtual HRESULT FetchLoadedValues() = 0; /* PURE */ virtual HRESULT SaveInfo() = 0; // // Is the data on this page dirty? // BOOL IsDirty() const { return m_bChanged; } //{{AFX_VIRTUAL(CInetPropertyPage) protected: virtual void DoDataExchange(CDataExchange * pDX); virtual void PostNcDestroy(); //}}AFX_VIRTUAL #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext & dc) const; #endif protected: // // Generated message map functions // //{{AFX_MSG(CInetPropertyPage) afx_msg void OnHelp(); afx_msg BOOL OnHelpInfo(HELPINFO * pHelpInfo); //}}AFX_MSG DECLARE_MESSAGE_MAP() virtual BOOL OnInitDialog(); virtual BOOL OnApply(); virtual void OnCancel(); // // Helper function // protected: BOOL GetIUsrAccount(CString & str); // // Access Functions // protected: // // Get associated property sheet object // CInetPropertySheet * GetSheet() { return m_pSheet; } BOOL IsLocal() const { return m_pSheet->IsLocal(); } BOOL IsMasterInstance() const { return m_pSheet->IsMasterInstance(); } BOOL HasAdminAccess() const { return m_pSheet->HasAdminAccess(); } DWORD QueryInstance() const { return m_pSheet->QueryInstance(); } LPCTSTR QueryServerName() const { return m_pSheet->QueryServerName(); } LPCTSTR QueryMetaPath() const { return m_pSheet->QueryMetaPath(); } LPCTSTR QueryServicePath() const { return m_pSheet->QueryServicePath(); } LPCTSTR QueryInstancePath() const { return m_pSheet->QueryInstancePath(); } LPCTSTR QueryDirectoryPath() const { return m_pSheet->QueryDirectoryPath(); } LPCTSTR QueryInfoPath() const { return m_pSheet->QueryInfoPath(); } CComAuthInfo * QueryAuthInfo() { return m_pSheet->QueryAuthInfo(); } HRESULT LoadConfigurationParameters() { return m_pSheet->LoadConfigurationParameters(); } // // Update MMC with new changes // void NotifyMMC(DWORD param = PROP_CHANGE_NOT_VISIBLE); public: // // Keep private information on page dirty state, necessary for // SaveInfo() later. // void SetModified(BOOL bChanged = TRUE); // // Capability bits // protected: BOOL IsSSLSupported() const { return m_pSheet->cap().IsSSLSupported(); } BOOL IsSSL128Supported() const { return m_pSheet->cap().IsSSL128Supported(); } BOOL HasMultipleSites() const { return m_pSheet->cap().HasMultipleSites(); } BOOL HasBwThrottling() const { return m_pSheet->cap().HasBwThrottling(); } BOOL Has10ConnectionLimit() const { return m_pSheet->cap().Has10ConnectionLimit(); } BOOL HasIPAccessCheck() const { return m_pSheet->cap().HasIPAccessCheck(); } BOOL HasOperatorList() const { return m_pSheet->cap().HasOperatorList(); } BOOL HasFrontPage() const { return m_pSheet->cap().HasFrontPage(); } BOOL HasCompression() const { return m_pSheet->cap().HasCompression(); } BOOL HasCPUThrottling() const { return m_pSheet->cap().HasCPUThrottling(); } BOOL HasDigest() const { return m_pSheet->cap().HasDigest(); } BOOL HasNTCertMapper() const { return m_pSheet->cap().HasNTCertMapper(); } BOOL IsCompressionConfigurable() const { return m_pSheet->cap().IsCompressionConfigurable(); } BOOL IsPerformanceConfigurable() const { return m_pSheet->cap().IsPerformanceConfigurable(); } BOOL IsServiceLevelConfigurable() const { return m_pSheet->cap().IsServiceLevelConfigurable(); } BOOL IsWorkstation() const { return m_pSheet->cap().IsWorkstation(); } protected: BOOL m_bChanged; CInetPropertySheet * m_pSheet; protected: BOOL m_fEnableEnhancedFonts; CFont m_fontBold; UINT m_nHelpContext; }; // // Inline Expansion // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< inline void CInetPropertySheet::SetModeless() { m_bModeless = TRUE; } inline void CInetPropertySheet::SetRestartRequired(BOOL flag, DWORD update_flag) { m_fRestartRequired = flag; m_prop_change_flag = update_flag; } inline HRESULT CInetPropertySheet::DetermineAdminAccess(DWORD * pdwMetabaseSystemChangeNum) { // // Make sure this is called after parms are loaded. // return m_pCap ? ::DetermineIfAdministrator( m_pCap, // Reuse existing interface m_strMetaPath, &m_fHasAdminAccess, pdwMetabaseSystemChangeNum ) : E_FAIL; } inline BOOL CInetPropertyPage::GetIUsrAccount(CString & str) { return ::GetIUsrAccount(QueryServerName(), this, str); } inline void CInetPropertyPage::NotifyMMC(DWORD param) { m_pSheet->SetNotifyFlag(param); } #endif // __SHTS_H__