// cmponent.h : Declaration of CFileMgmtComponent #ifndef __CMPONENT_H_INCLUDED__ #define __CMPONENT_H_INCLUDED__ #include "cookie.h" // CFileMgmtCookie #include "stdcmpnt.h" // CComponent extern CString g_strResultColumnText; extern CString g_strTransportSMB; extern CString g_strTransportSFM; extern CString g_strTransportFPNW; // forward declarations class FileServiceProvider; class CFileMgmtComponentData; class CFileMgmtComponent : public CComponent, public IExtendContextMenu, public IExtendPropertySheet, public IExtendControlbar, public INodeProperties, public IResultDataCompare { public: CFileMgmtComponent(); ~CFileMgmtComponent(); BEGIN_COM_MAP(CFileMgmtComponent) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendControlbar) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IResultDataCompare) COM_INTERFACE_ENTRY(INodeProperties) COM_INTERFACE_ENTRY_CHAIN(CComponent) END_COM_MAP() #if DBG==1 ULONG InternalAddRef() { return CComObjectRoot::InternalAddRef(); } ULONG InternalRelease() { return CComObjectRoot::InternalRelease(); } int dbg_InstID; #endif // DBG==1 // IComponent implemented in CComponent // support methods for IComponent virtual HRESULT ReleaseAll(); virtual HRESULT OnPropertyChange( LPARAM param ); virtual HRESULT OnViewChange( LPDATAOBJECT lpDataObject, LPARAM data, LPARAM hint ); virtual HRESULT OnNotifyRefresh( LPDATAOBJECT lpDataObject ); virtual HRESULT OnNotifySelect( LPDATAOBJECT lpDataObject, BOOL fSelected ); virtual HRESULT Show(CCookie* pcookie, LPARAM arg, HSCOPEITEM hScopeItem); virtual HRESULT OnNotifyAddImages( LPDATAOBJECT lpDataObject, LPIMAGELIST lpImageList, HSCOPEITEM hSelectedItem ); virtual HRESULT OnNotifySnapinHelp (LPDATAOBJECT pDataObject); virtual HRESULT OnNotifyColumnClick( LPDATAOBJECT lpDataObject, LPARAM iColumn, LPARAM uFlags ); HRESULT PopulateListbox(CFileMgmtScopeCookie* pcookie); HRESULT RefreshAllViewsOnSelectedObject( LPDATAOBJECT piDataObject ); virtual HRESULT RefreshAllViews( LPDATAOBJECT lpDataObject ); HRESULT RefreshNewResultCookies( CCookie& refparentcookie ); void UpdateDefaultVerbs(); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetResultViewType)(MMC_COOKIE cookie, LPOLESTR* ppViewType, long* pViewOptions); #ifdef SNAPIN_PROTOTYPER CString m_strDemoName; // Name of the SnapIn prototyper demo CString m_strKeyPrototyper; // "HKLM\Software\Microsoft\MMC\DemoSnapInKey" + m_strDemoName int m_cColumns; // Number of columns in the result pane int m_iImageListLast; // Index of the last image in the imagelist BOOL Prototyper_FInsertColumns(CFileMgmtCookie * pCookie); HRESULT Prototyper_HrPopulateResultPane(CFileMgmtCookie * pCookie); BOOL Prototyper_FAddResultPaneItem(CFileMgmtCookie * pParentCookie, LPCTSTR pszItemName, AMC::CRegKey& regkeySnapinItem); BOOL Prototyper_FAddMenuItems(IContextMenuCallback * pContextMenuCallback, IDataObject * pDataObject); BOOL Prototyper_ContextMenuCommand(LONG lCommandID, IDataObject* piDataObject); int Prototyper_AddIconToImageList(LPCTSTR pszIconPath); #endif // SNAPIN_PROTOTYPER HRESULT LoadIcons(); static HRESULT LoadStrings(); HRESULT LoadColumns( CFileMgmtCookie* pcookie ); HRESULT GetSnapinMultiSelectDataObject( LPDATAOBJECT i_pMMCMultiSelectDataObject, LPDATAOBJECT *o_ppSnapinMultiSelectDataObject ); BOOL DeleteShare(LPDATAOBJECT piDataObject); BOOL DeleteThisOneShare(LPDATAOBJECT piDataObject, BOOL bQuietMode); BOOL CloseSession( LPDATAOBJECT piDataObject ); BOOL CloseThisOneSession(LPDATAOBJECT piDataObject, BOOL bQuietMode); BOOL CloseResource( LPDATAOBJECT piDataObject ); BOOL CloseThisOneResource(LPDATAOBJECT piDataObject, BOOL bQuietMode); // IExtendContextMenu STDMETHOD(AddMenuItems)( IDataObject* piDataObject, IContextMenuCallback* piCallback, long* pInsertionAllowed); STDMETHOD(Command)( LONG lCommandID, IDataObject* piDataObject ); // IExtendPropertySheet STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK pCall, LONG_PTR handle, LPDATAOBJECT pDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT pDataObject); // IExtendControlbar STDMETHOD(SetControlbar)(LPCONTROLBAR pControlbar); STDMETHOD(ControlbarNotify)(MMC_NOTIFY_TYPE event,LPARAM arg,LPARAM param); HRESULT AddToolbar(LPDATAOBJECT pdoScopeIsSelected, BOOL fSelected); HRESULT UpdateToolbar(LPDATAOBJECT pdoResultIsSelected, BOOL fSelected); HRESULT OnToolbarButton(LPDATAOBJECT pDataObject, UINT idButton); HRESULT ServiceToolbarButtonState( LPDATAOBJECT pServiceDataObject, BOOL fSelected ); // IResultDataCompare STDMETHOD(Compare)(LPARAM lUserParam, MMC_COOKIE cookieA, MMC_COOKIE cookieB, int* pnResult); // FILEMGMT_NodeProperties STDMETHOD(GetProperty)( /* [in] */ LPDATAOBJECT pDataObject, /* [in] */ BSTR szPropertyName, /* [out] */ BSTR* pbstrProperty); CFileMgmtComponentData& QueryComponentDataRef() { return (CFileMgmtComponentData&)QueryBaseComponentDataRef(); } public: LPCONTROLBAR m_pControlbar; // CODEWORK should use smartpointer LPTOOLBAR m_pSvcMgmtToolbar; // CODEWORK should use smartpointer LPTOOLBAR m_pFileMgmtToolbar; // CODEWORK should use smartpointer int m_iSortColumn; DWORD m_dwSortFlags; CFileMgmtScopeCookie* m_pViewedCookie; CFileMgmtCookie* m_pSelectedCookie; static const GUID m_ObjectTypeGUIDs[FILEMGMT_NUMTYPES]; static const BSTR m_ObjectTypeStrings[FILEMGMT_NUMTYPES]; BOOL IsServiceSnapin(); FileServiceProvider* GetFileServiceProvider( FILEMGMT_TRANSPORT transport ); inline FileServiceProvider* GetFileServiceProvider( INT iTransport ) { return GetFileServiceProvider((FILEMGMT_TRANSPORT)iTransport); } }; // class CFileMgmtComponent /* // // A pointer to this structure is passed from the property sheets // to the views via MMCPropertyChangeNotify. Two notifications will be passed to all of // the views; first one where fClear==TRUE will instruct all relevant views to dump all // of their cookies, then a second with fClear==FALSE instructs them to reload. // typedef struct _FILEMGMTPROPERTYCHANGE { BOOL fServiceChange; // TRUE -> SvcMgmt change, FALSE -> FileMgmt change LPCTSTR lpcszMachineName; // machine whose properties must be refreshed BOOL fClear; // TRUE -> clear view, FALSE -> reload view } FILEMGMTPROPERTYCHANGE; */ // Enumeration for the icons used enum { iIconSharesFolder = 0, iIconSharesFolderOpen, iIconSMBShare, iIconSFMShare, iIconFPNWShare, iIconSMBResource, iIconSFMResource, iIconFPNWResource, iIconSMBSession, iIconSFMSession, iIconFPNWSession, iIconService, #ifdef SNAPIN_PROTOTYPER iIconPrototyperContainerClosed, iIconPrototyperContainerOpen, iIconPrototyperHTML, iIconPrototyperLeaf, #endif iIconLast // Must be last }; typedef enum _COLNUM_ROOT { COLNUM_ROOT_NAME = 0 } COLNUM_ROOT; typedef enum _COLNUM_SHARES { COLNUM_SHARES_SHARED_FOLDER = 0, COLNUM_SHARES_SHARED_PATH, COLNUM_SHARES_TRANSPORT, COLNUM_SHARES_NUM_SESSIONS, COLNUM_SHARES_COMMENT } COLNUM_SHARES; typedef enum _COLNUM_SESSIONS { COLNUM_SESSIONS_USERNAME = 0, COLNUM_SESSIONS_COMPUTERNAME, COLNUM_SESSIONS_TRANSPORT, COLNUM_SESSIONS_NUM_FILES, COLNUM_SESSIONS_CONNECTED_TIME, COLNUM_SESSIONS_IDLE_TIME, COLNUM_SESSIONS_IS_GUEST } COLNUM_SESSIONS; typedef enum _COLNUM_RESOURCES { COLNUM_RESOURCES_FILENAME = 0, COLNUM_RESOURCES_USERNAME, COLNUM_RESOURCES_TRANSPORT, COLNUM_RESOURCES_NUM_LOCKS, // we don't try to display sharename for now, since // only FPNW has this information COLNUM_RESOURCES_OPEN_MODE } COLNUM_RESOURCES; //typedef enum _COLNUM_SERVICES { // COLNUM_SERVICES_SERVICENAME = 0, // COLNUM_SERVICES_DESCRIPTION, // COLNUM_SERVICES_STATUS, // COLNUM_SERVICES_STARTUPTYPE, // COLNUM_SERVICES_SECURITYCONTEXT, //} COLNUM_SERVICES; // // For context menu // enum { cmServiceStart = 100, cmServiceStop, cmServicePause, cmServiceResume, cmServiceRestart, // Stop + Start cmServiceStartTask, cmServiceStopTask, cmServicePauseTask, cmServiceResumeTask, cmServiceRestartTask, // Stop + Start }; #ifdef SNAPIN_PROTOTYPER BOOL Prototyper_AddMenuItems(IContextMenuCallback* pContextMenuCallback, IDataObject* piDataObject); #endif #endif // ~__CMPONENT_H_INCLUDED__