windows-nt/Source/XPSP1/NT/base/fs/hsm/gui/hsmadmin/csakdata.h
2020-09-26 16:20:57 +08:00

389 lines
14 KiB
C++

/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
CSakData.h
Abstract:
IComponentData implementation for Snapin.
Author:
Rohde Wakefield [rohde] 12-Aug-1997
Revision History:
--*/
#ifndef _CSAKDATA_H
#define _CSAKDATA_H
#define RS_SCOPE_IMAGE_ARRAY_MAX 100
//typedef struct {
// USHORT listViewId;
// USHORT colCount;
// USHORT columnWidths[BHSM_MAX_CHILD_PROPS];
//} COLUMN_WIDTH_SET_PROP_PAGE;
// Maximum number of listview controls that have their properties saved
// #define MAX_LISTVIEWS 20
/////////////////////////////////////////////////////////////////////////////
// CSakDataWnd window
class CSakData;
class CSakDataWnd : public CWnd
{
// Construction
public:
CSakDataWnd( ) {};
BOOL Create( CSakData * pSakData );
virtual void PostNcDestroy( );
// Attributes
public:
CSakData * m_pSakData;
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSakDataWnd)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CSakDataWnd() {};
// Generated message map functions
#define WM_SAKDATA_UPDATE_ALL_VIEWS ( WM_USER + 1 )
#define WM_SAKDATA_REFRESH_NODE ( WM_USER + 2 )
void PostUpdateAllViews( MMC_COOKIE Cookie );
void PostRefreshNode( MMC_COOKIE Cookie );
protected:
//{{AFX_MSG(CSakDataWnd)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
virtual LONG OnUpdateAllViews( UINT, IN LONG lParam );
virtual LONG OnRefreshNode( UINT, IN LONG lParam );
DECLARE_MESSAGE_MAP()
};
class CSakDataNodePrivate
{
public:
CSakDataNodePrivate( ISakNode* pNode );
~CSakDataNodePrivate( );
static HRESULT Verify( CSakDataNodePrivate* pNodePriv );
DWORD m_Magic;
CComPtr<ISakNode> m_pNode;
};
#define RS_NODE_MAGIC_GOOD ((DWORD)0xF0E1D2C3)
#define RS_NODE_MAGIC_DEFUNCT ((DWORD)0x4BADF00D)
/////////////////////////////////////////////////////////////////////////////
// COM class representing the SakSnap snapin object
class ATL_NO_VTABLE CSakData :
public IComponentData, // Access to cached info
public IExtendPropertySheet2,// add pages to the property sheet of an item.
public IExtendContextMenu, // add items to context menu of an item
public ISnapinHelp2, // Add support for HTMLHelp
public IDataObject, // To support data object queries.
public ISakSnapAsk, // provided so that nodes can query snapin info
public IPersistStream,
public CComObjectRoot // handle object reference counts for objects
// public CComCoClass<CSakData,&CLSID_HsmAdminData>
{
public:
CSakData() {};
BEGIN_COM_MAP(CSakData)
COM_INTERFACE_ENTRY(IComponentData)
COM_INTERFACE_ENTRY(IExtendPropertySheet)
COM_INTERFACE_ENTRY(IExtendPropertySheet2)
COM_INTERFACE_ENTRY(IExtendContextMenu)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(ISakSnapAsk)
COM_INTERFACE_ENTRY(ISnapinHelp)
COM_INTERFACE_ENTRY(ISnapinHelp2)
COM_INTERFACE_ENTRY(IPersistStream)
END_COM_MAP()
static UINT m_cfMultiSelect;
static UINT m_cfObjectTypes;
public:
virtual const CLSID& GetCoClassID() = 0;
virtual const BOOL IsPrimaryImpl() = 0;
public:
static UINT m_nImageArray[RS_SCOPE_IMAGE_ARRAY_MAX];
static INT m_nImageCount;
// IComponentData
public:
STDMETHOD( Initialize ) ( IUnknown* pUnk );
STDMETHOD( CreateComponent ) ( IComponent** ppComponent );
STDMETHOD( Notify ) ( IDataObject* pDataObject, MMC_NOTIFY_TYPE, LPARAM arg, LPARAM param );
STDMETHOD( Destroy ) ( void );
STDMETHOD( QueryDataObject ) ( MMC_COOKIE cookie, DATA_OBJECT_TYPES, IDataObject** ppDataObject);
STDMETHOD( GetDisplayInfo ) ( SCOPEDATAITEM* pScopeItem);
STDMETHOD( CompareObjects ) ( IDataObject* pDataObjectA, IDataObject* pDataObjectB);
// IExtendPropertySheet interface
public:
STDMETHOD( CreatePropertyPages )( LPPROPERTYSHEETCALLBACK lpProvider, RS_NOTIFY_HANDLE handle, LPDATAOBJECT lpIDataObject );
STDMETHOD( QueryPagesFor ) ( LPDATAOBJECT lpDataObject );
// IExtendPropertySheet2 interface
public:
STDMETHOD( GetWatermarks ) ( IN LPDATAOBJECT pDataObject, OUT HBITMAP* pWatermark, OUT HBITMAP* pHeader, OUT HPALETTE* pPalette, OUT BOOL* pStretch );
// IExtendContextMenu
public:
STDMETHOD( AddMenuItems ) ( IDataObject* pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, LONG* pInsertionAllowed );
STDMETHOD( Command ) ( long nCommandID, IDataObject* pDataObject );
// ISnapinHelp2
public:
STDMETHOD( GetHelpTopic ) ( LPOLESTR * pHelpTopic );
STDMETHOD( GetLinkedTopics ) ( LPOLESTR * pHelpTopic );
// IDataObject methods
public:
// Implemented
STDMETHOD( SetData ) ( LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium, BOOL bRelease );
STDMETHOD( GetData ) ( LPFORMATETC lpFormatetcIn, LPSTGMEDIUM lpMedium );
STDMETHOD( GetDataHere ) ( LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium );
STDMETHOD( EnumFormatEtc ) ( DWORD dwDirection, LPENUMFORMATETC* ppEnumFormatEtc );
// IPersistStream methods
STDMETHOD( Save )( IStream *pStm, BOOL fClearDirty );
STDMETHOD( Load )( IStream *pStm );
STDMETHOD( IsDirty )(void);
STDMETHOD( GetSizeMax )( ULARGE_INTEGER *pcbSize );
STDMETHOD( GetClassID )( CLSID *pClassID );
// Not Implemented
private:
STDMETHOD( QueryGetData ) ( LPFORMATETC /*lpFormatetc*/ ) { return E_NOTIMPL; };
STDMETHOD( GetCanonicalFormatEtc ) ( LPFORMATETC /*lpFormatetcIn*/, LPFORMATETC /*lpFormatetcOut*/ ) { return E_NOTIMPL; };
STDMETHOD( DAdvise ) ( LPFORMATETC /*lpFormatetc*/, DWORD /*advf*/, LPADVISESINK /*pAdvSink*/, LPDWORD /*pdwConnection*/ ) { return E_NOTIMPL; };
STDMETHOD( DUnadvise ) ( DWORD /*dwConnection*/ ) { return E_NOTIMPL; };
STDMETHOD( EnumDAdvise ) ( LPENUMSTATDATA* /*ppEnumAdvise*/ ) { return E_NOTIMPL; };
// ISakSnapAsk interface members
public:
STDMETHOD( GetNodeOfType ) ( REFGUID nodetype, ISakNode** ppUiNode );
STDMETHOD( GetHsmServer ) ( IHsmServer** ppHsmServer );
STDMETHOD( GetRmsServer ) ( IRmsServer** ppRmsServer );
STDMETHOD( GetFsaServer ) ( IFsaServer** ppFsaServer );
STDMETHOD( RefreshNode ) ( ISakNode* pNode );
STDMETHOD( UpdateAllViews ) ( ISakNode* pUnkNode );
STDMETHOD( ShowPropertySheet )( ISakNode* pUnkNode, IDataObject *pDataObject, INT initialPage );
STDMETHOD( GetHsmName ) ( OUT OLECHAR ** pszName OPTIONAL );
STDMETHOD( GetState ) ();
STDMETHOD( Disable ) ( IN BOOL Disable = TRUE );
STDMETHOD( IsDisabled ) ( );
STDMETHOD( CreateWizard ) ( IN ISakWizard * pWizard );
STDMETHOD( DetachFromNode ) ( IN ISakNode* pNode );
// Pseudo Constructor / Destructor
public:
HRESULT FinalConstruct();
void FinalRelease();
ULONG InternalAddRef( );
ULONG InternalRelease( );
// helper method utilized by Data Object Functions
private:
HRESULT Retrieve ( const void* pBuffer, DWORD len, LPSTGMEDIUM lpMedium );
HRESULT RetrieveDisplayName ( LPSTGMEDIUM lpMedium );
HRESULT RetrieveNodeTypeData( LPSTGMEDIUM lpMedium );
HRESULT RetrieveNodeTypeStringData( LPSTGMEDIUM lpMedium );
HRESULT RetrieveClsid ( LPSTGMEDIUM lpMedium );
static UINT m_cfDisplayName;
static UINT m_cfNodeType;
static UINT m_cfNodeTypeString;
static UINT m_cfClassId;
// Methods to work with the image lists
private:
HRESULT OnAddImages();
// Methods to work between cookie, DataObject, and ISakNode*
public:
HRESULT GetBaseHsmFromDataObject ( IDataObject * pDataObject, ISakNode ** ppBaseHsm, IEnumGUID **ppObjectId = NULL, IEnumUnknown **ppUnkNode = NULL );
HRESULT GetBaseHsmFromCookie ( MMC_COOKIE Cookie, ISakNode ** ppBaseHsm );
HRESULT GetDataObjectFromBaseHsm ( ISakNode * pBaseHsm, IDataObject**ppDataObject );
HRESULT GetDataObjectFromCookie ( MMC_COOKIE Cookie, IDataObject**ppDataObject );
HRESULT GetCookieFromBaseHsm ( ISakNode * pBaseHsm, MMC_COOKIE * pCookie );
HRESULT IsDataObjectMs ( IDataObject *pDataObject );
HRESULT IsDataObjectOt ( IDataObject *pDataObject );
HRESULT IsDataObjectMultiSelect ( IDataObject *pDataObject );
// Helpers for un-ravelling multi-select data objects
private:
HRESULT GetBaseHsmFromMsDataObject ( IDataObject * pDataObject, ISakNode ** ppBaseHsm, IEnumGUID ** ppObjectId, IEnumUnknown **ppEnumUnk );
HRESULT GetBaseHsmFromOtDataObject ( IDataObject * pDataObject, ISakNode ** ppBaseHsm, IEnumGUID ** ppObjectId, IEnumUnknown **ppEnumUnk );
// Methods to work with nodes as data objects
private:
HRESULT SetContextType ( IDataObject* pDataObject, DATA_OBJECT_TYPES type );
// Notify event handlers
protected:
HRESULT OnFolder ( IDataObject *pDataObject, LPARAM arg, LPARAM param );
HRESULT OnShow ( IDataObject *pDataObject, LPARAM arg, LPARAM param );
HRESULT OnSelect ( IDataObject *pDataObject, LPARAM arg, LPARAM param );
HRESULT OnMinimize ( IDataObject *pDataObject, LPARAM arg, LPARAM param );
HRESULT OnContextHelp ( IDataObject *pDataObject, LPARAM arg, LPARAM param );
HRESULT OnRemoveChildren( IDataObject *pDataObject );
HRESULT RemoveChildren( ISakNode *pNode );
// Handle posted (delayed) messages from nodes.
public:
HRESULT InternalUpdateAllViews( MMC_COOKIE Cookie );
HRESULT InternalRefreshNode( MMC_COOKIE Cookie );
HRESULT RefreshNodeEx( ISakNode * pNode );
private:
// Initialize the root node
HRESULT InitializeRootNode( void );
// Guarantee that the children of a particular node are created in our hierarchical list.
friend class CSakSnap;
HRESULT EnsureChildrenAreCreated( ISakNode* pNode );
HRESULT CreateChildNodes( ISakNode* pNode );
// Enumerate the children of a node in scope pane.
HRESULT EnumScopePane( ISakNode* pNode, HSCOPEITEM pParent );
HRESULT FreeEnumChildren( ISakNode* pBaseHsmParent );
// Connection helper functions
HRESULT AffirmServiceConnection(INT ConnType);
HRESULT VerifyConnection(INT ConnType);
HRESULT ClearConnections( );
HRESULT RawConnect(INT ConnType);
HRESULT RunSetupWizard(IHsmServer * pServer );
HRESULT RetargetSnapin( );
// About Helper functions
private:
HRESULT AboutHelper(UINT nID, LPOLESTR* lpPtr);
// Internal Data
private:
static UINT m_CFMachineName;
HRESULT GetServerFocusFromDataObject(IDataObject *pDataObject, CString& HsmName);
// Interface pointers
CComPtr<IConsole> m_pConsole; // Console's IFrame interface
CComPtr<IConsoleNameSpace> m_pNameSpace; // SakSnap interface pointer to scope pane
CComPtr<IImageList> m_pImageScope; // SakSnap interface pointer to scope pane image list
CComPtr<ISakNode> m_pRootNode; // Node tree root
CComPtr<IHsmServer> m_pHsmServer; // Hsm Engine pointer
CComPtr<IRmsServer> m_pRmsServer; // Rms pointer
CComPtr<IFsaServer> m_pFsaServer; // Fsa pointer
CString m_HsmName; // name of Hsm to connect to.
BOOL m_ManageLocal; // To know if we should manage the local server.
BOOL m_PersistManageLocal; // To know if snapin configuration is transient.
BOOL m_RootNodeInitialized; // To know if we need to init node on expand
// Persistence data and functions
BOOL m_IsDirty;
// Store user profile data for the listviews in the property sheets
// Note: result view data is stored in CSakSnap
// COLUMN_WIDTH_SET_PROP_PAGE m_ListViewWidths[MAX_LISTVIEWS];
// USHORT m_cListViewWidths;
void SetDirty( BOOL b = TRUE ) { m_IsDirty = b; }
void ClearDirty() { m_IsDirty = FALSE; }
BOOL ThisIsDirty() { return m_IsDirty; }
BOOL m_State;
void SetState( BOOL State );
BOOL m_FirstTime;
BOOL m_Disabled;
// Variables to track RMS's state separately, since it can be delayed
// in coming up when other services are OK
HRESULT m_HrRmsConnect;
// Static functions
public:
static INT AddImage( UINT rId );
//
// Command Line parsing functions
//
private:
class CParamParse : public CCommandLineInfo {
public:
CParamParse( ) : m_ManageLocal( 0 ), m_SetHsmName( 0 ), m_SetManageLocal( 0 ), m_SetPersistManageLocal( 0 ) { }
virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast );
CString m_HsmName;
BOOL m_ManageLocal;
BOOL m_PersistManageLocal;
BOOL m_SetHsmName;
BOOL m_SetManageLocal;
BOOL m_SetPersistManageLocal;
static const CString m_DsFlag;
};
CParamParse m_Parse;
void InitFromCommandLine( );
CSakDataWnd *m_pWnd;
};
class CSakDataPrimaryImpl : public CSakData,
public CComCoClass<CSakDataPrimaryImpl, &CLSID_HsmAdminDataSnapin>
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_HsmAdminDataSnapin)
virtual const CLSID & GetCoClassID() { return CLSID_HsmAdminDataSnapin; }
virtual const BOOL IsPrimaryImpl() { return TRUE; }
};
class CSakDataExtensionImpl : public CSakData,
public CComCoClass<CSakDataExtensionImpl, &CLSID_HsmAdminDataExtension>
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_HsmAdminDataExtension)
virtual const CLSID & GetCoClassID(){ return CLSID_HsmAdminDataExtension; }
virtual const BOOL IsPrimaryImpl() { return FALSE; }
};
/////////////////////////////////////////////////////////////////////////////
#endif