/*++ Copyright (c) 1994-1998 Microsoft Corporation Module Name : pwiz.h Abstract: IIS Security Wizard Author: Ronald Meijer (ronaldm) Project: Internet Services Manager Revision History: --*/ #ifndef __IISPWIZ_H__ #define __IISPWIZ_H__ class CBlob; #define NUM_ACCESS_RECORDS (2) typedef CList CDWORDList; // // Structure to map a flag to a string ID // typedef struct tagFLAGTOSTRING { DWORD dwFlag; UINT nID; BOOL fSet; } FLAGTOSTRING; class COMDLL CIISSecurityTemplate : public CMetaProperties /*++ Class Description: Security template info Public Interface: CIISSecurityTemplate : Constructor ApplySettings : Apply template to destination path ClearSummary : Clear the text summary GenerateSummary : Generate the text summary --*/ { public: CIISSecurityTemplate( IN const CMetaKey * pKey, IN LPCTSTR lpszMDPath, IN BOOL fInherit ); public: // // Apply settings to destination path // virtual HRESULT ApplySettings( IN BOOL fUseTemplates, IN LPCTSTR lpszServerName, IN LPCTSTR lpszService, IN DWORD dwInstance = MASTER_INSTANCE, IN LPCTSTR lpszParent = NULL, IN LPCTSTR lpszAlias = NULL ); // // Build summary strings from security settings. Clear summary // before calling GenerateSummary(). // virtual void GenerateSummary( IN BOOL fUseTemplates, IN LPCTSTR lpszServerName, IN LPCTSTR lpszService, IN DWORD dwInstance = MASTER_INSTANCE, IN LPCTSTR lpszParent = NULL, IN LPCTSTR lpszAlias = NULL ); void ClearSummary() { m_strlSummary.RemoveAll(); } POSITION GetHeadPosition() { return m_strlSummary.GetHeadPosition(); } CString & GetNext(POSITION & pos) { return m_strlSummary.GetNext(pos); } void AddSummaryString( IN LPCTSTR szTextItem, IN int cIndentLevel = 0 ); void AddSummaryString( IN UINT nID, IN int cIndentLevel = 0 ); protected: // // Break out GetAllData() data to data fields // virtual void ParseFields(); public: MP_DWORD m_dwAccessPerms; MP_CBlob m_ipl; protected: // // The derived class is expected to add its managed properties // to this list in its constructor // CDWORDList m_dlProperties; CStringList m_strlSummary; }; // // Method to allocate security template. This is used by the service // configuration dll to allocate a CIISSecurityTemplate-derived class // specific to their service. // typedef CIISSecurityTemplate * (* pfnNewSecurityTemplate)( IN const CMetaKey * pKey, IN LPCTSTR lpszMDPath, IN BOOL fInherit ); // // Launch security wizard // HRESULT COMDLL COMDLL_ISMSecurityWizard( IN pfnNewSecurityTemplate pfnTemplateAllocator, IN CMetaInterface * pInterface, IN UINT nLeftBmpId, IN UINT nHeadBmpId, IN LPCTSTR lpszService, IN DWORD dwInstance, IN LPCTSTR lpszParent, IN LPCTSTR lpszAlias ); class CIISSecWizSettings : public CObjectPlus /*++ Class Description: Security wizard settings -- passed around from page to page. Public Interface: CIISSecWizSettings : Constructor --*/ { // // Constructor/Destructor // public: CIISSecWizSettings( IN pfnNewSecurityTemplate pfnTemplateAllocator, IN LPCTSTR lpszServer, IN LPCTSTR lpszService, IN DWORD dwInstance, IN LPCTSTR lpszParent, IN LPCTSTR lpszAlias ); ~CIISSecWizSettings(); public: // // Fetch the metabase properties from the open key // (could be template or another vroot) // HRESULT FetchProperties( IN CMetaKey & mk, IN LPCTSTR lpszPath = NULL, IN BOOL fInherit = FALSE ); // // Data Members // public: BOOL m_fSetAcls; BOOL m_fReplaceAcls; BOOL m_fRedirected; BOOL m_fUseTemplate; DWORD m_dwInstance; DWORD m_AccessMaskAdmin; DWORD m_AccessMaskEveryone; DWORD m_AccessMaskDefault; HRESULT m_hResult; CString m_strServer; CString m_strService; CString m_strParent; CString m_strAlias; CString m_strPath; CIISSecurityTemplate * m_pist; pfnNewSecurityTemplate m_pfnTemplateAllocator; EXPLICIT_ACCESS m_rgaae[NUM_ACCESS_RECORDS]; }; // // Permissions Wizard Source Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class COMDLL CPWSource : public CIISWizardPage { DECLARE_DYNCREATE(CPWSource) // // Construction // public: CPWSource(IN CIISSecWizSettings * pSettings = NULL); ~CPWSource(); // // Dialog Data // protected: enum { RADIO_INHERITANCE, RADIO_TEMPLATE, }; //{{AFX_DATA(CPWSource) enum { IDD = IDD_PERMWIZ_SOURCE }; int m_nSource; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWSource) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWSource) //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard Template Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class COMDLL CPWTemplate : public CIISWizardPage { DECLARE_DYNCREATE(CPWTemplate) // // Construction // public: CPWTemplate(IN CIISSecWizSettings * pSettings = NULL); ~CPWTemplate(); // // Dialog Data // protected: //{{AFX_DATA(CPWTemplate) enum { IDD = IDD_PERMWIZ_TEMPLATE }; CListBox m_list_Templates; CEdit m_edit_Description; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWTemplate) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWTemplate) virtual BOOL OnInitDialog(); afx_msg void OnSelchangeListTemplates(); //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard ACL Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class COMDLL CPWACL : public CIISWizardPage { DECLARE_DYNCREATE(CPWACL) // // Construction // public: CPWACL(IN CIISSecWizSettings * pSettings = NULL); ~CPWACL(); // // Dialog Data // protected: enum { RADIO_MAXIMUM, RADIO_MINIMUM, RADIO_NONE, }; //{{AFX_DATA(CPWACL) enum { IDD = IDD_PERMWIZ_ACL }; CStatic m_static_Line4; CStatic m_static_Line3; CStatic m_static_Line2; CStatic m_static_Line1; int m_nRadioAclType; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWACL) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWACL) //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard Summary Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class COMDLL CPWSummary : public CIISWizardPage { DECLARE_DYNCREATE(CPWSummary) // // Construction // public: CPWSummary(IN CIISSecWizSettings * pSettings = NULL); ~CPWSummary(); // // Dialog Data // protected: //{{AFX_DATA(CPWSummary) enum { IDD = IDD_PERMWIZ_SUMMARY }; CListBox m_list_Summary; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWSummary) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWSummary) virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); void GenerateAclSummary(); void DisplaySummary(); HRESULT ApplyACLSToFiles(); HRESULT SetPermToChildren( IN CString& FileName, IN SECURITY_INFORMATION si, IN PACL pDacl, IN PACL pSacl ); private: CIISSecWizSettings * m_pSettings; }; #endif // __IISPWIZ_H__