windows-nt/Source/XPSP1/NT/admin/snapin/certmgr/saferlevelgeneral.cpp
2020-09-26 16:20:57 +08:00

234 lines
7 KiB
C++

//+---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000-2001.
//
// File: SaferLevelGeneral.cpp
//
// Contents: Implementation of CSaferLevelGeneral
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include <gpedit.h>
#include <winsafer.h>
#include "SaferLevelGeneral.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSaferLevelGeneral property page
CSaferLevelGeneral::CSaferLevelGeneral(
CSaferLevel& rSaferLevel,
bool bReadOnly,
LONG_PTR lNotifyHandle,
LPDATAOBJECT pDataObject,
DWORD dwDefaultSaferLevel)
: CHelpPropertyPage(CSaferLevelGeneral::IDD),
m_rSaferLevel (rSaferLevel),
m_bReadOnly (bReadOnly),
m_bSetAsDefault (false),
m_lNotifyHandle (lNotifyHandle),
m_bDirty (false),
m_pDataObject (pDataObject),
m_dwDefaultSaferLevel (dwDefaultSaferLevel),
m_bFirst (true),
m_bLevelChanged (false)
{
//{{AFX_DATA_INIT(CSaferLevelGeneral)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_rSaferLevel.IncrementOpenPageCount ();
}
CSaferLevelGeneral::~CSaferLevelGeneral()
{
if ( m_lNotifyHandle )
{
if ( m_bLevelChanged )
{
MMCPropertyChangeNotify (
m_lNotifyHandle, // handle to a notification
(LPARAM) m_pDataObject); // unique identifier
}
MMCFreeNotifyHandle (m_lNotifyHandle);
}
m_rSaferLevel.DecrementOpenPageCount ();
}
void CSaferLevelGeneral::DoDataExchange(CDataExchange* pDX)
{
CHelpPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSaferLevelGeneral)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSaferLevelGeneral, CHelpPropertyPage)
//{{AFX_MSG_MAP(CSaferLevelGeneral)
ON_BN_CLICKED(IDC_SAFER_LEVEL_SET_AS_DEFAULT, OnSaferLevelSetAsDefault)
ON_EN_SETFOCUS(IDC_SAFER_LEVEL_DESCRIPTION, OnSetfocusSaferLevelDescription)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSaferLevelGeneral message handlers
void CSaferLevelGeneral::DoContextHelp (HWND hWndControl)
{
_TRACE (1, L"Entering CSaferLevelGeneral::DoContextHelp\n");
static const DWORD help_map[] =
{
IDC_SAFER_LEVEL_NAME, IDH_SAFER_LEVEL_NAME,
IDC_SAFER_LEVEL_DESCRIPTION, IDH_SAFER_LEVEL_DESCRIPTION,
IDC_SAFER_LEVEL_SET_AS_DEFAULT, IDH_SAFER_LEVEL_SET_AS_DEFAULT,
IDC_SAFER_LEVEL_STATUS, IDH_SAFER_LEVEL_STATUS,
0, 0
};
if ( !::WinHelp (
hWndControl,
GetF1HelpFilename(),
HELP_WM_HELP,
(DWORD_PTR) help_map) )
{
_TRACE (0, L"WinHelp () failed: 0x%x\n", GetLastError ());
}
_TRACE (-1, L"Leaving CSaferLevelGeneral::DoContextHelp\n");
}
BOOL CSaferLevelGeneral::OnInitDialog()
{
CHelpPropertyPage::OnInitDialog();
SetDlgItemText (IDC_SAFER_LEVEL_NAME, m_rSaferLevel.GetObjectName ());
SetDlgItemText (IDC_SAFER_LEVEL_DESCRIPTION, m_rSaferLevel.GetDescription ());
if ( m_rSaferLevel.IsDefault () )
{
m_bSetAsDefault = true;
CString text;
VERIFY (text.LoadString (IDS_IS_DEFAULT_LEVEL));
SetDlgItemText (IDC_SAFER_LEVEL_STATUS, text);
GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE);
GetDlgItem (IDC_LEVEL_INSTRUCTIONS)->EnableWindow (FALSE);
}
if ( m_bReadOnly || ( SAFER_LEVELID_DISALLOWED != m_rSaferLevel.GetLevel () &&
SAFER_LEVELID_FULLYTRUSTED != m_rSaferLevel.GetLevel () ) )
{
CString text;
if ( SAFER_LEVELID_CONSTRAINED == m_rSaferLevel.GetLevel () )
{
VERIFY (text.LoadString (IDS_CANT_SET_CONSTRAINED_AS_DEFAULT));
SetDlgItemText (IDC_LEVEL_INSTRUCTIONS, text);
}
GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE);
GetDlgItem (IDC_LEVEL_INSTRUCTIONS)->EnableWindow (FALSE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CSaferLevelGeneral::OnApply ()
{
if ( !m_bReadOnly && m_bDirty )
{
HRESULT hr = S_OK;
BOOL bResult = FALSE;
if ( m_bSetAsDefault )
hr = m_rSaferLevel.SetAsDefault ();
if ( SUCCEEDED (hr) )
{
m_bLevelChanged = true;
bResult = CHelpPropertyPage::OnApply ();
}
else
{
CString text;
CString caption;
CThemeContextActivator activator;
VERIFY (caption.LoadString (IDS_SAFER_WINDOWS_EXTENSION_REGISTRY));
text.FormatMessage (IDS_CANT_SET_AS_DEFAULT, m_rSaferLevel.GetObjectName (),
GetSystemMessage (hr));
MessageBox (text, caption, MB_ICONWARNING | MB_OK);
}
return bResult;
}
else
return CHelpPropertyPage::OnApply ();
}
void CSaferLevelGeneral::OnSaferLevelSetAsDefault()
{
if ( !m_bSetAsDefault )
{
int iRet = IDYES;
if ( m_rSaferLevel.GetLevel () < m_dwDefaultSaferLevel )
{
CString text;
CString caption;
CThemeContextActivator activator;
VERIFY (caption.LoadString (IDS_SAFER_WINDOWS_EXTENSION_REGISTRY));
VERIFY (text.LoadString (IDS_DEFAULT_LEVEL_CHANGE_WARNING));
iRet = MessageBox (text, caption, MB_ICONWARNING | MB_YESNO);
}
if ( IDYES == iRet )
{
m_dwDefaultSaferLevel = m_rSaferLevel.GetLevel ();
m_bDirty = true;
m_bSetAsDefault = true;
CString text;
VERIFY (text.LoadString (IDS_IS_DEFAULT_LEVEL));
SetDlgItemText (IDC_SAFER_LEVEL_STATUS, text);
SetModified (TRUE);
GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE);
}
}
}
///////////////////////////////////////////////////////////////////////////////
// This method traps keyboard commands from the dialog, which has only
// disabled controls, usually. That prevented the closing of the dialog
// when the user pressed ESC.
// 222693 SAFER: Pressing ESC doesn't dismiss SAFER Level dialogs
///////////////////////////////////////////////////////////////////////////////
BOOL CSaferLevelGeneral::OnCommand(WPARAM wParam, LPARAM lParam)
{
WORD id = LOWORD (wParam);
if ( IDCANCEL == id )
{
GetParent ()->SendMessage (WM_COMMAND, wParam, lParam);
}
return CHelpPropertyPage::OnCommand(wParam, lParam);
}
void CSaferLevelGeneral::OnSetfocusSaferLevelDescription()
{
if ( m_bFirst )
{
SendDlgItemMessage (IDC_SAFER_LEVEL_DESCRIPTION, EM_SETSEL, (WPARAM) 0, 0);
m_bFirst = false;
}
}