/* -*- Mode: C; tab-width: 4 -*- * * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ServicesPage.h" #include "resource.h" #include "ControlPanelExe.h" #include "ConfigPropertySheet.h" #include <WinServices.h> #define MAX_KEY_LENGTH 255 IMPLEMENT_DYNCREATE(CServicesPage, CPropertyPage) //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::CServicesPage //--------------------------------------------------------------------------------------------------------------------------- CServicesPage::CServicesPage() : CPropertyPage(CServicesPage::IDD) { //{{AFX_DATA_INIT(CServicesPage) //}}AFX_DATA_INIT } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::~CServicesPage //--------------------------------------------------------------------------------------------------------------------------- CServicesPage::~CServicesPage() { } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::DoDataExchange //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CServicesPage) //}}AFX_DATA_MAP DDX_Control(pDX, IDC_ADVERTISE_SMB, m_SMBCheckBox); DDX_Control(pDX, IDC_POWER_MANAGEMENT, m_powerManagementCheckBox); } BEGIN_MESSAGE_MAP(CServicesPage, CPropertyPage) //{{AFX_MSG_MAP(CServicesPage) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_ADVERTISE_SMB, &CServicesPage::OnBnClickedAdvertiseSMB) ON_BN_CLICKED(IDC_POWER_MANAGEMENT, &CServicesPage::OnBnClickedPowerManagement) END_MESSAGE_MAP() //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::SetModified //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::SetModified( BOOL bChanged ) { m_modified = bChanged; CPropertyPage::SetModified( bChanged ); } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::OnSetActive //--------------------------------------------------------------------------------------------------------------------------- BOOL CServicesPage::OnSetActive() { CConfigPropertySheet * psheet; HKEY key = NULL; DWORD dwSize; DWORD enabled; DWORD err; BOOL b = CPropertyPage::OnSetActive(); psheet = reinterpret_cast<CConfigPropertySheet*>(GetParent()); require_quiet( psheet, exit ); m_SMBCheckBox.SetCheck( 0 ); // Now populate the browse domain box err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Services\\SMB", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL ); require_noerr( err, exit ); dwSize = sizeof( DWORD ); err = RegQueryValueEx( key, L"Advertise", NULL, NULL, (LPBYTE) &enabled, &dwSize ); require_noerr( err, exit ); m_SMBCheckBox.SetCheck( enabled ); RegCloseKey( key ); key = NULL; m_powerManagementCheckBox.SetCheck( 0 ); // Now populate the browse domain box err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Power Management", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL ); require_noerr( err, exit ); dwSize = sizeof( DWORD ); err = RegQueryValueEx( key, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize ); require_noerr( err, exit ); m_powerManagementCheckBox.SetCheck( enabled ); exit: if ( key ) { RegCloseKey( key ); } return b; } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::OnOK //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::OnOK() { if ( m_modified ) { Commit(); } } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::Commit //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::Commit() { HKEY key = NULL; DWORD enabled; DWORD err; err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Services\\SMB", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL ); require_noerr( err, exit ); enabled = m_SMBCheckBox.GetCheck(); err = RegSetValueEx( key, L"Advertise", NULL, REG_DWORD, (LPBYTE) &enabled, sizeof( enabled ) ); require_noerr( err, exit ); RegCloseKey( key ); key = NULL; err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\Power Management", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL ); require_noerr( err, exit ); enabled = m_powerManagementCheckBox.GetCheck(); err = RegSetValueEx( key, L"Enabled", NULL, REG_DWORD, (LPBYTE) &enabled, sizeof( enabled ) ); require_noerr( err, exit ); exit: if ( key ) { RegCloseKey( key ); } } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::OnBnClickedAdvertiseSMB //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::OnBnClickedAdvertiseSMB() { SetModified( TRUE ); } //--------------------------------------------------------------------------------------------------------------------------- // CServicesPage::OnBnClickedPowerManagement //--------------------------------------------------------------------------------------------------------------------------- void CServicesPage::OnBnClickedPowerManagement() { SetModified( TRUE ); if ( m_powerManagementCheckBox.GetCheck() ) { CPowerManagementWarning dlg( GetParent() ); dlg.DoModal(); } } // CPowerManagementWarning dialog IMPLEMENT_DYNAMIC(CPowerManagementWarning, CDialog) CPowerManagementWarning::CPowerManagementWarning(CWnd* pParent /*=NULL*/) : CDialog(CPowerManagementWarning::IDD, pParent) { } CPowerManagementWarning::~CPowerManagementWarning() { } void CPowerManagementWarning::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_ENERGY_SAVER, m_energySaverIcon); } BOOL CPowerManagementWarning::OnInitDialog() { BOOL b = CDialog::OnInitDialog(); const HICON hIcon = ( HICON ) ::LoadImage( GetNonLocalizedResources(), MAKEINTRESOURCE( IDI_ENERGY_SAVER ), IMAGE_ICON, 0, 0, 0); if ( hIcon ) { m_energySaverIcon.SetIcon( hIcon ); } return b; } void CPowerManagementWarning::OnOK() { CDialog::OnOK(); } BEGIN_MESSAGE_MAP(CPowerManagementWarning, CDialog) END_MESSAGE_MAP()