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.

758 lines
31 KiB

  1. // wizards.cpp : Defines the initialization routines for the DLL.
  2. //
  3. #include "stdafx.h"
  4. #include "wizards.h"
  5. #include <Folders.h>
  6. #include "LSAUtils.h"
  7. #include <MigrationMutex.h>
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. IVarSet * pVarSet;
  14. IVarSet * pVarSetUndo;
  15. IVarSet * pVarSetService;
  16. IIManageDB * db;
  17. UINT g_cfDsObjectPicker;
  18. IDsObjectPicker *pDsObjectPicker;
  19. IDataObject *pdo;
  20. IDsObjectPicker *pDsObjectPicker2;
  21. IDataObject *pdo2;
  22. int migration;
  23. CEdit pEdit;
  24. CComModule _Module;
  25. CListCtrl m_listBox;
  26. CListCtrl m_cancelBox;
  27. CListCtrl m_reportingBox;
  28. CListCtrl m_serviceBox;
  29. CComboBox m_rebootBox;
  30. CString sourceNetbios;
  31. CString targetNetbios;
  32. CListCtrl m_trustBox;
  33. CString sourceDNS;
  34. CString targetDNS;
  35. CComboBox sourceDrop;
  36. CComboBox additionalDrop;
  37. CComboBox targetDrop;
  38. StringLoader gString;
  39. TErrorDct err;
  40. TError & errCommon = err;
  41. bool alreadyRefreshed;
  42. DSBROWSEFORCONTAINER DsBrowseForContainerX;
  43. BOOL gbNeedToVerify=FALSE;
  44. _bstr_t yes,no;
  45. CString lastInitializedTo;
  46. bool clearCredentialsName;
  47. CString sourceDC;
  48. CStringList DCList;
  49. CPropertyNameToOIDMap PropIncMap1;
  50. CPropertyNameToOIDMap PropExcMap1;
  51. CPropertyNameToOIDMap PropIncMap2;
  52. CPropertyNameToOIDMap PropExcMap2;
  53. CPropertyNameToOIDMap PropIncMap3;
  54. CPropertyNameToOIDMap PropExcMap3;
  55. CString sType1, sType2, sType3;
  56. bool bChangedMigrationTypes;
  57. bool bChangeOnFly;
  58. CString targetServer;
  59. CString targetServerDns;
  60. HWND s_hParentWindow;
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CWizardsApp
  63. BEGIN_MESSAGE_MAP(CWizardsApp, CWinApp)
  64. //{{AFX_MSG_MAP(CWizardsApp)
  65. // NOTE - the ClassWizard will add and remove mapping macros here.
  66. // DO NOT EDIT what you see in these blocks of generated code!
  67. //}}AFX_MSG_MAP
  68. END_MESSAGE_MAP()
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CWizardsApp construction
  71. CWizardsApp::CWizardsApp()
  72. {
  73. // TODO: add construction code here,
  74. // Place all significant initialization in InitInstance
  75. }
  76. // Forward decleration for this function
  77. HRESULT BrowseForContainer(HWND hWnd,//Handle to window that should own the browse dialog.
  78. LPOLESTR szRootPath, //Root of the browse tree. NULL for entire forest.
  79. LPOLESTR *ppContainerADsPath, //Return the ADsPath of the selected container.
  80. LPOLESTR *ppContainerClass //Return the ldapDisplayName of the container's class.
  81. );
  82. /////////////////////////////////////////////////////////////////////////////
  83. // The one and only CWizardsApp object
  84. CWizardsApp theApp;
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CDeletemeApp initialization
  87. BOOL CWizardsApp::InitInstance()
  88. {
  89. ATLTRACE(_T("{wizards.dll}CWizardsApp::InitInstance() : m_hInstance=0x%08X\n"), m_hInstance);
  90. BOOL bInit = CWinApp::InitInstance();
  91. _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
  92. return bInit;
  93. }
  94. int CWizardsApp::ExitInstance()
  95. {
  96. ATLTRACE(_T("{wizards.dll}CWizardsApp::ExitInstance() : m_hInstance=0x%08X\n"), m_hInstance);
  97. return CWinApp::ExitInstance();
  98. }
  99. //extern "C" __declspec(dllexport) int runWizard(int whichWizard, HWND hParentWindow)
  100. int LocalRunWizard(int whichWizard, HWND hParentWindow)
  101. {
  102. //declare variables
  103. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  104. CMigrationMutex mutexMigration(ADMT_MUTEX);
  105. if (mutexMigration.ObtainOwnership(0) == false)
  106. {
  107. CString strCaption;
  108. strCaption.LoadString(IDS_APP_CAPTION);
  109. CString strMessage;
  110. strMessage.LoadString(IDS_MIGRATION_RUNNING);
  111. CWnd* pWnd = theApp.GetMainWnd();
  112. if (pWnd)
  113. {
  114. pWnd->MessageBox(strMessage, strCaption);
  115. }
  116. else
  117. {
  118. MessageBox(NULL, strMessage, strCaption, MB_OK);
  119. }
  120. GetError(0);
  121. return 0;
  122. }
  123. int result=0;
  124. yes=GET_BSTR(IDS_YES);no=GET_BSTR(IDS_No);
  125. migration =whichWizard;
  126. gbNeedToVerify = CanSkipVerification();
  127. //migration varset
  128. IVarSetPtr pVs(__uuidof(VarSet));
  129. HRESULT hr = pVs->QueryInterface(IID_IVarSet, (void**) &pVarSet);
  130. //undo varset
  131. IVarSetPtr pVs2(__uuidof(VarSet));
  132. hr = pVs2->QueryInterface(IID_IVarSet, (void**) &pVarSetUndo);
  133. IVarSetPtr pVs4(__uuidof(VarSet));
  134. hr = pVs4->QueryInterface(IID_IVarSet, (void**) &pVarSetService);
  135. //database
  136. IIManageDBPtr pDb;
  137. hr = pDb.CreateInstance(__uuidof(IManageDB));
  138. if (FAILED(hr))
  139. {
  140. return 0;
  141. }
  142. hr = pDb->QueryInterface(IID_IIManageDB, (void**) &db);
  143. IUnknown * pUnk;
  144. if (migration!=w_undo)
  145. pVarSet->QueryInterface(IID_IUnknown, (void**) &pUnk);
  146. else
  147. pVarSetUndo->QueryInterface(IID_IUnknown, (void**) &pUnk);
  148. db->GetSettings(&pUnk);
  149. pUnk->Release();
  150. if (migration!= w_undo)
  151. {
  152. IVarSetPtr leaves;
  153. hr=pVarSet->raw_getReference(L"Accounts",&leaves);
  154. if (SUCCEEDED(hr))
  155. leaves->Clear();
  156. hr = pVarSet->raw_getReference(L"Servers",&leaves);
  157. if (SUCCEEDED(hr))
  158. leaves->Clear();
  159. g_cfDsObjectPicker = RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST);
  160. pDsObjectPicker = NULL;
  161. pdo = NULL;
  162. hr = CoCreateInstance(CLSID_DsObjectPicker,NULL,CLSCTX_INPROC_SERVER,IID_IDsObjectPicker,(void **) &pDsObjectPicker);
  163. sourceNetbios = L"";
  164. targetNetbios = L"";
  165. sourceDNS = L"";
  166. targetDNS = L"";
  167. if (FAILED(hr)) return 0;
  168. }
  169. if (migration==w_groupmapping)
  170. {
  171. pDsObjectPicker2 = NULL;
  172. pdo2 = NULL;
  173. hr = CoCreateInstance(CLSID_DsObjectPicker,NULL,CLSCTX_INPROC_SERVER,IID_IDsObjectPicker,(void **) &pDsObjectPicker2);
  174. if (FAILED(hr)) return 0;
  175. }
  176. s_hParentWindow = hParentWindow;
  177. switch (whichWizard)
  178. {
  179. case w_account:
  180. result =doAccount();
  181. break;
  182. case w_group:
  183. result =doGroup();
  184. break;
  185. case w_computer:
  186. result =doComputer();
  187. break;
  188. case w_security:
  189. result =doSecurity();
  190. break;
  191. case w_service:
  192. result =doService();
  193. break;
  194. case w_exchangeDir:
  195. result =doExchangeDir();
  196. break;
  197. case w_exchangeSrv:
  198. result =doExchangeSrv();
  199. break;
  200. case w_reporting:
  201. result =doReporting();
  202. break;
  203. case w_undo:
  204. result =doUndo();
  205. break;
  206. case w_retry:
  207. result =doRetry();
  208. break;
  209. case w_trust:
  210. result =doTrust();
  211. break;
  212. case w_groupmapping:
  213. result =doGroupMapping();
  214. break;
  215. }
  216. s_hParentWindow = 0;
  217. m_listBox.Detach();
  218. m_trustBox.Detach();
  219. m_reportingBox.Detach();
  220. m_cancelBox.Detach();
  221. m_serviceBox.Detach();
  222. sourceDrop.Detach();
  223. additionalDrop.Detach();
  224. targetDrop.Detach();
  225. m_rebootBox.Detach();
  226. if (pDsObjectPicker2)
  227. {
  228. pDsObjectPicker2->Release();
  229. pDsObjectPicker2 = NULL;
  230. }
  231. if (pDsObjectPicker)
  232. {
  233. pDsObjectPicker->Release();
  234. pDsObjectPicker = NULL;
  235. }
  236. if (pVarSet)
  237. {
  238. //
  239. // If a password was stored then the key must be deleted
  240. // to prevent using up available storage for keys.
  241. //
  242. _bstr_t strId = pVarSet->get(GET_BSTR(DCTVS_AccountOptions_SidHistoryCredentials_Password));
  243. if (strId.length() > 0)
  244. {
  245. StorePassword(strId, NULL);
  246. }
  247. pVarSet->Release();
  248. pVarSet = NULL;
  249. }
  250. if (pVarSetService)
  251. {
  252. pVarSetService->Release();
  253. pVarSetService = NULL;
  254. }
  255. if (pVarSetUndo)
  256. {
  257. pVarSetUndo->Release();
  258. pVarSetUndo = NULL;
  259. }
  260. if (db)
  261. {
  262. db->Release();
  263. db = NULL;
  264. }
  265. mutexMigration.ReleaseOwnership();
  266. return result;
  267. }
  268. extern "C" __declspec(dllexport) int runWizard(int whichWizard, HWND hParentWindow)
  269. {
  270. return LocalRunWizard(whichWizard, hParentWindow);
  271. }
  272. void setpdatavars(SHAREDWIZDATA& wizdata,LOGFONT& TitleLogFont)
  273. {
  274. put(DCTVS_Options_MaxThreads, L"20");
  275. put(DCTVS_Options_DispatchLog, GetDispatchLogPath());
  276. put(DCTVS_Options_Logfile, GetMigrationLogPath());
  277. pVarSet->put(L"PlugIn.0",L"None");
  278. put(DCTVS_Options_AppendToLogs,yes);
  279. put(DCTVS_Reports_Generate,no);
  280. wizdata.hTitleFont = CreateFontIndirect(&TitleLogFont);
  281. wizdata.renameSwitch=1;
  282. wizdata.refreshing = false;
  283. wizdata.prefixorsuffix =false;
  284. wizdata.expireSwitch =false;
  285. wizdata.someService =false;
  286. alreadyRefreshed = false;
  287. wizdata.memberSwitch =false;
  288. wizdata.proceed=false;
  289. for (int i =0;i<6;i++)wizdata.sort[i]=true;
  290. wizdata.sourceIsNT4=true;
  291. wizdata.secWithMapFile=false;
  292. bChangedMigrationTypes=false;
  293. bChangeOnFly = false;
  294. //make sure we don't hide the progress dialogs if set by scripting
  295. put(DCTVS_Options_AutoCloseHideDialogs, L"0");
  296. put(DCTVS_Options_DontBeginNewLog, no);//always start a new log
  297. //don't use any specific server yet
  298. put(DCTVS_Options_TargetServerOverride, L"");
  299. put(DCTVS_Options_TargetServerOverrideDns, L"");
  300. switch (migration)
  301. {
  302. case w_account:
  303. {
  304. put(DCTVS_AccountOptions_CopyUsers, yes);
  305. put(DCTVS_AccountOptions_CopyLocalGroups, no);
  306. put(DCTVS_AccountOptions_CopyComputers, no);
  307. put(DCTVS_AccountOptions_CopyContainerContents, no);
  308. put(DCTVS_Security_TranslateContainers, L"");
  309. put(DCTVS_Options_Wizard, L"user");
  310. put(DCTVS_AccountOptions_FixMembership, yes);
  311. //
  312. // If password option has not been previously set then
  313. // set default password option to generate strong passwords.
  314. //
  315. _bstr_t strStrongPasswords = get(DCTVS_AccountOptions_GenerateStrongPasswords);
  316. if (strStrongPasswords.length() == 0)
  317. {
  318. put(DCTVS_AccountOptions_GenerateStrongPasswords, yes);
  319. }
  320. break;
  321. }
  322. case w_group:
  323. {
  324. put(DCTVS_AccountOptions_CopyLocalGroups, yes);
  325. put(DCTVS_AccountOptions_CopyComputers, no);
  326. put(DCTVS_AccountOptions_CopyMemberOf,no);
  327. put(DCTVS_Security_TranslateContainers, L"");
  328. put(DCTVS_Options_Wizard, L"group");
  329. put(DCTVS_AccountOptions_FixMembership, yes);
  330. //
  331. // If password option has not been previously set then
  332. // set default password option to generate strong passwords.
  333. //
  334. _bstr_t strStrongPasswords = get(DCTVS_AccountOptions_GenerateStrongPasswords);
  335. if (strStrongPasswords.length() == 0)
  336. {
  337. put(DCTVS_AccountOptions_GenerateStrongPasswords, yes);
  338. }
  339. break;
  340. }
  341. case w_computer:
  342. put(DCTVS_AccountOptions_CopyUsers, no);
  343. put(DCTVS_AccountOptions_CopyLocalGroups, no);
  344. put(DCTVS_AccountOptions_CopyComputers, yes);
  345. put(DCTVS_Security_TranslateContainers, L"");
  346. put(DCTVS_Options_Wizard, L"computer");
  347. put(DCTVS_AccountOptions_AddSidHistory,L"");
  348. put(DCTVS_AccountOptions_CopyContainerContents, no);
  349. put(DCTVS_AccountOptions_CopyMemberOf, no);
  350. put(DCTVS_AccountOptions_CopyLocalGroups, no);
  351. put(DCTVS_AccountOptions_FixMembership, no);
  352. put(DCTVS_AccountOptions_SecurityInputMOT, yes);
  353. break;
  354. case w_security:
  355. put(DCTVS_AccountOptions_CopyUsers, no);
  356. put(DCTVS_AccountOptions_CopyLocalGroups, no);
  357. put(DCTVS_AccountOptions_CopyComputers, no);
  358. put(DCTVS_Security_TranslateContainers, L"");
  359. put(DCTVS_Options_Wizard, L"security");
  360. pVarSet->put(L"PlugIn.0",L"None");
  361. put(DCTVS_AccountOptions_AddSidHistory,L"");
  362. put(DCTVS_AccountOptions_SecurityInputMOT, yes);
  363. break;
  364. case w_undo:
  365. put(DCTVS_Options_Wizard, L"undo");
  366. put(DCTVS_Security_TranslateContainers, L"");
  367. break;
  368. case w_retry:
  369. put(DCTVS_Options_Wizard, L"retry");
  370. put(DCTVS_Security_TranslateContainers, L"");
  371. break;
  372. case w_reporting:
  373. put(DCTVS_Options_Wizard, L"reporting");
  374. put(DCTVS_GatherInformation, yes);
  375. put(DCTVS_Security_TranslateContainers, L"");
  376. pVarSet->put(L"PlugIn.0",L"None");
  377. break;
  378. case w_service:
  379. {
  380. _bstr_t t= get(DCTVS_AccountOptions_PasswordFile);
  381. CString yo=(WCHAR *) t;
  382. yo.TrimLeft();yo.TrimRight();
  383. if (yo.IsEmpty())
  384. {
  385. CString toinsert;
  386. GetDirectory(toinsert.GetBuffer(1000));
  387. toinsert.ReleaseBuffer();
  388. toinsert+="Logs\\passwords.txt";
  389. put(DCTVS_AccountOptions_PasswordFile,_bstr_t(toinsert));
  390. }
  391. put(DCTVS_Security_TranslateContainers, L"");
  392. put(DCTVS_Options_Wizard, L"service");
  393. break;
  394. }
  395. case w_exchangeDir:
  396. put(DCTVS_AccountOptions_AddSidHistory,L"");
  397. put(DCTVS_Options_Wizard, L"exchangeDir");
  398. put(DCTVS_AccountOptions_SecurityInputMOT, yes);
  399. break;
  400. case w_exchangeSrv:
  401. put(DCTVS_Options_Wizard, L"exchangeDrv");
  402. break;
  403. case w_trust:
  404. put(DCTVS_Security_TranslateContainers, L"");
  405. put(DCTVS_Options_Wizard, L"trust");
  406. break;
  407. case w_groupmapping:
  408. put(DCTVS_Options_Wizard, L"groupmapping");
  409. put(DCTVS_AccountOptions_ReplaceExistingAccounts, yes);
  410. put(DCTVS_AccountOptions_CopyContainerContents, no);
  411. put(DCTVS_AccountOptions_CopyUsers, no);
  412. put(DCTVS_AccountOptions_CopyLocalGroups, yes);
  413. put(DCTVS_AccountOptions_CopyComputers, L"");
  414. put(DCTVS_AccountOptions_ReplaceExistingGroupMembers, no);
  415. put(DCTVS_Security_TranslateContainers, L"");
  416. put(DCTVS_AccountOptions_FixMembership, yes);
  417. break;
  418. }
  419. }
  420. void intropage(HPROPSHEETPAGE ahpsp[],PROPSHEETPAGE& psp,int dialog,
  421. int pagenum,SHAREDWIZDATA& wizdata,int dialogtitle,DLGPROC p)
  422. {
  423. psp.dwSize = sizeof(psp);
  424. psp.dwFlags = PSP_DEFAULT|PSP_HIDEHEADER|PSP_USETITLE |PSP_HASHELP;
  425. psp.hInstance = AfxGetInstanceHandle();
  426. psp.lParam = (LPARAM) &wizdata;
  427. psp.pszTitle = MAKEINTRESOURCE(dialogtitle);
  428. psp.pszTemplate = MAKEINTRESOURCE(dialog);
  429. psp.pfnDlgProc = p;
  430. ahpsp[pagenum] = CreatePropertySheetPage(&psp);
  431. }
  432. void definepage(HPROPSHEETPAGE ahpsp[],PROPSHEETPAGE& psp,int title,int subtitle,int dialog,
  433. int pagenum,int dialogtitle,DLGPROC p)
  434. {
  435. psp.dwFlags = PSP_DEFAULT|PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE|PSP_USETITLE|PSP_HASHELP;
  436. psp.pszTitle = MAKEINTRESOURCE(dialogtitle);
  437. psp.pszHeaderTitle = MAKEINTRESOURCE(title);
  438. psp.pszHeaderSubTitle = MAKEINTRESOURCE(subtitle);
  439. psp.pszTemplate = MAKEINTRESOURCE(dialog);
  440. psp.pfnDlgProc = p;
  441. ahpsp[pagenum] = CreatePropertySheetPage(&psp);
  442. }
  443. void endpage(HPROPSHEETPAGE ahpsp[],PROPSHEETPAGE& psp,int dialog,int pagenum,int dialogtitle,DLGPROC p)
  444. {
  445. psp.dwFlags = PSP_DEFAULT|PSP_HIDEHEADER|PSP_USETITLE|PSP_HASHELP;
  446. psp.pszTitle = MAKEINTRESOURCE(dialogtitle);
  447. psp.pszTemplate = MAKEINTRESOURCE(dialog);
  448. psp.pfnDlgProc = p;
  449. ahpsp[pagenum] = CreatePropertySheetPage(&psp);
  450. }
  451. int defineSheet(HPROPSHEETPAGE ahpsp[],PROPSHEETHEADER& psh,int numpages,SHAREDWIZDATA& wizdata
  452. ,int headerGraphic,int waterGraphic)
  453. {
  454. psh.dwSize = sizeof(psh);
  455. psh.hInstance = AfxGetInstanceHandle();
  456. psh.hwndParent = s_hParentWindow;
  457. psh.phpage = ahpsp;
  458. psh.dwFlags = REAL_PSH_WIZARD97|PSH_WATERMARK|PSH_HEADER;
  459. psh.pszbmWatermark = MAKEINTRESOURCE(waterGraphic);
  460. psh.pszbmHeader = MAKEINTRESOURCE(headerGraphic);
  461. psh.nStartPage = 0;
  462. psh.nPages = numpages;
  463. NONCLIENTMETRICS ncm = {0};
  464. ncm.cbSize = sizeof(ncm);
  465. SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
  466. LOGFONT TitleLogFont = ncm.lfMessageFont;
  467. TitleLogFont.lfWeight = FW_BOLD;
  468. CString s;
  469. s.LoadString(IDS_TEXT);
  470. lstrcpy(TitleLogFont.lfFaceName, s.GetBuffer(1000));
  471. s.ReleaseBuffer();
  472. HDC hdc = GetDC(NULL); //gets the screen DC
  473. INT FontSize = 12;
  474. TitleLogFont.lfHeight = 0 - GetDeviceCaps(hdc, LOGPIXELSY) * FontSize / 72;
  475. setpdatavars(wizdata,TitleLogFont);
  476. ReleaseDC(NULL, hdc);
  477. // int a=PropertySheet(&psh);
  478. int a=(int)PropertySheet(&psh);
  479. DeleteObject(wizdata.hTitleFont);
  480. return a;
  481. }
  482. int doTrust()
  483. {
  484. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  485. HPROPSHEETPAGE ahpsp[4] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  486. PROPSHEETHEADER psh = {0}; //defines the property sheet
  487. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  488. intropage(ahpsp,psp,IDD_INTRO_TRUST,0,wizdata,IDS_TRUST_TITLE,IntroDlgProc);
  489. definepage(ahpsp,psp,IDS_DOMAIN,IDS_TRUST_DOMAIN,IDD_DOMAIN_SELECTION,1,IDS_TRUST_TITLE,IntDomainSelectionProc);
  490. definepage(ahpsp,psp,IDS_TRUST,IDS_TRUST_SUB,IDD_TRUST_INFO,2,IDS_TRUST_TITLE, IntTrustProc);
  491. endpage(ahpsp,psp,IDD_END_TRUST,3,IDS_TRUST_TITLE, EndDlgProc);
  492. int result = defineSheet(ahpsp,psh,4,wizdata,IDB_HEADER_KEY,IDB_WATERMARK_SECURITY);
  493. return result;
  494. }
  495. int doGroupMapping()
  496. {
  497. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  498. HPROPSHEETPAGE ahpsp[9] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  499. PROPSHEETHEADER psh = {0}; //defines the property sheet
  500. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  501. intropage(ahpsp,psp,IDD_INTRO_GROUPMAPPING,0,wizdata,IDS_GROUPMAPPING_TITLE,IntroDlgProc);
  502. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_GROUPMAPPING_TITLE,IntCommitProc);
  503. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_SUB,IDD_DOMAIN_SELECTION,2,IDS_GROUPMAPPING_TITLE,IntDomainSelectionProc);
  504. definepage(ahpsp,psp,IDS_GROUP_MAPPING,IDS_GROUP_MAPPING_SUB,IDD_SELECTION2,3,IDS_GROUPMAPPING_TITLE,IntSelectionProc);
  505. definepage(ahpsp,psp,IDS_TARGET_GROUP,IDS_TARGET_GROUP_SUB,IDD_TARGET_GROUP,4,IDS_GROUPMAPPING_TITLE,IntTargetGroupProc);
  506. definepage(ahpsp,psp,IDS_OU_SELECTION,IDS_OU_SELECTION_SUB,IDD_OU_SELECTION,5,IDS_GROUPMAPPING_TITLE,IntOuSelectionProc);
  507. definepage(ahpsp,psp,IDS_OPTIONS_GROUP,IDS_OPTIONS_GROUPMAPPING_SUB,IDD_OPTIONS_GROUPMAPPING,6,IDS_GROUPMAPPING_TITLE,IntOptionsGroupMappingProc);
  508. definepage(ahpsp,psp,IDS_CREDENTIALS_ACCOUNT,IDS_CREDENTIALS_SUB,IDD_CREDENTIALS,7,IDS_GROUPMAPPING_TITLE,IntCredentialsProc);
  509. endpage(ahpsp,psp,IDD_END_GROUPMAPPING,8,IDS_GROUPMAPPING_TITLE, EndDlgProc);
  510. int result = defineSheet(ahpsp,psh,9,wizdata,IDB_HEADER_KEY,IDB_WATERMARK_GROUP);
  511. return result;
  512. }
  513. int doAccount()
  514. {
  515. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  516. HPROPSHEETPAGE ahpsp[13] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  517. PROPSHEETHEADER psh = {0}; //defines the property sheet
  518. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  519. intropage(ahpsp,psp,IDD_INTRO_ACCOUNT,0,wizdata,IDS_ACCOUNT_TITLE,IntroDlgProc);
  520. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_ACCOUNT_TITLE,IntCommitProc);
  521. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_ACCOUNT,IDD_DOMAIN_SELECTION,2,IDS_ACCOUNT_TITLE,IntDomainSelectionProc);
  522. definepage(ahpsp,psp,IDS_ACCOUNT,IDS_ACCOUNT_SUB,IDD_SELECTION3,3,IDS_ACCOUNT_TITLE,IntSelectionProc);
  523. definepage(ahpsp,psp,IDS_OU_SELECTION,IDS_OU_SELECTION_SUB,IDD_OU_SELECTION,4,IDS_ACCOUNT_TITLE,IntOuSelectionProc);
  524. definepage(ahpsp,psp,IDS_PASSWORD,IDS_PASSWORD_SUB,IDD_PASSWORD,5,IDS_ACCOUNT_TITLE,IntPasswordProc);
  525. definepage(ahpsp,psp,IDS_DISABLE,IDS_DISABLE_SUB,IDD_DISABLE,6,IDS_ACCOUNT_TITLE,IntDisableProc);
  526. definepage(ahpsp,psp,IDS_CREDENTIALS_ACCOUNT,IDS_CREDENTIALS_SUB,IDD_CREDENTIALS,7,IDS_ACCOUNT_TITLE,IntCredentialsProc);
  527. definepage(ahpsp,psp,IDS_OPTIONS,IDS_OPTIONS_SUB,IDD_OPTIONS,8,IDS_ACCOUNT_TITLE,IntOptionsProc);
  528. definepage(ahpsp,psp,IDS_PROPEX,IDS_PROPEX_SUB,IDD_PROP_EXCLUSION,9,IDS_ACCOUNT_TITLE,IntPropExclusionProc);
  529. definepage(ahpsp,psp,IDS_RENAMING,IDS_RENAMING_SUB1,IDD_RENAMING,10,IDS_ACCOUNT_TITLE,IntRenameProc);
  530. definepage(ahpsp,psp,IDS_SA_INFO,IDS_SA_INFO_SUB,IDD_SA_INFO,11,IDS_ACCOUNT_TITLE,IntServiceInfoProc);
  531. endpage(ahpsp,psp,IDD_END_ACCOUNT,12,IDS_ACCOUNT_TITLE,EndDlgProc);
  532. int result = defineSheet(ahpsp,psh,13,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_USER);
  533. return result;
  534. }
  535. int doGroup()
  536. {
  537. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  538. HPROPSHEETPAGE ahpsp[13] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  539. PROPSHEETHEADER psh = {0}; //defines the property sheet
  540. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  541. intropage(ahpsp,psp,IDD_INTRO_GROUP,0,wizdata,IDS_GROUP_TITLE,IntroDlgProc);
  542. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_GROUP_TITLE,IntCommitProc);
  543. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_GROUP,IDD_DOMAIN_SELECTION,2,IDS_GROUP_TITLE,IntDomainSelectionProc);
  544. definepage(ahpsp,psp,IDS_GROUP,IDS_GROUP_SUB,IDD_SELECTION2,3,IDS_GROUP_TITLE, IntSelectionProc);
  545. definepage(ahpsp,psp,IDS_OU_SELECTION,IDS_OU_SELECTION_SUB,IDD_OU_SELECTION,4,IDS_GROUP_TITLE,IntOuSelectionProc);
  546. definepage(ahpsp,psp,IDS_OPTIONS_GROUP,IDS_OPTIONS_GROUP_SUB,IDD_OPTIONS_GROUP,5,IDS_GROUP_TITLE,IntGroupOptionsProc);
  547. definepage(ahpsp,psp,IDS_PROPEX,IDS_PROPEX_SUB,IDD_PROP_EXCLUSION,6,IDS_GROUP_TITLE,IntPropExclusionProc);
  548. definepage(ahpsp,psp,IDS_CREDENTIALS_ACCOUNT,IDS_CREDENTIALS_SUB,IDD_CREDENTIALS,7,IDS_GROUP_TITLE,IntCredentialsProc);
  549. definepage(ahpsp,psp,IDS_RENAMING,IDS_RENAMING_SUB2,IDD_RENAMING,8,IDS_GROUP_TITLE, IntRenameProc);
  550. definepage(ahpsp,psp,IDS_PASSWORD_GRP,IDS_PASSWORD_SUB_GRP,IDD_PASSWORD,9,IDS_GROUP_TITLE,IntPasswordProc);
  551. definepage(ahpsp,psp,IDS_DISABLE_GRP,IDS_DISABLE_SUB_GRP,IDD_DISABLE,10,IDS_GROUP_TITLE,IntDisableProc);
  552. // definepage(ahpsp,psp,IDS_OPTIONS_FROM_USER,IDS_OPTIONS_FROM_USER_SUB,IDD_OPTIONS_FROM_USER,10,IDS_GROUP_TITLE, IntOptionsFromUserProc);
  553. definepage(ahpsp,psp,IDS_SA_INFO,IDS_SA_INFO_SUB,IDD_SA_INFO,11,IDS_GROUP_TITLE,IntServiceInfoProc);
  554. endpage(ahpsp,psp,IDD_END_GROUP,12,IDS_GROUP_TITLE, EndDlgProc);
  555. int result = defineSheet(ahpsp,psh,13,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_GROUP);
  556. return result;
  557. }
  558. int doComputer()
  559. {
  560. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  561. HPROPSHEETPAGE ahpsp[11] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  562. PROPSHEETHEADER psh = {0}; //defines the property sheet
  563. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  564. intropage(ahpsp,psp,IDD_INTRO_COMPUTER,0,wizdata,IDS_COMPUTER_TITLE,IntroDlgProc);
  565. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_COMPUTER_TITLE,IntCommitProc);
  566. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_COMPUTERS,IDD_DOMAIN_SELECTION,2,IDS_COMPUTER_TITLE, IntDomainSelectionProc);
  567. definepage(ahpsp,psp,IDS_COMPUTER,IDS_COMPUTER_SUB,IDD_SELECTION1,3,IDS_COMPUTER_TITLE, IntSelectionProc);
  568. definepage(ahpsp,psp,IDS_OU_SELECTION,IDS_OU_SELECTION_SUB,IDD_OU_SELECTION,4,IDS_COMPUTER_TITLE, IntOuSelectionProc);
  569. definepage(ahpsp,psp,IDS_TRANSLATION,IDS_TRANSLATION_SUB,IDD_TRANSLATION,5,IDS_COMPUTER_TITLE, IntTranslationProc);
  570. definepage(ahpsp,psp,IDS_SECURITY_OPTIONS,IDS_TRANSLATION_MODE_SUB,IDD_TRANSLATION_MODE,6,IDS_COMPUTER_TITLE, IntTranslationModeProc);
  571. // definepage(ahpsp,psp,IDS_CREDENTIALS2,IDS_CREDENTIALS_SUB2,IDD_CREDENTIALS2,7,IDS_COMPUTER_TITLE, IntCredentials2Proc);
  572. definepage(ahpsp,psp,IDS_COMPUTER_OPTIONS,IDS_REBOOT_SUB,IDD_REBOOT,7,IDS_COMPUTER_TITLE, IntRebootProc);
  573. definepage(ahpsp,psp,IDS_PROPEX,IDS_PROPEX_SUB,IDD_PROP_EXCLUSION,8,IDS_COMPUTER_TITLE,IntPropExclusionProc);
  574. definepage(ahpsp,psp,IDS_RENAMING,IDS_RENAMING_SUB3,IDD_RENAMING,9,IDS_COMPUTER_TITLE, IntRenameProc);
  575. endpage(ahpsp,psp,IDD_END_COMPUTER,10,IDS_COMPUTER_TITLE, EndDlgProc);
  576. int result = defineSheet(ahpsp,psh,11,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_COMPUTER);
  577. return result;
  578. }
  579. int doSecurity()
  580. {
  581. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  582. HPROPSHEETPAGE ahpsp[8] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  583. PROPSHEETHEADER psh = {0}; //defines the property sheet
  584. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  585. intropage(ahpsp,psp,IDD_INTRO_SECURITY,0,wizdata,IDS_SECURITY_TITLE,IntroDlgProc);
  586. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_SECURITY_TITLE,IntCommitProc);
  587. definepage(ahpsp,psp,IDS_SECURITY_OPTIONS,IDS_TRANSLATION_MODE_SUB,IDD_TRANSLATION_SRC,2,IDS_SECURITY_TITLE,IntTranslationInputProc);
  588. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_SECURITY,IDD_DOMAIN_SELECTION,3,IDS_SECURITY_TITLE ,IntDomainSelectionProc);
  589. definepage(ahpsp,psp,IDS_SECURITY,IDS_SECURITY_SUB,IDD_SELECTION4,4,IDS_SECURITY_TITLE,IntSelectionSecurityProc);
  590. definepage(ahpsp,psp,IDS_TRANSLATION,IDS_TRANSLATION_SUB,IDD_TRANSLATION,5,IDS_SECURITY_TITLE, IntTranslationProc);
  591. definepage(ahpsp,psp,IDS_SECURITY_OPTIONS,IDS_TRANSLATION_MODE_SUB,IDD_TRANSLATION_MODE,6,IDS_SECURITY_TITLE,IntTranslationModeProc);
  592. // definepage(ahpsp,psp,IDS_CREDENTIALS2,IDS_CREDENTIALS_SUB2,IDD_CREDENTIALS2,7,IDS_SECURITY_TITLE, IntCredentials2Proc);
  593. endpage(ahpsp,psp,IDD_END_SECURITY,7,IDS_SECURITY_TITLE, EndDlgProc);
  594. int result = defineSheet(ahpsp,psh,8,wizdata,IDB_HEADER_KEY,IDB_WATERMARK_SECURITY);
  595. return result;
  596. }
  597. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  598. int doExchangeDir()
  599. {
  600. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  601. HPROPSHEETPAGE ahpsp[7] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  602. PROPSHEETHEADER psh = {0}; //defines the property sheet
  603. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  604. intropage(ahpsp,psp,IDD_INTRO_EXCHANGE_DIR,0,wizdata,IDS_EXCHANGE_DIR_TITLE,IntroDlgProc);
  605. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_EXCHANGE_DIR_TITLE,IntCommitProc);
  606. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_DIRECTORY,IDD_DOMAIN_SELECTION,2,IDS_EXCHANGE_DIR_TITLE, IntDomainSelectionProc);
  607. definepage(ahpsp,psp,IDS_SECURITY_OPTIONS,IDS_TRANSLATION_MODE_SUB,IDD_TRANSLATION_MODE,3,IDS_EXCHANGE_DIR_TITLE, IntTranslationModeProc);
  608. definepage(ahpsp,psp,IDS_EXCHANGE_SELECTION,IDS_EXCHANGE_SELECTION_SUB,IDD_EXCHANGE_SELECTION,4,IDS_EXCHANGE_DIR_TITLE,IntExchangeSelectionProc);
  609. definepage(ahpsp,psp,IDS_CREDENTIALS_EXCHANGE,IDS_CREDENTIALS_EXCHANGE_SUB,IDD_CREDENTIALS,5,IDS_EXCHANGE_DIR_TITLE,IntCredentialsProc);
  610. endpage(ahpsp,psp,IDD_END_EXCHANGE_DIR,6,IDS_EXCHANGE_DIR_TITLE, EndDlgProc);
  611. int result = defineSheet(ahpsp,psh,7,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_EXCHANGE);
  612. return result;
  613. }
  614. int doExchangeSrv()
  615. {
  616. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  617. HPROPSHEETPAGE ahpsp[5] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  618. PROPSHEETHEADER psh = {0}; //defines the property sheet
  619. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  620. intropage(ahpsp,psp,IDD_INTRO_EXCHANGE_SRV,0,wizdata,IDS_EXCHANGE_SRV_TITLE,IntroDlgProc);
  621. definepage(ahpsp,psp,IDS_COMMIT,IDS_COMMIT_SUB,IDD_COMMIT,1,IDS_EXCHANGE_SRV_TITLE,IntCommitProc);
  622. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_SUB,IDD_DOMAIN_SELECTION,2,IDS_EXCHANGE_SRV_TITLE, IntDomainSelectionProc);
  623. definepage(ahpsp,psp,IDS_EXCHANGE_SELECTION,IDS_EXCHANGE_SELECTION_SUB,IDD_EXCHANGE_SELECTION,3,IDS_EXCHANGE_SRV_TITLE,IntExchangeSelectionProc);
  624. endpage(ahpsp,psp,IDD_END_EXCHANGE_SRV,4,IDS_EXCHANGE_SRV_TITLE, EndDlgProc);
  625. int result = defineSheet(ahpsp,psh,5,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_EXCHANGE);
  626. return result;
  627. }
  628. int doUndo()
  629. {
  630. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  631. HPROPSHEETPAGE ahpsp[4] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  632. PROPSHEETHEADER psh = {0}; //defines the property sheet
  633. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  634. intropage(ahpsp,psp,IDD_INTRO_UNDO,0,wizdata,IDS_UNDO_TITLE,IntroDlgProc);
  635. definepage(ahpsp,psp,IDS_UNDO,IDS_UNDO_SUB,IDD_UNDO,1,IDS_UNDO_TITLE,IntUndoProc);
  636. definepage(ahpsp,psp,IDS_CREDENTIALS_ACCOUNT,IDS_CREDENTIALS_SUB,IDD_CREDENTIALS,2,IDS_UNDO_TITLE,IntCredentialsProc);
  637. // definepage(ahpsp,psp,IDS_CREDENTIALS2,IDS_CREDENTIALS_SUB2,IDD_CREDENTIALS2,3,IDS_UNDO_TITLE, IntCredentials2Proc);
  638. endpage(ahpsp,psp,IDD_END_UNDO,3,IDS_UNDO_TITLE, EndDlgProc);
  639. int result = defineSheet(ahpsp,psh,4,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_USER);
  640. return result;
  641. }
  642. int doRetry()
  643. {
  644. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  645. HPROPSHEETPAGE ahpsp[3] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  646. PROPSHEETHEADER psh = {0}; //defines the property sheet
  647. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  648. intropage(ahpsp,psp,IDD_INTRO_RETRY,0,wizdata,IDS_RETRY_TITLE,IntroDlgProc);
  649. definepage(ahpsp,psp,IDS_RETRY,IDS_RETRY_SUB,IDD_RETRY,1,IDS_RETRY_TITLE,IntRetryProc);
  650. // definepage(ahpsp,psp,IDS_CREDENTIALS2,IDS_CREDENTIALS_SUB2,IDD_CREDENTIALS2,2,IDS_RETRY_TITLE,IntCredentials2Proc);
  651. endpage(ahpsp,psp,IDD_END_RETRY,2,IDS_RETRY_TITLE, EndDlgProc);
  652. int result = defineSheet(ahpsp,psh,3,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_USER);
  653. return result;
  654. }
  655. int doReporting()
  656. {
  657. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  658. HPROPSHEETPAGE ahpsp[6] = {0}; //an array to hold the page's HPROPSHEETPAGE handles
  659. PROPSHEETHEADER psh = {0}; //defines the property sheet
  660. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  661. intropage(ahpsp,psp,IDD_INTRO_REPORTING,0,wizdata,IDS_REPORTING_TITLE,IntroDlgProc);
  662. definepage(ahpsp,psp,IDS_DOMAIN,IDS_DOMAIN_REPORTING_SUB,IDD_DOMAIN_SELECTION,1,IDS_REPORTING_TITLE,IntDomainSelectionProc);
  663. definepage(ahpsp,psp,IDS_HTML_LOCATION,IDS_HTML_LOCATION_SUB,IDD_HTML_LOCATION,2,IDS_REPORTING_TITLE,IntHTMLLocationProc);
  664. definepage(ahpsp,psp,IDS_OPTIONS_REPORTING,IDS_OPTIONS_REPORTING_SUB,IDD_OPTIONS_REPORTING,3,IDS_REPORTING_TITLE,IntOptionsReportingProc);
  665. // definepage(ahpsp,psp,IDS_CREDENTIALS3,IDS_CREDENTIALS_SUB3,IDD_CREDENTIALS2,4,IDS_REPORTING_TITLE, IntCredentials2Proc);
  666. definepage(ahpsp,psp,IDS_REPORTING,IDS_REPORTING_SUB,IDD_SELECTION1,4,IDS_REPORTING_TITLE,IntSelectionProc);
  667. endpage(ahpsp,psp,IDD_END_REPORTING,5,IDS_REPORTING_TITLE, EndDlgProc);
  668. int result = defineSheet(ahpsp,psh,6,wizdata,IDB_HEADER_BOOK,IDB_WATERMARK_REPORTING);
  669. return result;
  670. }
  671. int doService()
  672. {
  673. PROPSHEETPAGE psp = {0}; //defines the property sheet pages
  674. HPROPSHEETPAGE ahpsp[6]= {0}; //an array to hold the page's HPROPSHEETPAGE handles
  675. PROPSHEETHEADER psh = {0}; //defines the property sheet
  676. SHAREDWIZDATA wizdata = {0}; //the shared data structure
  677. intropage(ahpsp,psp,IDD_INTRO_SERVICE,0,wizdata,IDS_SERVICE_TITLE,IntroDlgProc);
  678. definepage(ahpsp,psp,IDS_DOMAIN,IDS_SERVICE_DOMAIN,IDD_DOMAIN_SELECTION,1,IDS_SERVICE_TITLE,IntDomainSelectionProc);
  679. definepage(ahpsp,psp,IDS_SA_REFRESH,IDS_SA_REFRESH_SUB,IDD_SA_REFRESH,2,IDS_SERVICE_TITLE,IntServiceRefreshProc);
  680. definepage(ahpsp,psp,IDS_SERVICE,IDS_SERVICE_SUB,IDD_SELECTION1,3,IDS_SERVICE_TITLE,IntSelectionProc);
  681. // definepage(ahpsp,psp,IDS_CREDENTIALS2,IDS_SERVICE_CREDENTIALS,IDD_CREDENTIALS2,4,IDS_SERVICE_TITLE, IntCredentials2Proc);
  682. definepage(ahpsp,psp,IDS_SA_INFO,IDS_SA_INFO_SUB,IDD_SA_INFO_BUTTON,4,IDS_SERVICE_TITLE,IntServiceInfoButtonProc);
  683. endpage(ahpsp,psp,IDD_END_SERVICE,5,IDS_SERVICE_TITLE,EndDlgProc);
  684. int result = defineSheet(ahpsp,psh,6,wizdata,IDB_HEADER_ARROW,IDB_WATERMARK_SERVICE_ACCOUNT);
  685. return result;
  686. }