/* -*- 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()