windows-nt/Source/XPSP1/NT/admin/snapin/wsecmgr/attr.h
2020-09-26 16:20:57 +08:00

165 lines
5.3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: Attr.h
//
// Contents: definition of CModelessSceEditor & CAttribute
//
//----------------------------------------------------------------------------
#if !defined(AFX_ATTR_H__CC37D278_ED8E_11D0_9C6E_00C04FB6C6FA__INCLUDED_)
#define AFX_ATTR_H__CC37D278_ED8E_11D0_9C6E_00C04FB6C6FA__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "resource.h"
#include "cookie.h"
#include "SelfDeletingPropertyPage.h"
typedef struct tagModelessSheetData
{
bool bIsContainer;
DWORD flag;
HWND hwndParent;
SE_OBJECT_TYPE SeType;
CString strObjectName;
PSECURITY_DESCRIPTOR* ppSeDescriptor;
SECURITY_INFORMATION* pSeInfo;
HWND* phwndSheet;
} MLSHEET_DATA, *PMLSHEET_DATA;
// this class is created for displaying modeless security editor dialog.
// under MMC, modeless dialog won't work unless it is running inside its own
// thread. When multiple sce editors can be launched for easy comparsions,
// it is highly preferred that we launch it modeless. We must use this class
// to create such modeless sce editors. It should be able to use one class to create
// multiple modeless dialogs. However, this is not always working because of MMC
// limitations. That is why the function Reset is not implemented at this time.
//************************************************************************************
// Important: this class depends on CUIThread implementations even though it only
// has a CWinThread pointer. That is because of AfxBeginThread's return type
//************************************************************************************
// How to use this class:
// (1) Create an instance when you need to create such a modeless dialog
// (2) Call Create function to display the modeless. Usually the caller provides
// ppSeDescriptor, pSeInfo, and phwndSheet. The caller wants to have a handle
// to the dialog because we need to make sure that its parent is not allowed
// to go away while the modeless is up and running.
// (3) When certain actions should force the modeless dialog to go away, call Destroy
// function (passing the modeless dialog's handle) to destroy the dialog.
// (4) destruct the instance when no longer in use
// See examples inside aservice.cpp/.h
class CModelessDlgUIThread;
class CModelessSceEditor
{
public:
CModelessSceEditor(bool fIsContainer, DWORD flag, HWND hParent, SE_OBJECT_TYPE seType, LPCWSTR lpszObjName);
virtual ~CModelessSceEditor();
void Reset(bool fIsContainer, DWORD flag, HWND hParent, SE_OBJECT_TYPE seType, LPCWSTR lpszObjName);
void Create(PSECURITY_DESCRIPTOR* ppSeDescriptor, SECURITY_INFORMATION* pSeInfo, HWND* phwndSheet);
void Destroy(HWND hwndSheet);
protected:
MLSHEET_DATA m_MLShtData;
CModelessDlgUIThread* m_pThread;
};
/////////////////////////////////////////////////////////////////////////////
// CAttribute dialog
void TrimNumber(CString &str);
class CAttribute : public CSelfDeletingPropertyPage
{
// Construction
public:
CAttribute(UINT nTemplateID); // standard constructor
virtual ~CAttribute();
virtual void EnableUserControls( BOOL bEnable );
void AddUserControl( UINT uID )
{
m_aUserCtrlIDs.Add(uID);
};
// Dialog Data
//{{AFX_DATA(CAttribute)
enum { IDD = IDD_ANALYZE_SECURITY };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
void SetReadOnly(BOOL bRO)
{
m_bReadOnly = bRO;
}
BOOL QueryReadOnly()
{
return m_bReadOnly;
}
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAttribute)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
public:
virtual BOOL OnInitDialog ();
virtual void Initialize(CResult * pResult);
virtual void SetSnapin(CSnapin * pSnapin);
virtual void SetTitle(LPCTSTR sz)
{
m_strTitle = sz;
};
void SetConfigure( BOOL bConfigure );
// Implementation
protected:
CSnapin * m_pSnapin;
// Generated message map functions
//{{AFX_MSG(CAttribute)
virtual void OnCancel();
virtual BOOL OnApply();
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
virtual afx_msg void OnConfigure();
//}}AFX_MSG
afx_msg BOOL OnHelp(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnContextHelp(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
void DoContextHelp (HWND hWndControl);
virtual void SetInitialValue (DWORD_PTR dw)
{
dw;
};
CResult *m_pData;
HWND m_hwndParent;
CUIntArray m_aUserCtrlIDs; // User control IDS.
BOOL m_bConfigure;
BOOL m_bReadOnly;
CString m_strTitle;
// every dialog that wants to handle help, you have to assign appropriately this member
DWORD_PTR m_pHelpIDs;
// every dialog muse in its constructor add this line: m_uTemplateResID = IDD
UINT m_uTemplateResID;
public:
static DWORD m_nDialogs;
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ATTR_H__CC37D278_ED8E_11D0_9C6E_00C04FB6C6FA__INCLUDED_)