Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1121 lines
28 KiB

  1. //Copyright (c) 1998 - 1999 Microsoft Corporation
  2. #include<stdafx.h>
  3. #include"resource.h"
  4. #include"sdlgs.h"
  5. #include"snodes.h"
  6. #include<shellapi.h>
  7. #include<shlapip.h>
  8. #include <shlobj.h>
  9. #include<shlobjp.h>
  10. BOOL OnHelp( HWND hwnd , LPHELPINFO lphi );
  11. BOOL OnContextMenu( HWND hwnd , POINT& pt );
  12. void ErrMessage( HWND hwndOwner , INT_PTR iResourceID );
  13. extern void xxxErrMessage( HWND hwnd , INT_PTR nResMessageId , INT_PTR nResTitleId , UINT nFlags );
  14. void SnodeErrorHandler( HWND hParent , INT nObjectId , DWORD dwStatus );
  15. #define RECTWIDTH( rc ) ((rc).right - (rc).left)
  16. #define RECTHEIGHT( rc ) ((rc).bottom - (rc).top)
  17. extern BOOL g_bAppSrvMode;
  18. #if 0
  19. //--------------------------------------------------------------------------------------
  20. INT_PTR CALLBACK CachedSessionsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  21. {
  22. CSettingNode *pNode;
  23. DWORD nVal = 0;
  24. switch( msg )
  25. {
  26. case WM_INITDIALOG :
  27. pNode = ( CSettingNode *)lp;
  28. ASSERT( pNode != NULL );
  29. // ok to store null -- it's initializing DWLP_USER area
  30. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  31. SetFocus( GetDlgItem( hDlg , IDC_EDIT_CACHEDSESSION ) );
  32. pNode->m_pSettings->GetCachedSessions( &nVal );
  33. SetDlgItemInt( hDlg , IDC_EDIT_CACHEDSESSION , ( UINT )nVal , FALSE );
  34. break;
  35. case WM_COMMAND:
  36. if( LOWORD( wp ) == IDOK )
  37. {
  38. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  39. if( pNode == NULL )
  40. {
  41. break;
  42. }
  43. BOOL bSuccess = FALSE;
  44. UINT uVal = GetDlgItemInt( hDlg , IDC_EDIT_CACHEDSESSION , &bSuccess , FALSE );
  45. if( !bSuccess )
  46. {
  47. ErrMessage( hDlg , IDS_ERR_CACHEDVALUE );
  48. return 0;
  49. }
  50. // check for any errors when setting this value
  51. pNode->SetAttributeValue( ( DWORD )uVal );
  52. EndDialog( hDlg , 0 );
  53. }
  54. else if( LOWORD( wp ) == IDCANCEL )
  55. {
  56. EndDialog( hDlg , 0 );
  57. }
  58. break;
  59. }
  60. return 0;
  61. }
  62. #endif
  63. //--------------------------------------------------------------------------------------
  64. INT_PTR CALLBACK UsePerSessionTempDirsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  65. {
  66. CSettingNode *pNode;
  67. // TCHAR tchNewName[ 128 ];
  68. BOOL bVal = FALSE;
  69. static INT nOldSelection;
  70. switch( msg )
  71. {
  72. case WM_INITDIALOG :
  73. pNode = ( CSettingNode *)lp;
  74. ASSERT( pNode != NULL );
  75. // ok to store null -- it's initializing DWLP_USER area
  76. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  77. if( pNode->GetObjectId( ) == PERSESSION_TEMPDIR )
  78. {
  79. bVal = ( BOOL )pNode->xx_GetValue( );
  80. }
  81. SendMessage( GetDlgItem( hDlg , IDC_RADIO_PERSESSION_YES ) , BM_SETCHECK , ( WPARAM )bVal , 0 );
  82. SendMessage( GetDlgItem( hDlg , IDC_RADIO_PERSESSION_NO ) , BM_SETCHECK , ( WPARAM )!bVal , 0 );
  83. POLICY_TS_MACHINE p;
  84. RegGetMachinePolicy(&p);
  85. EnableWindow(GetDlgItem(hDlg, IDC_RADIO_PERSESSION_YES), !p.fPolicyTempFoldersPerSession);
  86. EnableWindow(GetDlgItem(hDlg, IDC_RADIO_PERSESSION_NO), !p.fPolicyTempFoldersPerSession);
  87. nOldSelection = bVal;
  88. break;
  89. case WM_CONTEXTMENU:
  90. {
  91. POINT pt;
  92. pt.x = LOWORD( lp );
  93. pt.y = HIWORD( lp );
  94. if( hDlg == GetParent( ( HWND )wp ) )
  95. {
  96. OnContextMenu( ( HWND )wp , pt );
  97. }
  98. }
  99. break;
  100. case WM_HELP:
  101. OnHelp( hDlg , ( LPHELPINFO )lp );
  102. break;
  103. case WM_COMMAND:
  104. if( LOWORD( wp ) == IDOK )
  105. {
  106. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  107. if( pNode == NULL )
  108. {
  109. break;
  110. }
  111. INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_PERSESSION_YES ) == BST_CHECKED ? 1 : 0;
  112. if( nOldSelection != nCurrent )
  113. {
  114. DWORD dwStatus;
  115. if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) )
  116. {
  117. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  118. }
  119. }
  120. EndDialog( hDlg , 0 );
  121. }
  122. else if( LOWORD( wp ) == IDCANCEL )
  123. {
  124. EndDialog( hDlg , 0 );
  125. }
  126. break;
  127. }
  128. return 0;
  129. }
  130. #if 0 // removed from final release
  131. //--------------------------------------------------------------------------------------
  132. INT_PTR CALLBACK DefConSecurityDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  133. {
  134. CSettingNode *pNode = NULL;
  135. DWORD nVal = 0;
  136. switch( msg )
  137. {
  138. case WM_INITDIALOG :
  139. {
  140. TCHAR tchBuffer[ 128 ];
  141. INT rgid[] = { IDS_RAA , IDS_AS , IDS_AA , -1 };
  142. pNode = ( CSettingNode *)lp;
  143. ASSERT( pNode != NULL );
  144. // ok to store null -- it's initializing DWLP_USER area
  145. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  146. for( int idx = 0; rgid[ idx ] != -1 ; ++idx )
  147. {
  148. VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , rgid[ idx ] , tchBuffer , SIZE_OF_BUFFER( tchBuffer ) ) );
  149. SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_ADDSTRING , 0 , ( LPARAM )tchBuffer );
  150. }
  151. nVal = ( DWORD )pNode->xx_GetValue( );
  152. if( nVal == 0 )
  153. {
  154. // error message
  155. ErrMessage( hDlg , IDS_ERROR_INVALID_SD );
  156. }
  157. SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_SETCURSEL , ( WPARAM )( nVal - 1 ) , 0 );
  158. }
  159. break;
  160. case WM_CONTEXTMENU:
  161. {
  162. POINT pt;
  163. pt.x = LOWORD( lp );
  164. pt.y = HIWORD( lp );
  165. if( hDlg == GetParent( ( HWND )wp ) )
  166. {
  167. OnContextMenu( ( HWND )wp , pt );
  168. }
  169. }
  170. break;
  171. case WM_HELP:
  172. OnHelp( hDlg , ( LPHELPINFO )lp );
  173. break;
  174. case WM_COMMAND:
  175. if( LOWORD( wp ) == IDOK )
  176. {
  177. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  178. if( pNode == NULL )
  179. {
  180. break;
  181. }
  182. INT_PTR iSel = SendMessage( GetDlgItem( hDlg , IDC_COMBO_DEFSEC ) , CB_GETCURSEL , 0 , 0 );
  183. if( iSel != CB_ERR )
  184. {
  185. INT nOld = pNode->xx_GetValue( );
  186. if( nOld != ( INT )( iSel + 1 ) )
  187. {
  188. DWORD dwStatus;
  189. if( FAILED( pNode->SetAttributeValue( ( DWORD )( iSel + 1 ) , &dwStatus ) ) )
  190. {
  191. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  192. }
  193. }
  194. }
  195. else
  196. {
  197. ErrMessage( hDlg , IDS_ERROR_INVALID_SD );
  198. }
  199. EndDialog( hDlg , 0 );
  200. }
  201. else if( LOWORD( wp ) == IDCANCEL )
  202. {
  203. EndDialog( hDlg , 0 );
  204. }
  205. break;
  206. }
  207. return 0;
  208. }
  209. #endif
  210. //--------------------------------------------------------------------------------------
  211. INT_PTR CALLBACK LicensingDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  212. {
  213. CSettingNode *pNode;
  214. DWORD dwStatus;
  215. static HCURSOR hcurWait;
  216. static ULONG ulOldSelection;
  217. static ULONG *rgulModes = NULL;
  218. static WCHAR **rgszNames = NULL;
  219. static WCHAR **rgszDescriptions = NULL;
  220. static ULONG cModes = 0;
  221. switch( msg )
  222. {
  223. case WM_INITDIALOG :
  224. {
  225. ULONG ulMode;
  226. ULONG iMode = 0; // index of ulMode in rgulModes
  227. DWORD nTermSrvMode;
  228. DWORD idcRA;
  229. RECT rcTextCtrl;
  230. HRESULT hr;
  231. HWND hLW;
  232. ISettingsComp *pSc;
  233. BOOL fIModeFound = FALSE;
  234. pNode = ( CSettingNode *)lp;
  235. ASSERT( pNode != NULL );
  236. pSc = reinterpret_cast< ISettingsComp * >( pNode->GetInterface() );
  237. ASSERT(NULL != pSc)
  238. // ok to store null -- it's initializing DWLP_USER area
  239. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  240. //
  241. // read valid modes and cache them
  242. //
  243. hr = pSc->GetLicensingModeList( &cModes, &rgulModes, &dwStatus );
  244. if (FAILED(hr))
  245. {
  246. ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE_LIST );
  247. EndDialog( hDlg , 0 );
  248. goto done_init;
  249. }
  250. hr = pSc->GetLicensingMode( &ulMode, &dwStatus );
  251. if (FAILED(hr))
  252. {
  253. ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE );
  254. EndDialog( hDlg , 0 );
  255. goto done_init;
  256. }
  257. rgszNames = (WCHAR **) CoTaskMemAlloc(cModes * sizeof(WCHAR *));
  258. if (NULL == rgszNames)
  259. {
  260. ErrMessage( hDlg , IDS_ERROR_NO_MEMORY );
  261. EndDialog( hDlg , 0 );
  262. goto done_init;
  263. }
  264. rgszDescriptions = (WCHAR **) CoTaskMemAlloc(cModes * sizeof(WCHAR *));
  265. if (NULL == rgszDescriptions)
  266. {
  267. ErrMessage( hDlg , IDS_ERROR_NO_MEMORY );
  268. EndDialog( hDlg , 0 );
  269. goto done_init;
  270. }
  271. for (ULONG i = 0; i < cModes; i++)
  272. {
  273. hr = pSc->GetLicensingModeInfo(rgulModes[i],rgszNames+i,rgszDescriptions+i,&dwStatus);
  274. if (FAILED(hr))
  275. {
  276. ErrMessage( hDlg , IDS_ERROR_NO_LICENSING_MODE_INFO );
  277. EndDialog( hDlg , 0 );
  278. goto done_init;
  279. }
  280. if (ulMode == rgulModes[i])
  281. {
  282. iMode = i;
  283. fIModeFound = TRUE;
  284. }
  285. SendMessage( GetDlgItem( hDlg , IDC_LICENSING_MODE ) , CB_ADDSTRING , 0 , (LPARAM) rgszNames[i] );
  286. }
  287. ASSERT(fIModeFound);
  288. ulOldSelection = iMode;
  289. //
  290. // make current mode the selection in the dropdown
  291. //
  292. SendMessage( GetDlgItem( hDlg , IDC_LICENSING_MODE ) , CB_SETCURSEL , (WPARAM) iMode , 0 );
  293. //
  294. // Show the mode description in the description control
  295. //
  296. SetWindowText( GetDlgItem( hDlg , IDC_LICENSING_DESCRIPTION ), rgszDescriptions[iMode] );
  297. //
  298. // make the valid remote admin control visible
  299. //
  300. hr = pSc->GetTermSrvMode( &nTermSrvMode , &dwStatus );
  301. if (FAILED(hr))
  302. {
  303. ErrMessage( hDlg , IDS_ERR_TERMSRVMODE );
  304. EndDialog( hDlg , 0 );
  305. goto done_init;
  306. }
  307. idcRA = nTermSrvMode ? IDC_LICENSING_TO_REMOTE_ADMIN : IDC_LICENSING_FROM_REMOTE_ADMIN;
  308. //
  309. // make the remote admin control into a link
  310. //
  311. GetWindowRect( GetDlgItem( hDlg , idcRA ) , &rcTextCtrl );
  312. MapWindowPoints( NULL , hDlg , ( LPPOINT )&rcTextCtrl , 2 );
  313. LinkWindow_RegisterClass();
  314. hLW = CreateWindowEx( 0 ,
  315. TEXT("Link Window") ,
  316. TEXT( "" ) ,
  317. WS_CLIPSIBLINGS | WS_TABSTOP | WS_CHILD | WS_VISIBLE,
  318. rcTextCtrl.left ,
  319. rcTextCtrl.top ,
  320. RECTWIDTH( rcTextCtrl ) ,
  321. RECTHEIGHT( rcTextCtrl ),
  322. hDlg ,
  323. ( HMENU )12,
  324. NULL,
  325. NULL );
  326. {
  327. TCHAR tchBuffer[ 512 ];
  328. GetWindowText( GetDlgItem( hDlg , idcRA ), tchBuffer , SIZE_OF_BUFFER( tchBuffer ) ) ;
  329. SetWindowText( hLW , tchBuffer );
  330. }
  331. hcurWait = LoadCursor( NULL , MAKEINTRESOURCE( IDC_WAIT ) ) ;
  332. }
  333. done_init:
  334. break;
  335. case WM_CONTEXTMENU:
  336. {
  337. POINT pt;
  338. pt.x = LOWORD( lp );
  339. pt.y = HIWORD( lp );
  340. if( hDlg == GetParent( ( HWND )wp ) )
  341. {
  342. OnContextMenu( ( HWND )wp , pt );
  343. }
  344. }
  345. break;
  346. case WM_HELP:
  347. OnHelp( hDlg , ( LPHELPINFO )lp );
  348. break;
  349. case WM_COMMAND:
  350. if ( LOWORD( wp ) == IDOK )
  351. {
  352. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  353. if( pNode == NULL )
  354. {
  355. break;
  356. }
  357. LRESULT nCurSel = SendMessage(GetDlgItem( hDlg ,
  358. IDC_LICENSING_MODE),
  359. CB_GETCURSEL,
  360. 0,
  361. 0);
  362. if ( ulOldSelection != (ULONG) nCurSel )
  363. {
  364. if( FAILED( pNode->SetAttributeValue( ( DWORD )rgulModes[nCurSel] , &dwStatus ) ) )
  365. {
  366. SnodeErrorHandler( hDlg ,
  367. pNode->GetObjectId( ),
  368. dwStatus );
  369. }
  370. }
  371. }
  372. if (( LOWORD( wp ) == IDCANCEL ) || ( LOWORD( wp ) == IDOK ))
  373. {
  374. LinkWindow_UnregisterClass( _Module.GetModuleInstance() );
  375. if (NULL != rgszNames)
  376. {
  377. CoTaskMemFree(rgszNames);
  378. rgszNames = NULL;
  379. }
  380. if (NULL != rgszDescriptions)
  381. {
  382. CoTaskMemFree(rgszDescriptions);
  383. rgszDescriptions = NULL;
  384. }
  385. EndDialog( hDlg , 0 );
  386. }
  387. else if (HIWORD( wp ) == CBN_SELCHANGE)
  388. {
  389. LRESULT nCurSel = SendMessage((HWND) lp,
  390. CB_GETCURSEL,
  391. 0,
  392. 0);
  393. ASSERT((ULONG)nCurSel < cModes);
  394. SetWindowText( GetDlgItem( hDlg , IDC_LICENSING_DESCRIPTION ),
  395. rgszDescriptions[nCurSel] );
  396. }
  397. break;
  398. case WM_NOTIFY:
  399. switch (((LPNMHDR)lp)->code)
  400. {
  401. case NM_CHAR:
  402. if( ( ( LPNMCHAR )lp )->ch != VK_SPACE )
  403. {
  404. break;
  405. }
  406. // else fall through
  407. case NM_RETURN:
  408. case NM_CLICK:
  409. {
  410. TCHAR szFile[MAX_PATH];
  411. TCHAR szParam[MAX_PATH];
  412. SHELLEXECUTEINFO sei;
  413. ZeroMemory( &sei , sizeof( SHELLEXECUTEINFO ) );
  414. if ( GetSystemDirectory( szFile , SIZE_OF_BUFFER( szFile ) ) )
  415. {
  416. lstrcpy( szParam , TEXT( ",2" ) );
  417. lstrcpy( szFile , TEXT( "appwiz.cpl" ) );
  418. sei.cbSize = sizeof( SHELLEXECUTEINFO );
  419. sei.fMask = SEE_MASK_NOCLOSEPROCESS;
  420. sei.lpFile = szFile;
  421. sei.lpParameters = szParam;
  422. if( ShellExecuteEx( &sei ) )
  423. {
  424. EndDialog( hDlg, IDCANCEL );
  425. }
  426. }
  427. }
  428. break;
  429. }
  430. break;
  431. }
  432. return 0;
  433. }
  434. //--------------------------------------------------------------------------------------
  435. INT_PTR CALLBACK ConfigActiveDesktop( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  436. {
  437. CSettingNode *pNode;
  438. //TCHAR tchNewName[ 128 ];
  439. BOOL bVal = FALSE;
  440. static nOldSelection;
  441. switch( msg )
  442. {
  443. case WM_INITDIALOG :
  444. pNode = ( CSettingNode *)lp;
  445. ASSERT( pNode != NULL );
  446. // ok to store null -- it's initializing DWLP_USER area
  447. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  448. if( pNode->GetObjectId( ) == ACTIVE_DESK )
  449. {
  450. bVal = ( BOOL )pNode->xx_GetValue( );
  451. }
  452. // control converted into a checkbox if the chkbx is checked it means disable
  453. // unchecked, well you've guest it.
  454. if( bVal )
  455. {
  456. SendMessage( GetDlgItem( hDlg , IDC_RADIO_AD_ENABLE ) , BM_SETCHECK , ( WPARAM )FALSE , 0 );
  457. }
  458. else
  459. {
  460. SendMessage( GetDlgItem( hDlg , IDC_RADIO_AD_ENABLE ) , BM_SETCHECK , ( WPARAM )TRUE , 0 );
  461. //SendMessage( GetDlgItem( hDlg , IDC_RADIO_ADP_DISABLE ) , BM_SETCHECK , ( WPARAM )TRUE , 0 );
  462. }
  463. nOldSelection = bVal;
  464. break;
  465. case WM_CONTEXTMENU:
  466. {
  467. POINT pt;
  468. pt.x = LOWORD( lp );
  469. pt.y = HIWORD( lp );
  470. if( hDlg == GetParent( ( HWND )wp ) )
  471. {
  472. OnContextMenu( ( HWND )wp , pt );
  473. }
  474. }
  475. break;
  476. case WM_HELP:
  477. OnHelp( hDlg , ( LPHELPINFO )lp );
  478. break;
  479. case WM_COMMAND:
  480. if( LOWORD( wp ) == IDOK )
  481. {
  482. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  483. if( pNode == NULL )
  484. {
  485. break;
  486. }
  487. INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_AD_ENABLE ) == BST_CHECKED ? 0 : 1;
  488. if( nOldSelection != nCurrent )
  489. {
  490. DWORD dwStatus;
  491. if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) )
  492. {
  493. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  494. }
  495. }
  496. EndDialog( hDlg , 0 );
  497. }
  498. else if( LOWORD( wp ) == IDCANCEL )
  499. {
  500. EndDialog( hDlg , 0 );
  501. }
  502. break;
  503. }
  504. return 0;
  505. }
  506. //--------------------------------------------------------------------------------------
  507. INT_PTR CALLBACK ConfigSingleSession( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  508. {
  509. CSettingNode *pNode;
  510. //TCHAR tchNewName[ 128 ];
  511. BOOL bVal = FALSE;
  512. static nOldSelection;
  513. switch( msg )
  514. {
  515. case WM_INITDIALOG :
  516. pNode = ( CSettingNode *)lp;
  517. ASSERT( pNode != NULL );
  518. // ok to store null -- it's initializing DWLP_USER area
  519. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  520. if( pNode->GetObjectId( ) == SINGLE_SESSION )
  521. {
  522. bVal = ( BOOL )pNode->xx_GetValue( );
  523. }
  524. // control converted into a checkbox if the chkbx is checked it means enable
  525. // unchecked, well you've guest it.
  526. SendMessage( GetDlgItem( hDlg , IDC_RADIO_SINGLE_SESSION_ENABLE ) , BM_SETCHECK , ( WPARAM )bVal , 0 );
  527. POLICY_TS_MACHINE p;
  528. RegGetMachinePolicy(&p);
  529. EnableWindow(GetDlgItem(hDlg,IDC_RADIO_SINGLE_SESSION_ENABLE), !p.fPolicySingleSessionPerUser);
  530. nOldSelection = bVal;
  531. break;
  532. case WM_CONTEXTMENU:
  533. {
  534. POINT pt;
  535. pt.x = LOWORD( lp );
  536. pt.y = HIWORD( lp );
  537. if( hDlg == GetParent( ( HWND )wp ) )
  538. {
  539. OnContextMenu( ( HWND )wp , pt );
  540. }
  541. }
  542. break;
  543. case WM_HELP:
  544. OnHelp( hDlg , ( LPHELPINFO )lp );
  545. break;
  546. case WM_COMMAND:
  547. if( LOWORD( wp ) == IDOK )
  548. {
  549. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  550. if( pNode == NULL )
  551. {
  552. break;
  553. }
  554. INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_SINGLE_SESSION_ENABLE ) == BST_CHECKED ? 1 : 0;
  555. if( nOldSelection != nCurrent )
  556. {
  557. DWORD dwStatus;
  558. if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) )
  559. {
  560. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  561. }
  562. }
  563. EndDialog( hDlg , 0 );
  564. }
  565. else if( LOWORD( wp ) == IDCANCEL )
  566. {
  567. EndDialog( hDlg , 0 );
  568. }
  569. break;
  570. }
  571. return 0;
  572. }
  573. //--------------------------------------------------------------------------------------
  574. INT_PTR CALLBACK DeleteTempDirsDlgProc( HWND hDlg , UINT msg , WPARAM wp , LPARAM lp )
  575. {
  576. CSettingNode *pNode;
  577. // TCHAR tchNewName[ 128 ];
  578. BOOL bVal = FALSE;
  579. static nOldSelection;
  580. switch( msg )
  581. {
  582. case WM_INITDIALOG :
  583. pNode = ( CSettingNode *)lp;
  584. ASSERT( pNode != NULL );
  585. // ok to store null -- it's initializing DWLP_USER area
  586. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  587. if( pNode->GetObjectId( ) == DELETED_DIRS_ONEXIT )
  588. {
  589. bVal = ( BOOL )pNode->xx_GetValue( );
  590. }
  591. SendMessage( GetDlgItem( hDlg , IDC_RADIO_YES ) , BM_SETCHECK , ( WPARAM )bVal , 0 );
  592. SendMessage( GetDlgItem( hDlg , IDC_RADIO_NO ) , BM_SETCHECK , ( WPARAM )!bVal , 0 );
  593. POLICY_TS_MACHINE p;
  594. RegGetMachinePolicy(&p);
  595. EnableWindow(GetDlgItem(hDlg, IDC_RADIO_YES), !p.fPolicyDeleteTempFoldersOnExit);
  596. EnableWindow(GetDlgItem(hDlg, IDC_RADIO_NO), !p.fPolicyDeleteTempFoldersOnExit);
  597. nOldSelection = bVal;
  598. break;
  599. case WM_CONTEXTMENU:
  600. {
  601. POINT pt;
  602. pt.x = LOWORD( lp );
  603. pt.y = HIWORD( lp );
  604. if( hDlg == GetParent( ( HWND )wp ) )
  605. {
  606. OnContextMenu( ( HWND )wp , pt );
  607. }
  608. }
  609. break;
  610. case WM_HELP:
  611. OnHelp( hDlg , ( LPHELPINFO )lp );
  612. break;
  613. case WM_COMMAND:
  614. if( LOWORD( wp ) == IDOK )
  615. {
  616. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  617. if( pNode == NULL )
  618. {
  619. break;
  620. }
  621. INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_YES ) == BST_CHECKED ? 1 : 0;
  622. if( nOldSelection != nCurrent )
  623. {
  624. DWORD dwStatus;
  625. if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) )
  626. {
  627. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  628. }
  629. }
  630. EndDialog( hDlg , 0 );
  631. }
  632. else if( LOWORD( wp ) == IDCANCEL )
  633. {
  634. EndDialog( hDlg , 0 );
  635. }
  636. break;
  637. }
  638. return 0;
  639. }
  640. //-------------------------------------------------------------------------------
  641. INT_PTR CALLBACK UserPermCompat( HWND hDlg , UINT msg, WPARAM wp , LPARAM lp )
  642. {
  643. CSettingNode *pNode;
  644. BOOL bVal = FALSE;
  645. HICON hIcon;
  646. static nOldSelection;
  647. switch( msg )
  648. {
  649. case WM_INITDIALOG :
  650. pNode = ( CSettingNode *)lp;
  651. ASSERT( pNode != NULL );
  652. // ok to store null -- it's initializing DWLP_USER area
  653. SetWindowLongPtr( hDlg , DWLP_USER , ( LONG_PTR )pNode );
  654. if( pNode->GetObjectId( ) == USERSECURITY )
  655. {
  656. bVal = ( BOOL )pNode->xx_GetValue( );
  657. }
  658. if( bVal )
  659. {
  660. CheckDlgButton( hDlg , IDC_RADIO_TS4PERM , BST_CHECKED );
  661. }
  662. else
  663. {
  664. CheckDlgButton( hDlg , IDC_RADIO_WIN2KPERM , BST_CHECKED );
  665. }
  666. nOldSelection = bVal;
  667. hIcon = LoadIcon( _Module.GetModuleInstance( ) , MAKEINTRESOURCE( IDI_ICON_WARNING ) );
  668. hIcon = ( HICON )LoadImage( _Module.GetModuleInstance( ) ,
  669. MAKEINTRESOURCE( IDI_ICON_WARNING ) ,
  670. IMAGE_ICON,
  671. 0,
  672. 0,
  673. 0 );
  674. SendMessage( GetDlgItem( hDlg , IDC_USERPERM_ICON ) , STM_SETICON , ( WPARAM )hIcon , 0 );
  675. break;
  676. case WM_COMMAND:
  677. if( LOWORD( wp ) == IDOK )
  678. {
  679. pNode = ( CSettingNode *)GetWindowLongPtr( hDlg , DWLP_USER );
  680. if( pNode == NULL )
  681. {
  682. break;
  683. }
  684. INT nCurrent = IsDlgButtonChecked( hDlg , IDC_RADIO_TS4PERM ) == BST_CHECKED ? 1 : 0;
  685. if( nOldSelection != nCurrent )
  686. {
  687. DWORD dwStatus;
  688. // flag error if not in appsrv mode
  689. // we should never get here -- unless someone mucked around with the registry.
  690. if( !g_bAppSrvMode )
  691. {
  692. xxxErrMessage( hDlg , IDS_REMOTEADMIN_ONLY , IDS_WARN_TITLE , MB_OK | MB_ICONINFORMATION );
  693. CheckRadioButton( hDlg ,
  694. IDC_RADIO_WIN2KPERM ,
  695. IDC_RADIO_TS4PERM,
  696. ( nOldSelection ) ? IDC_RADIO_TS4PERM : IDC_RADIO_WIN2KPERM
  697. );
  698. return 0;
  699. }
  700. else if( FAILED( pNode->SetAttributeValue( ( DWORD )nCurrent , &dwStatus ) ) )
  701. {
  702. SnodeErrorHandler( hDlg , pNode->GetObjectId( ) , dwStatus );
  703. }
  704. }
  705. EndDialog( hDlg , 0 );
  706. }
  707. else if( LOWORD( wp ) == IDCANCEL )
  708. {
  709. EndDialog( hDlg , 0 );
  710. }
  711. break;
  712. }
  713. return 0;
  714. }
  715. //-------------------------------------------------------------------------------
  716. // Each control has a helpid assign to them. Some controls share the same topic
  717. // check for these.
  718. //-------------------------------------------------------------------------------
  719. BOOL OnHelp( HWND hwnd , LPHELPINFO lphi )
  720. {
  721. UNREFERENCED_PARAMETER( hwnd );
  722. TCHAR tchHelpFile[ MAX_PATH ];
  723. //
  724. // For the information to winhelp api
  725. //
  726. if( IsBadReadPtr( lphi , sizeof( HELPINFO ) ) )
  727. {
  728. return FALSE;
  729. }
  730. if( lphi->iCtrlId <= -1 )
  731. {
  732. return FALSE;
  733. }
  734. LoadString( _Module.GetModuleInstance( ) , IDS_HELPFILE , tchHelpFile , SIZE_OF_BUFFER( tchHelpFile ) );
  735. ULONG_PTR rgdw[ 2 ];
  736. rgdw[ 0 ] = ( ULONG_PTR )lphi->iCtrlId;
  737. rgdw[ 1 ] = ( ULONG_PTR )lphi->dwContextId;
  738. WinHelp( ( HWND )lphi->hItemHandle , tchHelpFile , HELP_WM_HELP , ( ULONG_PTR )&rgdw );//lphi->dwContextId );
  739. return TRUE;
  740. }
  741. //-------------------------------------------------------------------------------
  742. // Used when user right clicks the item. "What's this?" will appear
  743. //
  744. // The first parameter must be the control in the dialog
  745. // because this is a helper function the caller must insure this.
  746. //-------------------------------------------------------------------------------
  747. BOOL OnContextMenu( HWND hwnd , POINT& pt )
  748. {
  749. UNREFERENCED_PARAMETER( pt );
  750. TCHAR tchHelpFile[ MAX_PATH ];
  751. //
  752. // Make sure its not a dummy window
  753. //
  754. if( GetDlgCtrlID( hwnd ) <= ( int )-1 )
  755. {
  756. return FALSE;
  757. }
  758. ULONG_PTR rgdw[ 2 ];
  759. rgdw[ 0 ] = GetDlgCtrlID( hwnd );
  760. rgdw[ 1 ] = GetWindowContextHelpId( hwnd );
  761. LoadString( _Module.GetModuleInstance( ) , IDS_HELPFILE , tchHelpFile , SIZE_OF_BUFFER( tchHelpFile ) );
  762. WinHelp( hwnd , tchHelpFile , HELP_CONTEXTMENU , ( ULONG_PTR )&rgdw );
  763. return TRUE;
  764. }