217 lines
6 KiB
C++
217 lines
6 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996
|
|
//
|
|
// File: DataObj.hxx
|
|
//
|
|
// Contents: IDataObject (holds title of object)
|
|
//
|
|
// History: 26-Nov-1996 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//
|
|
// Forward declarations
|
|
//
|
|
|
|
class CCatalog;
|
|
class CScope;
|
|
class CCachedProperty;
|
|
|
|
class PCIObjectType
|
|
{
|
|
public:
|
|
|
|
enum OType
|
|
{
|
|
RootNode,
|
|
Catalog,
|
|
Directory,
|
|
Property,
|
|
Intermediate_Scope,
|
|
Intermediate_Properties,
|
|
Intermediate_UnfilteredURL
|
|
};
|
|
|
|
virtual OType Type() const = 0;
|
|
};
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CCIAdminCF
|
|
//
|
|
// Purpose: Class factory for MMC snap-in
|
|
//
|
|
// History: 26-Nov-1996 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CCIAdminDO : public IDataObject
|
|
{
|
|
public:
|
|
|
|
//
|
|
// IUnknown
|
|
//
|
|
|
|
virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid,
|
|
void ** ppvObject);
|
|
|
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
|
|
|
virtual ULONG STDMETHODCALLTYPE Release();
|
|
|
|
//
|
|
// IDataObject
|
|
//
|
|
|
|
SCODE STDMETHODCALLTYPE GetData( FORMATETC * lpFormatetcIn, STGMEDIUM * lpMedium );
|
|
|
|
SCODE STDMETHODCALLTYPE GetDataHere( FORMATETC * lpFormatetc, STGMEDIUM * lpMedium );
|
|
|
|
SCODE STDMETHODCALLTYPE EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC ** ppEnumFormatEtc );
|
|
|
|
SCODE STDMETHODCALLTYPE QueryGetData( FORMATETC * lpFormatetc )
|
|
{ return E_NOTIMPL; }
|
|
|
|
SCODE STDMETHODCALLTYPE GetCanonicalFormatEtc( FORMATETC * lpFormatetcIn, FORMATETC * lpFormatetcOut )
|
|
{ return E_NOTIMPL; }
|
|
|
|
SCODE STDMETHODCALLTYPE SetData( FORMATETC * lpFormatetc,
|
|
STGMEDIUM * lpMedium,
|
|
BOOL bRelease )
|
|
{ return E_NOTIMPL; }
|
|
|
|
SCODE STDMETHODCALLTYPE DAdvise( FORMATETC * lpFormatetc,
|
|
DWORD advf,
|
|
IAdviseSink * pAdvSink,
|
|
DWORD * pdwConnection)
|
|
{ return E_NOTIMPL; }
|
|
|
|
SCODE STDMETHODCALLTYPE DUnadvise( DWORD dwConnection )
|
|
{ return E_NOTIMPL; }
|
|
|
|
SCODE STDMETHODCALLTYPE EnumDAdvise( IEnumSTATDATA ** ppEnumAdvise )
|
|
{ return E_NOTIMPL; }
|
|
|
|
//
|
|
// Local
|
|
//
|
|
|
|
int operator==( CCIAdminDO const & B ) { return ( (_cookie == B._cookie) && (_type == B._type) ); }
|
|
|
|
MMC_COOKIE Cookie() { return _cookie; }
|
|
|
|
DATA_OBJECT_TYPES Type() { return _type; }
|
|
|
|
BOOL IsRoot() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::RootNode; }
|
|
BOOL IsStandAloneRoot() { return ( 0 == _cookie ); }
|
|
|
|
BOOL IsACatalog() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Catalog; }
|
|
|
|
BOOL IsADirectory() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Directory; }
|
|
|
|
BOOL IsAProperty() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Property; }
|
|
|
|
BOOL IsADirectoryIntermediate() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Intermediate_Scope; }
|
|
|
|
BOOL IsAPropertyIntermediate() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Intermediate_Properties; }
|
|
|
|
BOOL IsURLIntermediate() { return 0 != _cookie && ((PCIObjectType *)_cookie)->Type() == PCIObjectType::Intermediate_UnfilteredURL; }
|
|
|
|
CCatalog * GetCatalog();
|
|
|
|
CScope * GetScope()
|
|
{
|
|
if ( IsADirectory() )
|
|
return (CScope *)_cookie;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
CCachedProperty * GetProperty()
|
|
{
|
|
if ( IsAProperty() )
|
|
return (CCachedProperty *)_cookie;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
static unsigned int GetMachineNameCF() { return _cfMachineName; }
|
|
WCHAR const * GetMachineName() { return _pwcsMachine; }
|
|
|
|
private:
|
|
|
|
friend class CCISnapinData;
|
|
friend class CCISnapin;
|
|
|
|
CCIAdminDO( MMC_COOKIE cookie, DATA_OBJECT_TYPES type, WCHAR const * pwcsMachine );
|
|
|
|
virtual ~CCIAdminDO();
|
|
|
|
|
|
HRESULT CreateNodeTypeData(LPSTGMEDIUM lpMedium);
|
|
HRESULT CreateNodeTypeStringData(LPSTGMEDIUM lpMedium);
|
|
HRESULT CreateDisplayName(LPSTGMEDIUM lpMedium);
|
|
HRESULT CreateCoClassID(LPSTGMEDIUM lpMedium);
|
|
HRESULT CreateInternal(LPSTGMEDIUM lpMedium);
|
|
HRESULT Create(const void* pBuffer, int len, LPSTGMEDIUM lpMedium);
|
|
|
|
static unsigned int _cfNodeType; // Clipboard format
|
|
static unsigned int _cfNodeTypeString; // " "
|
|
static unsigned int _cfDisplayName; // " "
|
|
static unsigned int _cfClassId; // " "
|
|
static unsigned int _cfInternal; // our internal format
|
|
static unsigned int _cfMachineName; // machine name
|
|
|
|
MMC_COOKIE _cookie; // Cookie
|
|
DATA_OBJECT_TYPES _type; // Type (scope, result, ...)
|
|
long _uRefs; // Refcount
|
|
WCHAR const * _pwcsMachine; // Machine name
|
|
};
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CIntermediate
|
|
//
|
|
// Purpose: Static node for either 'directories' or 'properties'
|
|
//
|
|
// History: 27-Nov-1996 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CIntermediate : public PCIObjectType
|
|
{
|
|
public:
|
|
|
|
CIntermediate( CCatalog & cat, PCIObjectType::OType dwType )
|
|
: _dwType( dwType ),
|
|
_cat( cat )
|
|
{
|
|
}
|
|
|
|
//
|
|
// Typing
|
|
//
|
|
|
|
PCIObjectType::OType Type() const
|
|
{
|
|
return _dwType;
|
|
}
|
|
|
|
//
|
|
// Access
|
|
//
|
|
|
|
CCatalog & GetCatalog() { return _cat; }
|
|
|
|
private:
|
|
|
|
PCIObjectType::OType _dwType;
|
|
CCatalog & _cat;
|
|
};
|
|
|