WindowsXP-SP1/admin/snapin/filemgmt/cmponent.h
2020-09-30 16:53:49 +02:00

265 lines
9.2 KiB
C++

// 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__