]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSWindows/ControlPanel/ServicesPage.cpp
mDNSResponder-878.260.1.tar.gz
[apple/mdnsresponder.git] / mDNSWindows / ControlPanel / ServicesPage.cpp
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, 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, 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, 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, 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