|
|
// This is a part of the Microsoft Management Console.
// Copyright (C) 1995-2001 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Management Console and related
// electronic documentation provided with the interfaces.
#ifndef WSECMGR_SNAPMGR_H
#define WSECMGR_SNAPMGR_H
#include "resource.h" // main symbols
#include "attr.h"
#ifdef INITGUID
#undef INITGUID
#endif
#include <gpedit.h>
#include "uithread.h"
#include "hidwnd.h"
#include "wmihooks.h"
#include "cookie.h"
#define MAX_CONTEXT_MENU_STRLEN 128
struct MENUDATARES { WCHAR szBuffer[MAX_CONTEXT_MENU_STRLEN*2]; UINT uResID; };
struct MENUMAP { MENUDATARES* dataRes; CONTEXTMENUITEM* ctxMenu; };
#define DECLARE_MENU(theClass) \
class theClass \ { \ public: \ static LPCONTEXTMENUITEM GetContextMenuItem() { return GetMenuMap()->ctxMenu; }; \ static MENUMAP* GetMenuMap(); \ };
#define BEGIN_MENU(theClass) \
MENUMAP* theClass::GetMenuMap() {
#define BEGIN_CTX static CONTEXTMENUITEM ctx[] = {
#define CTX_ENTRY(cmdID, fFlags, fInsert) { L"",L"", cmdID, CCM_INSERTIONPOINTID_PRIMARY_TOP /*| fInsert*/, fFlags, 0 },
#define END_CTX { NULL, NULL, 0, 0, 0, 0} };
#define BEGIN_RES static MENUDATARES dataRes[] = {
#define RES_ENTRY(resID) {L"", resID},
#define END_RES { NULL, 0 } };
#define END_MENU \
static MENUMAP menuMap = { dataRes, ctx }; \ return &menuMap; }
enum { // Identifiers for each of the commands to be inserted into the context menu.
IDM_ABOUT, IDM_ADD_ENTRY, IDM_ADD_FILES, IDM_ADD_GROUPS, IDM_ADD_REGISTRY, IDM_ADD_LOC, IDM_ANALYZE, IDM_APPLY, IDM_CUT, IDM_COPY, IDM_DELETE, IDM_GENERATE, IDM_NEW, IDM_PASTE, IDM_REAPPLY, IDM_REFRESH, IDM_RELOAD, IDM_REMOVE, IDM_REVERT, IDM_SAVE, IDM_SAVEAS, IDM_SUMMARY, IDM_ADD_FOLDER, IDM_ADD_ANAL_FILES, IDM_ADD_ANAL_FOLDER, IDM_ADD_ANAL_KEY, IDM_ASSIGN, IDM_SET_DB, IDM_NEW_DATABASE, IDM_OPEN_SYSTEM_DB, IDM_OPEN_PRIVATE_DB, IDM_OBJECT_SECURITY, IDM_DESCRIBE_LOCATION, IDM_DESCRIBE_PROFILE, IDM_IMPORT_POLICY, IDM_IMPORT_LOCAL_POLICY, IDM_EXPORT_POLICY, IDM_EXPORT_LOCALPOLICY, IDM_EXPORT_EFFECTIVE, IDM_VIEW_LOGFILE, IDM_SECURE_WIZARD, IDM_WHAT_ISTHIS };
static HINSTANCE g_hDsSecDll = NULL;
DECLARE_MENU(CSecmgrNodeMenuHolder) DECLARE_MENU(CAnalyzeNodeMenuHolder) DECLARE_MENU(CConfigNodeMenuHolder) DECLARE_MENU(CLocationNodeMenuHolder) DECLARE_MENU(CRSOPProfileNodeMenuHolder) DECLARE_MENU(CSSProfileNodeMenuHolder) DECLARE_MENU(CLocalPolNodeMenuHolder) DECLARE_MENU(CProfileNodeMenuHolder) DECLARE_MENU(CProfileAreaMenuHolder) DECLARE_MENU(CProfileSubAreaMenuHolder) DECLARE_MENU(CProfileSubAreaEventLogMenuHolder) DECLARE_MENU(CAnalyzeAreaMenuHolder) DECLARE_MENU(CAnalyzeGroupsMenuHolder) DECLARE_MENU(CAnalyzeRegistryMenuHolder) DECLARE_MENU(CAnalyzeFilesMenuHolder) DECLARE_MENU(CProfileGroupsMenuHolder) DECLARE_MENU(CProfileRegistryMenuHolder) DECLARE_MENU(CProfileFilesMenuHolder) DECLARE_MENU(CAnalyzeObjectsMenuHolder)
BOOL LoadContextMenuResources(MENUMAP* pMenuMap);
#define UAV_RESULTITEM_ADD 0x0001
#define UAV_RESULTITEM_REMOVE 0x0002
#define UAV_RESULTITEM_UPDATE 0x0004
#define UAV_RESULTITEM_UPDATEALL 0x0008
#define UAV_RESULTITEM_REDRAWALL 0x0010
class CFolder;
typedef struct _tag_SCE_COLUMNINFO { int colID; // The column id.
int nCols; // Number of columns
int nWidth; // The width of the column
} SCE_COLUMNINFO, *PSCE_COLUMNINFO;
typedef struct _tag_SCE_COLINFOARRAY { int iIndex; int nCols; int nWidth[1]; } SCE_COLINFOARRAY, *PSCE_COLINFOARRAY;
/////////////////////////////////////////////////////////////////////////////
// Snapin
INTERNAL* ExtractInternalFormat(LPDATAOBJECT lpDataObject); int AppMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption=NULL, UINT uType=MB_OK|MB_ICONEXCLAMATION, int iSnapin=0);
class CComponentDataImpl: public IComponentData, public IExtendPropertySheet, public IExtendContextMenu, public IPersistStream, public ISceSvcAttachmentData, public ISnapinHelp2, public CComObjectRoot { BEGIN_COM_MAP(CComponentDataImpl) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IPersistStream) COM_INTERFACE_ENTRY(ISceSvcAttachmentData) COM_INTERFACE_ENTRY(ISnapinHelp2) END_COM_MAP() friend class CSnapin; friend class CDataObject;
CComponentDataImpl(); virtual ~CComponentDataImpl(); public:
static DWORD m_GroupMode;
virtual const CLSID& GetCoClassID() = 0; // for both primary and extension implementation
virtual const int GetImplType() = 0; // for both primary and extension implementation
// IComponentData interface members
STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT* ppComponent); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(Destroy)(); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo)(SCOPEDATAITEM* pScopeDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
// IExtendPropertySheet interface
public: STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpIDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject);
// IExtendContextMenu
public: STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, LONG* pInsertionAllowed); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject);
public: // IPersistStream interface members
STDMETHOD(GetClassID)(CLSID *pClassID); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pStm); STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize);
// ISceSvcAttachmentData
STDMETHOD(GetData)(SCESVC_HANDLE sceHandle, SCESVC_INFO_TYPE sceType, PVOID *ppvData, PSCE_ENUMERATION_CONTEXT psceEnumHandle); STDMETHOD(Initialize)(LPCTSTR ServiceName, LPCTSTR TemplateName, LPSCESVCATTACHMENTPERSISTINFO lpSceSvcPersistInfo, SCESVC_HANDLE *sceHandle); STDMETHOD(FreeBuffer)(PVOID pvData); STDMETHOD(CloseHandle)(SCESVC_HANDLE sceHandle);
// ISnapinHelp2 helper function
STDMETHOD(GetHelpTopic)(LPOLESTR *lpCompiledHelpFile)=0; STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile,LPCTSTR szFile); STDMETHOD(GetLinkedTopics)(LPOLESTR* lpCompiledHelpFiles);
// Notify handler declarations
private: HRESULT OnAdd(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnDelete(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnRename(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnExpand(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnSelect(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnContextMenu(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param); HRESULT OnProperties(LPARAM param);
HRESULT OnCopyArea(LPCTSTR szTemplate,FOLDER_TYPES ft); HRESULT OnPasteArea(LPCTSTR szTemplate,FOLDER_TYPES ft); HRESULT OnOpenDataBase(); HRESULT OnNewDatabase(); HRESULT OnAssignConfiguration( SCESTATUS *pSceStatus); HRESULT OnSecureWizard(); HRESULT OnSaveConfiguration(); HRESULT OnImportPolicy(LPDATAOBJECT); HRESULT OnImportLocalPolicy(LPDATAOBJECT); HRESULT OnExportPolicy(BOOL bEffective); HRESULT OnAnalyze(); BOOL GetFolderCopyPasteInfo(FOLDER_TYPES Folder,AREA_INFORMATION *Area, UINT *cf);
#if DBG==1
public: ULONG InternalAddRef() { return CComObjectRoot::InternalAddRef(); } ULONG InternalRelease() { return CComObjectRoot::InternalRelease(); } #endif // DBG==1
// Scope item creation helpers
private: CFolder* FindObject(MMC_COOKIE cookie, POSITION* thePos ); HRESULT CreateFolderList(CFolder* pFolder, FOLDER_TYPES type, POSITION *pPos, INT *Count); INT CComponentDataImpl::AddLocationsToFolderList(HKEY hkey, DWORD dwMode, BOOL bCheckForDupes, POSITION *pPos); BOOL AddTemplateLocation(CFolder *pParent, CString szName, BOOL bIsFileName, BOOL bRefresh); BOOL IsNameInChildrenScopes(CFolder* pParent, LPCTSTR NameStr, MMC_COOKIE *theCookie); CFolder* CreateAndAddOneNode(CFolder* pParent, LPCTSTR Name, LPCTSTR Desc, FOLDER_TYPES type, BOOL bChildren, LPCTSTR szInfFile = NULL, PVOID pData = NULL,DWORD status = 0); void DeleteChildrenUnderNode(CFolder* pParent); void DeleteThisNode(CFolder* pNode); HRESULT DeleteOneTemplateNodes(MMC_COOKIE cookie); void DeleteList(); void EnumerateScopePane(MMC_COOKIE cookie, HSCOPEITEM pParent); BOOL IsScopePaneNode(LPDATAOBJECT lpDataObject); DWORD GetModeBits() { switch (m_Mode) { case SCE_MODE_DOMAIN_COMPUTER: case SCE_MODE_OU_COMPUTER: case SCE_MODE_LOCAL_COMPUTER: case SCE_MODE_REMOTE_COMPUTER: return m_computerModeBits; break;
case SCE_MODE_REMOTE_USER: case SCE_MODE_LOCAL_USER: case SCE_MODE_DOMAIN_USER: case SCE_MODE_OU_USER: return m_userModeBits; break;
default: return m_computerModeBits; break; } };
public: PEDITTEMPLATE GetTemplate(LPCTSTR szInfFile,AREA_INFORMATION aiAirea = AREA_ALL, DWORD *idErr = NULL); BOOL RemovePolicyEntries(PEDITTEMPLATE pet); HRESULT ReloadLocation(CFolder *pFolder); void DeleteTemplate(CString infFile); static BOOL LoadResources(); void LoadSadInfo(BOOL bRequireAnalysis); void UnloadSadInfo(); void RefreshSadInfo(BOOL fRemoveAnalDlg = TRUE); BOOL GetSadLoaded() { return SadLoaded; }; PVOID GetSadHandle() { return SadHandle; }; BOOL GetSadTransStarted() { return SadTransStarted; }; void SetSadTransStarted(BOOL bTrans) { SadTransStarted = bTrans; }; BOOL EngineTransactionStarted(); BOOL EngineCommitTransaction(); BOOL EngineRollbackTransaction(); HRESULT AddDsObjectsToList(LPDATAOBJECT lpDataObject, MMC_COOKIE cookie, FOLDER_TYPES folderType, LPTSTR InfFile); HRESULT AddAnalysisFilesToList(LPDATAOBJECT lpDataObject, MMC_COOKIE cookie, FOLDER_TYPES folderType); HRESULT AddAnalysisFolderToList(LPDATAOBJECT lpDataObject, MMC_COOKIE cookie, FOLDER_TYPES folderType); HRESULT UpdateScopeResultObject(LPDATAOBJECT pDataObj,MMC_COOKIE cookie, AREA_INFORMATION area);
void AddPopupDialog(LONG_PTR nID, CDialog *pDlg); CDialog *GetPopupDialog(LONG_PTR nID); void RemovePopupDialog(LONG_PTR nID);
CDialog * MatchNextPopupDialog( POSITION &pos, LONG_PTR priKey, LONG_PTR *thisPos );
PSCE_COLINFOARRAY GetColumnInfo( FOLDER_TYPES pType ); void SetColumnInfo( FOLDER_TYPES pType, PSCE_COLINFOARRAY pInfo); DWORD SerializeColumnInfo(IStream *pStm, ULONG *pTotalWrite, BOOL bRead); void CloseAnalysisPane(); BOOL LockAnalysisPane(BOOL bLock, BOOL fRemoveAnalDlg = TRUE); HWND GetParentWindow() { return m_hwndParent; } LPNOTIFY GetNotifier() { return m_pNotifier; }
DWORD UpdateObjectStatus( CFolder *pParent, BOOL bUpdateThis = FALSE );
int RefreshAllFolders();
public: //
// Information functions.
//
CFolder *GetAnalFolder() { return m_AnalFolder; };
LPCONSOLENAMESPACE GetNameSpace() { return m_pScope; };
DWORD GetComponentMode() { return m_Mode; };
LPCONSOLE GetConsole() { return m_pConsole; };
CWMIRsop * GetWMIRsop() { if (!m_pWMIRsop) { m_pWMIRsop = new CWMIRsop(m_pRSOPInfo); } return m_pWMIRsop; }
void SetErroredLogFile( LPCTSTR pszFileName, LONG dwPosLow = 0);
LPCTSTR GetErroredLogFile( LONG *dwPosLow = NULL) { if(dwPosLow) *dwPosLow = m_ErroredLogPos; return m_pszErroredLogFile; };
void SetFlags( DWORD dwFlags, DWORD dwMask = -1) { m_dwFlags = dwFlags | (dwMask & m_dwFlags); }; public: //
// UI add function helpers
//
HRESULT GetAddObjectSecurity( // Gets valid object security settings
HWND hwndParent, LPCTSTR strFile, BOOL bContainer, SE_OBJECT_TYPE SeType, PSECURITY_DESCRIPTOR &pSelSD, SECURITY_INFORMATION &SelSeInfo, BYTE &ConfigStatus );
BOOL GetWorkingDir( GWD_TYPES uIDDir, LPTSTR *pStr, BOOL bSet = FALSE, BOOL bFile = FALSE ); public: DWORD GetGroupMode(); enum { flag_showLogFile = 0x00000001 }; LPRSOPINFORMATION m_pRSOPInfo;
private: bool m_bEnumerateScopePaneCalled; LPCONSOLENAMESPACE m_pScope; // My interface pointer to the scope pane
LPCONSOLE m_pConsole;
BOOL m_bIsDirty; BOOL m_bIsLocked;
CString SadName; CString SadDescription; CString SadAnalyzeStamp; CString SadConfigStamp; BOOL SadLoaded; SCESTATUS SadErrored; PVOID SadHandle; BOOL SadTransStarted; DWORD m_nNewTemplateIndex; DWORD m_Mode; // The Mode we are in
DWORD m_computerModeBits; // Bits describing functionality changes in this mode
DWORD m_userModeBits; // Bits describing functionality changes in this mode
// The name of the template file for MB_SINGLE_TEMPLATE_ONLY modes
LPTSTR m_szSingleTemplateName; BOOL m_bDeleteSingleTemplate; // True if we need to delete the template on exit
void SetDirty(BOOL b = TRUE) { m_bIsDirty = b; } void ClearDirty() { m_bIsDirty = FALSE; } BOOL ThisIsDirty() { return m_bIsDirty; } void AddScopeItemToResultPane(MMC_COOKIE cookie); HRESULT AddAttrPropPages(LPPROPERTYSHEETCALLBACK lpProvider,CFolder *pFolder,LONG_PTR handle); BOOL m_bComputerTemplateDirty; CMap<CString, LPCTSTR, PEDITTEMPLATE, PEDITTEMPLATE&> m_Templates; BOOL m_fSvcNotReady; HWND m_hwndParent; CHiddenWnd *m_pNotifier;
CFolder * m_AnalFolder; CFolder * m_ConfigFolder; CList<CFolder*, CFolder*> m_scopeItemList; CMap<LONG_PTR, LONG_PTR, CDialog *, CDialog *&> m_scopeItemPopups; LPGPEINFORMATION m_pGPTInfo; CWinThread *m_pUIThread; // The thread that creates dialog boxes for this component data item
CString m_strDisplay; // The static display string used for GetDisplayInfo
CString m_strTempFile; // The temporary file name to delete for HTML error pages
LPTSTR m_pszErroredLogFile; // Error log.
LONG m_ErroredLogPos; // The last write position of the error log file.
DWORD m_dwFlags;
CMap<FOLDER_TYPES, FOLDER_TYPES, PSCE_COLINFOARRAY, PSCE_COLINFOARRAY&> m_mapColumns; CMap<UINT, UINT, LPTSTR, LPTSTR&> m_aDirs; CWMIRsop *m_pWMIRsop;
CRITICAL_SECTION csAnalysisPane; BOOL m_bCriticalSet; };
//
// define classes for differnt class IDs
//
#define SCE_IMPL_TYPE_EXTENSION 1
#define SCE_IMPL_TYPE_SCE 2
#define SCE_IMPL_TYPE_SAV 3
#define SCE_IMPL_TYPE_LS 4
#define SCE_IMPL_TYPE_RSOP 4
// extension snapin implementation
class CComponentDataExtensionImpl : public CComponentDataImpl, // public ISnapinHelp,
public CComCoClass<CComponentDataExtensionImpl, &CLSID_Snapin> { //BEGIN_COM_MAP(CComponentDataExtensionImpl)
// COM_INTERFACE_ENTRY(ISnapinHelp)
//END_COM_MAP()
public: DECLARE_REGISTRY(CSnapin, _T("Wsecedit.Extension.1"), _T("Wsecedit.Extension"), IDS_EXTENSION_DESC, THREADFLAGS_BOTH)
virtual const CLSID & GetCoClassID() { return CLSID_Snapin; } virtual const int GetImplType() { return SCE_IMPL_TYPE_EXTENSION; } // ISnapinHelp2
STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile); };
// RSOP extension snapin implementation
class CComponentDataRSOPImpl : public CComponentDataImpl, public CComCoClass<CComponentDataRSOPImpl, &CLSID_RSOPSnapin> { //BEGIN_COM_MAP(CComponentDataRSOPImpl)
// COM_INTERFACE_ENTRY(ISnapinHelp)
//END_COM_MAP()
public: DECLARE_REGISTRY(CSnapin, _T("Wsecedit.RSOP.1"), _T("Wsecedit.RSOP"), IDS_RSOP_DESC, THREADFLAGS_BOTH)
virtual const CLSID & GetCoClassID() { return CLSID_RSOPSnapin; } virtual const int GetImplType() { return SCE_IMPL_TYPE_RSOP; } // ISnapinHelp2
STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile); };
// SCE standalone snapin implementation
class CComponentDataSCEImpl : public CComponentDataImpl, public CComCoClass<CComponentDataSCEImpl, &CLSID_SCESnapin> { //BEGIN_COM_MAP(CComponentDataSCEImpl)
// COM_INTERFACE_ENTRY(ISnapinHelp)
//END_COM_MAP()
public: DECLARE_REGISTRY(CSnapin, _T("Wsecedit.SCE.1"), _T("Wsecedit.SCE"), IDS_SCE_DESC, THREADFLAGS_BOTH)
virtual const CLSID & GetCoClassID() { return CLSID_SCESnapin; } virtual const int GetImplType() { return SCE_IMPL_TYPE_SCE; } // ISnapinHelp2
STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile); };
// SAV standalone snapin implementation
class CComponentDataSAVImpl : public CComponentDataImpl, public CComCoClass<CComponentDataSAVImpl, &CLSID_SAVSnapin> { //BEGIN_COM_MAP(CComponentDataSAVImpl)
// COM_INTERFACE_ENTRY(ISnapinHelp)
//END_COM_MAP()
public: DECLARE_REGISTRY(CSnapin, _T("Wsecedit.SAV.1"), _T("Wsecedit.SAV"), IDS_SAV_DESC, THREADFLAGS_BOTH)
virtual const CLSID & GetCoClassID() { return CLSID_SAVSnapin; } virtual const int GetImplType() { return SCE_IMPL_TYPE_SAV; } // ISnapinHelp2
STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile); };
// LS standalone snapin implementation
class CComponentDataLSImpl : public CComponentDataImpl, public CComCoClass<CComponentDataLSImpl, &CLSID_LSSnapin> { //BEGIN_COM_MAP(CComponentDataLSImpl)
// COM_INTERFACE_ENTRY(ISnapinHelp)
//END_COM_MAP()
public: DECLARE_REGISTRY(CSnapin, _T("Wsecedit.LS.1"), _T("Wsecedit.LS"), IDS_LS_DESC, THREADFLAGS_BOTH)
virtual const CLSID & GetCoClassID() { return CLSID_LSSnapin; } virtual const int GetImplType() { return SCE_IMPL_TYPE_LS; } // ISnapinHelp2
STDMETHOD(GetHelpTopic)(LPOLESTR *pszHelpFile); };
class CSnapin : public IComponent, public IExtendContextMenu, // Step 3
public IExtendPropertySheet, public IExtendControlbar, public IResultDataCompare, public CComObjectRoot { public: CSnapin(); virtual ~CSnapin();
BEGIN_COM_MAP(CSnapin) COM_INTERFACE_ENTRY(IComponent) COM_INTERFACE_ENTRY(IExtendContextMenu) COM_INTERFACE_ENTRY(IExtendPropertySheet) COM_INTERFACE_ENTRY(IExtendControlbar) COM_INTERFACE_ENTRY(IResultDataCompare) END_COM_MAP()
friend class CDataObject; friend class CComponentDataImpl; static long lDataObjectRefCount; static CList<CResult*, CResult*> m_PropertyPageList;
// IComponent interface members
public: STDMETHOD(Initialize)(LPCONSOLE lpConsole); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param); STDMETHOD(Destroy)(MMC_COOKIE cookie); STDMETHOD(GetResultViewType)(MMC_COOKIE cookie, LPOLESTR* ppViewType, LONG* pViewOptions); STDMETHOD(QueryDataObject)(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject);
STDMETHOD(GetDisplayInfo)(RESULTDATAITEM* pResultDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
// IResultDataCompare
STDMETHOD(Compare)(LPARAM lUserParam, MMC_COOKIE cookieA, MMC_COOKIE cookieB, int* pnResult);
// IExtendControlbar
STDMETHOD(SetControlbar)(LPCONTROLBAR pControlbar); STDMETHOD(ControlbarNotify)(MMC_NOTIFY_TYPE event, MMC_COOKIE arg, MMC_COOKIE param);
// Helpers for CSnapin
public: void SetIComponentData(CComponentDataImpl* pData); int GetImplType() { CComponentDataImpl *pData = dynamic_cast<CComponentDataImpl*>(m_pComponentData); ASSERT(pData != NULL); if (pData != NULL) return pData->GetImplType();
return 0; }
#if DBG==1
public: int dbg_cRef; ULONG InternalAddRef() { ++dbg_cRef; return CComObjectRoot::InternalAddRef(); } ULONG InternalRelease() { --dbg_cRef; return CComObjectRoot::InternalRelease(); } #endif // DBG==1
// Notify event handlers
protected: HRESULT OnFolder(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnShow(LPDATAOBJECT pDataObj, MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnActivate(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnMinimize(MMC_COOKIE cookie, LPARAM arg, LPARAM param); HRESULT OnPropertyChange(LPDATAOBJECT lpDataObject); // Step 3
HRESULT OnUpdateView(LPDATAOBJECT lpDataObject,LPARAM data, LPARAM hint); HRESULT OnDeleteObjects(LPDATAOBJECT lpDataObject,DATA_OBJECT_TYPES cctType, MMC_COOKIE cookie, LPARAM arg, LPARAM param); // IExtendContextMenu
public: PEDITTEMPLATE GetTemplate(LPCTSTR szInfFile, AREA_INFORMATION aiArea = AREA_ALL,DWORD *idErr = NULL); PSCE_PROFILE_INFO GetBaseInfo(PSCE_PROFILE_INFO *pBaseInfo, DWORD dwArea, PSCE_ERROR_LOG_INFO *ErrBuf =NULL ); STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, LONG* pInsertionAllowed); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject);
// IExtendPropertySheet interface
public: STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, LPDATAOBJECT lpIDataObject); STDMETHOD(QueryPagesFor)(LPDATAOBJECT lpDataObject);
// Helper functions
protected: CResult* FindResult(MMC_COOKIE cookie, POSITION* thePos); void Construct(); void LoadResources(); HRESULT InitializeHeaders(MMC_COOKIE cookie);
void EnumerateResultPane(MMC_COOKIE cookie, HSCOPEITEM pParent, LPDATAOBJECT pDataObj); void CreateProfileResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo,LPDATAOBJECT pDataObj); void CreateAnalysisResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo, PEDITTEMPLATE pBase,LPDATAOBJECT pDataObj); void CreateLocalPolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pLocal, PEDITTEMPLATE pEffective,LPDATAOBJECT pDataObj); void CreateObjectResultList(MMC_COOKIE cookie, FOLDER_TYPES type, AREA_INFORMATION Area, PSCE_OBJECT_CHILDREN pObjList, PVOID pHandle, LPDATAOBJECT pDataObj ); void CreateProfServiceResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo,LPDATAOBJECT pDataObj); void CreateAnalysisServiceResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo, PEDITTEMPLATE pBase, LPDATAOBJECT pDataObj );
void DeleteServiceResultList(MMC_COOKIE); HRESULT EditThisService(CResult *pData, MMC_COOKIE cookie, RESULT_TYPES rsltType, HWND hwndParent); HRESULT GetDisplayInfoForServiceNode(RESULTDATAITEM *pResult, CFolder *pFolder, CResult *pData); void DeleteList(BOOL bDeleteResultItem);
void CreateProfilePolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo,LPDATAOBJECT pDataObj); void CreateAnalysisPolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo, PEDITTEMPLATE pBase,LPDATAOBJECT pDataObj ); void CreateProfileRegValueList(MMC_COOKIE cookie, PEDITTEMPLATE pSceInfo,LPDATAOBJECT pDataObj ); void CreateAnalysisRegValueList(MMC_COOKIE cookie, PEDITTEMPLATE pSceInfo, PEDITTEMPLATE pBase,LPDATAOBJECT pDataObj,RESULT_TYPES type ); HRESULT EditThisRegistryValue(CResult *pData, MMC_COOKIE cookie, RESULT_TYPES rsltType); HRESULT AddAttrPropPages(LPPROPERTYSHEETCALLBACK lpProvider,CResult *pResult,LONG_PTR handle);
// Result pane helpers
public: void SetupLinkServiceNodeToBase(BOOL bAdd, LONG_PTR theNode); void AddServiceNodeToProfile(PSCE_SERVICES pNode); int SetAnalysisInfo(ULONG_PTR dwItem, ULONG_PTR dwNew, CResult *pResult = NULL); int SetLocalPolInfo(ULONG_PTR dwItem, ULONG_PTR dwNew); void TransferAnalysisName(LONG_PTR dwItem); BOOL UpdateLocalPolRegValue( CResult * ); LPTSTR GetAnalTimeStamp();
CResult * AddResultItem(LPCTSTR Attrib, LONG_PTR setting, LONG_PTR base, RESULT_TYPES type, int status,MMC_COOKIE cookie, BOOL bVerify = FALSE, LPCTSTR unit = NULL, LONG_PTR nID = -1, PEDITTEMPLATE pBaseInfo = NULL, LPDATAOBJECT pDataObj = NULL, CResult *pResult = NULL, long hID = 0);
CResult * AddResultItem(UINT rID, LONG_PTR setting, LONG_PTR base, RESULT_TYPES type, int status, MMC_COOKIE cookie, BOOL bVerify = FALSE, PEDITTEMPLATE pBaseInfo = NULL, LPDATAOBJECT pDataObj = NULL, long hID = 0);
void AddResultItem(LPCTSTR szName,PSCE_GROUP_MEMBERSHIP grpTemplate, PSCE_GROUP_MEMBERSHIP grpInspect,MMC_COOKIE cookie, LPDATAOBJECT pDataObj);
HRESULT InitializeBitmaps(MMC_COOKIE cookie); HWND GetParentWindow() { return m_hwndParent; }
BOOL CheckEngineTransaction();
// UI Helpers
void HandleStandardVerbs(LPARAM arg, LPDATAOBJECT lpDataObject);
void GetHelpTopic(long itemID, CString& helpTopic);
public: LPCONSOLE GetConsole() { return m_pConsole; };
DWORD UpdateAnalysisInfo( // Effects priviledge areas only.
CResult *pResult, BOOL bDelete, PSCE_PRIVILEGE_ASSIGNMENT *pInfo, LPCTSTR pszName = NULL ); DWORD UpdateLocalPolInfo( // Effects priviledge areas only.
CResult *pResult, BOOL bDelete, PSCE_PRIVILEGE_ASSIGNMENT *pInfo, LPCTSTR pszName = NULL );
DWORD GetResultItemIDs( CResult *pResult, HRESULTITEM *pIDArray, int nIDArray );
LPRESULTDATA GetResultPane() { return m_pResult; };
CFolder* GetSelectedFolder() { return m_pSelectedFolder; };
DWORD GetModeBits() { switch (((CComponentDataImpl *)m_pComponentData)->m_Mode) { case SCE_MODE_DOMAIN_COMPUTER: case SCE_MODE_OU_COMPUTER: case SCE_MODE_LOCAL_COMPUTER: case SCE_MODE_REMOTE_COMPUTER: return ((CComponentDataImpl *)m_pComponentData)->m_computerModeBits; break;
case SCE_MODE_REMOTE_USER: case SCE_MODE_LOCAL_USER: case SCE_MODE_DOMAIN_USER: case SCE_MODE_OU_USER: return ((CComponentDataImpl *)m_pComponentData)->m_userModeBits; break;
default: return ((CComponentDataImpl *)m_pComponentData)->m_computerModeBits; break; } }
CWMIRsop* GetWMIRsop() { return ((CComponentDataImpl *)m_pComponentData)->GetWMIRsop(); }
LPCONSOLEVERB GetConsoleVerb() {return m_pConsoleVerb;}; void AddPropertyPageRef(CResult* pData); void ReleasePropertyPage(CResult* pData); long GetUserRightAssignmentItemID(LPCWSTR szItem);
// Interface pointers
protected: LPCONSOLE m_pConsole; // Console's IFrame interface
LPHEADERCTRL m_pHeader; // Result pane's header control interface
LPCOMPONENTDATA m_pComponentData; LPRESULTDATA m_pResult; // My interface pointer to the result pane
LPIMAGELIST m_pImageResult; // My interface pointer to the result pane image list
LPTOOLBAR m_pToolbar1; // Toolbar for view
LPTOOLBAR m_pToolbar2; // Toolbar for view
LPCONTROLBAR m_pControlbar; // control bar to hold my tool bars
LPCONSOLEVERB m_pConsoleVerb; // pointer the console verb
LPTSTR m_szAnalTimeStamp;
CBitmap* m_pbmpToolbar1; // Imagelist for the first toolbar
CBitmap* m_pbmpToolbar2; // Imagelist for the first toolbar
// Header titles for each nodetype(s)
protected: CString m_multistrDisplay; CString m_colName; // Name
CString m_colDesc; // Description
CString m_colAttr; // Attribute
CString m_colBaseAnalysis; // Baseline setting for Analysis
CString m_colBaseTemplate; // Baseline setting for Template
CString m_colLocalPol; // Local policy setting
CString m_colSetting; // Current Setting
// result data
private: HINSTANCE hinstAclUI; //CList<CResult*, CResult*> m_resultItemList;
CMap<LONG_PTR, LONG_PTR, CAttribute *, CAttribute *&> m_resultItemPopups; CMap<LONG_PTR, LONG_PTR, CPropertySheet *, CPropertySheet *&> m_resultItemPropSheets; MMC_COOKIE m_ShowCookie; CWinThread *m_pUIThread; HWND m_hwndParent; CHiddenWnd *m_pNotifier;
HANDLE m_resultItemHandle; CFolder *m_pSelectedFolder;
CString m_strDisplay; int m_nColumns; };
inline void CSnapin::SetIComponentData(CComponentDataImpl* pData) { ASSERT(pData); //Validate pData and m_pComponentData.
ASSERT(m_pComponentData == NULL); if( !pData ) //Raid #550912, yanggao.
{ return; } LPUNKNOWN pUnk = pData->GetUnknown(); HRESULT hr;
hr = pUnk->QueryInterface(IID_IComponentData, reinterpret_cast<void**>(&m_pComponentData)); ASSERT(hr == S_OK); }
#define FREE_INTERNAL(pInternal) \
ASSERT(pInternal != NULL); \ do { if (pInternal != NULL) \ GlobalFree(pInternal); } \ while(0);
void ConvertNameListToString(PSCE_NAME_LIST pList, LPTSTR *sz, BOOL fReverse=FALSE); int GetScopeImageIndex( FOLDER_TYPES type, DWORD status = -1 ); int GetResultImageIndex( CFolder* pFolder, CResult* pResult );
// Cliboard Types
// Policy Area includes the Privileges Area
#define CF_SCE_ACCOUNT_AREA TEXT("CF_SCE_ACCOUNT_AREA")
#define CF_SCE_EVENTLOG_AREA TEXT("CF_SCE_EVENTLOG_AREA")
#define CF_SCE_LOCAL_AREA TEXT("CF_SCE_LOCAL_AREA")
#define CF_SCE_GROUPS_AREA TEXT("CF_SCE_GROUPS_AREA")
#define CF_SCE_REGISTRY_AREA TEXT("CF_SCE_REGISTRY_AREA")
#define CF_SCE_FILE_AREA TEXT("CF_SCE_FILE_AREA")
#define CF_SCE_SERVICE_AREA TEXT("CF_SCE_SERVICE_AREA")
extern UINT cfSceAccountArea; // in snapmgr.cpp
extern UINT cfSceEventLogArea; // in snapmgr.cpp
extern UINT cfSceLocalArea; // in snapmgr.cpp
extern UINT cfSceGroupsArea; // in snapmgr.cpp
extern UINT cfSceRegistryArea; // in snapmgr.cpp
extern UINT cfSceFileArea; // in snapmgr.cpp
extern UINT cfSceServiceArea; // in snapmgr.cpp
extern SCE_COLUMNINFO g_columnInfo[]; // Default column information.
#define MB_NO_NATIVE_NODES 0x00000001
#define MB_SINGLE_TEMPLATE_ONLY 0x00000002
#define MB_DS_OBJECTS_SECTION 0x00000004
#define MB_NO_TEMPLATE_VERBS 0x00000008
#define MB_STANDALONE_NAME 0x00000010
#define MB_WRITE_THROUGH 0x00000020
#define MB_ANALYSIS_VIEWER 0x00000040
#define MB_TEMPLATE_EDITOR 0x00000080
#define MB_LOCAL_POLICY 0x00000100
#define MB_GROUP_POLICY 0x00000200
#define MB_LOCALSEC 0x00000400
#define MB_READ_ONLY 0x00000800
#define MB_RSOP 0x00001000
#define GT_COMPUTER_TEMPLATE (TEXT("[[ Computer Template (not for display) ]]"))
#define GT_LAST_INSPECTION (TEXT("[[ Last Inspected Template (not for display) ]]"))
#define GT_LOCAL_POLICY (TEXT("[[ Local Policy Template (not for display) ]]"))
#define GT_LOCAL_POLICY_DELTA (TEXT("[[ Local Policy Template Changes (not for display) ]]"))
#define GT_EFFECTIVE_POLICY (TEXT("[[ Effective Policy Template (not for display) ]]"))
#define GT_DEFAULT_TEMPLATE (TEXT("[[ Default Template (not for display) ]]"))
#define GT_RSOP_TEMPLATE (TEXT("[[ RSOP Template (not for display) ]]"))
#define SCE_REGISTRY_KEY TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\SeCEdit")
#define SCE_REGISTRY_DEFAULT_TEMPLATE TEXT("DefaultTemplate")
#define DEFAULT_LOCATIONS_KEY SCE_REGISTRY_KEY TEXT("\\DefaultLocations")
#define CONFIGURE_LOG_LOCATIONS_KEY TEXT("ConfigureLog")
#define ANALYSIS_LOG_LOCATIONS_KEY TEXT("AnalysisLog")
#define OPEN_DATABASE_LOCATIONS_KEY TEXT("Database")
#define IMPORT_TEMPLATE_LOCATIONS_KEY TEXT("ImportTemplate")
#define EXPORT_TEMPLATE_LOCATIONS_KEY TEXT("ExportTemplate")
#endif // !WSECMGR_SNAPMGR_H
|