|
|
// CompData.h : ComponentData Implementation classes.
//
// Copyright (c) 1998-1999 Microsoft Corporation
#pragma once
#define MSINFO_COMPDATA_H
#include "StdAfx.h"
#include <atlcom.h>
#ifndef IDS_DESCRIPTION
#include "Resource.h"
#endif // IDS_DESCRIPTION
// This hack is required because we may be building in an environment
// which doesn't have a late enough version of rpcndr.h
#if __RPCNDR_H_VERSION__ < 440
#define __RPCNDR_H_VERSION__ 440
#define MIDL_INTERFACE(x) interface
#endif
#ifndef __mmc_h__
#include <mmc.h> // ..\..\..\public\sdk\inc
#endif // __mmc_h__
#include "DataObj.h"
#include "DataSrc.h"
#include "ScopeMap.h"
#include "SysInfo.h"
#include "chooser.h"
#include "Dialogs.h"
#ifndef IDS_SNAPIN_DESC
#define IDS_SNAPIN_DESC IDS_DESCRIPTION
#endif // IDS_SNAPIN_DESC
#ifndef IDS_EXTENSION_DESC
#define IDS_EXTENSION_DESC IDS_DESCRIPTION
#endif // IDS_EXTENSION_DESC
/*
* CSystemInfoScope - the class interface to the Microsoft Management * Console namespace items of the MSInfo Snap-in. */ class CSystemInfoScope: public IComponentData, public IExtendContextMenu, public IExtendPropertySheet, public IPersistStream, public ISnapinHelp, public CComObjectRoot { BEGIN_COM_MAP(CSystemInfoScope) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(ISnapinHelp) END_COM_MAP()
friend class CDataObject; friend class CCabTool; friend HRESULT CSystemInfo::OnDoubleClick(LPDATAOBJECT); friend HRESULT CSystemInfo::OnRefresh(LPDATAOBJECT); friend STDMETHODIMP CSystemInfo::GetDisplayInfo(LPRESULTDATAITEM); friend STDMETHODIMP CSystemInfo::Notify(LPDATAOBJECT pDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); friend void CSystemInfo::SetInitialVerbState(BOOL); friend HRESULT CSystemInfo::OnPropertyChange(LPDATAOBJECT); friend void CSystemInfo::SetRefreshing(LPARAM lparamMessage);
// Constructors and destructors.
public: CSystemInfoScope(); ~CSystemInfoScope();
public: virtual const CLSID &GetCoClassID() = 0; virtual const BOOL IsPrimaryImpl() = 0;
// IComponentData interface members
public: STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT *ppComponent); STDMETHOD(Destroy)(); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT *ppDataObject); STDMETHOD(GetDisplayInfo)(SCOPEDATAITEM *pScopeDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
// IExtendContextMenu interface members
public: STDMETHOD(AddMenuItems)(LPDATAOBJECT lpDataObject, LPCONTEXTMENUCALLBACK pCallback, long *pInsertionAllowed); STDMETHOD(Command)(long lCommandID, LPDATAOBJECT lpDataObject);
// IExtendPropertySheet interface members
public: STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject);
// IPersistStream interface members
public: STDMETHOD(GetClassID)(CLSID *pClassID); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pReadStream); STDMETHOD(Save)(IStream *pWriteStream, BOOL fClearDirty = TRUE); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize);
// ISnapinHelp interface member
public: STDMETHOD(GetHelpTopic)(LPOLESTR __RPC_FAR *lpCompiledHelpFile);
public: void SaveReport(); void SaveFile(); void PrintReport(); void DoFind(); void OpenFile(); void CloseFile(); void SetSelectedFolder(CFolder *pFolder); BOOL SelectItem(const CString &szPath, int iLine = 0); void SetView(enum DataComplexity, BOOL fViewInitialized = TRUE); MMC_COOKIE RootCookie() { return m_RootCookie; } void WaitForRefresh(); BOOL InRefresh(); void RefreshAsync(CFolder * pFolder, CSystemInfo * pSystemInfo, BOOL fSoftRefresh = TRUE);
// Persistance debug instance variables
private: bool m_bInitializedCD; #ifdef _DEBUG
bool m_bLoadedCD; bool m_bDestroyedCD; #endif // _DEBUG
public: enum CommandID { IDM_SAVEREPORT, IDM_SAVEFILE, IDM_FIND, IDM_PRINT, IDM_TASK_OPENFILE, IDM_TASK_CLOSE, IDM_TASK_FIND, IDM_TASK_SAVEREPORT, IDM_TASK_SAVEFILE, IDM_TASK_PRINT, IDM_TASK_VIEWCAB, IDM_VIEW_ADVANCED, IDM_VIEW_BASIC };
// Private helper functions
private: // AddToTopMenu is a convenience wrapper for AddToMenu
HRESULT AddToTopMenu(LPCONTEXTMENUCALLBACK lpCallback, long lNameResource, long lStatusResource, long lCommandID) { return AddToMenu(lpCallback, lNameResource, lStatusResource, lCommandID, CCM_INSERTIONPOINTID_PRIMARY_TOP, 0L); } // AddToTaskMenu is a convenience wrapper for AddToMenu
HRESULT AddToTaskMenu(LPCONTEXTMENUCALLBACK lpCallback, long lNameResource, long lStatusResource, long lCommandID) { return AddToMenu(lpCallback, lNameResource, lStatusResource, lCommandID, CCM_INSERTIONPOINTID_PRIMARY_TASK, 0L); } // AddToViewMenu is a convenience wrapper for AddToMenu
HRESULT AddToViewMenu(LPCONTEXTMENUCALLBACK lpCallback, long lNameResource, long lStatusResource, long lCommandID, long fFlags) { return AddToMenu(lpCallback, lNameResource, lStatusResource, lCommandID, CCM_INSERTIONPOINTID_PRIMARY_VIEW, fFlags); } HRESULT AddToMenu(LPCONTEXTMENUCALLBACK lpCallback, long lNameResource, long lStatusResource, long lCommandID, long lInsertionPoint, long fFlags);
HRESULT AddToolbarButtons(LPTOOLBAR pToolbar); HRESULT RefreshNameSpace(); HRESULT AddSubMenu(CMenu *pMenu, void *pContext); HRESULT AddRoot(HSCOPEITEM hsiRoot, CFolder **ppFolder); HRESULT AddExtensionRoot(HSCOPEITEM &hsiNode, CFolder **ppFolder); HRESULT ScopeEnumerate(HSCOPEITEM hsiNode, CFolder *pFolder); HRESULT InitializeDialogs(); HRESULT InitializeInternal(); void DestroyInternal(); HRESULT ProcessCommandLine(); HRESULT MessageBox( CString lpszText);
// We can't initialize in the Initialize function, so the real initialization
// happens here.
HRESULT InitializeSource(); HRESULT InitializeView(); BOOL SetMachine(const CString &strMachine); HRESULT PreUIInit(); void PostUIInit();
// Member access function
public: CFolder *pRootCategory() const { return pSource() ? pSource()->GetRootNode() : NULL; } void CloseFindWindow(); void ExecuteFind(long lFindState); void Refresh(CFolder *pfSelected = NULL, CSystemInfo * pSystemInfo = NULL); void StopFind(); LPCTSTR MachineName() const; void DisplayGatherError(DWORD dwError, LPCTSTR szMachineName = NULL);
// Member access functions.
private: LPCONSOLENAMESPACE pScope() const { return m_pScope; } LPCONSOLE pConsole() const { return m_pConsole; } CDataSource *pSource() const { return m_pSource; } void SetSource(CDataSource *pNewSource, BOOL fPreLaunch = FALSE);
// Notify handler declarations
private: // We will probably never implement these methods.
HRESULT OnRemoveChildren(long arg); HRESULT OnExpand(LPDATAOBJECT lpDataObject, LPARAM fExpand, HSCOPEITEM hsiNode); HRESULT OnProperties(LPARAM param);
// Member access functions
private: void SetDirty(BOOL b = TRUE) { m_bIsDirty = b; } void ClearDirty() { SetDirty(FALSE); } BOOL ObjectIsDirty() { return m_bIsDirty; }
// Internal data.
private: LPCONSOLENAMESPACE m_pScope; LPCONSOLE m_pConsole; BOOL m_fViewUninitialized; CDataSource *m_pSource; CMSInfoReportDialog *m_prdReport; CMSInfoSaveDialog *m_prdSave; CMSInfoOpenDialog *m_prdOpen; long m_BasicFlags; long m_AdvancedFlags; CWnd *m_pwConsole; CFindThread *m_pthdFind; HWND m_hwndFind; MMC_COOKIE m_RootCookie; CFolder *m_pfLast; CString *m_pstrCategory; BOOL m_fSelectCategory; CString m_strDeferredLoad; CString m_strDeferredCategories; CString m_strDeferredMachine; BOOL m_fInternalDelete;
// Save a pointer to the last system info object created - this can be used
// to update that status bar when a global refresh is happening.
CSystemInfo * m_pLastSystemInfo;
// As a work around for the problem we're having when compmgmt redirects us,
// we need a variable to save the IUnknown pointer to the console. When we
// get an MMCN_REMOVE_CHILDREN notification, we will set this variable, then
// uninitialize as if we were being unloaded. The next time we get an
// MMCN_EXPAND message, we'll reinitialize as if we were starting up.
LPUNKNOWN m_pSaveUnknown;
// These variables are used to avoid calling SetSource twice on
// initialization with the same parameters.
CDataSource * m_pSetSourceSource; BOOL m_fSetSourcePreLaunch;
// Memory leak problems associated with no call to CSystemInfoScope
// destructor require these to be pointers.
CString *m_pstrMachineName; CString *m_pstrOverrideName;
CString m_strLastMachineName; // in case the new one is bad
private: // Memory lead problems (see above)
CScopeItemMap *m_pmapCategories; BOOL m_bIsDirty; CCabTool *m_pViewCABTool; // tool for viewing CAB contents
};
/*
* CComponentDataPrimaryImpl - The subclass of the main user interface used as * the stand-alone portion of MSInfo. */ class CSystemInfoScopePrimary : public CSystemInfoScope, public CComCoClass<CSystemInfoScopePrimary, &CLSID_MSInfo> { public: CSystemInfoScopePrimary() { } ~CSystemInfoScopePrimary() { }
DECLARE_REGISTRY(CSnapin, _T("MSInfo.Snapin.1"), _T("MSInfo.Snapin"), IDS_SNAPIN_DESC, THREADFLAGS_APARTMENT) virtual const CLSID &GetCoClassID() { return CLSID_MSInfo; } virtual const BOOL IsPrimaryImpl() { return TRUE; } };
/*
* CComponentDataExtensionImpl - The subclass of the main user interface used as * the extension portion of MSInfo. */ class CSystemInfoScopeExtension : public CSystemInfoScope, public CComCoClass<CSystemInfoScopeExtension, &CLSID_Extension> { public: CSystemInfoScopeExtension() { } ~CSystemInfoScopeExtension() { }
DECLARE_REGISTRY(CSnapin, _T("MSInfo.Extension.1"), _T("MSInfo.Extension"), IDS_EXTENSION_DESC, THREADFLAGS_APARTMENT) virtual const CLSID &GetCoClassID() { return CLSID_Extension; } virtual const BOOL IsPrimaryImpl() { return FALSE; } };
|