windows-nt/Source/XPSP1/NT/admin/snapin/dsadmin/dataobj.h
2020-09-26 16:20:57 +08:00

160 lines
4.8 KiB
C++

//+----------------------------------------------------------------------------
//
// DS Administration MMC snapin.
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1999
//
// File: DataObj.h
//
// Contents: Data Object Functions
//
// Classes: CDSDataObject
//
// History: 02-Oct-96 WayneSc Created
// 06-Feb-97 EricB - added Property Page Data support
//
//--------------------------------------------------------------------------
#ifndef __DATAOBJ_H__
#define __DATAOBJ_H__
#define CFSTR_DS_COMPDATA TEXT("DsCompData")
class CDSComponentData;
//+----------------------------------------------------------------------------
//
// Class: CDSDataObject
//
//-----------------------------------------------------------------------------
class CDSDataObject : public IDataObject, public CComObjectRoot
{
// ATL Maps
DECLARE_NOT_AGGREGATABLE(CDSDataObject)
BEGIN_COM_MAP(CDSDataObject)
COM_INTERFACE_ENTRY(IDataObject)
END_COM_MAP()
// Construction/Destruction
CDSDataObject() : m_lNotifyHandle(0), m_hwndParentSheet(NULL)
{
m_pDsComponentData = NULL;
m_pDSObjCached = NULL;
m_nDSObjCachedBytes = 0;
m_szUniqueID = _T("");
}
~CDSDataObject()
{
if (m_internal.m_p_cookies != NULL)
{
ASSERT(m_internal.m_cookie_count > 1);
free(m_internal.m_p_cookies);
}
if (m_pDSObjCached != NULL)
{
::free(m_pDSObjCached);
}
}
// Standard IDataObject methods
public:
// Implemented
STDMETHOD(GetData)(FORMATETC * pformatetcIn, STGMEDIUM * pmedium);
STDMETHOD(GetDataHere)(FORMATETC * pFormatEtcIn, STGMEDIUM * pMedium);
STDMETHOD(EnumFormatEtc)(DWORD dwDirection,
IEnumFORMATETC ** ppenumFormatEtc);
STDMETHOD(SetData)(FORMATETC * pformatetc, STGMEDIUM * pmedium,
BOOL fRelease);
// Not Implemented
private:
STDMETHOD(QueryGetData)(FORMATETC*) { return E_NOTIMPL; };
STDMETHOD(GetCanonicalFormatEtc)(FORMATETC*, FORMATETC*) { return E_NOTIMPL; };
STDMETHOD(DAdvise)(FORMATETC*, DWORD, IAdviseSink*, DWORD*) { return E_NOTIMPL; };
STDMETHOD(DUnadvise)(DWORD) { return E_NOTIMPL; };
STDMETHOD(EnumDAdvise)(IEnumSTATDATA**) { return E_NOTIMPL; };
public:
// Clipboard formats that are required by the console
static CLIPFORMAT m_cfNodeType;
static CLIPFORMAT m_cfNodeTypeString;
static CLIPFORMAT m_cfDisplayName;
static CLIPFORMAT m_cfCoClass;
static CLIPFORMAT m_cfInternal;
static CLIPFORMAT m_cfMultiSelDataObjs;
static CLIPFORMAT m_cfMultiObjTypes;
static CLIPFORMAT m_cfpMultiSelDataObj;
static CLIPFORMAT m_cfColumnID;
static CLIPFORMAT m_cfPreload;
// Property Page Clipboard formats
static CLIPFORMAT m_cfDsObjectNames;
static CLIPFORMAT m_cfDsDisplaySpecOptions;
static CLIPFORMAT m_cfDsSchemaPath;
static CLIPFORMAT m_cfPropSheetCfg;
static CLIPFORMAT m_cfParentHwnd;
static CLIPFORMAT m_cfMultiSelectProppage;
// Private format for internal communication
static CLIPFORMAT m_cfComponentData;
ULONG InternalAddRef()
{
// ++CSnapin::lDataObjectRefCount;
return CComObjectRoot::InternalAddRef();
}
ULONG InternalRelease()
{
// --CSnapin::lDataObjectRefCount;
return CComObjectRoot::InternalRelease();
}
// Implementation
public:
void SetType(DATA_OBJECT_TYPES type, SnapinType snapintype)
{
ASSERT(m_internal.m_type == CCT_UNINITIALIZED);
m_internal.m_type = type;
m_internal.m_snapintype = snapintype;
}
void SetCookie(CUINode* pUINode) {
m_internal.m_cookie = pUINode;
m_internal.m_cookie_count = 1;
CreateDsObjectNamesCached();
}
void AddCookie(CUINode* pUINode);
void SetString(LPTSTR lpString) { m_internal.m_string = lpString; }
void SetComponentData(CDSComponentData * pCompData)
{ m_pDsComponentData = pCompData; }
private:
HRESULT CreateNodeTypeData(LPSTGMEDIUM lpMedium);
HRESULT CreateNodeTypeStringData(LPSTGMEDIUM lpMedium);
HRESULT CreateDisplayName(LPSTGMEDIUM lpMedium);
HRESULT CreateInternal(LPSTGMEDIUM lpMedium);
HRESULT CreateCoClassID(LPSTGMEDIUM lpMedium);
HRESULT CreateMultiSelectObject(LPSTGMEDIUM lpMedium);
HRESULT CreateColumnID(LPSTGMEDIUM lpMedium);
HRESULT CreateDsObjectNamesCached();
HRESULT Create(const void* pBuffer, int len, LPSTGMEDIUM lpMedium);
INTERNAL m_internal;
CDSComponentData * m_pDsComponentData;
LONG_PTR m_lNotifyHandle;
HWND m_hwndParentSheet;
LPDSOBJECTNAMES m_pDSObjCached;
DWORD m_nDSObjCachedBytes;
CString m_szUniqueID;
};
#endif