// // compdata.h : Declaration of ComponentData // // This COM object is primarily concerned with // the scope pane items. // // Cory West // Copyright (c) Microsoft Corporation 1997 // #ifndef __COMPDATA_H_INCLUDED__ #define __COMPDATA_H_INCLUDED__ #include "stdcdata.h" // CComponentData #include "persist.h" // PersistStream #include "cookie.h" // Cookie #include "resource.h" // IDS_SCHMMGMT_DESC #include "cmponent.h" // LoadIconsIntoImageList #include "schmutil.h" // Messages used in UpdateAllViews enum { SCHMMGMT_UPDATEVIEW_REFRESH = 0, // This MUST be zero SCHMMGMT_UPDATEVIEW_DELETE_RESULT_ITEM }; /////////////////////////////////////////////////////////////////////////////// // ComponentData class ComponentData : public CComponentData, public IExtendPropertySheet, public IExtendContextMenu, public PersistStream, public CHasMachineName, public CComCoClass< ComponentData, &CLSID_SchmMgmt > { public: friend class ClassGeneralPage; friend class CreateAttributeDialog; friend class CSchmMgmtAdvanced; friend class CSchmMgmtAttributeMembership; friend class CSchmMgmtClassRelationship; friend class CCookieList; // // Use DECLARE_AGGREGATABLE(ComponentData) // if you want your object to support aggregation, // though I don't know why you'd do this. // DECLARE_NOT_AGGREGATABLE( ComponentData ) // // What is this? // DECLARE_REGISTRY( ComponentData, _T("SCHMMGMT.SchemaObject.1"), _T("SCHMMGMT.SchemaObject.1"), IDS_SCHMMGMT_DESC, THREADFLAGS_BOTH ) ComponentData(); ~ComponentData(); BEGIN_COM_MAP( ComponentData ) COM_INTERFACE_ENTRY( IExtendPropertySheet ) COM_INTERFACE_ENTRY( IPersistStream ) COM_INTERFACE_ENTRY( IExtendContextMenu ) COM_INTERFACE_ENTRY_CHAIN( CComponentData ) END_COM_MAP() #if DBG==1 ULONG InternalAddRef() { return CComObjectRoot::InternalAddRef(); } ULONG InternalRelease() { return CComObjectRoot::InternalRelease(); } int dbg_InstID; #endif // // IComponentData // STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)( LPCOMPONENT* ppComponent ); STDMETHOD(QueryDataObject)( MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject ); // // IExtendPropertySheet // STDMETHOD(CreatePropertyPages)( LPPROPERTYSHEETCALLBACK pCall, LONG_PTR handle, LPDATAOBJECT pDataObject ); STDMETHOD(QueryPagesFor)( LPDATAOBJECT pDataObject ); // // IPersistStream // HRESULT STDMETHODCALLTYPE GetClassID( CLSID __RPC_FAR *pClassID ) { *pClassID=CLSID_SchmMgmt; return S_OK; } HRESULT STDMETHODCALLTYPE Load( IStream __RPC_FAR *pStg ); HRESULT STDMETHODCALLTYPE Save( IStream __RPC_FAR *pStgSave, BOOL fSameAsLoad ); // // IExtendContextMenu // STDMETHOD(AddMenuItems)( LPDATAOBJECT piDataObject, LPCONTEXTMENUCALLBACK piCallback, long *pInsertionAllowed ); STDMETHOD(Command)( long lCommandID, LPDATAOBJECT piDataObject ); // // ISnapinHelp2 // STDMETHOD(GetLinkedTopics)(LPOLESTR* lpCompiledHelpFile); // // Needed for Initialize(). // virtual HRESULT LoadIcons( LPIMAGELIST pImageList, BOOL fLoadLargeIcons ); // // Needed for Notify(). // virtual HRESULT OnNotifyExpand( LPDATAOBJECT lpDataObject, BOOL bExpanding, HSCOPEITEM hParent ); virtual HRESULT OnNotifyRelease( LPDATAOBJECT lpDataObject, HSCOPEITEM hItem ); virtual HRESULT OnNotifyDelete( LPDATAOBJECT lpDataObject); // // Needed for GetDisplayInfo(), must be defined by subclass. // virtual BSTR QueryResultColumnText( CCookie& basecookieref, int nCol ); virtual int QueryImage( CCookie& basecookieref, BOOL fOpenImage ); virtual CCookie& QueryBaseRootCookie( ); inline Cookie* ActiveCookie( CCookie* pBaseCookie ) { return ( Cookie*)ActiveBaseCookie( pBaseCookie ); } inline Cookie& QueryRootCookie() { return *m_pRootCookie; } // // CHasMachineName. Used by the snapin framework to store, retrieve // and compare machine names // DECLARE_FORWARDS_MACHINE_NAME( m_pRootCookie ) // // Ads handling routines for inserting dynamic nodes. // HRESULT FastInsertClassScopeCookies( Cookie* pParentCookie, HSCOPEITEM hParentScopeItem ); VOID RefreshScopeView( VOID ); VOID InitializeRootTree( HSCOPEITEM hParent, Cookie * pParentCookie ); private: // context manu item helpers HRESULT _OnRefresh(LPDATAOBJECT lpDataObject); void _OnRetarget(LPDATAOBJECT lpDataObject); void _OnEditFSMO(); void _OnSecurity(); // generic helpers HRESULT _InitBasePaths(); public: // // This is the per snap-in instance data. // // // This cookie lists contains the currently // visible scope data items. // CCookieList g_ClassCookieList; bool m_fViewDefunct; HRESULT DeleteClass( Cookie* pcookie ); // // Error/Status Handling // private: // both should be empty if everything is ok. CString m_sErrorTitle; CString m_sErrorText; CString m_sStatusText; HSCOPEITEM m_hItem; public: // Set's error title & body text. Call it with NULL, NULL to remove void SetError( UINT idsErrorTitle, UINT idsErrorText ); const CString & GetErrorTitle() const { return m_sErrorTitle; } const CString & GetErrorText() const { return m_sErrorText; } BOOL IsErrorSet( void ) const { return !GetErrorTitle().IsEmpty() || !GetErrorText().IsEmpty(); } void SetDelayedRefreshOnShow( HSCOPEITEM hItem ) { m_hItem = hItem; } BOOL IsSetDelayedRefreshOnShow() { return NULL != m_hItem; } HSCOPEITEM GetDelayedRefreshOnShowItem() { ASSERT(IsSetDelayedRefreshOnShow()); return m_hItem; } // Set/Clear Status Text // void SetStatusText( UINT idsStatusText = 0 ); // void ClearStatusText( ) { SetStatusText(); } // // Access permissions // private: BOOL m_fCanChangeOperationsMaster; BOOL m_fCanCreateClass; BOOL m_fCanCreateAttribute; public: BOOL CanChangeOperationsMaster() { return m_fCanChangeOperationsMaster; } BOOL CanCreateClass() { return m_fCanCreateClass; } BOOL CanCreateAttribute() { return m_fCanCreateAttribute; } void SetCanChangeOperationsMaster( BOOL fCanChangeOperationsMaster = FALSE ) { m_fCanChangeOperationsMaster = fCanChangeOperationsMaster; } void SetCanCreateClass( BOOL fCanCreateClass = FALSE ) { m_fCanCreateClass = fCanCreateClass; } void SetCanCreateAttribute( BOOL fCanCreateAttribute = FALSE ) { m_fCanCreateAttribute = fCanCreateAttribute; } // // The schema cache. // SchemaObjectCache g_SchemaCache; BOOLEAN IsSchemaLoaded() { return g_SchemaCache.IsSchemaLoaded(); } HRESULT ForceDsSchemaCacheUpdate( VOID ); BOOLEAN AsynchForceDsSchemaCacheUpdate( VOID ); MyBasePathsInfo* GetBasePathsInfo() { return &m_basePathsInfo;} // // Function to add escape char to the special chars in CN // HRESULT GetSchemaObjectPath( const CString & strCN, CString & strPath, ADS_FORMAT_ENUM formatType = ADS_FORMAT_X500 ); HRESULT GetLeafObjectFromDN( const BSTR bstrDN, CString & strCN ); // Determine what operations are allowed. Optionally returns IADs * to Schema Container HRESULT CheckSchemaPermissions( IADs ** ppADs = NULL ); private: MyBasePathsInfo m_basePathsInfo; Cookie* m_pRootCookie; IADsPathname * m_pPathname; }; #endif // __COMPDATA_H_INCLUDED__