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

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 1998-2000 Microsoft Corporation
//
// Module Name:
// ExtObj.h
//
// Description:
// Definition of the CExtObject class, which implements the
// extension interfaces required by a Microsoft Windows NT Cluster
// Administrator Extension DLL.
//
// Implementation File:
// ExtObj.cpp
//
// Maintained By:
// Galen Barbee (GalenB) Mmmm DD, 1998
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _EXTOBJ_H_
#define _EXTOBJ_H_
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef __cluadmex_h__
#include <CluAdmEx.h> // for CLUADMEX_OBJECT_TYPE and interfaces
#endif
#ifndef __extobj_idl_h__
#include "ExtObjID.h" // for CLSID_CoDummyEx
#endif
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CExtObject;
class CObjData;
class CResData;
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CBasePropertyPage;
/////////////////////////////////////////////////////////////////////////////
// CPageList
/////////////////////////////////////////////////////////////////////////////
typedef CList<CBasePropertyPage *, CBasePropertyPage *> CPageList;
/////////////////////////////////////////////////////////////////////////////
// class CObjData
/////////////////////////////////////////////////////////////////////////////
class CObjData
{
public:
CString m_strName;
CLUADMEX_OBJECT_TYPE m_cot;
virtual ~CObjData(void) { }
}; //*** class CObjData
/////////////////////////////////////////////////////////////////////////////
// class CNodeData
/////////////////////////////////////////////////////////////////////////////
class CNodeData : public CObjData
{
public:
HNODE m_hnode;
}; //*** class CNodeData
/////////////////////////////////////////////////////////////////////////////
// class CGroupData
/////////////////////////////////////////////////////////////////////////////
class CGroupData : public CObjData
{
public:
HGROUP m_hgroup;
}; //*** class CGroupData
/////////////////////////////////////////////////////////////////////////////
// class CResData
/////////////////////////////////////////////////////////////////////////////
class CResData : public CObjData
{
public:
HRESOURCE m_hresource;
CString m_strResTypeName;
}; //*** class CResData
/////////////////////////////////////////////////////////////////////////////
// class CNetworkData
/////////////////////////////////////////////////////////////////////////////
class CNetworkData : public CObjData
{
public:
HNETWORK m_hnetwork;
}; //*** class CNetworkData
/////////////////////////////////////////////////////////////////////////////
// class CNetInterfaceData
/////////////////////////////////////////////////////////////////////////////
class CNetInterfaceData : public CObjData
{
public:
HNETINTERFACE m_hnetinterface;
}; //*** class CNetInterfaceData
/////////////////////////////////////////////////////////////////////////////
// class CExtObject
/////////////////////////////////////////////////////////////////////////////
//REVIEW -- using pointers to ID's is necessary because some compilers don't like
//references as template arguments.
class CExtObject :
public IWEExtendPropertySheet,
public IWEExtendWizard,
public ISupportErrorInfo,
public CComObjectRoot,
public CComCoClass<CExtObject, &CLSID_CoDummyEx>
{
public:
CExtObject(void);
BEGIN_COM_MAP(CExtObject)
COM_INTERFACE_ENTRY(IWEExtendPropertySheet)
COM_INTERFACE_ENTRY(IWEExtendWizard)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
//DECLARE_NOT_AGGREGATABLE(CExtObject)
// Remove the comment from the line above if you don't want your object to
// support aggregation. The default is to support it
DECLARE_REGISTRY(CExtObject, _T("CLUADMEX.DummyEx"), _T("CLUADMEX.DummyEx"), IDS_CLUADMEX_COMOBJ_DESC, THREADFLAGS_APARTMENT)
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
// IWEExtendPropertySheet
public:
STDMETHOD(CreatePropertySheetPages)(
IN IUnknown * piData,
IN IWCPropertySheetCallback * piCallback
);
// IWEExtendWizard
public:
STDMETHOD(CreateWizardPages)(
IN IUnknown * piData,
IN IWCWizardCallback * piCallback
);
// Attributes
protected:
IUnknown * m_piData;
IWCWizardCallback * m_piWizardCallback;
BOOL m_bWizard;
DWORD m_istrResTypeName;
// IGetClusterUIInfo data
LCID m_lcid;
HFONT m_hfont;
HICON m_hicon;
// IGetClusterDataInfo data
HCLUSTER m_hcluster;
LONG m_cobj;
CObjData * m_podObjData;
CObjData * PodObjDataRW(void) const { return m_podObjData; }
CResData * PrdResDataRW(void) const { return (CResData *) m_podObjData; }
public:
IUnknown * PiData(void) const { return m_piData; }
IWCWizardCallback * PiWizardCallback(void) const { return m_piWizardCallback; }
BOOL BWizard(void) const { return m_bWizard; }
DWORD IstrResTypeName(void) const { return m_istrResTypeName; }
// IGetClusterUIInfo data
LCID Lcid(void) const { return m_lcid; }
HFONT Hfont(void) const { return m_hfont; }
HICON Hicon(void) const { return m_hicon; }
// IGetClusterDataInfo data
HCLUSTER Hcluster(void) const { return m_hcluster; }
LONG Cobj(void) const { return m_cobj; }
const CObjData * PodObjData(void) const { return m_podObjData; }
const CNodeData * PndNodeData(void) const { ASSERT(Cot() == CLUADMEX_OT_NODE); return (CNodeData *) m_podObjData; }
const CGroupData * PgdGroupData(void) const { ASSERT(Cot() == CLUADMEX_OT_GROUP); return (CGroupData *) m_podObjData; }
const CResData * PrdResData(void) const { ASSERT(Cot() == CLUADMEX_OT_RESOURCE); return (CResData *) m_podObjData; }
const CNetworkData * PndNetworkData(void) const { ASSERT(Cot() == CLUADMEX_OT_NETWORK); return (CNetworkData *) m_podObjData; }
const CNetInterfaceData * PndNetInterfaceData(void) const { ASSERT(Cot() == CLUADMEX_OT_NETINTERFACE); return (CNetInterfaceData *) m_podObjData; }
CLUADMEX_OBJECT_TYPE Cot(void) const { ASSERT(PodObjData() != NULL); return PodObjData()->m_cot; }
HRESULT HrGetUIInfo(IUnknown * piData);
HRESULT HrSaveData(IUnknown * piData);
HRESULT HrGetObjectInfo(void);
HRESULT HrGetObjectName(IN OUT IGetClusterObjectInfo * pi);
HRESULT HrGetResourceTypeName(IN OUT IGetClusterResourceInfo * pi);
// Implementation
protected:
virtual ~CExtObject(void);
CPageList m_lpg;
CPageList & Lpg(void) { return m_lpg; }
}; //*** class CExtObject
/////////////////////////////////////////////////////////////////////////////
#endif // _EXTOBJ_H_