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.

630 lines
18 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1998 - 1999
  6. //
  7. // File: delegwiz.h
  8. //
  9. //--------------------------------------------------------------------------
  10. #ifndef _DELEGWIZ_H
  11. #define _DELEGWIZ_H
  12. #include "wizbase.h"
  13. #include "deltempl.h"
  14. ////////////////////////////////////////////////////////////////////////////
  15. // FWD DECLARATIONS
  16. // REVIEW_MARCOC: nuke when sure
  17. #define _SKIP_NAME_PAGE
  18. ////////////////////////////////////////////////////////////////////////////
  19. // CDelegWiz_StartPage
  20. class CDelegWiz_StartPage : public CWizPageBase<CDelegWiz_StartPage>
  21. {
  22. public:
  23. CDelegWiz_StartPage(CWizardBase* pWiz) : CWizPageBase<CDelegWiz_StartPage>(pWiz)
  24. {
  25. #ifdef _SKIP_NAME_PAGE
  26. m_bBindOK = FALSE;
  27. #endif
  28. }
  29. enum { IDD = IDD_DELEGWIZ_START };
  30. private:
  31. BEGIN_MSG_MAP(CDelegWiz_StartPage)
  32. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  33. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_StartPage>)
  34. END_MSG_MAP()
  35. // message handlers
  36. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  37. LPARAM lParam, BOOL& bHandled);
  38. #ifdef _SKIP_NAME_PAGE
  39. BOOL m_bBindOK;
  40. #endif
  41. public:
  42. // standard wizard message handlers
  43. BOOL OnSetActive();
  44. LRESULT OnWizardBack() { return -1; } // first page
  45. #ifdef _SKIP_NAME_PAGE
  46. LRESULT OnWizardNext();
  47. #endif
  48. };
  49. ////////////////////////////////////////////////////////////////////////////
  50. // CDelegWiz_NamePage
  51. class CDelegWiz_NamePage : public CWizPageBase<CDelegWiz_NamePage>
  52. {
  53. public:
  54. CDelegWiz_NamePage(CWizardBase* pWiz) : CWizPageBase<CDelegWiz_NamePage>(pWiz)
  55. {
  56. m_hwndNameEdit = NULL;
  57. }
  58. enum { IDD = IDD_DELEGWIZ_NAME };
  59. private:
  60. BEGIN_MSG_MAP(CDelegWiz_NamePage)
  61. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  62. COMMAND_HANDLER(IDC_BROWSE_BUTTON, BN_CLICKED, OnBrowse)
  63. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_NamePage>)
  64. END_MSG_MAP()
  65. // message handlers
  66. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  67. LPARAM lParam, BOOL& bHandled);
  68. LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  69. public:
  70. // standard wizard message handlers
  71. BOOL OnSetActive();
  72. LRESULT OnWizardNext();
  73. private:
  74. HWND m_hwndNameEdit;
  75. };
  76. ///////////////////////////////////////////////////////////////////////
  77. // CImageListHelper
  78. class CImageListEntry
  79. {
  80. public:
  81. CImageListEntry(LPCWSTR lpszClass, int nIndex)
  82. {
  83. m_szClass = lpszClass;
  84. m_nIndex = nIndex;
  85. }
  86. bool operator<(CImageListEntry& x) { return false;}
  87. CWString m_szClass;
  88. int m_nIndex;
  89. };
  90. class CImageListHelper
  91. {
  92. public:
  93. CImageListHelper()
  94. {
  95. m_hImageList = NULL;
  96. }
  97. HIMAGELIST GetHandle()
  98. {
  99. ASSERT(m_hImageList != NULL);
  100. return m_hImageList;
  101. }
  102. BOOL Create(HWND hWndListView)
  103. {
  104. ASSERT(m_hImageList == NULL);
  105. m_hImageList = ImageList_Create(16, 16, ILC_COLOR, 0, 2);
  106. return m_hImageList != NULL;
  107. }
  108. int GetIconIndex(LPCWSTR lpszClass)
  109. {
  110. int nCount = m_imageCacheArr.GetCount();
  111. for (int k=0; k<nCount; k++)
  112. {
  113. if (_wcsicmp(m_imageCacheArr[k]->m_szClass, lpszClass) == 0)
  114. return m_imageCacheArr[k]->m_nIndex; // got cached
  115. }
  116. return -1; // not found
  117. }
  118. int AddIcon(LPCWSTR lpszClass, HICON hIcon)
  119. {
  120. ASSERT(m_hImageList != NULL);
  121. int nCount = m_imageCacheArr.GetCount();
  122. // add to the image list
  123. int nRes = ImageList_AddIcon(m_hImageList, hIcon);
  124. if (nRes != nCount)
  125. return nRes;
  126. // add to the cache
  127. CImageListEntry* pEntry = new CImageListEntry(lpszClass, nCount);
  128. m_imageCacheArr.Add(pEntry);
  129. return nCount; // new index
  130. }
  131. private:
  132. CGrowableArr<CImageListEntry> m_imageCacheArr;
  133. HIMAGELIST m_hImageList;
  134. };
  135. ///////////////////////////////////////////////////////////////////////
  136. // CPrincipalListViewHelper
  137. class CPrincipalListViewHelper
  138. {
  139. public:
  140. CPrincipalListViewHelper()
  141. {
  142. m_defaultColWidth = 0;
  143. m_hWnd = NULL;
  144. }
  145. BOOL Initialize(UINT nID, HWND hParent);
  146. int InsertItem(int iItem, CPrincipal* pPrincipal);
  147. BOOL SelectItem(int iItem);
  148. CPrincipal* GetItemData(int iItem);
  149. int GetItemCount()
  150. {
  151. return ListView_GetItemCount(m_hWnd);
  152. }
  153. int GetSelCount()
  154. {
  155. return ListView_GetSelectedCount(m_hWnd);
  156. }
  157. BOOL DeleteAllItems()
  158. {
  159. return ListView_DeleteAllItems(m_hWnd);
  160. }
  161. void SetImageList()
  162. {
  163. ListView_SetImageList(m_hWnd, m_imageList.GetHandle(), LVSIL_SMALL);
  164. }
  165. BOOL SetWidth(int cx)
  166. {
  167. return ListView_SetColumnWidth(m_hWnd, 0, cx);
  168. }
  169. int GetWidth()
  170. {
  171. return ListView_GetColumnWidth(m_hWnd, 0);
  172. }
  173. void DeleteSelectedItems(CGrowableArr<CPrincipal>* pDeletedArr);
  174. void UpdateWidth(int cxNew);
  175. private:
  176. HWND m_hWnd;
  177. int m_defaultColWidth;
  178. CImageListHelper m_imageList;
  179. };
  180. ////////////////////////////////////////////////////////////////////////////
  181. // CDelegWiz_PrincipalSelectionPage
  182. class CDelegWiz_PrincipalSelectionPage : public CWizPageBase<CDelegWiz_PrincipalSelectionPage>
  183. {
  184. public:
  185. CDelegWiz_PrincipalSelectionPage(CWizardBase* pWiz) :
  186. CWizPageBase<CDelegWiz_PrincipalSelectionPage>(pWiz)
  187. {
  188. m_hwndRemoveButton = NULL;
  189. }
  190. enum { IDD = IDD_DELEGWIZ_PRINCIPALS_SEL };
  191. private:
  192. BEGIN_MSG_MAP(CDelegWiz_PrincipalSelectionPage)
  193. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  194. COMMAND_HANDLER(IDC_ADD_BUTTON, BN_CLICKED, OnAdd)
  195. COMMAND_HANDLER(IDC_REMOVE_BUTTON, BN_CLICKED, OnRemove)
  196. NOTIFY_HANDLER(IDC_SELECTED_PRINCIPALS_LIST, LVN_ITEMCHANGED, OnListViewSelChange)
  197. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_PrincipalSelectionPage>)
  198. END_MSG_MAP()
  199. // message handlers
  200. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  201. LPARAM lParam, BOOL& bHandled);
  202. LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  203. LRESULT OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  204. LRESULT OnListViewSelChange(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  205. public:
  206. // standard wizard message handlers
  207. BOOL OnSetActive();
  208. LRESULT OnWizardNext();
  209. private:
  210. CPrincipalListViewHelper m_principalListView;
  211. HWND m_hwndRemoveButton;
  212. void SyncButtons();
  213. };
  214. ////////////////////////////////////////////////////////////////////////////
  215. // CDelegWiz_DelegationTemplateSelectionPage
  216. class CDelegWiz_DelegationTemplateSelectionPage : public CWizPageBase<CDelegWiz_DelegationTemplateSelectionPage>
  217. {
  218. public:
  219. CDelegWiz_DelegationTemplateSelectionPage(CWizardBase* pWiz) :
  220. CWizPageBase<CDelegWiz_DelegationTemplateSelectionPage>(pWiz)
  221. {
  222. m_hwndDelegateTemplateRadio = NULL;
  223. m_hwndDelegateCustomRadio = NULL;
  224. }
  225. ~CDelegWiz_DelegationTemplateSelectionPage() {}
  226. enum { IDD = IDD_DELEGWIZ_DELEG_TEMPLATE_SEL };
  227. BEGIN_MSG_MAP(CDelegWiz_DelegationTemplateSelectionPage)
  228. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  229. COMMAND_HANDLER(IDC_DELEGATE_TEMPLATE_RADIO, BN_CLICKED, OnDelegateTypeRadioChange)
  230. COMMAND_HANDLER(IDC_DELEGATE_CUSTOM_RADIO, BN_CLICKED, OnDelegateTypeRadioChange)
  231. NOTIFY_HANDLER(IDC_DELEGATE_TEMPLATE_LIST, LVN_ITEMCHANGED, OnListViewItemChanged)
  232. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_DelegationTemplateSelectionPage>)
  233. END_MSG_MAP()
  234. // message handlers
  235. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  236. LPARAM lParam, BOOL& bHandled);
  237. LRESULT OnDelegateTypeRadioChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  238. LRESULT OnListViewItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  239. public:
  240. // standard wizard message handlers
  241. BOOL OnSetActive();
  242. LRESULT OnWizardNext();
  243. private:
  244. CCheckListViewHelper m_delegationTemplatesListView;
  245. HWND m_hwndDelegateTemplateRadio;
  246. HWND m_hwndDelegateCustomRadio;
  247. void SyncControlsHelper(BOOL bDelegateCustom);
  248. static void SetRadioControlText(HWND hwndCtrl, LPCWSTR lpszFmtText, LPCTSTR lpszText);
  249. };
  250. ////////////////////////////////////////////////////////////////////////////
  251. // CDelegWiz_ObjectTypeSelectionPage
  252. class CDelegWiz_ObjectTypeSelectionPage : public CWizPageBase<CDelegWiz_ObjectTypeSelectionPage>
  253. {
  254. public:
  255. CDelegWiz_ObjectTypeSelectionPage(CWizardBase* pWiz) :
  256. CWizPageBase<CDelegWiz_ObjectTypeSelectionPage>(pWiz)
  257. {
  258. m_hwndDelegateAllRadio = NULL;
  259. m_hwndDelegateFollowingRadio = NULL;
  260. }
  261. ~CDelegWiz_ObjectTypeSelectionPage() {}
  262. enum { IDD = IDD_DELEGWIZ_OBJ_TYPE_SEL };
  263. BEGIN_MSG_MAP(CDelegWiz_ObjectTypeSelectionPage)
  264. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  265. COMMAND_HANDLER(IDC_DELEGATE_ALL_RADIO, BN_CLICKED, OnObjectRadioChange)
  266. COMMAND_HANDLER(IDC_DELEGATE_FOLLOWING_RADIO, BN_CLICKED, OnObjectRadioChange)
  267. COMMAND_HANDLER(IDC_DELEGATE_CREATE_CHILD, BN_CLICKED, OnCreateDelCheckBoxChanage)
  268. COMMAND_HANDLER(IDC_DELEGATE_DELETE_CHILD, BN_CLICKED, OnCreateDelCheckBoxChanage)
  269. NOTIFY_HANDLER(IDC_OBJ_TYPE_LIST, LVN_ITEMCHANGED, OnListViewItemChanged)
  270. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_ObjectTypeSelectionPage>)
  271. END_MSG_MAP()
  272. // message handlers
  273. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  274. LPARAM lParam, BOOL& bHandled);
  275. LRESULT OnObjectRadioChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  276. LRESULT OnListViewItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  277. LRESULT OnCreateDelCheckBoxChanage(WORD wNotifyCode, WORD wID,
  278. HWND hWndCtl, BOOL& bHandled);
  279. public:
  280. // standard wizard message handlers
  281. BOOL OnSetActive();
  282. LRESULT OnWizardNext();
  283. private:
  284. CCheckListViewHelper m_objectTypeListView;
  285. HWND m_hwndDelegateAllRadio;
  286. HWND m_hwndDelegateFollowingRadio;
  287. HWND m_hwndDelegateCreateChild;
  288. HWND m_hwndDelegateDeleteChild;
  289. void SyncControlsHelper(BOOL bDelegateAll);
  290. static void SetRadioControlText(HWND hwndCtrl, LPCWSTR lpszFmtText, LPCTSTR lpszText);
  291. };
  292. ////////////////////////////////////////////////////////////////////////////
  293. // CDelegWiz_DelegatedRightsPage
  294. class CDelegWiz_DelegatedRightsPage : public CWizPageBase<CDelegWiz_DelegatedRightsPage>
  295. {
  296. public:
  297. CDelegWiz_DelegatedRightsPage(CWizardBase* pWiz) : CWizPageBase<CDelegWiz_DelegatedRightsPage>(pWiz)
  298. {
  299. m_hwndGeneralRigthsCheck = NULL;
  300. m_hwndPropertyRightsCheck = NULL;
  301. m_hwndSubobjectRightsCheck = NULL;
  302. m_bUIUpdateInProgress = FALSE;
  303. }
  304. enum { IDD = IDD_DELEGWIZ_DELEG_RIGHTS };
  305. BEGIN_MSG_MAP(CDelegWiz_DelegatedRightsPage)
  306. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  307. COMMAND_HANDLER(IDC_SHOW_GENERAL_CHECK, BN_CLICKED, OnFilterChange)
  308. COMMAND_HANDLER(IDC_SHOW_PROPERTY_CHECK, BN_CLICKED, OnFilterChange)
  309. COMMAND_HANDLER(IDC_SHOW_SUBOBJ_CHECK, BN_CLICKED, OnFilterChange)
  310. NOTIFY_HANDLER(IDC_DELEG_RIGHTS_LIST, LVN_ITEMCHANGED, OnListViewItemChanged)
  311. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_DelegatedRightsPage>)
  312. END_MSG_MAP()
  313. // message handlers
  314. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  315. LRESULT OnDelegateRadioChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  316. LRESULT OnFilterChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  317. LRESULT OnListViewItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  318. public:
  319. // standard wizard message handlers
  320. BOOL OnSetActive();
  321. LRESULT OnWizardNext();
  322. private:
  323. CCheckListViewHelper m_delegatedRigthsListView;
  324. HWND m_hwndGeneralRigthsCheck;
  325. HWND m_hwndPropertyRightsCheck;
  326. HWND m_hwndSubobjectRightsCheck;
  327. BOOL m_bUIUpdateInProgress;
  328. void ResetCheckList();
  329. ULONG GetFilterOptions();
  330. void SetFilterOptions(ULONG nFilterOptions);
  331. };
  332. ////////////////////////////////////////////////////////////////////////////
  333. // CDelegWiz_FinishPage
  334. class CDelegWiz_FinishPage : public CWizPageBase<CDelegWiz_FinishPage>
  335. {
  336. public:
  337. CDelegWiz_FinishPage(CWizardBase* pWiz) :
  338. CWizPageBase<CDelegWiz_FinishPage>(pWiz)
  339. {
  340. m_bNeedSetFocus = FALSE;
  341. m_bCustom = TRUE;
  342. }
  343. enum { IDD = IDD_DELEGWIZ_FINISH };
  344. BEGIN_MSG_MAP(CDelegWiz_FinishPage)
  345. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  346. COMMAND_HANDLER(IDC_EDIT_SUMMARY, EN_SETFOCUS, OnSetFocusSummaryEdit)
  347. CHAIN_MSG_MAP(CWizPageBase<CDelegWiz_FinishPage>)
  348. END_MSG_MAP()
  349. // message handlers
  350. BOOL CALLBACK OnInitDialog(UINT uMsg, WPARAM wParam,
  351. LPARAM lParam, BOOL& bHandled);
  352. LRESULT OnSetFocusSummaryEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  353. public:
  354. // standard wizard message handlers
  355. BOOL OnSetActive();
  356. BOOL OnWizardFinish();
  357. void SetCustom() { m_bCustom = TRUE;}
  358. void SetTemplate() { m_bCustom = FALSE;}
  359. BOOL IsCustom(){ return m_bCustom; }
  360. private:
  361. BOOL m_bNeedSetFocus;
  362. BOOL m_bCustom;
  363. };
  364. ////////////////////////////////////////////////////////////////////////////
  365. // CDelegWiz
  366. class CDelegWiz : public CWizardBase
  367. {
  368. public:
  369. // construction/ destruction
  370. CDelegWiz();
  371. virtual ~CDelegWiz();
  372. // message map
  373. BEGIN_MSG_MAP(CDelegWiz)
  374. CHAIN_MSG_MAP(CWizardBase)
  375. END_MSG_MAP()
  376. void InitFromLDAPPath(LPCWSTR lpszLDAPPath)
  377. {
  378. TRACE(L"CDelegWiz::InitFromLDAPPath(%s)\n", lpszLDAPPath);
  379. m_lpszLDAPPath = lpszLDAPPath;
  380. }
  381. LPCWSTR GetInitialLDAPPath() { return m_lpszLDAPPath;}
  382. BOOL CanChangeName() { return m_lpszLDAPPath == NULL;}
  383. LPCWSTR GetClass() { return m_adsiObject.GetClass();}
  384. LPCWSTR GetCanonicalName() { return m_adsiObject.GetCanonicalName();}
  385. void SetName(LPCWSTR lwsz)
  386. {
  387. ASSERT(FALSE); // TODO
  388. }
  389. HRESULT AddPrincipals(CPrincipalListViewHelper* pListViewHelper);
  390. BOOL DeletePrincipals(CPrincipalListViewHelper* pListViewHelper);
  391. HRESULT GetObjectInfo()
  392. {
  393. return m_adsiObject.Bind(GetInitialLDAPPath());
  394. }
  395. HRESULT GetClassInfoFromSchema()
  396. {
  397. return m_adsiObject.QuerySchemaClasses(&m_schemaClassInfoArray);
  398. }
  399. // ----- APIs for Custom Mode -----
  400. int FillCustomSchemaClassesListView(CCheckListViewHelper* pListViewHelper, BOOL bFilter);
  401. BOOL GetCustomAccessPermissions();
  402. void FillCustomAccessRightsListView(CCheckListViewHelper* pListViewHelper,
  403. ULONG nFilterState);
  404. void UpdateAccessRightsListViewSelection(
  405. CCheckListViewHelper* pListViewHelper,
  406. ULONG nFilterState);
  407. void OnCustomAccessRightsCheckListClick(
  408. CRigthsListViewItem* pItem,
  409. BOOL bSelected,
  410. ULONG* pnNewFilterState);
  411. BOOL HasPermissionSelectedCustom();
  412. BOOL SetSchemaClassesSelectionCustom();
  413. void DeselectSchemaClassesSelectionCustom();
  414. // finish page
  415. void SetSummaryInfoCustom(HWND hwndSummaryName,
  416. HWND hwndSummaryPrincipals,
  417. HWND hwndSummaryRights,
  418. HWND hwndSummaryObjects,
  419. HWND hwndSummaryObjectsStatic);
  420. void WriteSummaryInfoCustom(CWString& szSummary, LPCWSTR lpszIdent, LPCWSTR lpszNewLine);
  421. BOOL FinishCustom() { return FinishHelper(TRUE);}
  422. // ----- APIs for Template Mode -----
  423. BOOL InitPermissionHoldersFromSelectedTemplates();
  424. // finish page
  425. void WriteSummaryInfoTemplate(CWString& szSummary, LPCWSTR lpszIdent, LPCWSTR lpszNewLine);
  426. BOOL FinishTemplate() { return FinishHelper(FALSE);}
  427. //This flag is used to create/delete childobjects of selected type.
  428. // Possible values are ACTRL_DS_CREATE_CHILD | ACTRL_DS_DELETE_CHILD
  429. DWORD m_fCreateDelChild;
  430. BOOL m_bAuxClass;
  431. BOOL HideListObjectAccess(void)
  432. {
  433. return !m_adsiObject.GetListObjectEnforced();
  434. }
  435. private:
  436. // embedded wizard property pages
  437. CDelegWiz_StartPage m_startPage;
  438. CDelegWiz_NamePage m_namePage;
  439. CDelegWiz_PrincipalSelectionPage m_userOrGroupSelectionPage;
  440. // page for template selection
  441. CDelegWiz_DelegationTemplateSelectionPage m_templateSelectionPage;
  442. // pages for the custom branch
  443. CDelegWiz_ObjectTypeSelectionPage m_objectTypeSelectionPage;
  444. CDelegWiz_DelegatedRightsPage m_delegatedRightsPage;
  445. // common finish page
  446. CDelegWiz_FinishPage m_finishPage;
  447. // Domain/OU name data
  448. CAdsiObject m_adsiObject;
  449. LPCWSTR m_lpszLDAPPath; // path the wizard was initialized from
  450. // principals (Users and Groups)
  451. CPrincipalList m_principalList;
  452. // schema classes info
  453. CGrowableArr<CSchemaClassInfo> m_schemaClassInfoArray;
  454. // selection info about m_schemaClassInfoArray
  455. static const long nSchemaClassesSelAll;
  456. static const long nSchemaClassesSelMultiple;
  457. long m_nSchemaClassesSel; // -1 for select all
  458. BOOL m_bChildClass; //determines if to show create/delet child objects in case of custom permission
  459. // custom rights
  460. CCustomAccessPermissionsHolder m_permissionHolder;
  461. CTemplateAccessPermissionsHolderManager m_templateAccessPermissionsHolderManager;
  462. // interface pointers
  463. CComPtr<IADsPathname> m_spADsPath; // cached object pointer for name resolution
  464. // internal helpers
  465. HRESULT AddPrincipalsFromBrowseResults(CPrincipalListViewHelper* pListViewHelper,
  466. PDS_SELECTION_LIST pDsSelectionList);
  467. DWORD BuildNewAccessListCustom(PACL *ppNewAcl);
  468. DWORD BuildNewAccessListTemplate(PACL *ppNewAcl);
  469. DWORD UpdateAccessList(CPrincipal* pPrincipal,
  470. CSchemaClassInfo* pClassInfo,
  471. PACL *ppAcl);
  472. void WriteSummaryInfoHelper(CWString& szSummary, LPCWSTR lpszIdent, LPCWSTR lpszNewLine);
  473. BOOL FinishHelper(BOOL bCustom);
  474. friend class CDelegWiz_DelegationTemplateSelectionPage;
  475. friend class CDelegWiz_PrincipalSelectionPage;
  476. };
  477. //+----------------------------------------------------------------------------
  478. // Function:DoDisabledCheck
  479. // Synopsis:Check if any of the object in pDsSelList is disabled. if yes,
  480. // function displays a dialog box to user.
  481. // Returns: TRUE if to add objects in list to acl else no.
  482. //-----------------------------------------------------------------------------
  483. BOOL
  484. DoDisabledCheck(IN CDelegWiz& refWiz,
  485. IN PDS_SELECTION_LIST pDsSelList);
  486. #endif // _DELEGWIZ_H