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