/*++ Copyright (c) 1994-1998 Microsoft Corporation Module Name : w3scfg.h Abstract: WWW Configuration Module Author: Ronald Meijer (ronaldm) Project: Internet Services Manager Revision History: --*/ // // Include Files // #include #include #include // // Required by VC5 // #ifndef MIDL_INTERFACE #define MIDL_INTERFACE(x) struct #endif // MIDL_INTERFACE #ifndef __RPCNDR_H_VERSION__ #define __RPCNDR_H_VERSION__ 440 #endif // __RPCNDR_H_VERSION__ #include "iwamreg.h" #include // // Include Files // #include "resource.h" #include "mmc.h" #include "svrinfo.h" #include "comprop.h" extern const LPCTSTR g_cszSvc; extern const LPCTSTR g_cszFilters; extern HINSTANCE hInstance; // // Short descriptive name of the service. This // is what will show up as the name of the service // in the internet manager tool. // // Issue: I'm assuming here that this name does NOT // require localisation. // #define SERVICE_SHORT_NAME _T("Web") class CConfigDll : public CWinApp /*++ Class Description: Base class for the configuration DLL --*/ { public: virtual BOOL InitInstance(); virtual int ExitInstance(); CConfigDll( IN LPCTSTR pszAppName = NULL ); protected: //{{AFX_MSG(CConfigDll) //}}AFX_MSG DECLARE_MESSAGE_MAP() private: CString m_strHelpPath; LPCTSTR m_lpOldHelpPath; }; // // Helper function to determine if SSL is installed // and enabled on the given server // DWORD IsSSLEnabledOnServer( IN LPCTSTR lpszServer, OUT BOOL & fInstalled, OUT BOOL & fEnabled ); // // Helper function to see if a certificate is installed // BOOL IsCertInstalledOnServer( IN LPCTSTR lpszServerName, IN DWORD dwInstance ); // // Run key manager app // void RunKeyManager( IN LPCTSTR lpszServer = NULL ); inline BOOL LoggingEnabled( IN DWORD dwLogType ) { return (dwLogType == MD_LOG_TYPE_ENABLED); } inline void EnableLogging( OUT DWORD & dwLogType, IN BOOL fEnabled = TRUE ) { dwLogType = fEnabled ? MD_LOG_TYPE_ENABLED : MD_LOG_TYPE_DISABLED; } // // Bandwidth definitions // #define INFINITE_BANDWIDTH (0xffffffff) #define INFINITE_CPU_RAW (0xffffffff) #define KILOBYTE (1024L) #define MEGABYTE (1024L * KILOBYTE) #define DEF_BANDWIDTH (1 * MEGABYTE) #define CPU_THROTTLING_FACTOR (1000) #define DEFAULT_CPU_PERCENTAGE (10L) // // Some sanity values on max connections // #define INITIAL_MAX_CONNECTIONS ( 1000L) #define UNLIMITED_CONNECTIONS (2000000000L) #define MAX_MAX_CONNECTIONS (UNLIMITED_CONNECTIONS - 1L) #define MAX_TIMEOUT (0x7FFFFFFF) class CW3InstanceProps : public CInstanceProps /*++ Class Description: WWW Instance properties class Public Interface: CW3InstanceProps : Constructor --*/ { public: CW3InstanceProps( IN LPCTSTR lpszServerName, IN DWORD dwInstance = MASTER_INSTANCE ); public: // // Write Data if dirty // virtual HRESULT WriteDirtyProps(); protected: // // Break out GetAllData() data to data fields // virtual void ParseFields(); public: // // Service Page // MP_DWORD m_dwLogType; MP_CILong m_nMaxConnections; MP_CILong m_nConnectionTimeOut; MP_CStringListEx m_strlSecureBindings; // // Performance Page // MP_int m_nServerSize; MP_BOOL m_fUseKeepAlives; MP_BOOL m_fEnableCPUAccounting; MP_DWORD m_dwCPULimitLogEventRaw; MP_DWORD m_dwCPULimitPriorityRaw; MP_DWORD m_dwCPULimitPauseRaw; MP_DWORD m_dwCPULimitProcStopRaw; MP_CILong m_nMaxNetworkUse; // // Operators Page // MP_CBlob m_acl; // // Root dir page // //MP_BOOL m_fFrontPage; // // Default Site page // MP_DWORD m_dwDownlevelInstance; // // Certificate and CTL information // MP_CBlob m_CertHash; MP_CString m_strCertStoreName; MP_CString m_strCTLIdentifier; MP_CString m_strCTLStoreName; }; class CW3DirProps : public CChildNodeProps /*++ Class Description: WWW Directory Properties Public Interface: CW3DirProps : Constructor --*/ { public: // // Constructor // CW3DirProps( IN LPCTSTR lpszServerName, IN DWORD dwInstance = MASTER_INSTANCE, IN LPCTSTR lpszParent = NULL, IN LPCTSTR lpszAlias = NULL ); public: // // Write Data if dirty // virtual HRESULT WriteDirtyProps(); protected: // // Break out GetAllData() data to data fields // virtual void ParseFields(); public: // // Directory properties page // MP_CString m_strUserName; MP_CString m_strPassword; MP_CString m_strDefaultDocument; MP_CString m_strFooter; MP_CMaskedDWORD m_dwDirBrowsing; MP_BOOL m_fDontLog; MP_BOOL m_fEnableFooter; MP_BOOL m_fIndexed; // // HTTP Page // MP_CString m_strExpiration; MP_CStringListEx m_strlCustomHeaders; // // Custom Errors // MP_CStringListEx m_strlCustomErrors; // // Security page // MP_DWORD m_dwAuthFlags; MP_DWORD m_dwSSLAccessPermissions; MP_CString m_strBasicDomain; MP_CString m_strAnonUserName; MP_CString m_strAnonPassword; MP_BOOL m_fPasswordSync; MP_BOOL m_fU2Installed; MP_BOOL m_fUseNTMapper; MP_CBlob m_ipl; }; class CIISFilter : public CObjectPlus /*++ Class Description: A single filter description Public Interface: CIISFilter : Constructors IsInitialized : Check to see if the name is set. Write : Write to the metabase. QueryResult : Query result from metabase read QueryError : Returns error as stored in metabase QueryName : Returns filter name IsLoaded : TRUE if filter is loaded IsUnloaded : TRUE if filter is unloaded IsEnabled : TRUE if filter is enabled Enable : Enable filter IsDirty : TRUE if filter values have changed IsFlaggedForDeletion : TRUE if filter should be deleted --*/ { // // Constructors/Destructors // public: // // Null Constructor // CIISFilter(); // // Read filter values using provided key // CIISFilter( IN CMetaKey * pKey, IN LPCTSTR lpszName ); // // Copy constructor // CIISFilter( IN const CIISFilter & flt ); public: // // Sorting helper // int OrderByPriority( IN const CObjectPlus * pobAccess ) const; BOOL IsInitialized() const { return !m_strName.IsEmpty(); } // // Write using provided key // HRESULT Write(CMetaKey * pKey); public: BOOL IsLoaded() const; BOOL IsUnloaded() const; BOOL IsEnabled() const { return m_fEnabled; } void Enable(BOOL fEnabled = TRUE); DWORD QueryError() const { return m_dwWin32Error; } HRESULT QueryResult() const { return m_hrResult; } // // Check to see if this item is marked as dirty // BOOL IsDirty() const { return m_fDirty; } // // Check to see if this item is flagged for deletion // BOOL IsFlaggedForDeletion() const { return m_fFlaggedForDeletion; } // // Set/reset the dirty flag // void Dirty(BOOL fDirty = TRUE); // // Flag this item for deletion // void FlagForDeletion(); // // Get the name of this filter // LPCTSTR QueryName() const { return m_strName; } // // Meta Values // public: int m_nPriority; int m_nOrder; BOOL m_fEnabled; DWORD m_dwState; DWORD m_dwWin32Error; HRESULT m_hrResult; CString m_strName; CString m_strExecutable; // // State Values // private: BOOL m_fDirty; BOOL m_fFlaggedForDeletion; DWORD m_dwFlags; }; class CIISFilterList : public CMetaKey /*++ Class Description: A list of filters Public Interface: CIISFilterList : Constructor BeginSearch : Reset the iterator MoreFilters : More items available in the list? GetNextFilter : Get the next item in the list --*/ { public: CIISFilterList( IN LPCTSTR lpszServerName, IN LPCTSTR lpszService, IN DWORD dwInstance = MASTER_INSTANCE ); public: // // Write out the filter list // HRESULT WriteIfDirty(); // // Acccess Functions // public: DWORD QueryInstance() const { return m_dwInstance; } BOOL FiltersLoaded() const { return m_fFiltersLoaded; } // // Load each filter in turn // HRESULT LoadAllFilters(); // // Filter Access Functions // public: // // Reset the filter list iterator // void ResetEnumerator(); int GetCount() const { return (int)m_oblFilters.GetCount(); } // // More filters available in the list? // BOOL MoreFilters() const { return m_pos != NULL; } // // Return position of filter by index // POSITION GetFilterPositionByIndex(int nSel); // // Iterate to the next filter in the list // CIISFilter * GetNextFilter(); // // Remove filter // void RemoveFilter(int nItem); // // Add new filter // void AddFilter(CIISFilter * pFilter); // // Exchange two filters in the list // BOOL ExchangePositions( IN int nSel1, IN int nSel2, OUT CIISFilter *& p1, OUT CIISFilter *& p2 ); // // See if at least one filter is dirty // BOOL HasDirtyFilter() const; // // Virtual Interface: // public: virtual BOOL Succeeded() const { return SUCCEEDED(m_hrResult); } virtual HRESULT QueryResult() const { return m_hrResult; } protected: // // Build up order string from component list // LPCTSTR BuildFilterOrderString( OUT CString & strFilterOrder ); protected: // // Seperator string (one character) // static const LPCTSTR s_lpszSep; private: BOOL m_fFiltersLoaded; DWORD m_dwInstance; POSITION m_pos; HRESULT m_hrResult; CString m_strFilterOrder; CObListPlus m_oblFilters; }; // // W3 Property sheet // class CW3Sheet : public CInetPropertySheet { public: CW3Sheet( LPCTSTR pszCaption, DWORD dwAttributes, LPCTSTR lpszServer, DWORD dwInstance, LPCTSTR lpszParent, LPCTSTR lpszAlias, CWnd * pParentWnd = NULL, LPARAM lParam = 0L, LONG_PTR handle = 0L, UINT iSelectPage = 0 ); ~CW3Sheet(); public: HRESULT QueryInstanceResult() const; HRESULT QueryDirectoryResult() const; CW3InstanceProps & GetInstanceProperties() { return *m_ppropInst; } CW3DirProps & GetDirectoryProperties() { return *m_ppropDir; } virtual HRESULT LoadConfigurationParameters(); virtual void FreeConfigurationParameters(); protected: virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT); // Generated message map functions //{{AFX_MSG(CW3Sheet) //}}AFX_MSG DECLARE_MESSAGE_MAP() private: DWORD m_fNew; DWORD m_dwAttributes; CW3InstanceProps * m_ppropInst; CW3DirProps * m_ppropDir; }; // // Inline Expansion // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< inline BOOL CIISFilter::IsLoaded() const { return m_dwState == MD_FILTER_STATE_LOADED; } inline BOOL CIISFilter::IsUnloaded() const { return m_dwState == MD_FILTER_STATE_UNLOADED; } inline void CIISFilter::Enable( IN BOOL fEnabled ) { m_fEnabled = fEnabled; } inline void CIISFilter::Dirty( IN BOOL fDirty ) { m_fDirty = fDirty; } inline void CIISFilter::FlagForDeletion() { m_fFlaggedForDeletion = TRUE; } inline void CIISFilterList::ResetEnumerator() { m_pos = m_oblFilters.GetHeadPosition(); } inline CIISFilter * CIISFilterList::GetNextFilter() { return (CIISFilter *)m_oblFilters.GetNext(m_pos); } inline void CIISFilterList::RemoveFilter(int nItem) { m_oblFilters.RemoveIndex(nItem); } inline void CIISFilterList::AddFilter(CIISFilter * pFilter) { m_oblFilters.AddTail(pFilter); } inline HRESULT CW3Sheet::QueryInstanceResult() const { return m_ppropInst ? m_ppropInst->QueryResult() : S_OK; } inline HRESULT CW3Sheet::QueryDirectoryResult() const { return m_ppropDir ? m_ppropDir->QueryResult() : S_OK; } #define W3SCFG_DLL_NAME _T("W3SCFG.DLL")