Home | History | Annotate | Download | only in ControlPanel
      1 /* -*- Mode: C; tab-width: 4 -*-
      2  *
      3  * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 #include "ServicesPage.h"
     19 #include "resource.h"
     20 
     21 #include "ControlPanelExe.h"
     22 #include "ConfigPropertySheet.h"
     23 
     24 #include <WinServices.h>
     25 
     26 #define MAX_KEY_LENGTH 255
     27 
     28 
     29 IMPLEMENT_DYNCREATE(CServicesPage, CPropertyPage)
     30 
     31 
     32 //---------------------------------------------------------------------------------------------------------------------------
     33 //	CServicesPage::CServicesPage
     34 //---------------------------------------------------------------------------------------------------------------------------
     35 
     36 CServicesPage::CServicesPage()
     37 :
     38 	CPropertyPage(CServicesPage::IDD)
     39 {
     40 	//{{AFX_DATA_INIT(CServicesPage)
     41 	//}}AFX_DATA_INIT
     42 }
     43 
     44 
     45 //---------------------------------------------------------------------------------------------------------------------------
     46 //	CServicesPage::~CServicesPage
     47 //---------------------------------------------------------------------------------------------------------------------------
     48 
     49 CServicesPage::~CServicesPage()
     50 {
     51 }
     52 
     53 
     54 //---------------------------------------------------------------------------------------------------------------------------
     55 //	CServicesPage::DoDataExchange
     56 //---------------------------------------------------------------------------------------------------------------------------
     57 
     58 void CServicesPage::DoDataExchange(CDataExchange* pDX)
     59 {
     60 	CPropertyPage::DoDataExchange(pDX);
     61 	//{{AFX_DATA_MAP(CServicesPage)
     62 	//}}AFX_DATA_MAP
     63 	DDX_Control(pDX, IDC_ADVERTISE_SMB, m_SMBCheckBox);
     64 	DDX_Control(pDX, IDC_POWER_MANAGEMENT, m_powerManagementCheckBox);
     65 }
     66 
     67 BEGIN_MESSAGE_MAP(CServicesPage, CPropertyPage)
     68 	//{{AFX_MSG_MAP(CServicesPage)
     69 	//}}AFX_MSG_MAP
     70 
     71 	ON_BN_CLICKED(IDC_ADVERTISE_SMB, &CServicesPage::OnBnClickedAdvertiseSMB)
     72 	ON_BN_CLICKED(IDC_POWER_MANAGEMENT, &CServicesPage::OnBnClickedPowerManagement)
     73 
     74 END_MESSAGE_MAP()
     75 
     76 
     77 //---------------------------------------------------------------------------------------------------------------------------
     78 //	CServicesPage::SetModified
     79 //---------------------------------------------------------------------------------------------------------------------------
     80 
     81 void CServicesPage::SetModified( BOOL bChanged )
     82 {
     83 	m_modified = bChanged;
     84 
     85 	CPropertyPage::SetModified( bChanged );
     86 }
     87 
     88 
     89 //---------------------------------------------------------------------------------------------------------------------------
     90 //	CServicesPage::OnSetActive
     91 //---------------------------------------------------------------------------------------------------------------------------
     92 
     93 BOOL
     94 CServicesPage::OnSetActive()
     95 {
     96 	CConfigPropertySheet	*	psheet;
     97 	HKEY						key = NULL;
     98 	DWORD						dwSize;
     99 	DWORD						enabled;
    100 	DWORD						err;
    101 	BOOL						b = CPropertyPage::OnSetActive();
    102 
    103 	psheet = reinterpret_cast<CConfigPropertySheet*>(GetParent());
    104 	require_quiet( psheet, exit );
    105 
    106 	m_SMBCheckBox.SetCheck( 0 );
    107 
    108 	// Now populate the browse domain box
    109 
    110 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Services\\SMB", 0,
    111 		                  NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
    112 	require_noerr( err, exit );
    113 
    114 	dwSize = sizeof( DWORD );
    115 	err = RegQueryValueEx( key, L"Advertise", NULL, NULL, (LPBYTE) &enabled, &dwSize );
    116 	require_noerr( err, exit );
    117 
    118 	m_SMBCheckBox.SetCheck( enabled );
    119 
    120 	RegCloseKey( key );
    121 	key = NULL;
    122 
    123 	m_powerManagementCheckBox.SetCheck( 0 );
    124 
    125 	// Now populate the browse domain box
    126 
    127 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Power Management", 0,
    128 		                  NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
    129 	require_noerr( err, exit );
    130 
    131 	dwSize = sizeof( DWORD );
    132 	err = RegQueryValueEx( key, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize );
    133 	require_noerr( err, exit );
    134 
    135 	m_powerManagementCheckBox.SetCheck( enabled );
    136 
    137 exit:
    138 
    139 	if ( key )
    140 	{
    141 		RegCloseKey( key );
    142 	}
    143 
    144 	return b;
    145 }
    146 
    147 
    148 //---------------------------------------------------------------------------------------------------------------------------
    149 //	CServicesPage::OnOK
    150 //---------------------------------------------------------------------------------------------------------------------------
    151 
    152 void
    153 CServicesPage::OnOK()
    154 {
    155 	if ( m_modified )
    156 	{
    157 		Commit();
    158 	}
    159 }
    160 
    161 
    162 
    163 //---------------------------------------------------------------------------------------------------------------------------
    164 //	CServicesPage::Commit
    165 //---------------------------------------------------------------------------------------------------------------------------
    166 
    167 void
    168 CServicesPage::Commit()
    169 {
    170 	HKEY		key		= NULL;
    171 	DWORD		enabled;
    172 	DWORD		err;
    173 
    174 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Services\\SMB", 0,
    175 	                   	NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
    176 	require_noerr( err, exit );
    177 
    178 	enabled = m_SMBCheckBox.GetCheck();
    179 	err = RegSetValueEx( key, L"Advertise", NULL, REG_DWORD, (LPBYTE) &enabled, sizeof( enabled ) );
    180 	require_noerr( err, exit );
    181 
    182 	RegCloseKey( key );
    183 	key = NULL;
    184 
    185 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Power Management", 0,
    186 		                  NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
    187 	require_noerr( err, exit );
    188 
    189 	enabled = m_powerManagementCheckBox.GetCheck();
    190 	err = RegSetValueEx( key, L"Enabled", NULL, REG_DWORD, (LPBYTE) &enabled, sizeof( enabled ) );
    191 	require_noerr( err, exit );
    192 
    193 exit:
    194 
    195 	if ( key )
    196 	{
    197 		RegCloseKey( key );
    198 	}
    199 }
    200 
    201 
    202 //---------------------------------------------------------------------------------------------------------------------------
    203 //	CServicesPage::OnBnClickedAdvertiseSMB
    204 //---------------------------------------------------------------------------------------------------------------------------
    205 
    206 void CServicesPage::OnBnClickedAdvertiseSMB()
    207 {
    208 	SetModified( TRUE );
    209 }
    210 
    211 
    212 //---------------------------------------------------------------------------------------------------------------------------
    213 //	CServicesPage::OnBnClickedPowerManagement
    214 //---------------------------------------------------------------------------------------------------------------------------
    215 
    216 void CServicesPage::OnBnClickedPowerManagement()
    217 {
    218 	SetModified( TRUE );
    219 
    220 	if ( m_powerManagementCheckBox.GetCheck() )
    221 	{
    222 		CPowerManagementWarning dlg( GetParent() );
    223 
    224 		dlg.DoModal();
    225 	}
    226 }
    227 
    228 
    229 // CPowerManagementWarning dialog
    230 
    231 IMPLEMENT_DYNAMIC(CPowerManagementWarning, CDialog)
    232 CPowerManagementWarning::CPowerManagementWarning(CWnd* pParent /*=NULL*/)
    233 	: CDialog(CPowerManagementWarning::IDD, pParent)
    234 {
    235 }
    236 
    237 CPowerManagementWarning::~CPowerManagementWarning()
    238 {
    239 }
    240 
    241 void CPowerManagementWarning::DoDataExchange(CDataExchange* pDX)
    242 {
    243 	CDialog::DoDataExchange(pDX);
    244 	DDX_Control(pDX, IDC_ENERGY_SAVER, m_energySaverIcon);
    245 }
    246 
    247 
    248 BOOL
    249 CPowerManagementWarning::OnInitDialog()
    250 {
    251 	BOOL b = CDialog::OnInitDialog();
    252 
    253 	const HICON hIcon = ( HICON ) ::LoadImage( GetNonLocalizedResources(), MAKEINTRESOURCE( IDI_ENERGY_SAVER ), IMAGE_ICON, 0, 0, 0);
    254 
    255 	if ( hIcon )
    256 	{
    257 		m_energySaverIcon.SetIcon( hIcon );
    258 	}
    259 
    260 	return b;
    261 }
    262 
    263 
    264 void
    265 CPowerManagementWarning::OnOK()
    266 {
    267 	CDialog::OnOK();
    268 }
    269 
    270 
    271 BEGIN_MESSAGE_MAP(CPowerManagementWarning, CDialog)
    272 END_MESSAGE_MAP()
    273 
    274