|
|
//+---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000-2002.
//
// File: SaferLevelGeneral.cpp
//
// Contents: Implementation of CSaferLevelGeneral
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include <gpedit.h>
#include <winsafer.h>
#include <compdata.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, CCertMgrComponentData* pCompData) : 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), m_pCompData (pCompData) { //{{AFX_DATA_INIT(CSaferLevelGeneral)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_rSaferLevel.IncrementOpenPageCount ();
if ( m_pCompData ) { m_pCompData->AddRef (); m_pCompData->IncrementOpenSaferPageCount (); } }
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 ();
if ( m_pCompData ) { m_pCompData->DecrementOpenSaferPageCount (); m_pCompData->Release (); m_pCompData = 0; } }
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 () && SAFER_LEVELID_NORMALUSER != 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; } }
|