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.2 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 1999 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // ExtObj.h
  7. //
  8. // Implementation File:
  9. // ExtObj.cpp
  10. //
  11. // Description:
  12. // Definition of the CExtObject class, which implements the
  13. // extension interfaces required by a Microsoft Windows NT Cluster
  14. // Administrator Extension DLL.
  15. //
  16. // Author:
  17. // David Potter (DavidP) March 24, 1999
  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_CoClNetResEx
  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_CoClNetResEx >
  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.ClNetResEx"), _T("CLUADMEX.ClNetResEx"), 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 static_cast< 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 static_cast< CNodeData * >( m_podObjData ); }
  167. const CGroupData * PgdGroupData( void ) const { ASSERT( Cot() == CLUADMEX_OT_GROUP ); return static_cast< CGroupData * >( m_podObjData ); }
  168. const CResData * PrdResData( void ) const { ASSERT( Cot() == CLUADMEX_OT_RESOURCE ); return static_cast< CResData * >( m_podObjData ); }
  169. const CNetworkData * PndNetworkData( void ) const { ASSERT( Cot() == CLUADMEX_OT_NETWORK ); return static_cast< CNetworkData * >( m_podObjData ); }
  170. const CNetInterfaceData * PndNetInterfaceData( void ) const { ASSERT( Cot() == CLUADMEX_OT_NETINTERFACE ); return static_cast< CNetInterfaceData * >( m_podObjData ); }
  171. CLUADMEX_OBJECT_TYPE Cot( void ) const { ASSERT( PodObjData() != NULL ); return PodObjData()->m_cot; }
  172. HRESULT HrGetUIInfo( IN IUnknown * piData );
  173. HRESULT HrSaveData( IN IUnknown * piData );
  174. HRESULT HrGetObjectInfo( void );
  175. HRESULT HrGetObjectName( IN IGetClusterObjectInfo * pi );
  176. HRESULT HrGetResourceTypeName( IN 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__