xref: /aosp_15_r20/external/mdnsresponder/mDNSWindows/ControlPanel/SecondPage.cpp (revision 48a54d368dc4fa860885eef7b70b6c53499e7c25)
1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker  *
3*48a54d36SAndroid Build Coastguard Worker  * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
4*48a54d36SAndroid Build Coastguard Worker  *
5*48a54d36SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*48a54d36SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*48a54d36SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*48a54d36SAndroid Build Coastguard Worker  *
9*48a54d36SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*48a54d36SAndroid Build Coastguard Worker  *
11*48a54d36SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*48a54d36SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*48a54d36SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*48a54d36SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*48a54d36SAndroid Build Coastguard Worker  * limitations under the License.
16*48a54d36SAndroid Build Coastguard Worker  */
17*48a54d36SAndroid Build Coastguard Worker 
18*48a54d36SAndroid Build Coastguard Worker #include "SecondPage.h"
19*48a54d36SAndroid Build Coastguard Worker #include "resource.h"
20*48a54d36SAndroid Build Coastguard Worker 
21*48a54d36SAndroid Build Coastguard Worker #include "ConfigPropertySheet.h"
22*48a54d36SAndroid Build Coastguard Worker #include "SharedSecret.h"
23*48a54d36SAndroid Build Coastguard Worker 
24*48a54d36SAndroid Build Coastguard Worker #include <WinServices.h>
25*48a54d36SAndroid Build Coastguard Worker 
26*48a54d36SAndroid Build Coastguard Worker #define MAX_KEY_LENGTH 255
27*48a54d36SAndroid Build Coastguard Worker 
IMPLEMENT_DYNCREATE(CSecondPage,CPropertyPage)28*48a54d36SAndroid Build Coastguard Worker IMPLEMENT_DYNCREATE(CSecondPage, CPropertyPage)
29*48a54d36SAndroid Build Coastguard Worker 
30*48a54d36SAndroid Build Coastguard Worker 
31*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
32*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::CSecondPage
33*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
34*48a54d36SAndroid Build Coastguard Worker 
35*48a54d36SAndroid Build Coastguard Worker CSecondPage::CSecondPage()
36*48a54d36SAndroid Build Coastguard Worker :
37*48a54d36SAndroid Build Coastguard Worker 	CPropertyPage(CSecondPage::IDD),
38*48a54d36SAndroid Build Coastguard Worker 	m_setupKey( NULL )
39*48a54d36SAndroid Build Coastguard Worker {
40*48a54d36SAndroid Build Coastguard Worker 	//{{AFX_DATA_INIT(CSecondPage)
41*48a54d36SAndroid Build Coastguard Worker 	//}}AFX_DATA_INIT
42*48a54d36SAndroid Build Coastguard Worker 
43*48a54d36SAndroid Build Coastguard Worker 	OSStatus err;
44*48a54d36SAndroid Build Coastguard Worker 
45*48a54d36SAndroid Build Coastguard Worker 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, 0,
46*48a54d36SAndroid Build Coastguard Worker 	                      NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &m_setupKey, NULL );
47*48a54d36SAndroid Build Coastguard Worker 	check_noerr( err );
48*48a54d36SAndroid Build Coastguard Worker }
49*48a54d36SAndroid Build Coastguard Worker 
50*48a54d36SAndroid Build Coastguard Worker 
51*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
52*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::~CSecondPage
53*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
54*48a54d36SAndroid Build Coastguard Worker 
~CSecondPage()55*48a54d36SAndroid Build Coastguard Worker CSecondPage::~CSecondPage()
56*48a54d36SAndroid Build Coastguard Worker {
57*48a54d36SAndroid Build Coastguard Worker 	if ( m_setupKey )
58*48a54d36SAndroid Build Coastguard Worker 	{
59*48a54d36SAndroid Build Coastguard Worker 		RegCloseKey( m_setupKey );
60*48a54d36SAndroid Build Coastguard Worker 		m_setupKey = NULL;
61*48a54d36SAndroid Build Coastguard Worker 	}
62*48a54d36SAndroid Build Coastguard Worker }
63*48a54d36SAndroid Build Coastguard Worker 
64*48a54d36SAndroid Build Coastguard Worker 
65*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
66*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::DoDataExchange
67*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
68*48a54d36SAndroid Build Coastguard Worker 
DoDataExchange(CDataExchange * pDX)69*48a54d36SAndroid Build Coastguard Worker void CSecondPage::DoDataExchange(CDataExchange* pDX)
70*48a54d36SAndroid Build Coastguard Worker {
71*48a54d36SAndroid Build Coastguard Worker 	CPropertyPage::DoDataExchange(pDX);
72*48a54d36SAndroid Build Coastguard Worker 	//{{AFX_DATA_MAP(CSecondPage)
73*48a54d36SAndroid Build Coastguard Worker 	//}}AFX_DATA_MAP
74*48a54d36SAndroid Build Coastguard Worker 	DDX_Control(pDX, IDC_CHECK1, m_advertiseServicesButton);
75*48a54d36SAndroid Build Coastguard Worker 	DDX_Control(pDX, IDC_BUTTON1, m_sharedSecretButton);
76*48a54d36SAndroid Build Coastguard Worker 	DDX_Control(pDX, IDC_COMBO2, m_regDomainsBox);
77*48a54d36SAndroid Build Coastguard Worker }
78*48a54d36SAndroid Build Coastguard Worker 
BEGIN_MESSAGE_MAP(CSecondPage,CPropertyPage)79*48a54d36SAndroid Build Coastguard Worker BEGIN_MESSAGE_MAP(CSecondPage, CPropertyPage)
80*48a54d36SAndroid Build Coastguard Worker 	//{{AFX_MSG_MAP(CSecondPage)
81*48a54d36SAndroid Build Coastguard Worker 	//}}AFX_MSG_MAP
82*48a54d36SAndroid Build Coastguard Worker 	ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedSharedSecret)
83*48a54d36SAndroid Build Coastguard Worker 	ON_BN_CLICKED(IDC_CHECK1, OnBnClickedAdvertise)
84*48a54d36SAndroid Build Coastguard Worker 	ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelChange)
85*48a54d36SAndroid Build Coastguard Worker 	ON_CBN_EDITCHANGE(IDC_COMBO1, OnCbnEditChange)
86*48a54d36SAndroid Build Coastguard Worker 	ON_CBN_EDITCHANGE(IDC_COMBO2, OnCbnEditChange)
87*48a54d36SAndroid Build Coastguard Worker 	ON_CBN_SELCHANGE(IDC_COMBO2, OnCbnSelChange)
88*48a54d36SAndroid Build Coastguard Worker 
89*48a54d36SAndroid Build Coastguard Worker END_MESSAGE_MAP()
90*48a54d36SAndroid Build Coastguard Worker 
91*48a54d36SAndroid Build Coastguard Worker 
92*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
93*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::SetModified
94*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
95*48a54d36SAndroid Build Coastguard Worker 
96*48a54d36SAndroid Build Coastguard Worker void CSecondPage::SetModified( BOOL bChanged )
97*48a54d36SAndroid Build Coastguard Worker {
98*48a54d36SAndroid Build Coastguard Worker 	m_modified = bChanged;
99*48a54d36SAndroid Build Coastguard Worker 
100*48a54d36SAndroid Build Coastguard Worker 	CPropertyPage::SetModified( bChanged );
101*48a54d36SAndroid Build Coastguard Worker }
102*48a54d36SAndroid Build Coastguard Worker 
103*48a54d36SAndroid Build Coastguard Worker 
104*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
105*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnSetActive
106*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
107*48a54d36SAndroid Build Coastguard Worker 
108*48a54d36SAndroid Build Coastguard Worker BOOL
OnSetActive()109*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnSetActive()
110*48a54d36SAndroid Build Coastguard Worker {
111*48a54d36SAndroid Build Coastguard Worker 	CConfigPropertySheet	*	psheet;
112*48a54d36SAndroid Build Coastguard Worker 	DWORD						err;
113*48a54d36SAndroid Build Coastguard Worker 	BOOL						b = CPropertyPage::OnSetActive();
114*48a54d36SAndroid Build Coastguard Worker 
115*48a54d36SAndroid Build Coastguard Worker 	psheet = reinterpret_cast<CConfigPropertySheet*>(GetParent());
116*48a54d36SAndroid Build Coastguard Worker 	require_quiet( psheet, exit );
117*48a54d36SAndroid Build Coastguard Worker 
118*48a54d36SAndroid Build Coastguard Worker 	m_modified = FALSE;
119*48a54d36SAndroid Build Coastguard Worker 
120*48a54d36SAndroid Build Coastguard Worker 	// Clear out what's there
121*48a54d36SAndroid Build Coastguard Worker 
122*48a54d36SAndroid Build Coastguard Worker 	EmptyComboBox( m_regDomainsBox );
123*48a54d36SAndroid Build Coastguard Worker 
124*48a54d36SAndroid Build Coastguard Worker 	// Now populate the registration domain box
125*48a54d36SAndroid Build Coastguard Worker 
126*48a54d36SAndroid Build Coastguard Worker 	err = Populate( m_regDomainsBox, m_setupKey, psheet->m_regDomains );
127*48a54d36SAndroid Build Coastguard Worker 	check_noerr( err );
128*48a54d36SAndroid Build Coastguard Worker 
129*48a54d36SAndroid Build Coastguard Worker exit:
130*48a54d36SAndroid Build Coastguard Worker 
131*48a54d36SAndroid Build Coastguard Worker 	return b;
132*48a54d36SAndroid Build Coastguard Worker }
133*48a54d36SAndroid Build Coastguard Worker 
134*48a54d36SAndroid Build Coastguard Worker 
135*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
136*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnOK
137*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
138*48a54d36SAndroid Build Coastguard Worker 
139*48a54d36SAndroid Build Coastguard Worker void
OnOK()140*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnOK()
141*48a54d36SAndroid Build Coastguard Worker {
142*48a54d36SAndroid Build Coastguard Worker 	if ( m_modified )
143*48a54d36SAndroid Build Coastguard Worker 	{
144*48a54d36SAndroid Build Coastguard Worker 		Commit();
145*48a54d36SAndroid Build Coastguard Worker 	}
146*48a54d36SAndroid Build Coastguard Worker }
147*48a54d36SAndroid Build Coastguard Worker 
148*48a54d36SAndroid Build Coastguard Worker 
149*48a54d36SAndroid Build Coastguard Worker 
150*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
151*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::Commit
152*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
153*48a54d36SAndroid Build Coastguard Worker 
154*48a54d36SAndroid Build Coastguard Worker void
Commit()155*48a54d36SAndroid Build Coastguard Worker CSecondPage::Commit()
156*48a54d36SAndroid Build Coastguard Worker {
157*48a54d36SAndroid Build Coastguard Worker 	DWORD err;
158*48a54d36SAndroid Build Coastguard Worker 
159*48a54d36SAndroid Build Coastguard Worker 	if ( m_setupKey != NULL )
160*48a54d36SAndroid Build Coastguard Worker 	{
161*48a54d36SAndroid Build Coastguard Worker 		err = Commit( m_regDomainsBox, m_setupKey, m_advertiseServicesButton.GetCheck() == BST_CHECKED );
162*48a54d36SAndroid Build Coastguard Worker 		check_noerr( err );
163*48a54d36SAndroid Build Coastguard Worker 	}
164*48a54d36SAndroid Build Coastguard Worker }
165*48a54d36SAndroid Build Coastguard Worker 
166*48a54d36SAndroid Build Coastguard Worker 
167*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
168*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::Commit
169*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
170*48a54d36SAndroid Build Coastguard Worker 
171*48a54d36SAndroid Build Coastguard Worker OSStatus
Commit(CComboBox & box,HKEY key,DWORD enabled)172*48a54d36SAndroid Build Coastguard Worker CSecondPage::Commit( CComboBox & box, HKEY key, DWORD enabled )
173*48a54d36SAndroid Build Coastguard Worker {
174*48a54d36SAndroid Build Coastguard Worker 	CString		selected;
175*48a54d36SAndroid Build Coastguard Worker 	HKEY		subKey	= NULL;
176*48a54d36SAndroid Build Coastguard Worker 	TCHAR		subKeyName[MAX_KEY_LENGTH];
177*48a54d36SAndroid Build Coastguard Worker 	DWORD		cSubKeys = 0;
178*48a54d36SAndroid Build Coastguard Worker 	DWORD		cbMaxSubKey;
179*48a54d36SAndroid Build Coastguard Worker 	DWORD		cchMaxClass;
180*48a54d36SAndroid Build Coastguard Worker 	DWORD		dwSize;
181*48a54d36SAndroid Build Coastguard Worker 	int			i;
182*48a54d36SAndroid Build Coastguard Worker 	OSStatus	err = kNoErr;
183*48a54d36SAndroid Build Coastguard Worker 
184*48a54d36SAndroid Build Coastguard Worker 	// First, remove all the entries that are there
185*48a54d36SAndroid Build Coastguard Worker 
186*48a54d36SAndroid Build Coastguard Worker     err = RegQueryInfoKey( key, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
187*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
188*48a54d36SAndroid Build Coastguard Worker 
189*48a54d36SAndroid Build Coastguard Worker 	for ( i = 0; i < (int) cSubKeys; i++ )
190*48a54d36SAndroid Build Coastguard Worker 	{
191*48a54d36SAndroid Build Coastguard Worker 		dwSize = MAX_KEY_LENGTH;
192*48a54d36SAndroid Build Coastguard Worker 
193*48a54d36SAndroid Build Coastguard Worker 		err = RegEnumKeyEx( key, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
194*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
195*48a54d36SAndroid Build Coastguard Worker 
196*48a54d36SAndroid Build Coastguard Worker 		err = RegDeleteKey( key, subKeyName );
197*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
198*48a54d36SAndroid Build Coastguard Worker 	}
199*48a54d36SAndroid Build Coastguard Worker 
200*48a54d36SAndroid Build Coastguard Worker 	// Get selected text
201*48a54d36SAndroid Build Coastguard Worker 
202*48a54d36SAndroid Build Coastguard Worker 	box.GetWindowText( selected );
203*48a54d36SAndroid Build Coastguard Worker 
204*48a54d36SAndroid Build Coastguard Worker 	// If we haven't seen this string before, add the string to the box and
205*48a54d36SAndroid Build Coastguard Worker 	// the registry
206*48a54d36SAndroid Build Coastguard Worker 
207*48a54d36SAndroid Build Coastguard Worker 	if ( ( selected.GetLength() > 0 ) && ( box.FindStringExact( -1, selected ) == CB_ERR ) )
208*48a54d36SAndroid Build Coastguard Worker 	{
209*48a54d36SAndroid Build Coastguard Worker 		CString string;
210*48a54d36SAndroid Build Coastguard Worker 
211*48a54d36SAndroid Build Coastguard Worker 		box.AddString( selected );
212*48a54d36SAndroid Build Coastguard Worker 
213*48a54d36SAndroid Build Coastguard Worker 		err = RegQueryString( key, L"UserDefined", string );
214*48a54d36SAndroid Build Coastguard Worker 		check_noerr( err );
215*48a54d36SAndroid Build Coastguard Worker 
216*48a54d36SAndroid Build Coastguard Worker 		if ( string.GetLength() )
217*48a54d36SAndroid Build Coastguard Worker 		{
218*48a54d36SAndroid Build Coastguard Worker 			string += L"," + selected;
219*48a54d36SAndroid Build Coastguard Worker 		}
220*48a54d36SAndroid Build Coastguard Worker 		else
221*48a54d36SAndroid Build Coastguard Worker 		{
222*48a54d36SAndroid Build Coastguard Worker 			string = selected;
223*48a54d36SAndroid Build Coastguard Worker 		}
224*48a54d36SAndroid Build Coastguard Worker 
225*48a54d36SAndroid Build Coastguard Worker 		err = RegSetValueEx( key, L"UserDefined", 0, REG_SZ, (LPBYTE) (LPCTSTR) string, ( string.GetLength() + 1) * sizeof( TCHAR ) );
226*48a54d36SAndroid Build Coastguard Worker 		check_noerr ( err );
227*48a54d36SAndroid Build Coastguard Worker 	}
228*48a54d36SAndroid Build Coastguard Worker 
229*48a54d36SAndroid Build Coastguard Worker 	// Save selected text in registry.  This will trigger mDNSResponder to setup
230*48a54d36SAndroid Build Coastguard Worker 	// DynDNS config again
231*48a54d36SAndroid Build Coastguard Worker 
232*48a54d36SAndroid Build Coastguard Worker 	err = RegCreateKeyEx( key, selected, 0,
233*48a54d36SAndroid Build Coastguard Worker 	                      NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &subKey, NULL );
234*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
235*48a54d36SAndroid Build Coastguard Worker 
236*48a54d36SAndroid Build Coastguard Worker 	err = RegSetValueEx( subKey, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
237*48a54d36SAndroid Build Coastguard Worker 	check_noerr( err );
238*48a54d36SAndroid Build Coastguard Worker 
239*48a54d36SAndroid Build Coastguard Worker exit:
240*48a54d36SAndroid Build Coastguard Worker 
241*48a54d36SAndroid Build Coastguard Worker 	if ( subKey )
242*48a54d36SAndroid Build Coastguard Worker 	{
243*48a54d36SAndroid Build Coastguard Worker 		RegCloseKey( subKey );
244*48a54d36SAndroid Build Coastguard Worker 		subKey = NULL;
245*48a54d36SAndroid Build Coastguard Worker 	}
246*48a54d36SAndroid Build Coastguard Worker 
247*48a54d36SAndroid Build Coastguard Worker 	return err;
248*48a54d36SAndroid Build Coastguard Worker }
249*48a54d36SAndroid Build Coastguard Worker 
250*48a54d36SAndroid Build Coastguard Worker 
251*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
252*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnBnClickedSharedSecret
253*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
254*48a54d36SAndroid Build Coastguard Worker 
OnBnClickedSharedSecret()255*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnBnClickedSharedSecret()
256*48a54d36SAndroid Build Coastguard Worker {
257*48a54d36SAndroid Build Coastguard Worker 	CString name;
258*48a54d36SAndroid Build Coastguard Worker 
259*48a54d36SAndroid Build Coastguard Worker 	m_regDomainsBox.GetWindowText( name );
260*48a54d36SAndroid Build Coastguard Worker 
261*48a54d36SAndroid Build Coastguard Worker 	CSharedSecret dlg;
262*48a54d36SAndroid Build Coastguard Worker 
263*48a54d36SAndroid Build Coastguard Worker 	dlg.Load( name );
264*48a54d36SAndroid Build Coastguard Worker 
265*48a54d36SAndroid Build Coastguard Worker 	if ( dlg.DoModal() == IDOK )
266*48a54d36SAndroid Build Coastguard Worker 	{
267*48a54d36SAndroid Build Coastguard Worker 		DWORD		wakeup = 0;
268*48a54d36SAndroid Build Coastguard Worker 		DWORD		dwSize = sizeof( DWORD );
269*48a54d36SAndroid Build Coastguard Worker 		OSStatus	err;
270*48a54d36SAndroid Build Coastguard Worker 
271*48a54d36SAndroid Build Coastguard Worker 		dlg.Commit( name );
272*48a54d36SAndroid Build Coastguard Worker 
273*48a54d36SAndroid Build Coastguard Worker 		// We have now updated the secret, however the system service
274*48a54d36SAndroid Build Coastguard Worker 		// doesn't know about it yet.  So we're going to update the
275*48a54d36SAndroid Build Coastguard Worker 		// registry with a dummy value which will cause the system
276*48a54d36SAndroid Build Coastguard Worker 		// service to re-initialize it's DynDNS setup
277*48a54d36SAndroid Build Coastguard Worker 		//
278*48a54d36SAndroid Build Coastguard Worker 
279*48a54d36SAndroid Build Coastguard Worker 		RegQueryValueEx( m_setupKey, L"Wakeup", NULL, NULL, (LPBYTE) &wakeup, &dwSize );
280*48a54d36SAndroid Build Coastguard Worker 
281*48a54d36SAndroid Build Coastguard Worker 		wakeup++;
282*48a54d36SAndroid Build Coastguard Worker 
283*48a54d36SAndroid Build Coastguard Worker 		err = RegSetValueEx( m_setupKey, L"Wakeup", 0, REG_DWORD, (LPBYTE) &wakeup, sizeof( DWORD ) );
284*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
285*48a54d36SAndroid Build Coastguard Worker 	}
286*48a54d36SAndroid Build Coastguard Worker 
287*48a54d36SAndroid Build Coastguard Worker exit:
288*48a54d36SAndroid Build Coastguard Worker 
289*48a54d36SAndroid Build Coastguard Worker 	return;
290*48a54d36SAndroid Build Coastguard Worker }
291*48a54d36SAndroid Build Coastguard Worker 
292*48a54d36SAndroid Build Coastguard Worker 
293*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
294*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnBnClickedAdvertise
295*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
296*48a54d36SAndroid Build Coastguard Worker 
OnBnClickedAdvertise()297*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnBnClickedAdvertise()
298*48a54d36SAndroid Build Coastguard Worker {
299*48a54d36SAndroid Build Coastguard Worker 	int state;
300*48a54d36SAndroid Build Coastguard Worker 
301*48a54d36SAndroid Build Coastguard Worker 	state = m_advertiseServicesButton.GetCheck();
302*48a54d36SAndroid Build Coastguard Worker 
303*48a54d36SAndroid Build Coastguard Worker 	m_regDomainsBox.EnableWindow( state );
304*48a54d36SAndroid Build Coastguard Worker 	m_sharedSecretButton.EnableWindow( state );
305*48a54d36SAndroid Build Coastguard Worker 
306*48a54d36SAndroid Build Coastguard Worker 	SetModified( TRUE );
307*48a54d36SAndroid Build Coastguard Worker }
308*48a54d36SAndroid Build Coastguard Worker 
309*48a54d36SAndroid Build Coastguard Worker 
310*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
311*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnCbnSelChange
312*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
313*48a54d36SAndroid Build Coastguard Worker 
OnCbnSelChange()314*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnCbnSelChange()
315*48a54d36SAndroid Build Coastguard Worker {
316*48a54d36SAndroid Build Coastguard Worker 	SetModified( TRUE );
317*48a54d36SAndroid Build Coastguard Worker }
318*48a54d36SAndroid Build Coastguard Worker 
319*48a54d36SAndroid Build Coastguard Worker 
320*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
321*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnCbnEditChange
322*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
323*48a54d36SAndroid Build Coastguard Worker 
OnCbnEditChange()324*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnCbnEditChange()
325*48a54d36SAndroid Build Coastguard Worker {
326*48a54d36SAndroid Build Coastguard Worker 	SetModified( TRUE );
327*48a54d36SAndroid Build Coastguard Worker }
328*48a54d36SAndroid Build Coastguard Worker 
329*48a54d36SAndroid Build Coastguard Worker 
330*48a54d36SAndroid Build Coastguard Worker 
331*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
332*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnAddRegistrationDomain
333*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
334*48a54d36SAndroid Build Coastguard Worker 
335*48a54d36SAndroid Build Coastguard Worker void
OnAddRegistrationDomain(CString & domain)336*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnAddRegistrationDomain( CString & domain )
337*48a54d36SAndroid Build Coastguard Worker {
338*48a54d36SAndroid Build Coastguard Worker 	int index = m_regDomainsBox.FindStringExact( -1, domain );
339*48a54d36SAndroid Build Coastguard Worker 
340*48a54d36SAndroid Build Coastguard Worker 	if ( index == CB_ERR )
341*48a54d36SAndroid Build Coastguard Worker 	{
342*48a54d36SAndroid Build Coastguard Worker 		m_regDomainsBox.AddString( domain );
343*48a54d36SAndroid Build Coastguard Worker 	}
344*48a54d36SAndroid Build Coastguard Worker }
345*48a54d36SAndroid Build Coastguard Worker 
346*48a54d36SAndroid Build Coastguard Worker 
347*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
348*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::OnRemoveRegistrationDomain
349*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
350*48a54d36SAndroid Build Coastguard Worker 
351*48a54d36SAndroid Build Coastguard Worker void
OnRemoveRegistrationDomain(CString & domain)352*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnRemoveRegistrationDomain( CString & domain )
353*48a54d36SAndroid Build Coastguard Worker {
354*48a54d36SAndroid Build Coastguard Worker 	int index = m_regDomainsBox.FindStringExact( -1, domain );
355*48a54d36SAndroid Build Coastguard Worker 
356*48a54d36SAndroid Build Coastguard Worker 	if ( index != CB_ERR )
357*48a54d36SAndroid Build Coastguard Worker 	{
358*48a54d36SAndroid Build Coastguard Worker 		m_regDomainsBox.DeleteString( index );
359*48a54d36SAndroid Build Coastguard Worker 	}
360*48a54d36SAndroid Build Coastguard Worker }
361*48a54d36SAndroid Build Coastguard Worker 
362*48a54d36SAndroid Build Coastguard Worker 
363*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
364*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::EmptyComboBox
365*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
366*48a54d36SAndroid Build Coastguard Worker 
367*48a54d36SAndroid Build Coastguard Worker void
EmptyComboBox(CComboBox & box)368*48a54d36SAndroid Build Coastguard Worker CSecondPage::EmptyComboBox( CComboBox & box )
369*48a54d36SAndroid Build Coastguard Worker {
370*48a54d36SAndroid Build Coastguard Worker 	while ( box.GetCount() > 0 )
371*48a54d36SAndroid Build Coastguard Worker 	{
372*48a54d36SAndroid Build Coastguard Worker 		box.DeleteString( 0 );
373*48a54d36SAndroid Build Coastguard Worker 	}
374*48a54d36SAndroid Build Coastguard Worker }
375*48a54d36SAndroid Build Coastguard Worker 
376*48a54d36SAndroid Build Coastguard Worker 
377*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
378*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::Populate
379*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
380*48a54d36SAndroid Build Coastguard Worker 
381*48a54d36SAndroid Build Coastguard Worker OSStatus
Populate(CComboBox & box,HKEY key,StringList & l)382*48a54d36SAndroid Build Coastguard Worker CSecondPage::Populate( CComboBox & box, HKEY key, StringList & l )
383*48a54d36SAndroid Build Coastguard Worker {
384*48a54d36SAndroid Build Coastguard Worker 	CString		string;
385*48a54d36SAndroid Build Coastguard Worker 	HKEY		subKey = NULL;
386*48a54d36SAndroid Build Coastguard Worker 	DWORD		dwSize;
387*48a54d36SAndroid Build Coastguard Worker 	DWORD		enabled = 0;
388*48a54d36SAndroid Build Coastguard Worker 	TCHAR		subKeyName[MAX_KEY_LENGTH];
389*48a54d36SAndroid Build Coastguard Worker 	DWORD		cSubKeys = 0;
390*48a54d36SAndroid Build Coastguard Worker 	DWORD		cbMaxSubKey;
391*48a54d36SAndroid Build Coastguard Worker 	DWORD		cchMaxClass;
392*48a54d36SAndroid Build Coastguard Worker 	OSStatus	err;
393*48a54d36SAndroid Build Coastguard Worker 
394*48a54d36SAndroid Build Coastguard Worker 	err = RegQueryString( key, L"UserDefined", string );
395*48a54d36SAndroid Build Coastguard Worker 
396*48a54d36SAndroid Build Coastguard Worker 	if ( !err && string.GetLength() )
397*48a54d36SAndroid Build Coastguard Worker 	{
398*48a54d36SAndroid Build Coastguard Worker 		bool done = false;
399*48a54d36SAndroid Build Coastguard Worker 
400*48a54d36SAndroid Build Coastguard Worker 		while ( !done )
401*48a54d36SAndroid Build Coastguard Worker 		{
402*48a54d36SAndroid Build Coastguard Worker 			CString tok;
403*48a54d36SAndroid Build Coastguard Worker 
404*48a54d36SAndroid Build Coastguard Worker 			tok = string.SpanExcluding( L"," );
405*48a54d36SAndroid Build Coastguard Worker 
406*48a54d36SAndroid Build Coastguard Worker 			box.AddString( tok );
407*48a54d36SAndroid Build Coastguard Worker 
408*48a54d36SAndroid Build Coastguard Worker 			if ( tok != string )
409*48a54d36SAndroid Build Coastguard Worker 			{
410*48a54d36SAndroid Build Coastguard Worker 				// Get rid of that string and comma
411*48a54d36SAndroid Build Coastguard Worker 
412*48a54d36SAndroid Build Coastguard Worker 				string = string.Right( string.GetLength() - tok.GetLength() - 1 );
413*48a54d36SAndroid Build Coastguard Worker 			}
414*48a54d36SAndroid Build Coastguard Worker 			else
415*48a54d36SAndroid Build Coastguard Worker 			{
416*48a54d36SAndroid Build Coastguard Worker 				done = true;
417*48a54d36SAndroid Build Coastguard Worker 			}
418*48a54d36SAndroid Build Coastguard Worker 		}
419*48a54d36SAndroid Build Coastguard Worker 	}
420*48a54d36SAndroid Build Coastguard Worker 
421*48a54d36SAndroid Build Coastguard Worker 	StringList::iterator it;
422*48a54d36SAndroid Build Coastguard Worker 
423*48a54d36SAndroid Build Coastguard Worker 	for ( it = l.begin(); it != l.end(); it++ )
424*48a54d36SAndroid Build Coastguard Worker 	{
425*48a54d36SAndroid Build Coastguard Worker 		if ( box.FindStringExact( -1, *it ) == CB_ERR )
426*48a54d36SAndroid Build Coastguard Worker 		{
427*48a54d36SAndroid Build Coastguard Worker 			box.AddString( *it );
428*48a54d36SAndroid Build Coastguard Worker 		}
429*48a54d36SAndroid Build Coastguard Worker 	}
430*48a54d36SAndroid Build Coastguard Worker 
431*48a54d36SAndroid Build Coastguard Worker 	err = RegQueryInfoKey( key, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
432*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
433*48a54d36SAndroid Build Coastguard Worker 
434*48a54d36SAndroid Build Coastguard Worker 	if ( cSubKeys > 0 )
435*48a54d36SAndroid Build Coastguard Worker 	{
436*48a54d36SAndroid Build Coastguard Worker 		dwSize = MAX_KEY_LENGTH;
437*48a54d36SAndroid Build Coastguard Worker 
438*48a54d36SAndroid Build Coastguard Worker 		err = RegEnumKeyEx( key, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
439*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
440*48a54d36SAndroid Build Coastguard Worker 
441*48a54d36SAndroid Build Coastguard Worker 		err = RegOpenKey( key, subKeyName, &subKey );
442*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
443*48a54d36SAndroid Build Coastguard Worker 
444*48a54d36SAndroid Build Coastguard Worker 		dwSize = sizeof( DWORD );
445*48a54d36SAndroid Build Coastguard Worker 		err = RegQueryValueEx( subKey, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize );
446*48a54d36SAndroid Build Coastguard Worker 		require_noerr( err, exit );
447*48a54d36SAndroid Build Coastguard Worker 
448*48a54d36SAndroid Build Coastguard Worker 		// See if it's there
449*48a54d36SAndroid Build Coastguard Worker 
450*48a54d36SAndroid Build Coastguard Worker 		if ( box.SelectString( -1, subKeyName ) == CB_ERR )
451*48a54d36SAndroid Build Coastguard Worker 		{
452*48a54d36SAndroid Build Coastguard Worker 			// If not, add it
453*48a54d36SAndroid Build Coastguard Worker 
454*48a54d36SAndroid Build Coastguard Worker 			box.AddString( subKeyName );
455*48a54d36SAndroid Build Coastguard Worker 		}
456*48a54d36SAndroid Build Coastguard Worker 
457*48a54d36SAndroid Build Coastguard Worker 		box.SelectString( -1, subKeyName );
458*48a54d36SAndroid Build Coastguard Worker 
459*48a54d36SAndroid Build Coastguard Worker 		RegCloseKey( subKey );
460*48a54d36SAndroid Build Coastguard Worker 		subKey = NULL;
461*48a54d36SAndroid Build Coastguard Worker 	}
462*48a54d36SAndroid Build Coastguard Worker 
463*48a54d36SAndroid Build Coastguard Worker exit:
464*48a54d36SAndroid Build Coastguard Worker 
465*48a54d36SAndroid Build Coastguard Worker 	m_advertiseServicesButton.SetCheck( ( !err && enabled ) ? BST_CHECKED : BST_UNCHECKED );
466*48a54d36SAndroid Build Coastguard Worker 	m_regDomainsBox.EnableWindow( ( !err && enabled ) );
467*48a54d36SAndroid Build Coastguard Worker 	m_sharedSecretButton.EnableWindow( (!err && enabled ) );
468*48a54d36SAndroid Build Coastguard Worker 
469*48a54d36SAndroid Build Coastguard Worker 	return err;
470*48a54d36SAndroid Build Coastguard Worker }
471*48a54d36SAndroid Build Coastguard Worker 
472*48a54d36SAndroid Build Coastguard Worker 
473*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
474*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::CreateKey
475*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
476*48a54d36SAndroid Build Coastguard Worker 
477*48a54d36SAndroid Build Coastguard Worker OSStatus
CreateKey(CString & name,DWORD enabled)478*48a54d36SAndroid Build Coastguard Worker CSecondPage::CreateKey( CString & name, DWORD enabled )
479*48a54d36SAndroid Build Coastguard Worker {
480*48a54d36SAndroid Build Coastguard Worker 	HKEY		key = NULL;
481*48a54d36SAndroid Build Coastguard Worker 	OSStatus	err;
482*48a54d36SAndroid Build Coastguard Worker 
483*48a54d36SAndroid Build Coastguard Worker 	err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, (LPCTSTR) name, 0,
484*48a54d36SAndroid Build Coastguard Worker 		                  NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
485*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
486*48a54d36SAndroid Build Coastguard Worker 
487*48a54d36SAndroid Build Coastguard Worker 	err = RegSetValueEx( key, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
488*48a54d36SAndroid Build Coastguard Worker 	check_noerr( err );
489*48a54d36SAndroid Build Coastguard Worker 
490*48a54d36SAndroid Build Coastguard Worker exit:
491*48a54d36SAndroid Build Coastguard Worker 
492*48a54d36SAndroid Build Coastguard Worker 	if ( key )
493*48a54d36SAndroid Build Coastguard Worker 	{
494*48a54d36SAndroid Build Coastguard Worker 		RegCloseKey( key );
495*48a54d36SAndroid Build Coastguard Worker 	}
496*48a54d36SAndroid Build Coastguard Worker 
497*48a54d36SAndroid Build Coastguard Worker 	return err;
498*48a54d36SAndroid Build Coastguard Worker }
499*48a54d36SAndroid Build Coastguard Worker 
500*48a54d36SAndroid Build Coastguard Worker 
501*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
502*48a54d36SAndroid Build Coastguard Worker //	CSecondPage::RegQueryString
503*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
504*48a54d36SAndroid Build Coastguard Worker 
505*48a54d36SAndroid Build Coastguard Worker OSStatus
RegQueryString(HKEY key,CString valueName,CString & value)506*48a54d36SAndroid Build Coastguard Worker CSecondPage::RegQueryString( HKEY key, CString valueName, CString & value )
507*48a54d36SAndroid Build Coastguard Worker {
508*48a54d36SAndroid Build Coastguard Worker 	TCHAR	*	string;
509*48a54d36SAndroid Build Coastguard Worker 	DWORD		stringLen;
510*48a54d36SAndroid Build Coastguard Worker 	int			i;
511*48a54d36SAndroid Build Coastguard Worker 	OSStatus	err;
512*48a54d36SAndroid Build Coastguard Worker 
513*48a54d36SAndroid Build Coastguard Worker 	stringLen	= 1024;
514*48a54d36SAndroid Build Coastguard Worker 	string		= NULL;
515*48a54d36SAndroid Build Coastguard Worker 	i			= 0;
516*48a54d36SAndroid Build Coastguard Worker 
517*48a54d36SAndroid Build Coastguard Worker 	do
518*48a54d36SAndroid Build Coastguard Worker 	{
519*48a54d36SAndroid Build Coastguard Worker 		if ( string )
520*48a54d36SAndroid Build Coastguard Worker 		{
521*48a54d36SAndroid Build Coastguard Worker 			free( string );
522*48a54d36SAndroid Build Coastguard Worker 		}
523*48a54d36SAndroid Build Coastguard Worker 
524*48a54d36SAndroid Build Coastguard Worker 		string = (TCHAR*) malloc( stringLen );
525*48a54d36SAndroid Build Coastguard Worker 		require_action( string, exit, err = kUnknownErr );
526*48a54d36SAndroid Build Coastguard Worker 		*string = '\0';
527*48a54d36SAndroid Build Coastguard Worker 
528*48a54d36SAndroid Build Coastguard Worker 		err = RegQueryValueEx( key, valueName, 0, NULL, (LPBYTE) string, &stringLen );
529*48a54d36SAndroid Build Coastguard Worker 
530*48a54d36SAndroid Build Coastguard Worker 		i++;
531*48a54d36SAndroid Build Coastguard Worker 	}
532*48a54d36SAndroid Build Coastguard Worker 	while ( ( err == ERROR_MORE_DATA ) && ( i < 100 ) );
533*48a54d36SAndroid Build Coastguard Worker 
534*48a54d36SAndroid Build Coastguard Worker 	value = string;
535*48a54d36SAndroid Build Coastguard Worker 
536*48a54d36SAndroid Build Coastguard Worker exit:
537*48a54d36SAndroid Build Coastguard Worker 
538*48a54d36SAndroid Build Coastguard Worker 	if ( string )
539*48a54d36SAndroid Build Coastguard Worker 	{
540*48a54d36SAndroid Build Coastguard Worker 		free( string );
541*48a54d36SAndroid Build Coastguard Worker 	}
542*48a54d36SAndroid Build Coastguard Worker 
543*48a54d36SAndroid Build Coastguard Worker 	return err;
544*48a54d36SAndroid Build Coastguard Worker }
545