windows-nt/Source/XPSP1/NT/admin/snapin/schmmgmt/compdata.h
2020-09-26 16:20:57 +08:00

328 lines
8.6 KiB
C++

//
// compdata.h : Declaration of ComponentData
//
// This COM object is primarily concerned with
// the scope pane items.
//
// Cory West <corywest@microsoft.com>
// 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;
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__