|
|
// This is a part of the Microsoft Management Console.
// Copyright (C) Microsoft Corporation, 1995 - 1999
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Management Console and related
// electronic documentation provided with the interfaces.
// Compdata.h : Declaration of the CComponentDataImpl
#ifndef _COMPDATA_H_
#define _COMPDATA_H_
#include "resource.h" // main symbols
#ifndef __mmc_h__
#include <mmc.h>
#endif
class CFolder;
/////////////////////////////
// File Versions
// current version
// VER_CCOMPDATA_SAVE_STREAM_3 includes dwFlags,
// m_cLastKnownSchema, m_rgLastKnownSchema
#define VER_CCOMPDATA_SAVE_STREAM_3 0x003
// version written through Win2000 beta 3
#define VER_CCOMPDATA_SAVE_STREAM_2 0x002
/////////////////////////////
// CCompDataImpl dwFlags
#define WSZ_MACHINE_OVERRIDE_SWITCH L"/MACHINE:"
#define CERTMMC_PROPERTY_CHANGE_REFRESHVIEWS 0x200
// Note - This is the offset in my image list that represents the folder
enum IMAGE_INDEXES { IMGINDEX_FOLDER = 0, IMGINDEX_FOLDER_OPEN, IMGINDEX_CRL, IMGINDEX_CERT, IMGINDEX_PENDING_CERT, IMGINDEX_CERTSVR, IMGINDEX_CERTSVR_RUNNING, IMGINDEX_CERTSVR_STOPPED, IMGINDEX_NO_IMAGE, };
// Event Values
#define IDC_STOPSERVER 0x100
#define IDC_STARTSERVER 0x101
#define IDC_PUBLISHCRL 0x110
#define IDC_REVOKECERT 0x112
#define IDC_RESUBMITREQUEST 0x113
#define IDC_DENYREQUEST 0x114
#define IDC_BACKUP_CA 0x115
#define IDC_RESTORE_CA 0x116
#define IDC_INSTALL_CA 0x117
#define IDC_REQUEST_CA 0x118
#define IDC_ROLLOVER_CA 0x119
#define IDC_SUBMITREQUEST 0x11a
#define IDC_VIEW_CERT_PROPERTIES 0x140
#define IDC_VIEW_ALLRECORDS 0x141
#define IDC_VIEW_FILTER 0x142
#define IDC_VIEW_ATTR_EXT 0x143
#define IDC_RETARGET_SNAPIN 0x150
#define IDC_UNREVOKE_CERT 0x160
#define HTMLHELP_FILENAME L"cs.chm"
#define HTMLHELP_COLLECTION_FILENAME L"\\help\\" HTMLHELP_FILENAME
#define HTMLHELP_COLLECTIONLINK_FILENAME L"\\help\\csconcepts.chm"
#define MFS_HIDDEN 0xFFFFFFFF
#define MAX_RESOURCE_STRLEN 256
typedef struct _MY_CONTEXTMENUITEM { CONTEXTMENUITEM item; UINT uiString1; UINT uiString2; WCHAR szString1[MAX_RESOURCE_STRLEN]; WCHAR szString2[MAX_RESOURCE_STRLEN]; } MY_CONTEXTMENUITEM, *PMY_CONTEXTMENUITEM;
#define TASKITEM_FLAG_RESULTITEM 0x1
#define TASKITEM_FLAG_LOCALONLY 0x2
typedef struct _TASKITEM { FOLDER_TYPES type; DWORD dwFlags; MY_CONTEXTMENUITEM myitem; } TASKITEM;
MY_CONTEXTMENUITEM menuItems[]; MY_CONTEXTMENUITEM taskStartStop[]; TASKITEM taskItems[]; TASKITEM viewItems[]; TASKITEM topItems[];
// ICompData inserted
TASKITEM taskResultItemsSingleSel[]; MY_CONTEXTMENUITEM viewResultItems[];
// m_dwPersistFlags
#define CCOMPDATAIMPL_FLAGS_ALLOW_MACHINE_OVERRIDE 0x1
class CComponentDataImpl: public IComponentData, public IExtendPropertySheet, public IExtendContextMenu, public IPersistStream, public CComObjectRoot, public ISnapinHelp2 { BEGIN_COM_MAP(CComponentDataImpl) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(ISnapinHelp2) END_COM_MAP()
friend class CSnapin; friend class CDataObject;
CComponentDataImpl(); virtual ~CComponentDataImpl();
public: virtual const CLSID& GetCoClassID() = 0; virtual const BOOL IsPrimaryImpl() = 0;
public: // ISnapinHelp2 interface members
STDMETHOD(GetHelpTopic)(LPOLESTR* lpCompiledHelpFile); STDMETHOD(GetLinkedTopics)(LPOLESTR* lpCompiledHelpFiles);
// IComponentData interface members
STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT* ppComponent); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(Destroy)(); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo)(SCOPEDATAITEM* pScopeDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
// IExtendPropertySheet interface
public: STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpIDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject);
// IExtendContextMenu
public: STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, LONG *pInsertionAllowed); STDMETHOD(Command)(LONG nCommandID, LPDATAOBJECT pDataObject);
public: // IPersistStream interface members
STDMETHOD(GetClassID)(CLSID *pClassID); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pStm); STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize);
#if DBG
bool m_bInitializedCD; bool m_bLoadedCD; bool m_bDestroyedCD; #endif
// Notify handler declarations
private: HRESULT OnDelete(MMC_COOKIE cookie); HRESULT OnRemoveChildren(LPARAM arg); HRESULT OnRename(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnExpand(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnProperties(LPARAM param);
public: STDMETHOD_(ULONG, AddRef) (); STDMETHOD_(ULONG, Release) (); LONG _cRefs;
// Scope item creation helpers
private: BOOL AddStartStopTasks( LPCONTEXTMENUCALLBACK pContextMenuCallback, BOOL fSvcRunning);
void UpdateScopeIcons(); HRESULT DisplayProperRootNodeName(HSCOPEITEM hScopeItem);
private: CFolder* FindObject(MMC_COOKIE cookie);
// display synchronization code
HRESULT SynchDisplayedCAList(LPDATAOBJECT lpDataObject); HRESULT BaseFolderInsertIntoScope(CFolder* pFolder, CertSvrCA* pCA); HRESULT CreateTemplateFolders(CertSvrCA* pCA); void EnumerateScopePane(LPDATAOBJECT lpDataObject, HSCOPEITEM pParent);
BOOL IsScopePaneNode(LPDATAOBJECT lpDataObject);
private: LPCONSOLENAMESPACE2 m_pScope; // My interface pointer to the scope pane
LPCONSOLE2 m_pConsole; // My interface pointer to the console
HSCOPEITEM m_pStaticRoot;
DWORD m_dwNextViewIndex; // assign to CComponent to keep them seperate
BOOL m_bIsDirty; void SetDirty(BOOL b = TRUE) { m_bIsDirty = b; } void ClearDirty() { m_bIsDirty = FALSE; } BOOL ThisIsDirty() { return m_bIsDirty; }
////////
// persist
// General-purpose flags to be persisted into .msc file
DWORD m_dwFlagsPersist;
CertSvrMachine* m_pCertMachine; CFolder* m_pCurSelFolder; GUID m_guidInstance; // keeps column data straight -- new id for each instance
DWORD m_cLastKnownSchema; CString* m_rgcstrLastKnownSchema; // end persist
///////////////
// non-persistent schema info
LONG* m_rgltypeLastKnownSchema; BOOL* m_rgfindexedLastKnownSchema;
BOOL m_fSchemaWasResolved; // only resolve once
public:
int FindColIdx(IN LPCWSTR szHeading); DWORD GetSchemaEntries() { return m_cLastKnownSchema; } HRESULT GetDBSchemaEntry(int iIndex, LPCWSTR* pszHeading, LONG* plType, BOOL* pfIndexed); HRESULT SetDBSchema(CString* rgcstr, LONG* rgtype, BOOL* rgfIndexed, DWORD cEntries);
void ResetPersistedColumnInformation() { HRESULT hr = UuidCreate(&m_guidInstance); }
private: CList<CFolder*, CFolder*> m_scopeItemList;
BOOL m_fScopeAlreadyEnumerated; };
class CComponentDataPrimaryImpl : public CComponentDataImpl, public CComCoClass<CComponentDataPrimaryImpl, &CLSID_Snapin> { public: DECLARE_REGISTRY(CSnapin, _T("CertSvrAdmin Snapin.Snapin.1"), _T("CertSvrAdmin Snapin.Snapin"), IDS_SNAPIN_DESC, THREADFLAGS_APARTMENT) virtual const CLSID & GetCoClassID() { return CLSID_Snapin; } virtual const BOOL IsPrimaryImpl() { return TRUE; } };
#endif // #define _COMPDATA_H_
|