windows-nt/Source/XPSP1/NT/inetsrv/query/admin/dataobj.hxx
2020-09-26 16:20:57 +08:00

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;
};