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.

713 lines
18 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 2000 - 2001.
  5. //
  6. // File: propbase.h
  7. //
  8. // Contents:
  9. //
  10. // History: 8-2001 Hiteshr Created
  11. //
  12. //----------------------------------------------------------------------------
  13. /******************************************************************************
  14. Class: CRolePropertyPageHolder
  15. Purpose: PropertyPageHolder used by this snapin
  16. ******************************************************************************/
  17. class CRolePropertyPageHolder : public CPropertyPageHolderBase
  18. {
  19. public:
  20. CRolePropertyPageHolder(CContainerNode* pContNode,
  21. CTreeNode* pNode,
  22. CComponentDataObject* pComponentData);
  23. };
  24. /******************************************************************************
  25. Class: CBaseRolePropertyPage
  26. Purpose: Base Class for all property pages
  27. ******************************************************************************/
  28. class CBaseRolePropertyPage : public CPropertyPageBase
  29. {
  30. public:
  31. CBaseRolePropertyPage(CBaseAz * pBaseAz,
  32. CBaseNode* pBaseNode,
  33. ULONG IDD_DIALOG)
  34. :CPropertyPageBase(IDD_DIALOG),
  35. m_pBaseAz(pBaseAz),
  36. m_pBaseNode(pBaseNode),
  37. m_bInit(FALSE),
  38. m_nDialogId(IDD_DIALOG)
  39. {
  40. ASSERT(pBaseAz);
  41. m_bReadOnly = TRUE;
  42. BOOL bWrite = FALSE;
  43. HRESULT hr = m_pBaseAz->IsWritable(bWrite);
  44. ASSERT(SUCCEEDED(hr));
  45. m_bReadOnly = !bWrite;
  46. }
  47. afx_msg void
  48. OnDirty()
  49. {
  50. if(IsInitialized() && !IsReadOnly())
  51. SetDirty(TRUE);
  52. }
  53. virtual BOOL
  54. OnPropertyChange(BOOL,
  55. long*){return TRUE;}
  56. void
  57. OnCancel();
  58. virtual BOOL
  59. OnHelp(WPARAM wParam,
  60. LPARAM lParam);
  61. protected:
  62. BOOL
  63. IsReadOnly()
  64. {
  65. return m_bReadOnly;
  66. }
  67. BOOL
  68. IsInitialized(){ return m_bInit;}
  69. void SetInit(BOOL bInit){m_bInit = bInit;}
  70. CBaseAz*
  71. GetBaseAzObject(){return m_pBaseAz;}
  72. CBaseNode*
  73. GetBaseNode(){return m_pBaseNode;}
  74. private:
  75. CBaseAz * m_pBaseAz;
  76. CBaseNode* m_pBaseNode;
  77. BOOL m_bInit;
  78. ULONG m_nDialogId;
  79. BOOL m_bReadOnly;
  80. };
  81. /******************************************************************************
  82. Class: CGeneralPropertyPage
  83. Purpose: An Attribute Map based property class which can be used by property
  84. pages which are simple. Used by all general property pages
  85. ******************************************************************************/
  86. class CGeneralPropertyPage : public CBaseRolePropertyPage
  87. {
  88. public:
  89. CGeneralPropertyPage(CBaseAz * pBaseAz,
  90. CBaseNode* pBaseNode,
  91. ATTR_MAP* pAttrMap,
  92. ULONG IDD_DIALOG)
  93. :CBaseRolePropertyPage(pBaseAz,
  94. pBaseNode,
  95. IDD_DIALOG),
  96. m_pAttrMap(pAttrMap)
  97. {
  98. }
  99. virtual BOOL
  100. OnInitDialog();
  101. virtual BOOL
  102. OnApply();
  103. protected:
  104. ATTR_MAP*
  105. GetAttrMap(){return m_pAttrMap;}
  106. private:
  107. ATTR_MAP* m_pAttrMap;
  108. };
  109. /******************************************************************************
  110. Class: CAdminManagerGeneralProperty
  111. Purpose: General Property Page for AdminManger
  112. ******************************************************************************/
  113. class CAdminManagerGeneralProperty:public CGeneralPropertyPage
  114. {
  115. public:
  116. CAdminManagerGeneralProperty(CBaseAz * pBaseAz,
  117. CBaseNode* pBaseNode)
  118. :CGeneralPropertyPage(pBaseAz,
  119. pBaseNode,
  120. ATTR_MAP_ADMIN_MANAGER_GENERAL_PROPERTY,
  121. IDD_ADMIN_MANAGER_GENERAL_PROPERTY)
  122. {
  123. }
  124. private:
  125. DECLARE_MESSAGE_MAP()
  126. };
  127. /******************************************************************************
  128. Class: CApplicationGeneralPropertyPage
  129. Purpose: General Property Page for Application
  130. ******************************************************************************/
  131. class CApplicationGeneralPropertyPage:public CGeneralPropertyPage
  132. {
  133. public:
  134. CApplicationGeneralPropertyPage(CBaseAz * pBaseAz,
  135. CBaseNode* pBaseNode)
  136. :CGeneralPropertyPage(pBaseAz,
  137. pBaseNode,
  138. ATTR_MAP_APPLICATION_GENERAL_PROPERTY,
  139. IDD_APPLICATION_GENERAL_PROPERTY)
  140. {
  141. }
  142. virtual BOOL
  143. OnInitDialog();
  144. private:
  145. DECLARE_MESSAGE_MAP()
  146. };
  147. /******************************************************************************
  148. Class: CScopeGeneralPropertyPage
  149. Purpose: General Property Page for Scope
  150. ******************************************************************************/
  151. class CScopeGeneralPropertyPage:public CGeneralPropertyPage
  152. {
  153. public:
  154. CScopeGeneralPropertyPage(CBaseAz * pBaseAz,
  155. CBaseNode* pBaseNode)
  156. :CGeneralPropertyPage(pBaseAz,
  157. pBaseNode,
  158. ATTR_MAP_SCOPE_GENERAL_PROPERTY,
  159. IDD_SCOPE_GENERAL_PROPERTY)
  160. {
  161. }
  162. private:
  163. DECLARE_MESSAGE_MAP()
  164. };
  165. /******************************************************************************
  166. Class: CGroupGeneralPropertyPage
  167. Purpose: General Property Page for Group
  168. ******************************************************************************/
  169. class CGroupGeneralPropertyPage:public CGeneralPropertyPage
  170. {
  171. public:
  172. CGroupGeneralPropertyPage(CBaseAz * pBaseAz,
  173. CBaseNode* pBaseNode)
  174. :CGeneralPropertyPage(pBaseAz,
  175. pBaseNode,
  176. ATTR_MAP_GROUP_GENERAL_PROPERTY,
  177. IDD_GROUP_GENERAL_PROPERTY)
  178. {
  179. }
  180. virtual BOOL
  181. OnInitDialog();
  182. private:
  183. DECLARE_MESSAGE_MAP()
  184. };
  185. /******************************************************************************
  186. Class: CTaskGeneralPropertyPage
  187. Purpose: General Property Page for Task
  188. ******************************************************************************/
  189. class CTaskGeneralPropertyPage:public CGeneralPropertyPage
  190. {
  191. public:
  192. CTaskGeneralPropertyPage(CBaseAz * pBaseAz,
  193. CBaseNode* pBaseNode,
  194. BOOL bRoleDefinition)
  195. :CGeneralPropertyPage(pBaseAz,
  196. pBaseNode,
  197. ATTR_MAP_TASK_GENERAL_PROPERTY,
  198. bRoleDefinition ? IDD_ROLE_DEFINITION_GENERAL_PROPERTY : IDD_TASK_GENERAL_PROPERTY)
  199. {
  200. }
  201. private:
  202. DECLARE_MESSAGE_MAP()
  203. };
  204. /******************************************************************************
  205. Class: COperationGeneralPropertyPage
  206. Purpose: General Property Page for Operation
  207. ******************************************************************************/
  208. class COperationGeneralPropertyPage:public CGeneralPropertyPage
  209. {
  210. public:
  211. COperationGeneralPropertyPage(CBaseAz * pBaseAz,
  212. CBaseNode* pBaseNode)
  213. :CGeneralPropertyPage(pBaseAz,
  214. pBaseNode,
  215. ATTR_MAP_OPERATION_GENERAL_PROPERTY,
  216. IDD_OPERATION_GENERAL_PROPERTY)
  217. {
  218. }
  219. private:
  220. DECLARE_MESSAGE_MAP()
  221. };
  222. /******************************************************************************
  223. Class: CAdminManagerAdvancedPropertyPage
  224. Purpose: Limits Property Page for AdminManger
  225. ******************************************************************************/
  226. class CAdminManagerAdvancedPropertyPage:public CGeneralPropertyPage
  227. {
  228. public:
  229. CAdminManagerAdvancedPropertyPage(CBaseAz * pBaseAz,
  230. CBaseNode* pBaseNode)
  231. :CGeneralPropertyPage(pBaseAz,
  232. pBaseNode,
  233. ATTR_MAP_ADMIN_MANAGER_ADVANCED_PROPERTY,
  234. IDD_ADMIN_MANAGER_ADVANCED_PROPERTY),
  235. m_lAuthScriptTimeoutValue(0)
  236. {
  237. }
  238. BOOL
  239. OnInitDialog();
  240. private:
  241. afx_msg void
  242. OnRadioChange();
  243. afx_msg void
  244. OnButtonDefault();
  245. LONG m_lAuthScriptTimeoutValue;
  246. DECLARE_MESSAGE_MAP()
  247. };
  248. /******************************************************************************
  249. Class: CGroupQueryPropertyPage
  250. Purpose: Query Property Page for Group
  251. ******************************************************************************/
  252. class CGroupQueryPropertyPage:public CGeneralPropertyPage
  253. {
  254. public:
  255. CGroupQueryPropertyPage(CBaseAz * pBaseAz,
  256. CBaseNode* pBaseNode)
  257. :CGeneralPropertyPage(pBaseAz,
  258. pBaseNode,
  259. ATTR_MAP_GROUP_QUERY_PROPERTY,
  260. IDD_GROUP_LDAP_QUERY)
  261. {
  262. }
  263. private:
  264. afx_msg void OnButtonDefineQuery();
  265. DECLARE_MESSAGE_MAP()
  266. };
  267. /******************************************************************************
  268. Class: CAuditPropertyPage
  269. Purpose: Audit Property Page
  270. ******************************************************************************/
  271. class CAuditPropertyPage:public CBaseRolePropertyPage
  272. {
  273. public:
  274. CAuditPropertyPage(CBaseAz* pBaseAz,
  275. CBaseNode* pBaseNode)
  276. :CBaseRolePropertyPage(pBaseAz,
  277. pBaseNode,
  278. IDD_AUDIT),
  279. m_bRunTimeAuditSupported(FALSE),
  280. m_bStoreSaclSupported(FALSE)
  281. {
  282. }
  283. BOOL
  284. OnInitDialog();
  285. BOOL
  286. OnApply();
  287. private:
  288. int
  289. GetParentAuditStateStringId(LONG lPropid);
  290. afx_msg void
  291. OnLinkClick(NMHDR* /*pNotifyStruct*/, LRESULT* /*pResult*/);
  292. void
  293. MoveAndHideControls(BOOL bGenerateAuditSupported,
  294. BOOL bStoreSaclSupported,
  295. BOOL bParentStateShown);
  296. BOOL m_bStoreSaclSupported;
  297. BOOL m_bRunTimeAuditSupported;
  298. DECLARE_MESSAGE_MAP()
  299. };
  300. /******************************************************************************
  301. Class: CListCtrlPropertyPage
  302. Purpose: Base class for property pages which have list control and primary
  303. action is to add/delete items from it.
  304. ******************************************************************************/
  305. class CListCtrlPropertyPage:public CBaseRolePropertyPage
  306. {
  307. public:
  308. CListCtrlPropertyPage(CBaseAz * pBaseAz,
  309. CBaseNode* pBaseNode,
  310. ULONG IDD,
  311. int iIdListCtrl,
  312. int iIdRemoveBtn,
  313. COL_FOR_LV* pColForLV,
  314. UINT uiFlags)
  315. :CBaseRolePropertyPage(pBaseAz,
  316. pBaseNode,
  317. IDD),
  318. m_listCtrl(uiFlags,TRUE,pColForLV),
  319. m_nIdRemoveBtn(iIdRemoveBtn),
  320. m_uiFlags(uiFlags),
  321. m_nIdListCtrl(iIdListCtrl)
  322. {
  323. }
  324. virtual
  325. ~CListCtrlPropertyPage()
  326. {
  327. }
  328. virtual BOOL
  329. OnInitDialog();
  330. protected:
  331. afx_msg void
  332. OnButtonRemove();
  333. afx_msg void
  334. OnListCtrlItemChanged(NMHDR* /*pNotifyStruct*/, LRESULT* pResult);
  335. void
  336. SetRemoveButton();
  337. int
  338. AddMembers(IN CList<CBaseAz*,CBaseAz*>& listNewMembersToAdd,
  339. IN OUT ActionMap& mapActionItem,
  340. IN UINT uiFlags);
  341. HRESULT
  342. AddMember(IN CBaseAz* pMemberAz,
  343. IN OUT ActionMap& mapActionItem,
  344. IN UINT uiFlags);
  345. BOOL
  346. DoActionsFromActionMap(IN ActionMap& mapActions,
  347. IN LONG param);
  348. virtual HRESULT
  349. DoOneAction(IN ActionItem* pActionItem,
  350. IN LONG param) = 0;
  351. virtual void
  352. RemoveMember(IN ActionItem* pActionItem);
  353. virtual void
  354. MakeControlsReadOnly() = 0;
  355. virtual BOOL
  356. EqualObjects(CBaseAz* p1, CBaseAz* p2);
  357. CButton*
  358. GetRemoveButton(){ return (CButton*)GetDlgItem(m_nIdRemoveBtn);}
  359. UINT GetUIFlags(){return m_uiFlags;}
  360. CSortListCtrl m_listCtrl;
  361. private:
  362. //DATA MEMBERS
  363. int m_nIdListCtrl;
  364. int m_nIdRemoveBtn;
  365. UINT m_uiFlags;
  366. };
  367. /******************************************************************************
  368. Class: CTaskDefinitionPropertyPage
  369. Purpose: Property Page for Task Definition
  370. ******************************************************************************/
  371. class CTaskDefinitionPropertyPage :public CListCtrlPropertyPage
  372. {
  373. public:
  374. CTaskDefinitionPropertyPage(CBaseAz * pBaseAz,
  375. CBaseNode* pBaseNode,
  376. BOOL bRoleDefinition)
  377. :CListCtrlPropertyPage(pBaseAz,
  378. pBaseNode,
  379. bRoleDefinition? IDD_ROLE_DEFINITION_PROPERTY :IDD_TASK_DEFINITION_PROPERTY,
  380. IDC_LIST_TASK_OPERATION,
  381. IDC_REMOVE,
  382. Col_For_Task_Role,
  383. COL_NAME | COL_TYPE | COL_DESCRIPTION),
  384. m_bRoleDefinition(bRoleDefinition),
  385. m_bScriptDirty(FALSE)
  386. {
  387. }
  388. virtual
  389. ~CTaskDefinitionPropertyPage();
  390. virtual BOOL
  391. OnInitDialog();
  392. BOOL
  393. OnApply();
  394. private:
  395. afx_msg void
  396. OnButtonAdd();
  397. afx_msg void
  398. OnButtonEditScript();
  399. HRESULT
  400. DoOneAction(IN ActionItem* pActionItem,
  401. IN LONG param);
  402. void
  403. MakeControlsReadOnly();
  404. BOOL IsRoleDefinition()
  405. {
  406. return m_bRoleDefinition;
  407. }
  408. DECLARE_MESSAGE_MAP()
  409. CString m_strFileName;
  410. CString m_strScriptLanguage;
  411. CString m_strScript;
  412. ActionMap m_mapActionItem;
  413. BOOL m_bRoleDefinition;
  414. BOOL m_bScriptDirty;
  415. };
  416. /******************************************************************************
  417. Class: Group Membership Property Page
  418. Purpose: Property Page Group Definition
  419. ******************************************************************************/
  420. class CGroupMemberPropertyPage :public CListCtrlPropertyPage
  421. {
  422. public:
  423. CGroupMemberPropertyPage(CBaseAz * pBaseAz,
  424. CBaseNode* pBaseNode,
  425. LONG IDD,
  426. BOOL bMember)
  427. :CListCtrlPropertyPage(pBaseAz,
  428. pBaseNode,
  429. IDD,
  430. IDC_LIST_MEMBER,
  431. IDC_REMOVE,
  432. Col_For_Task_Role,
  433. COL_NAME | COL_TYPE | COL_DESCRIPTION),
  434. m_bMember(bMember)
  435. {
  436. }
  437. virtual
  438. ~CGroupMemberPropertyPage();
  439. virtual BOOL
  440. OnInitDialog();
  441. BOOL
  442. OnApply();
  443. private:
  444. afx_msg void
  445. OnButtonAddApplicationGroups();
  446. afx_msg void
  447. OnButtonAddWindowsGroups();
  448. HRESULT
  449. DoOneAction(IN ActionItem* pActionItem,
  450. IN LONG param);
  451. void
  452. MakeControlsReadOnly();
  453. DECLARE_MESSAGE_MAP()
  454. //DATA MEMBERS
  455. ActionMap m_mapActionItem;
  456. BOOL m_bMember;
  457. };
  458. /******************************************************************************
  459. Class: CSecurityPropertyPage
  460. Purpose: Security Property Page
  461. ******************************************************************************/
  462. class CSecurityPropertyPage: public CListCtrlPropertyPage
  463. {
  464. public:
  465. CSecurityPropertyPage(CBaseAz * pBaseAz,
  466. CBaseNode* pBaseNode)
  467. :CListCtrlPropertyPage(pBaseAz,
  468. pBaseNode,
  469. IDD_SECURITY,
  470. IDC_LIST_MEMBER,
  471. IDC_REMOVE,
  472. Col_For_Security_Page,
  473. COL_NAME | COL_PARENT_TYPE),
  474. m_LastComboSelection(AZ_PROP_POLICY_ADMINS),
  475. m_bDelegatorPresent(FALSE)
  476. {
  477. }
  478. virtual
  479. ~CSecurityPropertyPage();
  480. virtual BOOL
  481. OnInitDialog();
  482. BOOL
  483. OnApply();
  484. afx_msg void
  485. OnButtonRemove();
  486. private:
  487. afx_msg void
  488. OnButtonAddWindowsGroups();
  489. afx_msg void
  490. OnComboBoxItemChanged();
  491. //CListCtrlPropertyPage Override
  492. HRESULT
  493. DoOneAction(IN ActionItem* pActionItem,
  494. IN LONG param);
  495. void
  496. ReloadAdminList();
  497. virtual BOOL
  498. EqualObjects(CBaseAz* p1, CBaseAz* p2);
  499. void
  500. MakeControlsReadOnly();
  501. ActionMap &
  502. GetListForComboSelection(LONG lComboSel);
  503. BOOL
  504. HandleBizruleScopeInteraction();
  505. DECLARE_MESSAGE_MAP()
  506. //DATA MEMBERS
  507. ActionMap m_mapAdminActionItem;
  508. ActionMap m_mapReadersActionItem;
  509. ActionMap m_mapDelegatedUsersActionItem;
  510. BOOL m_bDelegatorPresent;
  511. LONG m_LastComboSelection;
  512. };
  513. /******************************************************************************
  514. Class: CRoleGeneralPropertyPage
  515. Purpose: General Property Page for Role
  516. ******************************************************************************/
  517. class CRoleGeneralPropertyPage:public CGeneralPropertyPage
  518. {
  519. public:
  520. CRoleGeneralPropertyPage(CBaseAz * pBaseAz,
  521. CBaseNode* pBaseNode)
  522. :CGeneralPropertyPage(pBaseAz,
  523. pBaseNode,
  524. ATTR_MAP_ROLE_GENERAL_PROPERTY,
  525. IDD_ROLE_GENERAL_PROPERTY)
  526. {
  527. }
  528. private:
  529. afx_msg void
  530. OnShowDefinition();
  531. BOOL
  532. DisplayRoleDefintionPropertyPages(IN CTaskAz* pTaskAz);
  533. DECLARE_MESSAGE_MAP()
  534. };
  535. /******************************************************************************
  536. Class: CRoleDefDialog
  537. Purpose: Displays the role definition for role created out side UI.
  538. ******************************************************************************/
  539. class CRoleDefDialog :public CHelpEnabledDialog
  540. {
  541. public:
  542. CRoleDefDialog(CRoleAz& refRoleAz);
  543. ~CRoleDefDialog();
  544. virtual BOOL
  545. OnInitDialog();
  546. virtual void
  547. OnOK();
  548. private:
  549. afx_msg void
  550. OnButtonRemove();
  551. afx_msg void
  552. OnButtonAdd();
  553. afx_msg void
  554. OnListCtrlItemChanged(NMHDR* /*pNotifyStruct*/, LRESULT* pResult);
  555. afx_msg void
  556. OnListCtrlItemDeleted(NMHDR* /*pNotifyStruct*/, LRESULT* pResult);
  557. afx_msg void
  558. OnListCtrlItemInserted(NMHDR* /*pNotifyStruct*/, LRESULT* /*pResult*/){SetDirty();}
  559. void
  560. SetRemoveButton();
  561. void
  562. SetDirty(){ m_bDirty = TRUE;}
  563. BOOL
  564. IsDirty(){ return m_bDirty;}
  565. BOOL
  566. IsReadOnly(){return m_bReadOnly;}
  567. DECLARE_MESSAGE_MAP()
  568. CSortListCtrl m_listCtrl;
  569. CList<ActionItem*,ActionItem*> m_listActionItem;
  570. BOOL m_bReadOnly;
  571. CRoleAz& m_refRoleAz;
  572. BOOL m_bDirty;
  573. };
  574. //+----------------------------------------------------------------------------
  575. // Function:BringPropSheetToForeGround
  576. // Synopsis:Finds the property sheet for pNode and brings it to forground
  577. // Returns: True if property sheet exists and is brought to foreground
  578. // else FALSE
  579. //-----------------------------------------------------------------------------
  580. BOOL
  581. BringPropSheetToForeGround(CRoleComponentDataObject *pComponentData,
  582. CTreeNode * pNode);
  583. //+----------------------------------------------------------------------------
  584. // Function:FindOrCreateModelessPropertySheet
  585. // Synopsis:Displays property sheet for pCookieNode. If a propertysheet is
  586. // already up, function brings it to foreground, otherwise it creates
  587. // a new propertysheet. This should be used to create propertysheet
  588. // in response to events other that click properties context menu.
  589. // Arguments:
  590. // Returns:
  591. //-----------------------------------------------------------------------------
  592. HRESULT
  593. FindOrCreateModelessPropertySheet(CRoleComponentDataObject *pComponentData,
  594. CTreeNode* pCookieNode);