Source code of Windows XP (NT5)
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.

236 lines
7.0 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (C) 1998-2000 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // ExtObj.h
  7. //
  8. // Description:
  9. // Definition of the CExtObject class, which implements the
  10. // extension interfaces required by a Microsoft Windows NT Cluster
  11. // Administrator Extension DLL.
  12. //
  13. // Implementation File:
  14. // ExtObj.cpp
  15. //
  16. // Maintained By:
  17. // Galen Barbee (GalenB) Mmmm DD, 1998
  18. //
  19. // Revision History:
  20. //
  21. // Notes:
  22. //
  23. /////////////////////////////////////////////////////////////////////////////
  24. #ifndef _EXTOBJ_H_
  25. #define _EXTOBJ_H_
  26. /////////////////////////////////////////////////////////////////////////////
  27. // Include Files
  28. /////////////////////////////////////////////////////////////////////////////
  29. #ifndef __cluadmex_h__
  30. #include <CluAdmEx.h> // for CLUADMEX_OBJECT_TYPE and interfaces
  31. #endif
  32. #ifndef __extobj_idl_h__
  33. #include "ExtObjID.h" // for CLSID_CoDummyEx
  34. #endif
  35. /////////////////////////////////////////////////////////////////////////////
  36. // Forward Class Declarations
  37. /////////////////////////////////////////////////////////////////////////////
  38. class CExtObject;
  39. class CObjData;
  40. class CResData;
  41. /////////////////////////////////////////////////////////////////////////////
  42. // External Class Declarations
  43. /////////////////////////////////////////////////////////////////////////////
  44. class CBasePropertyPage;
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CPageList
  47. /////////////////////////////////////////////////////////////////////////////
  48. typedef CList<CBasePropertyPage *, CBasePropertyPage *> CPageList;
  49. /////////////////////////////////////////////////////////////////////////////
  50. // class CObjData
  51. /////////////////////////////////////////////////////////////////////////////
  52. class CObjData
  53. {
  54. public:
  55. CString m_strName;
  56. CLUADMEX_OBJECT_TYPE m_cot;
  57. virtual ~CObjData(void) { }
  58. }; //*** class CObjData
  59. /////////////////////////////////////////////////////////////////////////////
  60. // class CNodeData
  61. /////////////////////////////////////////////////////////////////////////////
  62. class CNodeData : public CObjData
  63. {
  64. public:
  65. HNODE m_hnode;
  66. }; //*** class CNodeData
  67. /////////////////////////////////////////////////////////////////////////////
  68. // class CGroupData
  69. /////////////////////////////////////////////////////////////////////////////
  70. class CGroupData : public CObjData
  71. {
  72. public:
  73. HGROUP m_hgroup;
  74. }; //*** class CGroupData
  75. /////////////////////////////////////////////////////////////////////////////
  76. // class CResData
  77. /////////////////////////////////////////////////////////////////////////////
  78. class CResData : public CObjData
  79. {
  80. public:
  81. HRESOURCE m_hresource;
  82. CString m_strResTypeName;
  83. }; //*** class CResData
  84. /////////////////////////////////////////////////////////////////////////////
  85. // class CNetworkData
  86. /////////////////////////////////////////////////////////////////////////////
  87. class CNetworkData : public CObjData
  88. {
  89. public:
  90. HNETWORK m_hnetwork;
  91. }; //*** class CNetworkData
  92. /////////////////////////////////////////////////////////////////////////////
  93. // class CNetInterfaceData
  94. /////////////////////////////////////////////////////////////////////////////
  95. class CNetInterfaceData : public CObjData
  96. {
  97. public:
  98. HNETINTERFACE m_hnetinterface;
  99. }; //*** class CNetInterfaceData
  100. /////////////////////////////////////////////////////////////////////////////
  101. // class CExtObject
  102. /////////////////////////////////////////////////////////////////////////////
  103. //REVIEW -- using pointers to ID's is necessary because some compilers don't like
  104. //references as template arguments.
  105. class CExtObject :
  106. public IWEExtendPropertySheet,
  107. public IWEExtendWizard,
  108. public ISupportErrorInfo,
  109. public CComObjectRoot,
  110. public CComCoClass<CExtObject, &CLSID_CoDummyEx>
  111. {
  112. public:
  113. CExtObject(void);
  114. BEGIN_COM_MAP(CExtObject)
  115. COM_INTERFACE_ENTRY(IWEExtendPropertySheet)
  116. COM_INTERFACE_ENTRY(IWEExtendWizard)
  117. COM_INTERFACE_ENTRY(ISupportErrorInfo)
  118. END_COM_MAP()
  119. //DECLARE_NOT_AGGREGATABLE(CExtObject)
  120. // Remove the comment from the line above if you don't want your object to
  121. // support aggregation. The default is to support it
  122. DECLARE_REGISTRY(CExtObject, _T("CLUADMEX.DummyEx"), _T("CLUADMEX.DummyEx"), IDS_CLUADMEX_COMOBJ_DESC, THREADFLAGS_APARTMENT)
  123. // ISupportsErrorInfo
  124. STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
  125. // IWEExtendPropertySheet
  126. public:
  127. STDMETHOD(CreatePropertySheetPages)(
  128. IN IUnknown * piData,
  129. IN IWCPropertySheetCallback * piCallback
  130. );
  131. // IWEExtendWizard
  132. public:
  133. STDMETHOD(CreateWizardPages)(
  134. IN IUnknown * piData,
  135. IN IWCWizardCallback * piCallback
  136. );
  137. // Attributes
  138. protected:
  139. IUnknown * m_piData;
  140. IWCWizardCallback * m_piWizardCallback;
  141. BOOL m_bWizard;
  142. DWORD m_istrResTypeName;
  143. // IGetClusterUIInfo data
  144. LCID m_lcid;
  145. HFONT m_hfont;
  146. HICON m_hicon;
  147. // IGetClusterDataInfo data
  148. HCLUSTER m_hcluster;
  149. LONG m_cobj;
  150. CObjData * m_podObjData;
  151. CObjData * PodObjDataRW(void) const { return m_podObjData; }
  152. CResData * PrdResDataRW(void) const { return (CResData *) m_podObjData; }
  153. public:
  154. IUnknown * PiData(void) const { return m_piData; }
  155. IWCWizardCallback * PiWizardCallback(void) const { return m_piWizardCallback; }
  156. BOOL BWizard(void) const { return m_bWizard; }
  157. DWORD IstrResTypeName(void) const { return m_istrResTypeName; }
  158. // IGetClusterUIInfo data
  159. LCID Lcid(void) const { return m_lcid; }
  160. HFONT Hfont(void) const { return m_hfont; }
  161. HICON Hicon(void) const { return m_hicon; }
  162. // IGetClusterDataInfo data
  163. HCLUSTER Hcluster(void) const { return m_hcluster; }
  164. LONG Cobj(void) const { return m_cobj; }
  165. const CObjData * PodObjData(void) const { return m_podObjData; }
  166. const CNodeData * PndNodeData(void) const { ASSERT(Cot() == CLUADMEX_OT_NODE); return (CNodeData *) m_podObjData; }
  167. const CGroupData * PgdGroupData(void) const { ASSERT(Cot() == CLUADMEX_OT_GROUP); return (CGroupData *) m_podObjData; }
  168. const CResData * PrdResData(void) const { ASSERT(Cot() == CLUADMEX_OT_RESOURCE); return (CResData *) m_podObjData; }
  169. const CNetworkData * PndNetworkData(void) const { ASSERT(Cot() == CLUADMEX_OT_NETWORK); return (CNetworkData *) m_podObjData; }
  170. const CNetInterfaceData * PndNetInterfaceData(void) const { ASSERT(Cot() == CLUADMEX_OT_NETINTERFACE); return (CNetInterfaceData *) m_podObjData; }
  171. CLUADMEX_OBJECT_TYPE Cot(void) const { ASSERT(PodObjData() != NULL); return PodObjData()->m_cot; }
  172. HRESULT HrGetUIInfo(IUnknown * piData);
  173. HRESULT HrSaveData(IUnknown * piData);
  174. HRESULT HrGetObjectInfo(void);
  175. HRESULT HrGetObjectName(IN OUT IGetClusterObjectInfo * pi);
  176. HRESULT HrGetResourceTypeName(IN OUT IGetClusterResourceInfo * pi);
  177. // Implementation
  178. protected:
  179. virtual ~CExtObject(void);
  180. CPageList m_lpg;
  181. CPageList & Lpg(void) { return m_lpg; }
  182. }; //*** class CExtObject
  183. /////////////////////////////////////////////////////////////////////////////
  184. #endif // _EXTOBJ_H_