//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: ndmgrpriv.h (originally ndmgr.idl) // //-------------------------------------------------------------------------- #include "mmcobj.h" #include #include #include #ifndef __ndmgrpriv_h__ #define __ndmgrpriv_h__ #define MMC_INTERFACE(Interface, x) \ extern "C" const IID IID_##Interface; \ struct DECLSPEC_UUID(#x) __declspec(novtable) Interface // forward class declarations class CContextMenuInfo; class CResultViewType; class tstring; class CColumnInfoList; class CConsoleView; class CXMLObject; // interfaces interface INodeType; interface INodeTypesCache; interface IEnumNodeTypes; interface IFramePrivate; interface IScopeDataPrivate; interface IResultDataPrivate; interface IImageListPrivate; interface IPropertySheetNotify; interface INodeCallback; interface IScopeTreeIter; interface IScopeTree; interface IPropertySheetProviderPrivate; interface IDumpSnapins; interface IMMCListView; interface ITaskPadHost; interface IStringTablePrivate; interface ITaskCallback; interface IComCacheCleanup; interface IHeaderCtrlPrivate; interface IMMCClipboardDataObject; interface IMMCClipboardSnapinObject; typedef IFramePrivate* LPFRAMEPRIVATE; typedef IScopeDataPrivate* LPSCOPEDATAPRIVATE; typedef IResultDataPrivate* LPRESULTDATAPRIVATE; typedef IImageListPrivate* LPIMAGELISTPRIVATE; typedef IPropertySheetNotify* LPPROPERTYSHEETNOTIFY; typedef INodeCallback* LPNODECALLBACK; typedef IScopeTreeIter* LPSCOPETREEITER; typedef IScopeTree* LPSCOPETREE; typedef INodeType* LPNODETYPE; typedef INodeTypesCache* LPNODETYPESCACHE; typedef IEnumNodeTypes* LPENUMNODETYPES; typedef IDumpSnapins* LPDUMPSNAPINS; typedef IMMCListView* LPMMCLISTVIEW; typedef ITaskCallback* LPTASKCALLBACK; typedef IComCacheCleanup* LPCOMCACHECLEANUP; typedef IMMCClipboardDataObject* LPCLIPBOARDDATAOBJECT; typedef IMMCClipboardSnapinObject* LPCLIPBOARDSNAPINOBJECT; typedef LONG_PTR HBOOKMARK; typedef LONG_PTR HVIEWSETTINGS; typedef LONG_PTR HPERSISTOR; typedef IPropertySheetProviderPrivate* LPPROPERTYSHEETPROVIDERPRIVATE; typedef struct _TREEITEM * HTREEITEM; // Implements the list save feature (t-dmarm) #define IMPLEMENT_LIST_SAVE // Use to see if the MT Node is valid before referencing the saved pointer in // a property sheet. STDAPI MMCIsMTNodeValid(void* pMTNode, BOOL bReset); // Window class used to store data for property sheets #define MAINFRAME_CLASS_NAME L"MMCMainFrame" // Window class used to store data for property sheets #define DATAWINDOW_CLASS_NAME L"MMCDataWindow" #define WINDOW_DATA_SIZE (sizeof (DataWindowData *)) // Slots for data stored in the data windows #define WINDOW_DATA_PTR_SLOT 0 // Max length of item text in list/tree controls // (including the terminating zero) #define MAX_ITEM_TEXT_LEN 1024 // MID(Menu Identifications) for context menus enum MID_LIST { MID_VIEW = 1, MID_VIEW_LARGE, MID_VIEW_SMALL, MID_VIEW_LIST, MID_VIEW_DETAIL, MID_VIEW_FILTERED, MID_VIEW_HTML, MID_ARRANGE_ICONS, MID_LINE_UP_ICONS, MID_PROPERTIES, MID_CREATE_NEW, MID_TASK, MID_EXPLORE, MID_NEW_TASKPAD_FROM_HERE, MID_OPEN, MID_CUT, MID_COPY, MID_PASTE, MID_DELETE, MID_PRINT, MID_REFRESH, MID_RENAME, MID_CONTEXTHELP, MID_ARRANGE_AUTO, MID_STD_MENUS, MID_STD_BUTTONS, MID_SNAPIN_MENUS, MID_SNAPIN_BUTTONS, MID_LISTSAVE, MID_COLUMNS, MID_CUSTOMIZE, MID_ORGANIZE_FAVORITES, MID_EDIT_TASKPAD, MID_DELETE_TASKPAD, MID_LAST, // this must be last }; class CResultItem; typedef struct _CCLVSortParams { BOOL bAscending; // sort direction int nCol; // Which column to sort on. LPRESULTDATACOMPARE lpResultCompare; // Snap-in component interface LPRESULTDATACOMPAREEX lpResultCompareEx; // " LPARAM lpUserParam; // parameter user passes in BOOL bSetSortIcon; // Sort icon /*[not]*/ needed /* * Bug 414256: We need to save the sort data only if * it is user initiated sort. Is this user initiated? */ BOOL bUserInitiatedSort; } CCLVSortParams; // // This structure is used by MMCPropertyChangeNotify to pass // information from a property sheet to the console. It has routing // information to notify the correct snap-in of a property changed notify. // const DWORD MMC_E_INVALID_FILE = 0x80FF0002; const DWORD MMC_E_SNAPIN_LOAD_FAIL = 0x80FF0003; typedef struct _PROPERTYNOTIFYINFO { LPCOMPONENTDATA pComponentData; // Valid if (fScopePane == TRUE) LPCOMPONENT pComponent; // Valid if (fScopePane == FALSE) BOOL fScopePane; // True if it is for a scope pane item. HWND hwnd; // HWND to console handling the message } PROPERTYNOTIFYINFO; // Context menu types typedef enum _MMC_CONTEXT_MENU_TYPES { MMC_CONTEXT_MENU_DEFAULT = 0, // Normal context menu MMC_CONTEXT_MENU_ACTION = 1, // Action menu button MMC_CONTEXT_MENU_VIEW = 2, // View menu button MMC_CONTEXT_MENU_FAVORITES = 3, // Favorites menu button MMC_CONTEXT_MENU_LAST = 4, } MMC_CONTEXT_MENU_TYPES; DECLARE_HANDLE (HMTNODE); DECLARE_HANDLE (HNODE); // A scope pane handle(lParam) within a view typedef unsigned long MTNODEID; const MTNODEID ROOTNODEID = 1; typedef PROPERTYNOTIFYINFO* LPPROPERTYNOTIFYINFO; // Special cookies (Note: Can't use -1) const LONG_PTR LVDATA_BACKGROUND = -2; const LONG_PTR LVDATA_CUSTOMOCX = -3; const LONG_PTR LVDATA_CUSTOMWEB = -4; const LONG_PTR LVDATA_MULTISELECT = -5; const LONG_PTR LVDATA_ERROR = -10; const LONG_PTR SPECIAL_LVDATA_MIN = -10; const LONG_PTR SPECIAL_LVDATA_MAX = -2; #define IS_SPECIAL_LVDATA(d) (((d) >= SPECIAL_LVDATA_MIN) && ((d) <= SPECIAL_LVDATA_MAX)) typedef struct _SELECTIONINFO { BOOL m_bScope; BOOL m_bBackground; IUnknown* m_pView; // valid for scope seln (CDN_SELECT) MMC_COOKIE m_lCookie; // valid for result item (CCN_SELECT) MMC_CONSOLE_VERB m_eCmdID; BOOL m_bDueToFocusChange; BOOL m_bResultPaneIsOCX; BOOL m_bResultPaneIsWeb; } SELECTIONINFO; typedef struct _HELPDOCINFO { LPCOLESTR m_pszFileName; // File name (same as .msc file) FILETIME m_ftimeCreate; // .msc file creation time FILETIME m_ftimeModify; // .msc file modification time } HELPDOCINFO; // MMC_ILISTPAD_INFO struct: internal form has additional field for clsid typedef struct _MMC_ILISTPAD_INFO { MMC_LISTPAD_INFO info; LPOLESTR szClsid; } MMC_ILISTPAD_INFO; // ***************************************** // CLASS: CTaskPadData // this class represents data set representing one TaskPad // used to request taskpad information from CNode // ***************************************** class CTaskPadData { public: std::wstring strName; CLSID clsidTaskPad; }; typedef std::vector CTaskPadCollection; typedef std::insert_iterator CTaskPadInsertIterator; // ***************************************** // CLASS:CViewExtensionData // this class represents data set representing one ViewExtension // used to request extension information from CNode // ***************************************** class CViewExtensionData { public: std::wstring strURL; std::wstring strName; std::wstring strTooltip; GUID viewID; // unique identifier for the view bool bReplacesDefaultView; }; typedef std::vector CViewExtCollection; typedef std::insert_iterator CViewExtInsertIterator; // The following internal flag corresponding to public view style MMC_ENSUREFOCUSVISIBLE. // The flag is placed in the upper half of a long so it won't conflict with the LVS_* // flags that are passed in the same long to our list control's SetViewStyle method. #define MMC_LVS_ENSUREFOCUSVISIBLE 0x00010000 /* NOTIFICATIONS ============= Notify(dataobject, event, arg, param); For all the MMC_NOTIFY_TYPE events, dataobject = dataobject for cookie, can be NULL when dataobject is not required event = one of the CD_NOTIFY_TYPEs arg and param depend on type, see below. NCLBK_ACTIVATE arg = TRUE if gaining focus NCLBK_BTN_CLICK .... NCLBK_CLICK NCLBK_CONTEXTMENU param = CContextMenuInfo* NCLBK_DBLCLICK NCLBK_DELETE arg = TRUE if scope item FALSE if result item. param = If scope item is being deleted param is unused. If result item is being deleted param is the result items cookie. return = unused. NCLBK_EXPAND arg = TRUE => expand, FALSE => contract NCLBK_EXPANDED arg = TRUE => expanded, FALSE => contracted NCLBK_FOLDER arg = <>0 if expanding, 0 if contracting param = HSCOPEITEM of expanding/contracting item NCLBK_MINIMIZED arg = TRUE if minimized NCLBK_MULTI_SELECT arg = TRUE if due to focus change. param unused NCLBK_PROPERTIES pLParam = (CResultItem*)arg; param unused NCLBK_PROPERTY_CHANGE lpDataObject = NULL lParam = user object NCLBK_NEW_NODE_UPDATE arg = 1 => folder needs to be refreshed arg = 2 => result view needs to be refreshed arg = 3 => both needs to be refreshed NCLBK_RENAME This gets called the first time to query for rename and a second time to do the rename. For the query S_OK or S_FALSE for the return type. After the rename, we will send the new name with a LPOLESTR. MMC_COOKIE lResultItemCookie = (MMC_COOKIE)arg; pszNewName = (LPOLESTR)param; // the new name return = S_OK to allow rename and S_FALSE to disallow rename. NCLBK_SELECT arg = TRUE if the item is selected, FALSE otherwise. param = ptr to SELECTIONINFO. NCLBK_SHOW arg = <>0 if selecting, 0 if deselecting param = HSCOPEITEM of selected/deselected item NCLBK_COLUMN_CLICK param = nCol, the column that was clicked. NCLBK_FINDITEM This message is sent when a result item list with owner data wants to find an item who's name matches a string arg = ptr to RESULTFINDINFO param = ptr to returned item index NCLBK_CACHEHINT This message is sent when the result item list with owner data is about to ask for display info for a range of items. arg = index of start item param = index of end item NCLBK_GETHELPDOC This message is sent to get the path of the combined help topics document. The node manager may update the help doc info. arg = pointer to HELPDOCINFO struct param = pointer to returned path string (LPOLESTR*) NCLBK_LISTPAD This message is sent to tell the snapin that the TaskPad ListView is ready to receive items (if attaching). arg = TRUE if attaching, FALSE if detaching NCLBK_WEBCONTEXTMENU send when the user right clicks on a web page. arg = unused param = unused NCLBK_UPDATEHELPDOC send when console doc is saved to update help file name and file times arg = ptr to current help doc info (HELPDOCINFO*) param = ptr to new help doc info (HELPDOCINFO*) NCLBK_DELETEHELPDOC send when console doc is closed to delete the temp help collection file associated with the document arg - ptr to help doc info (HELPDOCINFO*) param - unused */ typedef enum _NCLBK_NOTIFY_TYPE { NCLBK_NONE = 0x9000, NCLBK_ACTIVATE = 0x9001, NCLBK_CACHEHINT = 0x9002, NCLBK_CLICK = 0x9003, NCLBK_CONTEXTMENU = 0x9004, NCLBK_COPY = 0x9005, NCLBK_CUT = 0x9006, NCLBK_DBLCLICK = 0x9007, NCLBK_DELETE = 0x9008, NCLBK_EXPAND = 0x9009, NCLBK_EXPANDED = 0x900A, NCLBK_FINDITEM = 0x900B, NCLBK_FOLDER = 0x900C, NCLBK_MINIMIZED = 0x900D, NCLBK_MULTI_SELECT = 0x900E, NCLBK_NEW_NODE_UPDATE = 0x900F, NCLBK_PRINT = 0x9011, NCLBK_PROPERTIES = 0x9012, NCLBK_PROPERTY_CHANGE = 0x9013, NCLBK_REFRESH = 0x9015, NCLBK_RENAME = 0x9016, NCLBK_SELECT = 0x9017, NCLBK_SHOW = 0x9018, NCLBK_COLUMN_CLICKED = 0x9019, NCLBK_SNAPINHELP = 0x901D, NCLBK_CONTEXTHELP = 0x901E, NCLBK_INITOCX = 0x9020, NCLBK_FILTER_CHANGE = 0x9021, NCLBK_FILTERBTN_CLICK = 0x9022, NCLBK_TASKNOTIFY = 0x9024, NCLBK_GETPRIMARYTASK = 0x9025, NCLBK_GETHELPDOC = 0x9027, NCLBK_LISTPAD = 0x9029, NCLBK_GETEXPANDEDVISUALLY = 0x902B, NCLBK_SETEXPANDEDVISUALLY = 0x902C, NCLBK_NEW_TASKPAD_FROM_HERE = 0x902D, NCLBK_WEBCONTEXTMENU = 0x902E, NCLBK_UPDATEHELPDOC = 0x902F, NCLBK_EDIT_TASKPAD = 0x9030, NCLBK_DELETE_TASKPAD = 0x9031, NCLBK_DELETEHELPDOC = 0x9032 } NCLBK_NOTIFY_TYPE; /////////////////////////////////////////////////////////////////////////////// // Common Console clipboard formats // // Clipboard format for the multi selected static nodes. // If there are N static nodes are selected in the result pane, the MTNodes // for these N nodes will be passed in a GloballAlloced memory. The first DWORD // contains the number of MTNodes, this will be followed by N ptrs to the MTNodes. // #define CCF_MULTI_SELECT_STATIC_DATA ( L"CCF_MULTI_SELECT_STATIC_DATA" ) #define CCF_NEWNODE ( L"CCF_NEWNODE" ) //const CLSID CLSID_NDMGR_SNAPIN = {0x2640211a, 0x06d0, 0x11d1, {0xa7, 0xc9, 0x00, 0xc0, 0x4f, 0xd8, 0xd5, 0x65}}; extern const CLSID CLSID_NDMGR_SNAPIN; //const GUID GUID_MMC_NEWNODETYPE = {0xfd17e9cc, 0x06ce, 0x11d1, {0xa7, 0xc9, 0x00, 0xc0, 0x4f, 0xd8, 0xd5, 0x65}}; extern const GUID GUID_MMC_NEWNODETYPE; /////////////////////////////////////////////////////////////////////////// /// // helpstring("Notify that the properties of an object changed"), MMC_INTERFACE(IPropertySheetNotify, d700dd8e-2646-11d0-a2a7-00c04fd909dd) : IUnknown { STDMETHOD(Notify)(/*[in]*/ LPPROPERTYNOTIFYINFO pNotify, /*[in]*/ LPARAM lParam) = 0; }; // helpstring("IFramePrivate Interface"), MMC_INTERFACE(IFramePrivate, d71d1f2a-1ba2-11d0-a29b-00c04fd909dd): IConsole3 { /*[helpstring("Sets IFrame Result pane")]*/ STDMETHOD(SetResultView)(/*[in]*/ LPUNKNOWN pUnknown) = 0; /*[helpstring("Is the ListView set as result view")]*/ STDMETHOD(IsResultViewSet)(BOOL* pbIsLVSet) = 0; /*[helpstring("Sets Task Pads list view")]*/ STDMETHOD(SetTaskPadList)(/*[in]*/ LPUNKNOWN pUnknown) = 0; /*[helpstring("IComponent's component ID")]*/ STDMETHOD(GetComponentID)(/*[out]*/ COMPONENTID* lpComponentID) = 0; /*[helpstring("IComponent's component ID")]*/ STDMETHOD(SetComponentID)(/*[in]*/ COMPONENTID id) = 0; /*[helpstring("Node for the view.")]*/ STDMETHOD(SetNode)(/*[in]*/ HMTNODE hMTNode, /*[in]*/ HNODE hNode) = 0; /*[helpstring("Cache the IComponent interface for the snapin.")]*/ STDMETHOD(SetComponent)(/*[in]*/ LPCOMPONENT lpComponent) = 0; /*[helpstring("Console name space.")]*/ STDMETHOD(QueryScopeTree)(/*[out]*/ IScopeTree** ppScopeTree) = 0; /*[helpstring("Set the console name space.")]*/ STDMETHOD(SetScopeTree)(/*[in]*/ IScopeTree* pScopeTree) = 0; /*[helpstring("Creates image list for the scope pane.")]*/ STDMETHOD(CreateScopeImageList)(/*[in]*/ REFCLSID refClsidSnapIn) = 0; /*[helpstring("bExtension is TRUE if this IFrame is used by an extension.")]*/ STDMETHOD(SetUsedByExtension)(/*[in]*/ BOOL bExtension) = 0; /*[helpstring("Init view data.")]*/ STDMETHOD(InitViewData)(/*[in]*/ LONG_PTR lViewData) = 0; /*[helpstring("Clean up view data.")]*/ STDMETHOD(CleanupViewData)(/*[in]*/ LONG_PTR lViewData) = 0; /*[helpstring("Reset the sort parameters after a selection change.")]*/ STDMETHOD(ResetSortParameters)() = 0; }; // helpstring("IScopeDataPrivate Interface"), MMC_INTERFACE(IScopeDataPrivate, 60BD2FE0-F7C5-11cf-8AFD-00AA003CA9F6) : IConsoleNameSpace2 { }; // helpstring("IImageListPrivate Interface"), MMC_INTERFACE(IImageListPrivate, 7538C620-0083-11d0-8B00-00AA003CA9F6) : IImageList { /*[helpstring("Private tree control method used to map images on callbacks")]*/ STDMETHOD(MapRsltImage)(COMPONENTID id, /*[in]*/ int nSnapinIndex, /*[out]*/ int* pnConsoleIndex) = 0; /*[helpstring("Private tree control method used to map images on callbacks")]*/ STDMETHOD(UnmapRsltImage)(COMPONENTID id, /*[in]*/ int nConsoleIndex, /*[out]*/ int* pnSnapinIndex) = 0; }; // helpstring("IResultDataPrivate Interface"), MMC_INTERFACE(IResultDataPrivate, 1EBA2300-0854-11d0-8B03-00AA003CA9F6) : IResultData2 { /*[helpstring("Get the list view style.")]*/ STDMETHOD(GetListStyle)(/*[out]*/ long * pStyle) = 0; /*[helpstring("Set the list view style.")]*/ STDMETHOD(SetListStyle)(/*[in]*/ long Style) = 0; /*[helpstring("Set loading mode of list")]*/ STDMETHOD(SetLoadMode)(/*[in]*/ BOOL bState) = 0; /*[helpstring("Arrange the icons in the result pane")]*/ STDMETHOD(Arrange)(long style) = 0; /*[helpstring("Sort from the Listview header control")]*/ STDMETHOD(InternalSort)(INT nCol, DWORD dwSortOptions, LPARAM lUserParam, BOOL bColumnClicked) = 0; /*[helpstring("Private tree control method used to reset the result view")]*/ STDMETHOD(ResetResultData)() = 0; /*[helpstring("Private listview method to retrieve sort column")]*/ STDMETHOD(GetSortColumn)(INT* pnCol) = 0; /*[helpstring("Private listview method to retrieve sort column")]*/ STDMETHOD(GetSortDirection)(BOOL* pbAscending) = 0; }; // helpstring("IHeaderCtrlPrivate Interface that adds to IHeaderCtrl methods"), MMC_INTERFACE(IHeaderCtrlPrivate, 0B384311-701B-4e8a-AEC2-DA6321E27AD2) : IHeaderCtrl2 { /*[helpstring("Get the number of columns in list view.")]*/ STDMETHOD(GetColumnCount)(/*[in]*/INT* pnCol) = 0; /*[helpstring("Get the current column settings from list view header.")]*/ STDMETHOD(GetColumnInfoList)(/*[out]*/ CColumnInfoList *pColumnsList) = 0; /*[helpstring("Modify the columns in list view with given data.")]*/ STDMETHOD(ModifyColumns)(/*[in]*/ const CColumnInfoList& columnsList) = 0; /*[helpstring("Get the column settings that snapin supplied originally")]*/ STDMETHOD(GetDefaultColumnInfoList)(/*[out]*/ CColumnInfoList& columnsList) = 0; }; // helpstring("Minimum master tree control methods required by node manager."), MMC_INTERFACE(IScopeTree, d8dbf067-5fb2-11d0-a986-00c04fd8d565) : IUnknown { /*[helpstring("Initialize scope tree with the document.")]*/ STDMETHOD(Initialize)(/*[in]*/ HWND hFrameWindow, /*[in]*/ IStringTablePrivate* pStringTable) = 0; /*[helpstring("Query for an iterator to the master tree items.")]*/ STDMETHOD(QueryIterator)(/*[out]*/IScopeTreeIter** lpIter) = 0; /*[helpstring("Query for an node callback interface to access HNODE items.")]*/ STDMETHOD(QueryNodeCallback)(/*[out]*/ INodeCallback** ppNodeCallback) = 0; /*[helpstring("Create a node from the master tree node.")]*/ STDMETHOD(CreateNode)(/*[in]*/ HMTNODE hMTNode, /*[in]*/ LONG_PTR lViewData, /*[in]*/ BOOL fRootNode, /*[out]*/ HNODE* phNode) = 0; /*[helpstring("Do cleanup needed prior to deleting/shutting down view.")]*/ STDMETHOD(CloseView)(/*[in]*/ int nView) = 0; /*[helpstring("Delete all view data for the specified view id.")]*/ STDMETHOD(DeleteView)(/*[in]*/ int nView) = 0; /*[helpstring("Create a node from the master tree node.")]*/ STDMETHOD(DestroyNode)(/*[in]*/ HNODE hNode) = 0; /*[helpstring("Finds the node that matches the ID")]*/ STDMETHOD(Find)(/*[in]*/ MTNODEID mID, /*[out]*/ HMTNODE* phMTNode) = 0; /*[helpstring("Create a node from the master tree node.")]*/ STDMETHOD(GetImageList)(/*[out]*/ PLONG_PTR plImageList) = 0; /*[helpstring("Run snap-in manager")]*/ STDMETHOD(RunSnapIn)(/*[in]*/ HWND hwndParent) = 0; /*[helpstring("Returns the version for the file rooted at the given storage.")]*/ STDMETHOD(GetFileVersion)(/*[in]*/ IStorage* pstgRoot, /*[out]*/ int* pnVersion) = 0; /*[helpstring("Returns the MTNODEID for the node represented by a bookmark")]*/ STDMETHOD(GetNodeIDFromBookmark)(/*[in]*/ HBOOKMARK hbm, /*[out]*/ MTNODEID* pID, /*[out]*/ bool& bExactMatchFound) = 0; /*[helpstring("Loads a bookmark from a stream and returns the MTNODEID for the node.")]*/ STDMETHOD(GetNodeIDFromStream)(/*[in]*/ IStream *pStm, /*[out]*/ MTNODEID* pID) = 0; /*[helpstring("Loads a bookmark from a stream and returns the MTNODEID for the node.")]*/ STDMETHOD(GetNodeFromBookmark)(/*[in]*/ HBOOKMARK hbm, /*[in]*/CConsoleView *pConsoleView, /*[out]*/ PPNODE ppNode, /*[out]*/ bool& bExactMatchFound) = 0; /*[helpstring("Returns the ID path for the given ID")]*/ STDMETHOD(GetIDPath)(/*[in]*/ MTNODEID id, /*[out]*/ MTNODEID** ppIDs, /*[out]*/ long* pLength) = 0; /*[helpstring("Check to see if synchronous node expansion is required")]*/ STDMETHOD(IsSynchronousExpansionRequired)() = 0; /*[helpstring("Sets whether synchronous node expansion is required")]*/ STDMETHOD(RequireSynchronousExpansion)(/*[in]*/ BOOL fRequireSyncExpand) = 0; /*[helpstring("Sets the SConsoleData to use for this scope tree")]*/ STDMETHOD(SetConsoleData)(/*[in]*/ LPARAM lConsoleData) = 0; /*[helpstring("Persists the tree to/from an XML document")]*/ STDMETHOD(Persist)(/*[in]*/ HPERSISTOR hPersistor) = 0; /*[helpstring("Get path between two nodes as a string")]*/ STDMETHOD(GetPathString)(/*[in]*/ HMTNODE hmtnRoot, /*[in]*/ HMTNODE hmtnLeaf, /*[out]*/ LPOLESTR* pPath) = 0; /*[helpstring("Get the SnapIns object")]*/ STDMETHOD(QuerySnapIns)(/*[out]*/ SnapIns **ppSnapIns) = 0; /*[helpstring("Get the ScopeNamespace object")]*/ STDMETHOD(QueryScopeNamespace)(/*[out]*/ ScopeNamespace **ppScopeNamespace) = 0; /*[helpstring("Create an empty Properties object")]*/ STDMETHOD(CreateProperties)(/*[out]*/ Properties **ppProperties) = 0; /*[helpstring("Get scope node id for Node object")]*/ STDMETHOD(GetNodeID)(/*[in]*/ PNODE pNode, /*[out]*/ MTNODEID *pID) = 0; /*[helpstring("Get HMTNODE for Node object")]*/ STDMETHOD(GetHMTNode)(/*[in]*/ PNODE pNode, /*[out]*/ HMTNODE *phMTNode) = 0; /*[helpstring("Get Node object ptr for scope node")]*/ STDMETHOD(GetMMCNode)(/*[in]*/ HMTNODE hMTNode, /*[out]*/ PPNODE ppNode) = 0; /*[helpstring("Get NODE object for Root Node")]*/ STDMETHOD(QueryRootNode)(/*[out]*/ PPNODE ppNode) = 0; /*[helpstring("Check if snapin is used by MMC")]*/ STDMETHOD(IsSnapinInUse)(/*[in]*/ REFCLSID refClsidSnapIn, /*[out]*/ PBOOL pbInUse) = 0; }; // helpstring("Master tree item iterator."), MMC_INTERFACE(IScopeTreeIter, d779f8d1-6057-11d0-a986-00c04fd8d565) : IUnknown { /*[helpstring("Sets the current master tree node.")]*/ STDMETHOD(SetCurrent)(/*[in]*/ HMTNODE hStartMTNode) = 0; /*[helpstring("Moves the iterator forward to the next master node sibling and returns a pointer to the new "current". NULL if none")]*/ STDMETHOD(Next)(/*[out]*/ HMTNODE* phScopeItem) = 0; /*[helpstring("Moves the iterator backward to the prev master node sibling and returns a pointer to the new "current". NULL if none")]*/ STDMETHOD(Prev)(/*[out]*/ HMTNODE* phScopeItem) = 0; /*[helpstring("Returns the child master node.")]*/ STDMETHOD(Child)(/*[out]*/ HMTNODE* phsiChild) = 0; /*[helpstring("Returns the last child master node.")]*/ STDMETHOD(LastChild)(/*[out]*/ HMTNODE* phsiLastChild) = 0; }; // helpstring("Node callback methods."), MMC_INTERFACE(INodeCallback, b241fced-5fb3-11d0-a986-00c04fd8d565) : IUnknown { /*[helpstring("Initialize with the scope tree.")]*/ STDMETHOD(Initialize)(/*[in]*/ IScopeTree* pIScopeTree) = 0; /*[helpstring("Returns the images for this node.")]*/ STDMETHOD(GetImages)(/*[in]*/ HNODE hNode, /*[out]*/ int* iImage, int* iSelectedImage) = 0; /*[helpstring("Returns the display name for node.")]*/ STDMETHOD(GetDisplayName)(/*[in]*/ HNODE hNode, /*[out]*/ tstring& strName) = 0; /*[helpstring("Returns the custom window title for this node")]*/ STDMETHOD(GetWindowTitle)(/*[in]*/ HNODE hNode, /*[out]*/ tstring& strTitle) = 0; /*[helpstring("Handles callback for result items")]*/ STDMETHOD(GetDispInfo)(/*[in]*/ HNODE hNode, /*[in,out]*/ LVITEMW* plvi) = 0; /*[helpstring("Returns the UI state of master node.")]*/ STDMETHOD(GetState)(/*[in]*/ HNODE hNode, /*[out]*/ UINT* pnState) = 0; /*[helpstring("Returns the result pane for the node.")]*/ STDMETHOD(GetResultPane)(/*[in]*/ HNODE hNode, /*[in, out]*/ CResultViewType& rvt, /*[out]*/ GUID *pGuidTaskpadID) = 0; /*[helpstring("Asks the snapin to restore its result pane with given data")]*/ STDMETHOD(RestoreResultView)(/*[in]*/HNODE hNode, /*[in]*/const CResultViewType& rvt) = 0; /*[helpstring("Returns the result pane OCX control for the node.")]*/ STDMETHOD(GetControl)(/*[in]*/ HNODE hNode, /*[in]*/ CLSID clsid, /*[out]*/IUnknown **ppUnkControl) = 0; /*[helpstring("Sets the result pane OCX control for the node.")]*/ STDMETHOD(SetControl)(/*[in]*/ HNODE hNode, /*[in]*/ CLSID clsid, /*[in]*/IUnknown* pUnknown) = 0; /*[helpstring("Returns the result pane OCX control for the node.")]*/ STDMETHOD(GetControl)(/*[in]*/ HNODE hNode, /*[in]*/LPUNKNOWN pUnkOCX, /*[out]*/IUnknown **ppUnkControl) = 0; /*[helpstring("Sets the result pane OCX control for the node.")]*/ STDMETHOD(SetControl)(/*[in]*/ HNODE hNode, /*[in]*/LPUNKNOWN pUnkOCX, /*[in]*/IUnknown* pUnknown) = 0; /*[helpstring("Sends the MMCN_INITOCX notification to the appropriate snapin")]*/ STDMETHOD(InitOCX)(/*[in]*/ HNODE hNode, /*[in]*/ IUnknown* pUnknown) = 0; /*[helpstring("Set the Result Item ID")]*/ //RENAME// STDMETHOD(SetItemID)(/*[in]*/ HNODE hNode, /*[in]*/ HRESULTITEM riID) = 0; STDMETHOD(SetResultItem)(/*[in]*/ HNODE hNode, /*[in]*/ HRESULTITEM hri) = 0; /*[helpstring("Get the Result Item ID")]*/ //RENAME// STDMETHOD(GetItemID)(/*[in]*/ HNODE hNode, /*[out]*/ HRESULTITEM* priID) = 0; STDMETHOD(GetResultItem)(/*[in]*/ HNODE hNode, /*[out]*/ HRESULTITEM* phri) = 0; /*[helpstring("Returns the nodes unique ID")]*/ //RENAME// STDMETHOD(GetID)(/*[in]*/ HNODE hNode, /*[out]*/ MTNODEID* pnID) = 0; STDMETHOD(GetMTNodeID)(/*[in]*/ HNODE hNode, /*[out]*/ MTNODEID* pnID) = 0; /*[helpstring("Determine if node is the target of another")]*/ STDMETHOD(IsTargetNodeOf)(/*[in]*/ HNODE hNode, /*[in]*/ HNODE hTestNode) = 0; /*[helpstring("Returns the nodes static parents MTNODEID and the subsequent path")]*/ STDMETHOD(GetPath)(/*[in]*/ HNODE hNode, /*[in]*/ HNODE hRootNode, /*[out]*/ BYTE* pbm_) = 0; /*[helpstring("Returns the static parent nodes unique ID")]*/ STDMETHOD(GetStaticParentID)(/*[in]*/ HNODE hNode, /*[out]*/ MTNODEID* pnID) = 0; /*[helpstring("Notify")]*/ STDMETHOD(Notify)(/*[in]*/ HNODE hNode, /*[in]*/ NCLBK_NOTIFY_TYPE event, /*[in]*/ LPARAM arg, /*[in]*/ LPARAM param) = 0; /*[helpstring("Returns the parent master node.")]*/ STDMETHOD(GetMTNode)(/*[in]*/ HNODE hNode, /*[out]*/ HMTNODE* phMTNode) = 0; /*[helpstring("The HMTNODE path to the node is returned in pphMTNode")]*/ STDMETHOD(GetMTNodePath)(/*[in]*/ HNODE hNode, /*[out]*/ HMTNODE** pphMTNode, /*[out]*/ long* plLength) = 0; /*[helpstring("Get node's owner ID")]*/ STDMETHOD(GetNodeOwnerID)(/*[in]*/ HNODE hNode, /*[out]*/ COMPONENTID* pID) = 0; /*[helpstring("Get node's cookie")]*/ STDMETHOD(GetNodeCookie)(/*[in]*/ HNODE hNode, /*[out]*/ MMC_COOKIE* lpCookie) = 0; /*[helpstring("Returns S_OK if the node can possibly be expanded, and S_FALSE otherwise.")]*/ STDMETHOD(IsExpandable)(/*[in]*/ HNODE hNode) = 0; /*[helpstring("Return the dataobject for the selected item")]*/ // cookie valid if bScope & bMultiSel are both FALSE. // cookie is the index\lParam for virtual\regular LV STDMETHOD(GetDragDropDataObject)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ BOOL bMultiSel, /*[in]*/ LONG_PTR lvData, /*[out]*/ LPDATAOBJECT* ppDataObject, /*[out]*/ bool& bCopyAllowed, /*[out]*/ bool& bMoveAllowed) = 0; /*[helpstring("Returns the task enumerator.")]*/ STDMETHOD(GetTaskEnumerator)(/*[in]*/ HNODE hNode, /*[in]*/ LPCOLESTR pszTaskGroup, /*[out]*/ IEnumTASK** ppEnumTask) = 0; /*[helpstring("UpdateWindowLayout.")]*/ STDMETHOD(UpdateWindowLayout)(/*[in]*/ LONG_PTR lViewData, /*[in]*/ long lToolbarsDisplayed) = 0; /*[helpstring("AddCustomFolderImage")]*/ STDMETHOD(AddCustomFolderImage)(/*[in]*/ HNODE hNode, /*[in]*/ IImageListPrivate* pImageList) = 0; /*[helpstring("preloads the node if necessary")]*/ STDMETHOD(PreLoad)(/*[in]*/ HNODE hNode) = 0; /*[helpstring("Get the TaskPad ListView information")]*/ STDMETHOD(GetListPadInfo)(/*[in]*/ HNODE hNode, /*[in]*/ IExtendTaskPad* pExtendTaskPad, /*[in,string]*/ LPCOLESTR szTaskGroup, /*[out]*/ MMC_ILISTPAD_INFO* pIListPadInfo) = 0; /*[helpstring("Sets Task Pads list view")]*/ STDMETHOD(SetTaskPadList)(/*[in]*/ HNODE hNode, /*[in]*/ LPUNKNOWN pUnknown) = 0; /*[helpstring("Sets up a specific taskpad, given the GUID identifier.")]*/ STDMETHOD(SetTaskpad)(/*[in]*/ HNODE hNodeSelected, /*[in]*/ GUID *pGuidTaskpad) = 0; /*[helpstring("Invokes the Customize View dialog")]*/ STDMETHOD(OnCustomizeView)(/*[in]*/ LONG_PTR lViewData) = 0; /*[helpstring("Set the view settings for a particular node.")]*/ STDMETHOD(SetViewSettings)(/*[in]*/ int nViewID, /*[in]*/ HBOOKMARK hbm, /*[in]*/ HVIEWSETTINGS hvs) = 0; /*[helpstring("Execute given verb for given scope item")]*/ STDMETHOD(ExecuteScopeItemVerb)(/*[in]*/ MMC_CONSOLE_VERB verb, /*[in]*/ HNODE hNode, /*[in]*/LPOLESTR lpszNewName) = 0; /*[helpstring("Execute given verb for selected result item(s)")]*/ STDMETHOD(ExecuteResultItemVerb)(/*[in]*/ MMC_CONSOLE_VERB verb, /*[in]*/ HNODE hNode, /*[in]*/LPARAM lvData, /*[in]*/LPOLESTR lpszNewName) = 0; /*[helpstring("Get the disp interface for given scope node object")]*/ STDMETHOD(QueryCompDataDispatch)(/*[in]*/ PNODE pNode, /*[out]*/ PPDISPATCH ScopeNodeObject) = 0; /*[helpstring("Get the disp interface for selected resultpane objects")]*/ STDMETHOD(QueryComponentDispatch)(/*[in]*/ HNODE hNode, /*[in]*/LPARAM lvData, /*[out]*/ PPDISPATCH SelectedObject) = 0; /*[helpstring("Creates a context menu for the specified node.")]*/ STDMETHOD(CreateContextMenu)( PNODE pNode, HNODE hNode, PPCONTEXTMENU ppContextMenu) = 0; /*[helpstring("Creates a context menu for the current selection node.")]*/ STDMETHOD(CreateSelectionContextMenu)( HNODE hNodeScope, CContextMenuInfo *pContextInfo, PPCONTEXTMENU ppContextMenu) = 0; /*[helpstring("show/hide column")]*/ STDMETHOD(ShowColumn)(HNODE hNodeSelected, int iColIndex, bool bShow) = 0; /*[helpstring("to get the sort column")]*/ STDMETHOD(GetSortColumn)(HNODE hNodeSelected, int *piSortCol) = 0; /*[helpstring("to set the sort column")]*/ STDMETHOD(SetSortColumn)(HNODE hNodeSelected, int iSortCol, bool bAscending) = 0; /*[helpstring("Returns the data for the specified clipboard format of the specified list item")*/ STDMETHOD(GetProperty)(/*[in]*/ HNODE hNodeScope, /*[in]*/ BOOL bForScopeItem, /*[in]*/ LPARAM resultItemParam, /*[in]*/ BSTR bstrPropertyName, /*[out]*/ PBSTR pbstrPropertyValue) =0; /*[helpstring("Returns the nodetype GUID identifier of the specified list item")*/ STDMETHOD(GetNodetypeForListItem)(/*[in]*/ HNODE hNodeScope, /*[in]*/ BOOL bForScopeItem, /*[in]*/ LPARAM resultItemParam, /*[in]*/ PBSTR pbstrNodetype) =0; /* returns view extension by inserting them to provided iterator */ STDMETHOD(GetNodeViewExtensions)(/*[in]*/ HNODE hNodeScope, /*[out]*/ CViewExtInsertIterator it) = 0; /* Inform nodemgr that the column data for given node has changed & to save the data */ STDMETHOD(SaveColumnInfoList) (/*[in]*/HNODE hNode, /*[in]*/const CColumnInfoList& columnsList) = 0; /* Ask nodemgr for column-data (no sort data) to setup the headers. */ STDMETHOD(GetPersistedColumnInfoList) (/*[in]*/HNODE hNode, /*[out]*/CColumnInfoList *pColumnsList) = 0; /* Inform nodemgr that the column data for given node is invalid. */ STDMETHOD(DeletePersistedColumnData) (/*[in]*/HNODE hNode) = 0; /* Does about object exists for the snapin whose node is provided. */ STDMETHOD(DoesAboutExist) (/*[in]*/HNODE hNode, /*[out]*/ bool *pbAboutExists) = 0; /* Show about box for given context. */ STDMETHOD(ShowAboutInformation) (/*[in]*/HNODE hNode) = 0; /*Executes a shell command with the specified parameters in the specified directory with the correct window size*/ STDMETHOD(ExecuteShellCommand)(/*[in]*/ HNODE hNode, /*[in]*/ BSTR Command, /*[in]*/ BSTR Directory, /*[in]*/ BSTR Parameters, /*[in]*/ BSTR WindowState) = 0; /*Given the context update the paste button.*/ STDMETHOD(UpdatePasteButton)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie) = 0; /*Findout if current selection context can allow given dataobject to be pasted.*/ STDMETHOD(QueryPaste)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[in]*/ IDataObject *pDataObject, /*[out]*/bool& bPasteAllowed, /*[out]*/ bool& bCopyOperatationIsDefault) = 0; /*Findout if current selection context can allow given dataobject to be pasted.*/ STDMETHOD(QueryPasteFromClipboard)(/*[in]*/ HNODE hNode, /*[in]*/ BOOL bScope, /*[in]*/ LPARAM lCookie, /*[out]*/bool& bPasteAllowed) = 0; /*Given the current drop target (or paste target) context paste the given data object or the one from clipboard*/ STDMETHOD(Drop) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie, /*[in]*/IDataObject *pDataObjectToPaste, /*[in]*/BOOL bIsDragOperationMove) = 0; /*Given the current drop target (or paste target) context paste the given data object or the one from clipboard*/ STDMETHOD(Paste) (/*[in]*/HNODE hNode, /*[in]*/BOOL bScope, /*[in]*/LPARAM lCookie) = 0; /*Get the IPersistStream of the CViewSettingsPersistor object for loading the settings.*/ STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/IPersistStream** ppStream) = 0; /*Get the IXMLObject of the CViewSettingsPersistor object for storing/loading the settings.*/ STDMETHOD(QueryViewSettingsPersistor) (/*[out]*/CXMLObject** ppXMLObject) = 0; /*Inform nodemgr that the document is closing, do any cleanups.*/ STDMETHOD(DocumentClosing) () = 0; // Given the node get the snapin name STDMETHOD(GetSnapinName)(/*[in]*/HNODE hNode, /*[out]*/LPOLESTR* ppszName, /*[out]*/ bool& bValidName) = 0; // Given the node see if it is dummy snapin STDMETHOD(IsDummySnapin)(/*[in]*/HNODE hNode, /*[out]*/bool& bDummySnapin) = 0; // See if the snapin supports MMC1.0 version of help (MMCN_SNAPINHELP) STDMETHOD(DoesStandardSnapinHelpExist)(/*[in]*/HNODE hNode, /*[out]*/bool& bStandardHelpExists) = 0; }; // helpstring("IControlbarsCache Interface"), MMC_INTERFACE(IControlbarsCache, 2e9fcd38-b9a0-11d0-a79d-00c04fd8d565) : IUnknown { /*[helpstring("Detaches all the controlbars.")]*/ STDMETHOD(DetachControlbars)() = 0; }; typedef enum _EXTESION_TYPE { EXTESION_NAMESPACE = 0x1, EXTESION_CONTEXTMENU = 0x2, EXTESION_TOOLBAR = 0x3, EXTESION_PROPERTYSHEET = 0x4, } EXTESION_TYPE; // helpstring("INodeType Interface"), MMC_INTERFACE(INodeType, B08A8368-967F-11D0-A799-00C04FD8D565) : IUnknown { STDMETHOD(GetNodeTypeID)(/*[out]*/ GUID* pGUID) = 0; STDMETHOD(AddExtension)(/*[in]*/ GUID guidSnapIn, /*[in]*/ EXTESION_TYPE extnType) = 0; STDMETHOD(RemoveExtension)(/*[in]*/ GUID guidSnapIn, /*[in]*/ EXTESION_TYPE extnType) = 0; STDMETHOD(EnumExtensions)(/*[in]*/ EXTESION_TYPE extnType, /*[out]*/ IEnumGUID** ppEnumGUID) = 0; }; // helpstring("INodeTypesCache Interface"), MMC_INTERFACE(INodeTypesCache, DE40436E-9671-11D0-A799-00C04FD8D565) : IUnknown { STDMETHOD(CreateNodeType)(/*[in]*/ GUID guidNodeType, /*[out]*/ INodeType** ppNodeType) = 0; STDMETHOD(DeleteNodeType)(/*[in]*/ GUID guidNodeType) = 0; STDMETHOD(EnumNodeTypes)(/*[out]*/ IEnumNodeTypes** ppEnumNodeTypes) = 0; }; MMC_INTERFACE(IEnumNodeTypes, ABBD61E6-9686-11D0-A799-00C04FD8D565) : IUnknown { STDMETHOD(Next)(/*[in]*/ ULONG celt, /*[out, size_is(celt), length_is(*pceltFetched)]*/ INodeType*** rgelt, /*[out]*/ ULONG *pceltFetched) = 0; STDMETHOD(Skip)(/*[in]*/ ULONG celt) = 0; STDMETHOD(Reset)() = 0; STDMETHOD(Clone)(/*[out]*/ IEnumNodeTypes **ppenum) = 0; }; class CBasicSnapinInfo { public: CBasicSnapinInfo() : m_clsid(GUID_NULL), m_nImageIndex(-1) {} public: CLSID m_clsid; std::wstring m_strName; int m_nImageIndex; }; class CAvailableSnapinInfo { public: CAvailableSnapinInfo (bool f32Bit) : m_cTotalSnapins(0), m_himl(NULL), m_f32Bit(f32Bit) {} ~CAvailableSnapinInfo() { if (m_himl != NULL) ImageList_Destroy (m_himl); } public: std::vector m_vAvailableSnapins; // snap-ins that are available in the requested memory model UINT m_cTotalSnapins; // total number of snap-ins referenced in the console file HIMAGELIST m_himl; // images for snap-ins in m_vAvailableSnapins const bool m_f32Bit; // check 32-bit (vs. 64-bit) snap-ins? }; // helpstring("IDumpSnapins Interface"), MMC_INTERFACE(IDumpSnapins, A16496D0-1D2F-11d3-AEB8-00C04F8ECD78) : IUnknown { STDMETHOD(Dump)(/*[in]*/ LPCTSTR pszDumpFilePath) = 0; STDMETHOD(CheckSnapinAvailability)(/*[in/out]*/ CAvailableSnapinInfo& asi) = 0; }; MMC_INTERFACE(IPropertySheetProviderPrivate, FEF554F8-A55A-11D0-A7D7-00C04FD909DD) : IPropertySheetProvider { STDMETHOD(ShowEx)(/*[in]*/ HWND hwnd, /*[in]*/ int page, /*[in]*/ BOOL bModalPage) = 0; STDMETHOD(CreatePropertySheetEx)( /*[in]*/ LPCWSTR title, /*[in]*/ boolean type, /*[in]*/ MMC_COOKIE cookie, /*[in]*/ LPDATAOBJECT pIDataObject, /*[in]*/ LONG_PTR lpMasterTreeNode, /*[in]*/ DWORD dwOptions) = 0; /*[helpstring("Collects the pages from the extension snap-in(s)")]*/ STDMETHOD(AddMultiSelectionExtensionPages)(LONG_PTR lMultiSelection) = 0; /*[helpstring("Determine if the property sheet exist")]*/ STDMETHOD(FindPropertySheetEx)(/*[in]*/ MMC_COOKIE cookie, /*[in]*/ LPCOMPONENT lpComponent, /*[in]*/ LPCOMPONENTDATA lpComponentData, /*[in]*/ LPDATAOBJECT lpDataObject) = 0; /*[helpstring("Set data required for property sheet tooltips")]*/ STDMETHOD(SetPropertySheetData)(/*[in]*/ INT nPropSheetType, /*[in]*/ HMTNODE hMTNode) = 0; }; const long CCLV_HEADERPAD = 25; // helpstring("MMC Default listview interface"), MMC_INTERFACE(IMMCListView, 1B3C1392-D68B-11CF-8C2B-00AA003CA9F6) : IUnknown { STDMETHOD(GetListStyle)( void ) = 0; STDMETHOD(SetListStyle)( /*[in]*/ long nNewValue ) = 0; STDMETHOD(GetViewMode)( void ) = 0; STDMETHOD(SetViewMode)( /*[in]*/ long nViewMode ) = 0; STDMETHOD(InsertItem)( /*[in]*/ LPOLESTR str, /*[in]*/ long iconNdx, /*[in]*/ LPARAM lParam, /*[in]*/ long state, /*[in]*/ long ownerID, /*[in]*/ long itemIndex, /*[out]*/ CResultItem*& pri) = 0; /* parameter changed to HRESULTITEM, not to use the CResultItem* pointer until we know it is not a virtual list */ STDMETHOD(DeleteItem)( /*[in]*/ HRESULTITEM itemID, /*[in]*/ long nCol) = 0; STDMETHOD(FindItemByLParam)( /*[in]*/ long owner, /*[in]*/ LPARAM lParam, /*[out]*/ CResultItem*& pri) = 0; STDMETHOD(InsertColumn)( /*[in]*/ int nCol, /*[in]*/ LPCOLESTR str, /*[in]*/ long nFormat, /*[in]*/ long width) = 0; STDMETHOD(DeleteColumn)( /*[in]*/ int nCol) = 0; STDMETHOD(DeleteAllItems)( /*[in]*/ long ownerID) = 0; STDMETHOD(SetColumn)( /*[in]*/ long nCol, /*[in]*/ LPCOLESTR str, /*[in]*/ long nFormat, /*[in]*/ long width) = 0; STDMETHOD(GetColumn)( /*[in]*/ long nCol, /*[out]*/ LPOLESTR* str, /*[out]*/ long* nFormat, /*[out]*/ int* width) = 0; STDMETHOD(GetColumnCount)( /*[out]*/ int* nColCnt) = 0; STDMETHOD(SetItem)( /*[in]*/ int nIndex, /*[in]*/ CResultItem* pri, /*[in]*/ long nCol, /*[in]*/ LPOLESTR str, /*[in]*/ long nImage, /*[in]*/ LPARAM lParam, /*[in]*/ long nState, /*[in]*/ long ownerID) = 0; STDMETHOD(GetItem)( /*[in]*/ int nIndex, /*[in]*/ CResultItem*& pri, /*[in]*/ long nCol, /*[out]*/ LPOLESTR* str, /*[out]*/ int* nImage, /*[in]*/ LPARAM* lParam, /*[out]*/ unsigned int* nState, /*[out]*/ BOOL* pbScopeItem) = 0; STDMETHOD(GetNextItem)( /*[in]*/ COMPONENTID ownerID, /*[in]*/ long nIndex, /*[in]*/ UINT nState, /*[out]*/ CResultItem*& ppListItem, /*[out]*/ long& nIndexNextItem) = 0; STDMETHOD(GetLParam)( /*[in]*/ long nItem, /*[out]*/ CResultItem*& pri) = 0; STDMETHOD(ModifyItemState)( /*[in]*/ long nItem, /*[in]*/ CResultItem* pri, /*[in]*/ UINT add, /*[in]*/ UINT remove) = 0; STDMETHOD(SetIcon)( /*[in]*/ long nID, /*[in]*/ HICON hIcon, /*[in]*/ long nLoc) = 0; STDMETHOD(SetImageStrip)( /*[in]*/ long nID, /*[in]*/ HBITMAP hbmSmall, /*[in]*/ HBITMAP hbmLarge, /*[in]*/ long nStartLoc, /*[in]*/ long cMask) = 0; STDMETHOD(MapImage)( /*[in]*/ long nID, /*[in]*/ long nLoc, /*[out]*/ int* pResult) = 0; STDMETHOD(Reset)() = 0; STDMETHOD(Arrange)(/*[in]*/ long style) = 0; STDMETHOD(UpdateItem)(/*[in]*/HRESULTITEM itemID) = 0; STDMETHOD(Sort)( /*[in]*/ LPARAM lUserParam, /*[in]*/ long* pParams) = 0; STDMETHOD(SetItemCount)( /*[in]*/ int nItemCount, /*[in]*/ DWORD dwOptions) = 0; STDMETHOD(SetVirtualMode)( /*[in]*/ BOOL bVirtual) = 0; STDMETHOD(Repaint)( /*[in]*/ BOOL bErase) = 0; STDMETHOD(SetChangeTimeOut)( /*[in]*/ ULONG lTimeout) = 0; STDMETHOD(SetColumnFilter)( /*[in]*/ int nCol, /*[in]*/ DWORD dwType, /*[in]*/ MMC_FILTERDATA* pFilterData) = 0; STDMETHOD(GetColumnFilter)( /*[in]*/ int nCol, /*[in,out]*/ DWORD* dwType, /*[in,out]*/ MMC_FILTERDATA* pFilterData) = 0; STDMETHOD(SetColumnSortIcon)( /*[in]*/ int nNewCol, /*[in]*/ int nOldCol, /*[in]*/ BOOL bAscending, /*[in]*/ BOOL bSetSortIcon) = 0; STDMETHOD(SetLoadMode)( /*[in]*/ BOOL bState) = 0; /*[helpstring("Get the current list view header settings.")]*/ STDMETHOD(GetColumnInfoList) (/*[out]*/CColumnInfoList *pColumnsList) = 0; /*[helpstring("Modify the list-view headers with given data.")]*/ STDMETHOD(ModifyColumns) (/*[in]*/const CColumnInfoList& columnsList) = 0; /* Put the specified list item into rename mode */ STDMETHOD(RenameItem) ( /*[in]*/HRESULTITEM itemID) =0; /*[helpstring("Get the column settings that snapin supplied originally")]*/ STDMETHOD(GetDefaultColumnInfoList)(/*[out]*/ CColumnInfoList& columnsList) = 0; }; /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //// //// MMC 1.1 changes //// // MMC_ITASK, internal form of MMC_TASK has additional field for classid. struct MMC_ITASK { MMC_TASK task; LPOLESTR szClsid; }; // helpstring("Console <=> CIC communication conduit"), MMC_INTERFACE(ITaskPadHost, 4f7606d0-5568-11d1-9fea-00600832db4a) : IUnknown { /*[helpstring("CIC calls this when snapin's script wants to notify the snapin of something")]*/ STDMETHOD(TaskNotify)(/*[in,string]*/ BSTR szClsid, /*[in]*/ VARIANT * pvArg, /*[in]*/ VARIANT * pvParam) = 0; /*[helpstring("CIC calls this when the script asks for tasks")]*/ STDMETHOD(GetTaskEnumerator)(/*[in]*/ BSTR szTaskGroup, /*[out]*/ IEnumTASK** ppEnumTASK) = 0; /*[helpstring("Returns the primary snapins IExtendTaskPad")]*/ STDMETHOD(GetPrimaryTask)(/*[out]*/ IExtendTaskPad** ppExtendTaskPad) = 0; /*[helpstring("Returns the primary snapin's taskpad title")]*/ STDMETHOD(GetTitle)(/*[in]*/ BSTR szTaskGroup, /*[out]*/ BSTR * szTitle) = 0; /*[helpstring("Descriptive Text for the default task pad.")]*/ STDMETHOD(GetDescriptiveText)(/*[in,string]*/ BSTR pszGroup, /*[out]*/ BSTR * pszDescriptiveText) = 0; /*[helpstring("Returns the primary snapin's taskpad background image.")]*/ STDMETHOD(GetBackground)(/*[in]*/ BSTR szTaskGroup, /*[out]*/ MMC_TASK_DISPLAY_OBJECT * pTDO) = 0; // /*[helpstring("Returns the primary snapin's taskpad branding info.")]*/ // STDMETHOD(GetBranding)(/*[in,string]*/ BSTR szGroup, /*[out]*/ MMC_TASK_DISPLAY_OBJECT * pTDO) = 0; /*[helpstring("Returns the primary snapin's listpad info")]*/ STDMETHOD(GetListPadInfo)(/*[in]*/ BSTR szTaskGroup, /*[out]*/ MMC_ILISTPAD_INFO * pIListPadInfo) = 0; }; // helpstring("Interface for accessing strings in a console file"), MMC_INTERFACE(IStringTablePrivate, 461A6010-0F9E-11d2-A6A1-0000F875A9CE) : IUnknown { /*[helpstring("Add a string to the snap-in's string table")]*/ STDMETHOD(AddString)( /*[in]*/ LPCOLESTR pszAdd, // string to add to the string table /*[out]*/ MMC_STRING_ID* pStringID, // ID of added string /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Retrieves a string from the snap-in's string table")]*/ STDMETHOD(GetString)( /*[in]*/ MMC_STRING_ID StringID, // ID of string /*[in]*/ ULONG cchBuffer, // number of characters in lpBuffer /*[out, size_is(cchBuffer)]*/ LPOLESTR lpBuffer, // string corresponding to wStringID /*[out]*/ ULONG* pcchOut, // number of characters written to lpBuffer /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Retrieves the length of a string in the snap-in's string table")]*/ STDMETHOD(GetStringLength)( /*[in]*/ MMC_STRING_ID StringID, // ID of string /*[out]*/ ULONG* pcchString, // number of characters in string, not including terminator /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Delete a string from the snap-in's string table")]*/ STDMETHOD(DeleteString)( /*[in]*/ MMC_STRING_ID StringID, // ID of string to delete /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Delete all strings from the snap-in's string table")]*/ STDMETHOD(DeleteAllStrings)( /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Find a string in the snap-in's string table")]*/ STDMETHOD(FindString)( /*[in]*/ LPCOLESTR pszFind, // string to find in the string table /*[out]*/ MMC_STRING_ID* pStringID, // ID of string, if found /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; /*[helpstring("Returns an enumerator into a snap-in's string table")]*/ STDMETHOD(Enumerate)( /*[out]*/ IEnumString** ppEnum, // string enumerator /*[in]*/ const CLSID * pCLSID // CLSID of owner (NULL for MMC) ) = 0; }; /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// //// //// MMC 1.2 changes //// // ITaskCallback // helpstring("Task callback. Handles the drawing and selection notifications of tasks"), MMC_INTERFACE(ITaskCallback, 4b2293ba-e7ba-11d2-883c-00c04f72c717) : IUnknown { /*[helpstring("Determines whether to display "Edit" and "Delete" items for this taskpad.")]*/ STDMETHOD(IsEditable)() = 0; /*[helpstring("Modifies the underlying taskpad.")]*/ STDMETHOD(OnModifyTaskpad)() = 0; /*[helpstring("Deletes the underlying taskpad.")]*/ STDMETHOD(OnDeleteTaskpad)() = 0; /*[helpstring("Gets the GUID identifier of the underlying taskpad.")]*/ STDMETHOD(GetTaskpadID)(/*[out]*/ GUID *pGuid) = 0; }; // helpstring("Interface for releasing Node Manager's cached com objects"), MMC_INTERFACE(IComCacheCleanup, 35FEB982-55E9-483b-BD15-149F3F9E6C63) : IUnknown { /* gives a chance to release cached OLE objects prior to calling OleUninitialize */ STDMETHOD(ReleaseCachedOleObjects)() = 0; }; #endif // __ndmgrpriv_h__