mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2610 lines
94 KiB
2610 lines
94 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1999 - 1999
|
|
//
|
|
// File: mmc.idl
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// mmc.idl : IDL source for mmc.exe
|
|
//
|
|
|
|
cpp_quote("#ifndef MMC_VER")
|
|
cpp_quote("#define MMC_VER 0x0200")
|
|
cpp_quote("#endif")
|
|
|
|
import "basetsd.h";
|
|
import "oaidl.idl";
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// Interfaces implemented by the Common Console's Node Manager
|
|
|
|
interface IConsole;
|
|
interface IHeaderCtrl;
|
|
interface IToolbar;
|
|
interface IImageList;
|
|
interface IResultData;
|
|
interface IConsoleNameSpace;
|
|
interface IPropertySheetProvider;
|
|
interface IPropertySheetCallback;
|
|
interface IContextMenuProvider;
|
|
interface IContextMenuCallback;
|
|
interface IControlbar;
|
|
interface IConsoleVerb;
|
|
interface IMenuButton;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
interface IConsole2;
|
|
interface IHeaderCtrl2;
|
|
interface IConsoleNameSpace2;
|
|
interface IDisplayHelp;
|
|
interface IStringTable;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
interface IColumnData;
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0200)")
|
|
interface IConsole3;
|
|
interface IConsolePower;
|
|
interface INodeProperties;
|
|
interface IResultData2;
|
|
cpp_quote("#endif // MMC_VER >= 0x0200")
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// Interfaces implemented by the Snap-in server
|
|
|
|
interface IComponent;
|
|
interface IComponentData;
|
|
interface IExtendPropertySheet;
|
|
interface IExtendContextMenu;
|
|
interface IExtendControlbar;
|
|
interface IResultDataCompare;
|
|
interface ISnapinAbout;
|
|
interface IResultOwnerData;
|
|
interface ISnapinHelp;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
interface IEnumTASK;
|
|
interface IExtendPropertySheet2;
|
|
interface ISnapinHelp2;
|
|
interface IExtendTaskPad;
|
|
interface IRequiredExtensions;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
interface IResultDataCompareEx;
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0200)")
|
|
interface IComponent2;
|
|
interface IComponentData2;
|
|
interface IExtendView;
|
|
interface IViewExtensionCallback;
|
|
interface IConsolePowerSink;
|
|
interface IConsole3;
|
|
interface INodeProperties;
|
|
interface IResultData2;
|
|
cpp_quote("#endif // MMC_VER >= 0x0200")
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
/// Type definitions
|
|
|
|
typedef IConsole* LPCONSOLE;
|
|
typedef IHeaderCtrl* LPHEADERCTRL;
|
|
typedef IToolbar* LPTOOLBAR;
|
|
typedef IImageList* LPIMAGELIST;
|
|
typedef IResultData* LPRESULTDATA;
|
|
typedef IConsoleNameSpace* LPCONSOLENAMESPACE;
|
|
typedef IPropertySheetProvider* LPPROPERTYSHEETPROVIDER;
|
|
typedef IPropertySheetCallback* LPPROPERTYSHEETCALLBACK;
|
|
typedef IContextMenuProvider* LPCONTEXTMENUPROVIDER;
|
|
typedef IContextMenuCallback* LPCONTEXTMENUCALLBACK;
|
|
typedef IControlbar* LPCONTROLBAR;
|
|
typedef IConsoleVerb* LPCONSOLEVERB;
|
|
typedef IMenuButton* LPMENUBUTTON;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
typedef IConsole2* LPCONSOLE2;
|
|
typedef IHeaderCtrl2* LPHEADERCTRL2;
|
|
typedef IConsoleNameSpace2* LPCONSOLENAMESPACE2;
|
|
typedef IDisplayHelp* LPDISPLAYHELP;
|
|
typedef IStringTable* LPSTRINGTABLE;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
typedef IColumnData* LPCOLUMNDATA;
|
|
typedef IResultDataCompareEx* LPRESULTDATACOMPAREEX;
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
typedef IComponent* LPCOMPONENT;
|
|
typedef IComponentData* LPCOMPONENTDATA;
|
|
typedef IExtendPropertySheet* LPEXTENDPROPERTYSHEET;
|
|
typedef IExtendContextMenu* LPEXTENDCONTEXTMENU;
|
|
typedef IExtendControlbar* LPEXTENDCONTROLBAR;
|
|
typedef IResultDataCompare* LPRESULTDATACOMPARE;
|
|
typedef IResultOwnerData* LPRESULTOWNERDATA;
|
|
typedef ISnapinAbout* LPSNAPABOUT;
|
|
typedef ISnapinAbout* LPSNAPINABOUT;
|
|
typedef ISnapinHelp* LPSNAPHELP;
|
|
typedef ISnapinHelp* LPSNAPINHELP;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
typedef IEnumTASK* LPENUMTASK;
|
|
typedef IExtendPropertySheet2* LPEXTENDPROPERTYSHEET2;
|
|
typedef ISnapinHelp2* LPSNAPINHELP2;
|
|
typedef IExtendTaskPad* LPEXTENDTASKPAD;
|
|
typedef IRequiredExtensions* LPREQUIREDEXTENSIONS;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0200)")
|
|
typedef IComponent2* LPCOMPONENT2;
|
|
typedef IComponentData2* LPCOMPONENTDATA2;
|
|
typedef IExtendView* LPEXTENDVIEW;
|
|
typedef IViewExtensionCallback* LPVIEWEXTENSIONCALLBACK;
|
|
typedef IConsolePower* LPCONSOLEPOWER;
|
|
typedef IConsolePowerSink* LPCONSOLEPOWERSINK;
|
|
typedef IConsole3* LPCONSOLE3;
|
|
typedef INodeProperties* LPNODEPROPERTIES;
|
|
typedef IResultData2* LPRESULTDATA2;
|
|
cpp_quote("#endif // MMC_VER >= 0x0200")
|
|
|
|
|
|
// typedefs for external types
|
|
typedef BSTR* PBSTR;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Published Common Console ListView constants
|
|
|
|
#define LVS_ICON 0x0000
|
|
#define LVS_REPORT 0x0001
|
|
#define LVS_SMALLICON 0x0002
|
|
#define LVS_LIST 0x0003
|
|
#define LVSICF_NOINVALIDATEALL 0x00000001
|
|
#define LVSICF_NOSCROLL 0x00000002
|
|
|
|
const long MMCLV_AUTO = -1;
|
|
const long MMCLV_NOPARAM = -2;
|
|
const long MMCLV_NOICON = -1;
|
|
|
|
// If you add a view style please update the VIEW_TYPE in ndmgr.idl
|
|
const long MMCLV_VIEWSTYLE_ICON = LVS_ICON;
|
|
const long MMCLV_VIEWSTYLE_SMALLICON = LVS_SMALLICON;
|
|
const long MMCLV_VIEWSTYLE_LIST = LVS_LIST;
|
|
const long MMCLV_VIEWSTYLE_REPORT = LVS_REPORT;
|
|
const long MMCLV_VIEWSTYLE_FILTERED = 0x0004;
|
|
|
|
const void* MMCLV_NOPTR = 0x0;
|
|
const long MMCLV_UPDATE_NOINVALIDATEALL = LVSICF_NOINVALIDATEALL;
|
|
const long MMCLV_UPDATE_NOSCROLL = LVSICF_NOSCROLL;
|
|
|
|
static unsigned short* MMC_CALLBACK = ((unsigned short *)(-1));
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
cpp_quote("#define MMC_IMAGECALLBACK (-1)")
|
|
cpp_quote("#define MMC_TEXTCALLBACK MMC_CALLBACK")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// ResultData and Scope Data item structures.
|
|
|
|
typedef LONG_PTR HSCOPEITEM;
|
|
typedef long COMPONENTID;
|
|
typedef LONG_PTR HRESULTITEM;
|
|
|
|
const DWORD RDI_STR = 0x0002;
|
|
const DWORD RDI_IMAGE = 0x0004;
|
|
const DWORD RDI_STATE = 0x0008;
|
|
const DWORD RDI_PARAM = 0x0010;
|
|
const DWORD RDI_INDEX = 0x0020;
|
|
const DWORD RDI_INDENT = 0x0040;
|
|
|
|
/*
|
|
* This is lame. Some view styles should be made available only to clients
|
|
* that build with a certain MMC_VER level. Ideally, we'd just put the
|
|
* cpp_quote tests around the value definitions in the enumeration.
|
|
* MIDL chokes on this, however, so we have this ugly hackery instead. Ugh.
|
|
*/
|
|
cpp_quote("typedef enum _MMC_RESULT_VIEW_STYLE ")
|
|
cpp_quote("{ ")
|
|
cpp_quote(" MMC_SINGLESEL = 0x0001, ")
|
|
cpp_quote(" MMC_SHOWSELALWAYS = 0x0002, ")
|
|
cpp_quote(" MMC_NOSORTHEADER = 0x0004, ")
|
|
cpp_quote("#if (MMC_VER >= 0x0120) ")
|
|
cpp_quote(" MMC_ENSUREFOCUSVISIBLE = 0x0008 ")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120 ")
|
|
cpp_quote("} MMC_RESULT_VIEW_STYLE; ")
|
|
|
|
cpp_quote("#if 0")
|
|
typedef enum _MMC_RESULT_VIEW_STYLE
|
|
{
|
|
_MMC_VIEW_STYLE__dummy_
|
|
} MMC_RESULT_VIEW_STYLE;
|
|
cpp_quote("#endif")
|
|
|
|
|
|
// List view with single select
|
|
const long MMC_VIEW_OPTIONS_NONE = 0x00000000;
|
|
|
|
// NO List view. Only custom views.
|
|
const long MMC_VIEW_OPTIONS_NOLISTVIEWS = 0x00000001;
|
|
|
|
// List view with multi select.
|
|
const long MMC_VIEW_OPTIONS_MULTISELECT = 0x00000002;
|
|
|
|
//List view with user owned data
|
|
const long MMC_VIEW_OPTIONS_OWNERDATALIST = 0x00000004;
|
|
|
|
//List view with filtering allowed
|
|
const long MMC_VIEW_OPTIONS_FILTERED = 0x00000008;
|
|
|
|
// Create new control (don't use cached)
|
|
const long MMC_VIEW_OPTIONS_CREATENEW = 0x00000010;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
// Use font linking on result items (for multi-language support)
|
|
const long MMC_VIEW_OPTIONS_USEFONTLINKING = 0x00000020;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
// don't include scope items in the result list view
|
|
const long MMC_VIEW_OPTIONS_EXCLUDE_SCOPE_ITEMS_FROM_LIST = 0x00000040;
|
|
const long MMC_VIEW_OPTIONS_LEXICAL_SORT = 0x00000080;
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
// Property sheet options
|
|
const DWORD MMC_PSO_NOAPPLYNOW = 0x00000001;
|
|
const DWORD MMC_PSO_HASHELP = 0x00000002;
|
|
const DWORD MMC_PSO_NEWWIZARDTYPE = 0x00000004;
|
|
const DWORD MMC_PSO_NO_PROPTITLE = 0x00000008;
|
|
|
|
|
|
|
|
// Type of controls that can be attached to the IControlbar
|
|
typedef enum _MMC_CONTROL_TYPE
|
|
{
|
|
TOOLBAR,
|
|
MENUBUTTON,
|
|
COMBOBOXBAR
|
|
} MMC_CONTROL_TYPE;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Console commands - These should be reviewed
|
|
//
|
|
/*
|
|
* This is lame. We need to make sure that some notifications are available
|
|
* only to clients that build with a certain MMC_VER level. Ideally, we'd just
|
|
* put the cpp_quote tests around the value definitions in the enumeration.
|
|
* MIDL chokes on this, however, so we have this ugly hackery instead. Ugh.
|
|
*/
|
|
cpp_quote("typedef enum _MMC_CONSOLE_VERB ")
|
|
cpp_quote("{ ")
|
|
cpp_quote(" MMC_VERB_NONE = 0x0000, ")
|
|
cpp_quote(" MMC_VERB_OPEN = 0x8000, ")
|
|
cpp_quote(" MMC_VERB_COPY = 0x8001, ")
|
|
cpp_quote(" MMC_VERB_PASTE = 0x8002, ")
|
|
cpp_quote(" MMC_VERB_DELETE = 0x8003, ")
|
|
cpp_quote(" MMC_VERB_PROPERTIES = 0x8004, ")
|
|
cpp_quote(" MMC_VERB_RENAME = 0x8005, ")
|
|
cpp_quote(" MMC_VERB_REFRESH = 0x8006, ")
|
|
cpp_quote(" MMC_VERB_PRINT = 0x8007, ")
|
|
cpp_quote("#if (MMC_VER >= 0x0110) ")
|
|
cpp_quote(" MMC_VERB_CUT = 0x8008, // Used only to explicitly disable/hide")
|
|
cpp_quote(" // the cut verb, when copy & paste are enabled.")
|
|
cpp_quote(" ")
|
|
cpp_quote(" // must be last ")
|
|
cpp_quote(" MMC_VERB_MAX, ")
|
|
cpp_quote(" MMC_VERB_FIRST = MMC_VERB_OPEN, ")
|
|
cpp_quote(" MMC_VERB_LAST = MMC_VERB_MAX - 1 ")
|
|
cpp_quote("#endif // MMC_VER >= 0x0110 ")
|
|
cpp_quote("} MMC_CONSOLE_VERB; ")
|
|
|
|
cpp_quote("#if 0")
|
|
typedef enum _MMC_CONSOLE_VERB
|
|
{
|
|
MMC_VERB__dummy_
|
|
} MMC_CONSOLE_VERB;
|
|
cpp_quote("#endif")
|
|
|
|
// Structure to create buttons on the toolbar
|
|
cpp_quote("#include <pshpack8.h>")
|
|
typedef struct _MMCButton
|
|
{
|
|
int nBitmap; // Offset into the bitmap list
|
|
int idCommand; // Command ID return when the button is clicked
|
|
BYTE fsState; // TBSTYLE_ENABLED ..etc
|
|
BYTE fsType; // TBSTYLE_BUTTON || TBSTYLE_SEP
|
|
LPOLESTR lpButtonText; // Text value for the Button
|
|
LPOLESTR lpTooltipText; // Text value for the tooltip
|
|
|
|
} MMCBUTTON;
|
|
cpp_quote("#include <poppack.h>")
|
|
|
|
typedef MMCBUTTON* LPMMCBUTTON;
|
|
|
|
typedef enum _MMC_BUTTON_STATE
|
|
{
|
|
ENABLED = 0x01,
|
|
CHECKED = 0x02,
|
|
HIDDEN = 0x04,
|
|
INDETERMINATE = 0x08,
|
|
BUTTONPRESSED = 0x10,
|
|
|
|
} MMC_BUTTON_STATE;
|
|
|
|
typedef struct _RESULTDATAITEM
|
|
{
|
|
DWORD mask;
|
|
BOOL bScopeItem;
|
|
HRESULTITEM itemID;
|
|
int nIndex;
|
|
int nCol;
|
|
LPOLESTR str;
|
|
int nImage;
|
|
UINT nState;
|
|
LPARAM lParam;
|
|
int iIndent;
|
|
} RESULTDATAITEM;
|
|
|
|
typedef RESULTDATAITEM* LPRESULTDATAITEM;
|
|
|
|
// Find result item options
|
|
const DWORD RFI_PARTIAL = 0x0001;
|
|
const DWORD RFI_WRAP = 0x0002;
|
|
|
|
typedef struct _RESULTFINDINFO
|
|
{
|
|
LPOLESTR psz;
|
|
int nStart;
|
|
DWORD dwOptions;
|
|
}
|
|
RESULTFINDINFO;
|
|
typedef RESULTFINDINFO* LPRESULTFINDINFO;
|
|
|
|
//
|
|
// Sort Result Items options
|
|
//
|
|
const DWORD RSI_DESCENDING = 0x0001;
|
|
const DWORD RSI_NOSORTICON = 0x0002;
|
|
|
|
const DWORD SDI_STR = 0x00002;
|
|
const DWORD SDI_IMAGE = 0x00004;
|
|
const DWORD SDI_OPENIMAGE = 0x00008;
|
|
const DWORD SDI_STATE = 0x00010;
|
|
const DWORD SDI_PARAM = 0x00020;
|
|
const DWORD SDI_CHILDREN = 0x00040;
|
|
|
|
// The top 4 bit of the mask determines the relative position of this item,
|
|
// relative to the SCOPEDATAITEM::relativeID. By default it is the parent.
|
|
|
|
// For SDI_PARENT, SCOPEDATAITEM::relativeID is the HSCOPEITEM of the parent.
|
|
// As you can see by the SDI_PARENT value it is a no-op. Since by default
|
|
// SCOPEDATAITEM::relativeID is treated as the parents ID.
|
|
const DWORD SDI_PARENT = 0x00000000;
|
|
|
|
// For SDI_PREVIOUS, SCOPEDATAITEM::relativeID is the HSCOPEITEM of the previous sibling
|
|
const DWORD SDI_PREVIOUS = 0x10000000;
|
|
|
|
// For SDI_NEXT, SCOPEDATAITEM::relativeID is the HSCOPEITEM of the next sibling.
|
|
const DWORD SDI_NEXT = 0x20000000;
|
|
|
|
// For SDI_PARENT, bit 27 determines whether the item is to be inserted as the
|
|
// first child. By default this item will inserted as the last child.
|
|
const DWORD SDI_FIRST = 0x08000000;
|
|
|
|
|
|
typedef struct _SCOPEDATAITEM
|
|
{
|
|
DWORD mask;
|
|
LPOLESTR displayname;
|
|
int nImage;
|
|
int nOpenImage;
|
|
UINT nState;
|
|
int cChildren;
|
|
LPARAM lParam;
|
|
HSCOPEITEM relativeID;
|
|
HSCOPEITEM ID;
|
|
} SCOPEDATAITEM;
|
|
|
|
typedef SCOPEDATAITEM* LPSCOPEDATAITEM;
|
|
|
|
typedef enum _MMC_SCOPE_ITEM_STATE
|
|
{
|
|
MMC_SCOPE_ITEM_STATE_NORMAL = 0x0001, // Not bold. To set or get.
|
|
MMC_SCOPE_ITEM_STATE_BOLD = 0x0002, // To set or get.
|
|
MMC_SCOPE_ITEM_STATE_EXPANDEDONCE = 0x0003, // Only to get.
|
|
|
|
} MMC_SCOPE_ITEM_STATE;
|
|
|
|
|
|
typedef struct _CONTEXTMENUITEM
|
|
{
|
|
LPWSTR strName;
|
|
LPWSTR strStatusBarText;
|
|
LONG lCommandID;
|
|
LONG lInsertionPointID;
|
|
LONG fFlags;
|
|
LONG fSpecialFlags;
|
|
} CONTEXTMENUITEM;
|
|
|
|
typedef CONTEXTMENUITEM* LPCONTEXTMENUITEM;
|
|
|
|
//
|
|
// Console defined menu command IDs
|
|
// The console reserves the negative numbers for predefined menu command
|
|
// IDs which it sends to a snapin's IExtendContextMenu::Command method
|
|
//
|
|
typedef enum _MMC_MENU_COMMAND_IDS
|
|
{
|
|
MMCC_STANDARD_VIEW_SELECT = -1
|
|
} MMC_MENU_COMMAND_IDS;
|
|
|
|
|
|
|
|
//IMenuButton data structure
|
|
|
|
typedef struct _MENUBUTTONDATA
|
|
{
|
|
int idCommand;
|
|
int x;
|
|
int y;
|
|
} MENUBUTTONDATA;
|
|
|
|
typedef MENUBUTTONDATA* LPMENUBUTTONDATA;
|
|
|
|
|
|
typedef LONG_PTR MMC_COOKIE;
|
|
|
|
// For multi select the cookie passed to the snapins will be
|
|
// MMC_MULTI_SELECT_COOKIE. The data object that will be returned
|
|
// should provide the CCF_OBJECT_TYPES_IN_MULTI_SELECT clipboard
|
|
// format.
|
|
const MMC_COOKIE MMC_MULTI_SELECT_COOKIE = -2;
|
|
|
|
// Special cookie value for requesting window properties data object
|
|
const MMC_COOKIE MMC_WINDOW_COOKIE = -3;
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
const MMC_COOKIE SPECIAL_COOKIE_MIN = -10;
|
|
const MMC_COOKIE SPECIAL_COOKIE_MAX = -1;
|
|
|
|
|
|
// Published filter constants
|
|
#define HDFT_ISSTRING 0x0000
|
|
#define HDFT_ISNUMBER 0x0001
|
|
#define HDFT_HASNOVALUE 0x8000
|
|
|
|
typedef enum _MMC_FILTER_TYPE
|
|
{
|
|
MMC_STRING_FILTER = HDFT_ISSTRING,
|
|
MMC_INT_FILTER = HDFT_ISNUMBER,
|
|
MMC_FILTER_NOVALUE= HDFT_HASNOVALUE
|
|
} MMC_FILTER_TYPE;
|
|
|
|
|
|
typedef struct _MMC_FILTERDATA
|
|
{
|
|
LPOLESTR pszText; // text filter value
|
|
INT cchTextMax; // max size of filter text
|
|
LONG lValue; // numeric filter value
|
|
} MMC_FILTERDATA;
|
|
|
|
|
|
typedef enum _MMC_FILTER_CHANGE_CODE
|
|
{
|
|
MFCC_DISABLE = 0,
|
|
MFCC_ENABLE = 1,
|
|
MFCC_VALUE_CHANGE = 2
|
|
} MMC_FILTER_CHANGE_CODE;
|
|
|
|
typedef struct _MMC_RESTORE_VIEW
|
|
{ // data from call to GetResultViewType
|
|
DWORD dwSize; // sizeof of this struct for versioning
|
|
MMC_COOKIE cookie; // user's cookie
|
|
LPOLESTR pViewType; // URL or OCX or NULL
|
|
long lViewOptions; // MMC_VIEW_OPTIONS_*
|
|
} MMC_RESTORE_VIEW;
|
|
|
|
typedef struct _MMC_EXPANDSYNC_STRUCT
|
|
{
|
|
BOOL bHandled; // did snap-in handle the notification?
|
|
BOOL bExpanding; // TRUE=expanding, FALSE=contracting
|
|
HSCOPEITEM hItem; // item that needs to be expanded
|
|
} MMC_EXPANDSYNC_STRUCT;
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
typedef struct _MMC_VISIBLE_COLUMNS
|
|
{
|
|
INT nVisibleColumns; // number of items (visible columns) in the array.
|
|
INT rgVisibleCols[1]; // indices of visible columns.
|
|
} MMC_VISIBLE_COLUMNS;
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
/*
|
|
NOTIFICATIONS
|
|
=============
|
|
|
|
Notify(dataobject, event, arg, param);
|
|
For all the MMC_NOTIFY_TYPE events,
|
|
dataobject
|
|
For single select:
|
|
dataobject for cookie, can be NULL when dataobject is not required
|
|
For multi select:
|
|
Console supplied data object. Supports only one format (CCF_MULTI_SELECT_SNAPIN),
|
|
which can be used to accquire an IUnknow to the primary snapin.
|
|
event = one of the MMCN_NOTIFY_TYPEs
|
|
arg and param depend on type, see below.
|
|
|
|
MMCN_ACTIVATE
|
|
Is sent when a window is being activated or deactivated.
|
|
arg = TRUE if window is activated, false otherwise.
|
|
param = Not used.
|
|
return = Not used.
|
|
|
|
MMCN_ADD_IMAGES
|
|
Sent to IComponent to add images for the result pane. The primary snapin
|
|
should add images for both folders and leaf items. Extension snapins
|
|
should add only folder images.
|
|
arg = ptr to result panes IImageList.
|
|
param = HSCOPEITEM of selected/deselected item
|
|
return = Not used.
|
|
|
|
MMCN_BTN_CLICK
|
|
This message is sent when a user clicks on a button.
|
|
arg = When sent to ExtendControlbar it is the data object of currently selected,
|
|
when sent to IComponent/IComponentData it is 0.
|
|
param = CmdID of the button equal to a value of the MMC_COMMANDS enum type.
|
|
return = Not used.
|
|
|
|
MMCN_CLICK
|
|
Not used.
|
|
|
|
MMCN_DBLCLICK
|
|
arg, param = not used.
|
|
return = S_FALSE to do the default action, if the default action is one of the standard verbs.
|
|
|
|
MMCN_EXPAND
|
|
arg = TRUE => expand, FALSE => contract
|
|
param = parents HSCOPEITEM.
|
|
|
|
MMCN_MINIMIZED
|
|
Is sent when a window is being minimized or maximized.
|
|
arg = TRUE if minimized, false otherwise.
|
|
|
|
MMCN_PROPERTY_CHANGE
|
|
lpDataObject = NULL
|
|
lParam = user object
|
|
|
|
MMCN_REMOVE_CHILDREN
|
|
Informs the snapin to delete all the cookies it has added below.
|
|
arg = HSCOPEITEM of the node whose children needs to be deleted.
|
|
param = unused.
|
|
return = unused.
|
|
|
|
MMCN_RENAME
|
|
This notification is sent when an item needs to be renamed.
|
|
arg = Not used.
|
|
param = LPOLESTR for containing new name
|
|
return = S_OK to allow rename and S_FALSE to disallow rename.
|
|
|
|
MMCN_SELECT
|
|
If sent to IComponent::Notify:
|
|
arg:
|
|
BOOL bScope = (BOOL) LOWORD(arg);
|
|
BOOL bSelect = (BOOL) HIWORD(arg);
|
|
bScope: TRUE if an item the scope pane is selected,
|
|
FALSE if an item in the result pane is selected.
|
|
bSelect: TRUE if the item is selected,
|
|
FALSE if it is de-selected.
|
|
param:
|
|
Ignored.
|
|
|
|
If sent to IExtendControlbar::ControlbarNotify:
|
|
arg:
|
|
BOOL bScope = (BOOL) LOWORD(arg);
|
|
BOOL bSelect = (BOOL) HIWORD(arg);
|
|
bScope: TRUE if an item the scope pane is selected,
|
|
FALSE if an item in the result pane is selected.
|
|
bSelect: TRUE if the item is selected,
|
|
FALSE if it is de-selected.
|
|
param:
|
|
LPDATAOBJECT pDataobject = (LPDATAOBJECT)param;
|
|
pDataobject data object of item getting selected/de-selected.
|
|
|
|
|
|
MMCN_SHOW
|
|
arg = TRUE if selecting, FALSE if deselecting
|
|
param = HSCOPEITEM of selected/deselected item
|
|
|
|
MMCN_VIEW_CHANGE
|
|
This message is sent to update all views of a change.
|
|
arg = TRUE if Scope Item, FALSE if Result Item
|
|
param = ptr to DataObject selected
|
|
|
|
MMCN_MENU_BTNCLICK
|
|
This message is sent when a user clicks on a button.
|
|
arg = Data object of currently selected.
|
|
param = Structure (LPMENUBUTTONDATA).
|
|
|
|
MMCN_SNAPINHELP
|
|
This message is sent when the user requests help about the snapin.
|
|
dataObject = NULL
|
|
arg = 0
|
|
param = 0
|
|
|
|
MMCN_CONTEXTHELP
|
|
This message is sent when the user requests help about a selected item
|
|
arg = 0
|
|
param = 0
|
|
|
|
MMCN_DESELECT_ALL
|
|
This message is sent when all items of an owner-data result pane
|
|
are deselected.
|
|
dataObject = NULL
|
|
arg = 0
|
|
param = 0
|
|
|
|
MMCN_COLUMN_CLICK
|
|
This message is sent when the user clicks on a result listview column header.
|
|
dataObject = NULL
|
|
arg = Column number
|
|
param = Sort option flags (RSI_xxx)
|
|
return = not used.
|
|
|
|
MMCN_DELETE:
|
|
Sent to inform the snapin that the item needs to be deleted. As a result of
|
|
the user hitting the 'Delete' key or delete button.
|
|
dataobject: dataobject of the selected item(s) provided by the snap-in.
|
|
arg, param: unused.
|
|
|
|
MMCN_CUTORMOVE:
|
|
dataobject: NULL.
|
|
arg: pointer to a dataobject. See multi-selection below.
|
|
param: unused.
|
|
|
|
MMCN_CANPASTE_OUTOFPROC
|
|
dataobject: unused.
|
|
arg: unused
|
|
param: BOOL *, snapin sets to TRUE iff it handles dataobjects from another MMC process.
|
|
Return: S_OK if the dataobject can be handled, S_FALSE otherwise.
|
|
|
|
MMCN_QUERY_PASTE:
|
|
dataobject: dataobject of the selected item provided by the snap-in.
|
|
arg: dataobject of the item(s) provided by the source snap-in that needs to be pasted.
|
|
param: flags (IsCopy the default action).
|
|
Return S_OK if the data can be pasted, S_FALSE otherwise.
|
|
|
|
MMCN_PASTE:
|
|
dataobject & arg: are same as for MMCN_QUERY_PASTE.
|
|
param:
|
|
NULL for move (as opposed to cut).
|
|
For single item paste:
|
|
BOOL* pPasted = (BOOL*)param;
|
|
Set this to TRUE here if the item was successfully pasted.
|
|
For multi-item paste:
|
|
LPDATAOBJECT* ppDataObj = (LPDATAOBJECT*)param;
|
|
Use this to return a pointer to a dataobject consisting of the
|
|
items successfully pasted. (see MMCN_CUTORMOVE below).
|
|
|
|
MMCN_FILTER_STATE:
|
|
This message is sent when the user turns result view filtering on or off.
|
|
dataobject = NULL
|
|
arg = BOOL, True if filter turned on, Flase if filter turned off
|
|
param = unused
|
|
|
|
MMCN_FILTER_CHANGE:
|
|
This message is sent when the filter value for a result view column has been changed.
|
|
dataobject= NULL
|
|
arg = Filter change code (see MMC_FILTER_CHANGE_CODE enumeration)
|
|
param = column number of changed value, if change code is MFCC_VALUE_CHANGE
|
|
|
|
MMCN_FILTER_CLICK:
|
|
This message is sent when the filter button is clicked. The snap-in should display
|
|
a UI for selecting the filter options.
|
|
dataobject = NULL
|
|
arg = Column number
|
|
param = Pointer to filter button rect (*RECT)
|
|
|
|
MMCN_INITOCX:
|
|
Sent to a snap-in when its custom OCX is initialized for the first time.
|
|
param = The IUnknown to the OCX, the result pane. This is the same IUnknown you would get from IConsole::QueryResultView.
|
|
|
|
MMCN_PRINT:
|
|
Sent to inform the snapin that the item needs to be printed. As a result of
|
|
the user selecting the 'Print' button or menu item.
|
|
dataobject: dataobject of the selected item(s) provided by the snap-in.
|
|
arg, param: unused.
|
|
|
|
MMCN_PRELOAD:
|
|
Sent when parent of snapin to be preloaded is selected.
|
|
dataobject: dataobject of snapin root node
|
|
arg: HSCOPEITEM of root node
|
|
param: unused (0)
|
|
|
|
MMCN_LISTPAD:
|
|
Sent when a TaskPad ListView is being attached or detached.
|
|
dataobject: dataobject of selected node
|
|
arg: BOOL true when attaching, false when detaching
|
|
param: unused (0)
|
|
|
|
MMCN_RESTORE_VIEW:
|
|
Sent when user selects Back/Forward buttons
|
|
dataobject: dataobject of selected node
|
|
arg: MMC_RESTORE_VIEW struct
|
|
param: BOOL *, snapin sets to TRUE iff it handles this notification
|
|
|
|
MMCN_EXPANDSYNC
|
|
This notification is sent when nodes are being expanded during initialization.
|
|
The snap-in should handle this synchrnonously, without spawning a
|
|
thread to handle the expansion.
|
|
arg = unused
|
|
param: MMC_EXPANDSYNC_STRUCT*,
|
|
snapin sets to MMC_EXPANDSYNC_STRUCT.bHandled to TRUE iff it
|
|
handles this notification
|
|
|
|
MMCN_COLUMNS_CHANGED
|
|
This notification is sent to IComponent::Notify when the user hides columns or
|
|
makes columns visible in the list view using the columns dialog box accessed
|
|
through the view menu.
|
|
This notification tells which columns are visible.
|
|
|
|
arg = unused
|
|
param = pointer to MMC_VISIBLE_COLUMNS.
|
|
|
|
*/
|
|
|
|
/*
|
|
* This is lame. We need to make sure that some notifications are available
|
|
* only to clients that build with a certain MMC_VER level. Ideally, we'd just
|
|
* put the cpp_quote tests around the value definitions in the enumeration.
|
|
* MIDL chokes on this, however, so we have this ugly hackery instead. Ugh.
|
|
*/
|
|
cpp_quote("typedef enum _MMC_NOTIFY_TYPE ")
|
|
cpp_quote("{ ")
|
|
cpp_quote(" MMCN_ACTIVATE = 0x8001, ")
|
|
cpp_quote(" MMCN_ADD_IMAGES = 0x8002, ")
|
|
cpp_quote(" MMCN_BTN_CLICK = 0x8003, ")
|
|
cpp_quote(" MMCN_CLICK = 0x8004, // NOT USED ")
|
|
cpp_quote(" MMCN_COLUMN_CLICK = 0x8005, ")
|
|
cpp_quote(" MMCN_CONTEXTMENU = 0x8006, // NOT USED ")
|
|
cpp_quote(" MMCN_CUTORMOVE = 0x8007, ")
|
|
cpp_quote(" MMCN_DBLCLICK = 0x8008, ")
|
|
cpp_quote(" MMCN_DELETE = 0x8009, ")
|
|
cpp_quote(" MMCN_DESELECT_ALL = 0x800A, ")
|
|
cpp_quote(" MMCN_EXPAND = 0x800B, ")
|
|
cpp_quote(" MMCN_HELP = 0x800C, // NOT USED ")
|
|
cpp_quote(" MMCN_MENU_BTNCLICK = 0x800D, ")
|
|
cpp_quote(" MMCN_MINIMIZED = 0x800E, ")
|
|
cpp_quote(" MMCN_PASTE = 0x800F, ")
|
|
cpp_quote(" MMCN_PROPERTY_CHANGE = 0x8010, ")
|
|
cpp_quote(" MMCN_QUERY_PASTE = 0x8011, ")
|
|
cpp_quote(" MMCN_REFRESH = 0x8012, ")
|
|
cpp_quote(" MMCN_REMOVE_CHILDREN = 0x8013, ")
|
|
cpp_quote(" MMCN_RENAME = 0x8014, ")
|
|
cpp_quote(" MMCN_SELECT = 0x8015, ")
|
|
cpp_quote(" MMCN_SHOW = 0x8016, ")
|
|
cpp_quote(" MMCN_VIEW_CHANGE = 0x8017, ")
|
|
cpp_quote(" MMCN_SNAPINHELP = 0x8018, ")
|
|
cpp_quote(" MMCN_CONTEXTHELP = 0x8019, ")
|
|
cpp_quote(" MMCN_INITOCX = 0x801A, ")
|
|
cpp_quote("#if (MMC_VER >= 0x0110) ")
|
|
cpp_quote(" MMCN_FILTER_CHANGE = 0x801B, ")
|
|
cpp_quote(" MMCN_FILTERBTN_CLICK = 0x801C, ")
|
|
cpp_quote(" MMCN_RESTORE_VIEW = 0x801D, ")
|
|
cpp_quote(" MMCN_PRINT = 0x801E, ")
|
|
cpp_quote(" MMCN_PRELOAD = 0x801F, ")
|
|
cpp_quote(" MMCN_LISTPAD = 0x8020, ")
|
|
cpp_quote(" MMCN_EXPANDSYNC = 0x8021, ")
|
|
cpp_quote("#if (MMC_VER >= 0x0120) ")
|
|
cpp_quote(" MMCN_COLUMNS_CHANGED = 0x8022, ")
|
|
cpp_quote("#if (MMC_VER >= 0x0200) ")
|
|
cpp_quote(" MMCN_CANPASTE_OUTOFPROC = 0x8023, ")
|
|
cpp_quote("#endif // MMC_VER >= 0x0200 ")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120 ")
|
|
cpp_quote("#endif // MMC_VER >= 0x0110 ")
|
|
cpp_quote("} MMC_NOTIFY_TYPE; ")
|
|
|
|
cpp_quote("#if 0")
|
|
typedef enum _MMC_NOTIFY_TYPE
|
|
{
|
|
MMCN__dummy_
|
|
} MMC_NOTIFY_TYPE;
|
|
cpp_quote("#endif")
|
|
|
|
typedef enum _DATA_OBJECT_TYPES
|
|
{
|
|
CCT_SCOPE = 0x8000, // Data object while for scope pane context
|
|
CCT_RESULT = 0x8001, // Data object while for result pane context
|
|
CCT_SNAPIN_MANAGER = 0x8002, // Data object while for snap-in manager context
|
|
|
|
CCT_UNINITIALIZED = 0xFFFF, // Data object has an invalid type
|
|
|
|
} DATA_OBJECT_TYPES;
|
|
|
|
|
|
//New window option(s)
|
|
|
|
const unsigned long MMC_NW_OPTION_NONE = 0x0000;
|
|
|
|
// No scope pane
|
|
const unsigned long MMC_NW_OPTION_NOSCOPEPANE = 0x0001;
|
|
|
|
// No standard toolbars
|
|
const unsigned long MMC_NW_OPTION_NOTOOLBARS = 0x0002;
|
|
|
|
// Use short window title
|
|
const unsigned long MMC_NW_OPTION_SHORTTITLE = 0x0004;
|
|
|
|
// Snap-in provides window title
|
|
const unsigned long MMC_NW_OPTION_CUSTOMTITLE = 0x0008;
|
|
|
|
// Do not save view to console doc file
|
|
const unsigned long MMC_NW_OPTION_NOPERSIST = 0x0010;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Common Console clipboard formats
|
|
//
|
|
|
|
// Clipboard format for node type guid
|
|
const wchar_t* CCF_NODETYPE = L"CCF_NODETYPE";
|
|
|
|
// Clipboard format for string version of node type guid
|
|
const wchar_t* CCF_SZNODETYPE = L"CCF_SZNODETYPE";
|
|
|
|
// Clipboard format for name displayed in scope pane
|
|
const wchar_t* CCF_DISPLAY_NAME = L"CCF_DISPLAY_NAME";
|
|
|
|
// Clipboard format for the snapin's class id.
|
|
const wchar_t* CCF_SNAPIN_CLASSID = L"CCF_SNAPIN_CLASSID";
|
|
|
|
// Clipboard format for window title (for window data object)
|
|
const wchar_t* CCF_WINDOW_TITLE = L"CCF_WINDOW_TITLE";
|
|
|
|
// This is the MMC supplied Multi-select data object.
|
|
const wchar_t* CCF_MMC_MULTISELECT_DATAOBJECT = L"CCF_MMC_MULTISELECT_DATAOBJECT";
|
|
|
|
// Clipboard format for the snapins multi selected dataobjects.
|
|
// If there are N snapins whose objects are selected in the result
|
|
// pane, these N dataobjects will be passed in a GloballAlloced
|
|
// memory. The first DWORD contains the number of snapins, this will
|
|
// be followed by N ptrs to the DataObjects.
|
|
typedef struct _SMMCDataObjects
|
|
{
|
|
DWORD count;
|
|
LPDATAOBJECT lpDataObject[1];
|
|
|
|
} SMMCDataObjects;
|
|
const wchar_t* CCF_MULTI_SELECT_SNAPINS = L"CCF_MULTI_SELECT_SNAPINS";
|
|
|
|
// Clipboard format for the array of GUIDs which constitutes the object
|
|
// types of all the currently selected result items put by the snapin.
|
|
typedef struct _SMMCObjectTypes
|
|
{
|
|
DWORD count;
|
|
GUID guid[1];
|
|
|
|
} SMMCObjectTypes;
|
|
|
|
const wchar_t* CCF_OBJECT_TYPES_IN_MULTI_SELECT = L"CCF_OBJECT_TYPES_IN_MULTI_SELECT";
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
// Clipboard format for dynamically extending the selected items'
|
|
// context menus, toolbars, and/or property pages.
|
|
// Same structure as MMCObjectTypes.
|
|
typedef SMMCObjectTypes SMMCDynamicExtensions;
|
|
|
|
const wchar_t* CCF_MMC_DYNAMIC_EXTENSIONS = L"CCF_MMC_DYNAMIC_EXTENSIONS";
|
|
|
|
// optional Clipboard format for when the snapin wants to be preloaded;
|
|
// the data for this format is a BOOL.
|
|
const wchar_t* CCF_SNAPIN_PRELOADS = L"CCF_SNAPIN_PRELOADS";
|
|
|
|
|
|
// clipboard format for custom dynamic node IDs
|
|
typedef struct _SNodeID
|
|
{
|
|
DWORD cBytes;
|
|
BYTE id[1];
|
|
} SNodeID;
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
// updated version
|
|
typedef struct _SNodeID2
|
|
{
|
|
DWORD dwFlags;
|
|
DWORD cBytes;
|
|
BYTE id[1];
|
|
} SNodeID2;
|
|
|
|
// used by the _SNodeID2 structure
|
|
const DWORD MMC_NODEID_SLOW_RETRIEVAL = 0x01;
|
|
|
|
const wchar_t* CCF_NODEID2 = L"CCF_NODEID2";
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
|
|
const wchar_t* CCF_NODEID = L"CCF_NODEID";
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
// Clipboard format to identify a set of columns put by a node
|
|
// for persisting column information.
|
|
// Two or more nodes can use same column-set.
|
|
|
|
typedef struct _SColumnSetID
|
|
{
|
|
DWORD dwFlags;
|
|
DWORD cBytes;
|
|
BYTE id[1];
|
|
} SColumnSetID;
|
|
|
|
const wchar_t* CCF_COLUMN_SET_ID = L"CCF_COLUMN_SET_ID";
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// APIs exported in mmc.lib
|
|
//
|
|
cpp_quote("STDAPI MMCPropertyChangeNotify(LONG_PTR lNotifyHandle, LPARAM param);")
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
cpp_quote("STDAPI MMCPropertyHelp(LPOLESTR pszHelpTopic);")
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
cpp_quote("STDAPI MMCFreeNotifyHandle(LONG_PTR lNotifyHandle);")
|
|
cpp_quote("STDAPI MMCPropPageCallback(void* vpsp);")
|
|
cpp_quote("EXTERN_C const CLSID CLSID_NodeManager;")
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
cpp_quote("EXTERN_C const CLSID CLSID_MessageView;")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Special dataobjects
|
|
//
|
|
cpp_quote("#define DOBJ_NULL (LPDATAOBJECT) 0")
|
|
cpp_quote("#define DOBJ_CUSTOMOCX (LPDATAOBJECT) -1")
|
|
cpp_quote("#define DOBJ_CUSTOMWEB (LPDATAOBJECT) -2")
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
cpp_quote("#define DOBJ_NOCONSOLE (LPDATAOBJECT) -3")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
cpp_quote("#define SPECIAL_DOBJ_MIN -10")
|
|
cpp_quote("#define SPECIAL_DOBJ_MAX 0")
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Macros
|
|
//
|
|
cpp_quote("#define IS_SPECIAL_DATAOBJECT(d) (((LONG_PTR)(d) >= SPECIAL_DOBJ_MIN) && ((LONG_PTR)(d) <= SPECIAL_DOBJ_MAX))")
|
|
cpp_quote("#define IS_SPECIAL_COOKIE(c) (((c) >= SPECIAL_COOKIE_MIN) && ((c) <= SPECIAL_COOKIE_MAX))")
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Interfaces
|
|
//
|
|
[
|
|
object,
|
|
uuid(955AB28A-5218-11D0-A985-00C04FD8D565),
|
|
helpstring("IComponentData Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IComponentData : IUnknown
|
|
{
|
|
[helpstring("Snap-in entry point. Can QI for IConsole & IConsoleNameSpace")]
|
|
HRESULT Initialize([in] LPUNKNOWN pUnknown);
|
|
|
|
[helpstring("Create a Componet for this ComponetData")]
|
|
HRESULT CreateComponent([out] LPCOMPONENT* ppComponent);
|
|
|
|
[helpstring("User actions")]
|
|
HRESULT Notify([in] LPDATAOBJECT lpDataObject, [in] MMC_NOTIFY_TYPE event,
|
|
[in] LPARAM arg, [in] LPARAM param);
|
|
|
|
[helpstring("Release cookies associated with the children of a specific node")]
|
|
HRESULT Destroy();
|
|
|
|
[helpstring("Returns a data object which may be used to retrieve the context information for the specified cookie")]
|
|
HRESULT QueryDataObject([in] MMC_COOKIE cookie, [in] DATA_OBJECT_TYPES type,
|
|
[out] LPDATAOBJECT* ppDataObject);
|
|
|
|
[helpstring("Get display info for the name space item")]
|
|
HRESULT GetDisplayInfo([in,out] SCOPEDATAITEM* pScopeDataItem);
|
|
|
|
[helpstring("The snap-in's compare function for two data objects")]
|
|
HRESULT CompareObjects([in] LPDATAOBJECT lpDataObjectA, [in] LPDATAOBJECT lpDataObjectB);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB2-D36C-11CF-ADBC-00AA00A80033),
|
|
helpstring("IComponent Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IComponent : IUnknown
|
|
{
|
|
[helpstring("Snap-in entry point")]
|
|
HRESULT Initialize([in] LPCONSOLE lpConsole);
|
|
|
|
[helpstring("User actions")]
|
|
HRESULT Notify([in] LPDATAOBJECT lpDataObject, [in] MMC_NOTIFY_TYPE event,
|
|
[in] LPARAM arg, [in] LPARAM param);
|
|
|
|
[helpstring("Release cookies associated with the children of a specific node")]
|
|
HRESULT Destroy([in] MMC_COOKIE cookie);
|
|
|
|
[helpstring("Returns a data object which may be used to retrieve the context information for the specified cookie")]
|
|
HRESULT QueryDataObject([in] MMC_COOKIE cookie, [in] DATA_OBJECT_TYPES type,
|
|
[out] LPDATAOBJECT* ppDataObject);
|
|
|
|
[helpstring("Returns the result view type for the specified cookie")]
|
|
HRESULT GetResultViewType([in] MMC_COOKIE cookie, [out] LPOLESTR* ppViewType,
|
|
[out] long* pViewOptions);
|
|
|
|
[helpstring("Get display info for the result item")]
|
|
HRESULT GetDisplayInfo([in,out] RESULTDATAITEM* pResultDataItem);
|
|
|
|
[helpstring("The snap-in's compare function for two data objects")]
|
|
HRESULT CompareObjects([in] LPDATAOBJECT lpDataObjectA, [in] LPDATAOBJECT lpDataObjectB);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(E8315A52-7A1A-11D0-A2D2-00C04FD909DD),
|
|
helpstring("Compare interface for sorting result items"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IResultDataCompare : IUnknown
|
|
{
|
|
[helpstring("Compare two cookies")]
|
|
HRESULT Compare([in] LPARAM lUserParam,
|
|
[in] MMC_COOKIE cookieA, [in] MMC_COOKIE cookieB, [in, out] int* pnResult);
|
|
}
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(9CB396D8-EA83-11d0-AEF1-00C04FB6DD2C),
|
|
helpstring("Interface for owner data result pane list"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IResultOwnerData : IUnknown
|
|
{
|
|
[helpstring("Find result item that matches string")]
|
|
HRESULT FindItem([in] LPRESULTFINDINFO pFindInfo, [out] int* pnFoundIndex);
|
|
|
|
[helpstring("Hint to cache result item data")]
|
|
HRESULT CacheHint ([in] int nStartIndex, [in] int nEndIndex);
|
|
|
|
[helpstring("Sort result items")]
|
|
HRESULT SortItems([in] int nColumn, [in] DWORD dwSortOptions, [in] LPARAM lUserParam);
|
|
}
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB1-D36C-11CF-ADBC-00AA00A80033),
|
|
helpstring("IConsole Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsole : IUnknown
|
|
{
|
|
[helpstring("Sets IConsoles header interface")]
|
|
HRESULT SetHeader([in] LPHEADERCTRL pHeader);
|
|
|
|
[helpstring("Sets IConsoles toolbar interface")]
|
|
HRESULT SetToolbar([in] LPTOOLBAR pToolbar);
|
|
|
|
[helpstring("Queries IConsoles user provided IUnknown")]
|
|
HRESULT QueryResultView([out] LPUNKNOWN* pUnknown);
|
|
|
|
[helpstring("Queries the IConsole provided image list for the scope pane.")]
|
|
HRESULT QueryScopeImageList([out] LPIMAGELIST* ppImageList);
|
|
|
|
[helpstring("Queries the IConsole provided image list for the result pane.")]
|
|
HRESULT QueryResultImageList([out] LPIMAGELIST* ppImageList);
|
|
|
|
[helpstring("Generates a notification to update view(s) because of content change")]
|
|
HRESULT UpdateAllViews([in] LPDATAOBJECT lpDataObject,
|
|
[in] LPARAM data,
|
|
[in] LONG_PTR hint);
|
|
|
|
[helpstring("Displays a message box")]
|
|
HRESULT MessageBox([in] LPCWSTR lpszText, [in] LPCWSTR lpszTitle,
|
|
[in] UINT fuStyle, [out] int* piRetval);
|
|
|
|
[helpstring("Query for the IConsoleVerb.")]
|
|
HRESULT QueryConsoleVerb([out] LPCONSOLEVERB * ppConsoleVerb);
|
|
|
|
[helpstring("Selects the given scope item.")]
|
|
HRESULT SelectScopeItem([in] HSCOPEITEM hScopeItem);
|
|
|
|
[helpstring("Returns handle to the main frame window.")]
|
|
HRESULT GetMainWindow([out] HWND* phwnd);
|
|
|
|
[helpstring("Create a new window rooted at the scope item specified by hScopeItem.")]
|
|
HRESULT NewWindow([in] HSCOPEITEM hScopeItem, [in] unsigned long lOptions);
|
|
|
|
};
|
|
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB3-D36C-11CF-ADBC-00AA00A80033),
|
|
helpstring("INodeInit Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IHeaderCtrl : IUnknown
|
|
{
|
|
const int AUTO_WIDTH = -1; // Column width is determined by the string length + padding
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
const int HIDE_COLUMN = -4; // Column will be hidden
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
[helpstring("Add a column to a Default Result view")]
|
|
HRESULT InsertColumn([in] int nCol, [in,] LPCWSTR title, [in] int nFormat, [in] int nWidth);
|
|
|
|
[helpstring("Remove a column to a Default Result view")]
|
|
HRESULT DeleteColumn([in] int nCol);
|
|
|
|
[helpstring("Set a columns text")]
|
|
HRESULT SetColumnText([in] int nCol, [in] LPCWSTR title);
|
|
|
|
[helpstring("Gets a columns text")]
|
|
HRESULT GetColumnText([in] int nCol, [out] LPOLESTR* pText);
|
|
|
|
[helpstring("Set a columns width")]
|
|
HRESULT SetColumnWidth([in] int nCol, [in] int nWidth);
|
|
|
|
[helpstring("Gets a columns width")]
|
|
HRESULT GetColumnWidth([in] int nCol, [out] int* pWidth);
|
|
};
|
|
|
|
enum
|
|
{
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// The following bits in insertion point / submenu IDs are handled specially:
|
|
//
|
|
// CCM_INSERTIONPOINTID_MASK_SPECIAL:
|
|
// Insertion points and submenus whose IDs contain any bit in
|
|
// CCM_INSERTIONPOINTID_MASK_SPECIAL have special behavior. Snap-Ins may use
|
|
// the other bits as they see fit.
|
|
// CCM_INSERTIONPOINTID_MASK_SHARED:
|
|
// Insertion points and submenus whose IDs contain CCM_INSERTIONPOINTID_MASK_SHARED
|
|
// are shared between the creator of the context menu, the primary extension and
|
|
// the third-party extension. Any of these entities adding items to a shared
|
|
// insertion point or submenu, add them to the same insertion point or submenu.
|
|
// Only IContextMenuProvider may create insertion points or submenus with this bit
|
|
// set, unless CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY is also set, in which case
|
|
// only the primary extension may create them.
|
|
// CCM_INSERTIONPOINT_CREATE_PRIMARY:
|
|
// Only the system may add insertion points or submenus for which CCM_INSERTIONPOINT_SHARED
|
|
// is set and this bit is not set. Only the primary extension may add insertion points
|
|
// or submenus for which both bits are set. This prevents insertion point ID conflicts
|
|
// between insertion points and submenus created by IContextMenuProvider and those
|
|
// created by the primary extension.
|
|
// CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY:
|
|
// If CCM_INSERTIONPOINT_SHARED is set and this bit is not set, then
|
|
// the primary extension may not add to this insertion point or submenu.
|
|
// CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY:
|
|
// If CCM_INSERTIONPOINT_SHARED is set and this bit is not set, then
|
|
// the third-party extensions may not add to this insertion point or submenu.
|
|
// CCM_INSERTIONPOINTID_MASK_RESERVED:
|
|
// Insertion points and submenus may not be added with any of these bits set.
|
|
// CCM_INSERTIONPOINTID_MASK_FLAGINDEX:
|
|
// This mask extracts the the index field from system insertion point IDs.
|
|
// The index gives the bit position of the associated insertion allowed flag.
|
|
|
|
CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000,
|
|
CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000,
|
|
CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000,
|
|
CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000,
|
|
CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000,
|
|
CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000,
|
|
CCM_INSERTIONPOINTID_MASK_FLAGINDEX = 0x0000001F,
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Use these InsertionPointIDs to add items at the predefined insertion points:
|
|
//
|
|
// 0
|
|
// This is interpreted the same as CCM_INSERTIONPOINTID_ROOT_MENU (see below).
|
|
// CCM_INSERTIONPOINTID_PRIMARY_TOP:
|
|
// The primary extension may use this insertion point to add items to the top of
|
|
// the main context menu.
|
|
// CCM_INSERTIONPOINTID_PRIMARY_NEW:
|
|
// The primary extension may use this insertion point to add items to the top of
|
|
// the Create New submenu.
|
|
// CCM_INSERTIONPOINTID_PRIMARY_TASK:
|
|
// The primary extension may use this insertion point to add items to the top of
|
|
// the Task submenu.
|
|
// CCM_INSERTIONPOINTID_3RDPARTY_NEW:
|
|
// Third-party extensions may use this insertion point to add items to the bottom of
|
|
// the Create New submenu.
|
|
// CCM_INSERTIONPOINTID_3RDPARTY_TASK:
|
|
// Third-party extensions may use this insertion point to add items to the bottom of
|
|
// the Task submenu.
|
|
// CCM_INSERTIONPOINTID_ROOT_MENU:
|
|
// IContextMenuProvider may use this insertion point to add items to the root menu.
|
|
// Neither primary extensions nor third-party extension may add items to the root
|
|
// menu except through insertion points added by IContextMenuProvider.
|
|
//
|
|
CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000, // SHARED and ADD_PRIMARY
|
|
CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001, // SHARED and ADD_PRIMARY
|
|
CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002, // SHARED and ADD_PRIMARY
|
|
CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003, // SHARED and ADD_PRIMARY
|
|
CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001, // SHARED and ADD_3RDPARTY
|
|
CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002, // SHARED and ADD_3RDPARTY
|
|
CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000 // SHARED
|
|
};
|
|
|
|
//
|
|
// Macro to derive an insertion allowed flag from an system insertion point ID
|
|
//
|
|
#define INSERTALLOWED_FLAG(insertionID) \
|
|
(1L << (insertionID & CCM_INSERTIONPOINTID_MASK_FLAGINDEX))
|
|
enum
|
|
{
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// These flags give permission to insert menu items at the CCM_INSERTIONPOINTID_xxx
|
|
// insertion points define above. The bit position of each flag is derived from the
|
|
// index portion of the corresponding insertion point ID. They are passed to the
|
|
// snap-in's AddMenuItems method.
|
|
|
|
CCM_INSERTIONALLOWED_TOP = INSERTALLOWED_FLAG(CCM_INSERTIONPOINTID_PRIMARY_TOP),
|
|
CCM_INSERTIONALLOWED_NEW = INSERTALLOWED_FLAG(CCM_INSERTIONPOINTID_PRIMARY_NEW),
|
|
CCM_INSERTIONALLOWED_TASK = INSERTALLOWED_FLAG(CCM_INSERTIONPOINTID_PRIMARY_TASK),
|
|
CCM_INSERTIONALLOWED_VIEW = INSERTALLOWED_FLAG(CCM_INSERTIONPOINTID_PRIMARY_VIEW)
|
|
};
|
|
|
|
|
|
enum
|
|
{
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// The following bits in menu command IDs are handled specially:
|
|
//
|
|
// CCM_COMMANDID_MASK_RESERVED:
|
|
// Items other than insertion points and submenus may not be added with any of
|
|
// these bits set.
|
|
//
|
|
CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000
|
|
};
|
|
|
|
enum
|
|
{
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// The following flags may be passed via AddMenuItem parameter fSpecialFlags:
|
|
//
|
|
// CCM_SPECIAL_SEPARATOR
|
|
// Ignore all other parameters except lInsertionPointID. Add a separator to the
|
|
// end of the menu or the specified insertion point, except that
|
|
// CCM_SPECIAL_SEPARATOR will never add a separator as the first or last item
|
|
// in a menu/submenu, and if two or more consecutive CCM_SPECIAL_SEPARATORs are added,
|
|
// only one appears in the menu. Only IContextMenuProvider is permitted to add
|
|
// separators, either special or otherwise, to menus created by IContextMenuProvider.
|
|
//
|
|
CCM_SPECIAL_SEPARATOR = 0x0001,
|
|
//
|
|
// CCM_SPECIAL_SUBMENU
|
|
// If this submenu is empty, then it will be grayed and disabled.
|
|
// This is only valid for MF_POPUP items.
|
|
//
|
|
CCM_SPECIAL_SUBMENU = 0x0002,
|
|
//
|
|
// CCM_SPECIAL_DEFAULT_ITEM
|
|
// This should be the default menu item. If more than one menu item specifies this flag,
|
|
// the last one in each submenu takes precedence.
|
|
//
|
|
CCM_SPECIAL_DEFAULT_ITEM = 0x0004,
|
|
//
|
|
// CCM_SPECIAL_INSERTION_POINT
|
|
// Ignore all other parameters except lCommandID and lInsertionPointID. This creates
|
|
// a new "insertion point" at the end of the insertion point or submenu identified by
|
|
// lInsertionPointID (0 is the end of the main menu). Subsequent calls may use
|
|
// the lCommandID from this call as their lInsertionPointID, and insert their own
|
|
// menu items, submenus or insertion points at this point in this menu.
|
|
//
|
|
CCM_SPECIAL_INSERTION_POINT = 0x0008,
|
|
//
|
|
// CCM_SPECIAL_TESTONLY
|
|
// Perform the normal validation of the menu item parameters and return the appropriate
|
|
// result code, but do not actually add the menu item.
|
|
//
|
|
CCM_SPECIAL_TESTONLY = 0x0010
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB7-D36C-11CF-ADBC-00AA00A80033),
|
|
helpstring("IContextMenuCallback Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IContextMenuCallback : IUnknown
|
|
{
|
|
// returns S_OK if the item was added
|
|
// returns E_INVALIDARG if given a NULL pointer
|
|
// returns E_INVALIDARG if an item already exists with this lCommandID
|
|
// returns E_INVALIDARG if insertion point ID could not be found
|
|
// returns E_INVALIDARG if command ID or insertion point ID is invalid
|
|
// returns E_INVALIDARG if fFlags contains MF_OWNERDRAW or MF_BITMAP
|
|
// returns E_INVALIDARG if an extension attempts to add an item where
|
|
// fFlags contains MF_SEPARATOR or fSpecialFlags contains CCM_SPECIAL_SEPARATOR
|
|
// except in submenus created by extensions
|
|
// otherwise an unexpected error occurred
|
|
[helpstring("Adds one item to context menu")]
|
|
HRESULT AddItem([in] CONTEXTMENUITEM* pItem);
|
|
};
|
|
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB6-D36C-11CF-ADBC-00AA00A80033),
|
|
object,
|
|
helpstring("IContextMenuProvider Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
//
|
|
// Note that this derives from IContextMenuCallback
|
|
//
|
|
interface IContextMenuProvider : IContextMenuCallback
|
|
{
|
|
// Methods
|
|
// returns S_OK unless an unexpected error occurs
|
|
[helpstring("Clear context menu")]
|
|
HRESULT EmptyMenuList();
|
|
|
|
// returns S_OK if successful
|
|
// returns E_INVALIDARG on NULL parameter
|
|
// passes through return code from IExtendContextMenu::AddMenuItems
|
|
// or from CoCreateInstance
|
|
// otherwise an unexpected error occurred
|
|
[helpstring("Allow the primary extension to add to bottom of context menu")]
|
|
HRESULT AddPrimaryExtensionItems([in] LPUNKNOWN piExtension, [in] LPDATAOBJECT piDataObject);
|
|
|
|
// returns S_OK if successful
|
|
// returns E_INVALIDARG on NULL parameter
|
|
// returns S_FALSE if context menu has already been extended
|
|
// passes through return code from IExtendContextMenu::AddMenuItems
|
|
// or from CLSIDToString or CoCreateInstance
|
|
// otherwise an unexpected error occurred
|
|
[helpstring("Allow third-party extensions to add to bottom of context menu")]
|
|
HRESULT AddThirdPartyExtensionItems([in] LPDATAOBJECT piDataObject);
|
|
|
|
// returns S_OK unless an unexpected error occurs
|
|
[helpstring("Display context menu")]
|
|
HRESULT ShowContextMenu([in] HWND hwndParent, [in] long xPos, [in] long yPos, [out,retval] long* plSelected);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(4F3B7A4F-CFAC-11CF-B8E3-00C04FD8D5B0),
|
|
helpstring("IExtendContextMenu Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendContextMenu : IUnknown
|
|
{
|
|
[helpstring("Extension may add context menu items via callback interface")]
|
|
HRESULT AddMenuItems([in] LPDATAOBJECT piDataObject,
|
|
[in] LPCONTEXTMENUCALLBACK piCallback,
|
|
[in,out] long *pInsertionAllowed);
|
|
|
|
[helpstring("Extension context menu item was selected")]
|
|
HRESULT Command([in] long lCommandID, [in] LPDATAOBJECT piDataObject);
|
|
};
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
// specify change large or small icon only in ImageListSetIcon
|
|
cpp_quote("#define ILSIF_LEAVE_LARGE_ICON 0x40000000")
|
|
cpp_quote("#define ILSIF_LEAVE_SMALL_ICON 0x20000000")
|
|
cpp_quote("#define ILSIF_LEAVE_MASK (ILSIF_LEAVE_LARGE_ICON | ILSIF_LEAVE_SMALL_ICON)")
|
|
|
|
cpp_quote("#define ILSI_LARGE_ICON(nLoc) (nLoc | ILSIF_LEAVE_SMALL_ICON)")
|
|
cpp_quote("#define ILSI_SMALL_ICON(nLoc) (nLoc | ILSIF_LEAVE_LARGE_ICON)")
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB8-D36C-11CF-ADBC-00AA00A80033),
|
|
helpstring("IImageList Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IImageList : IUnknown
|
|
{
|
|
[helpstring("Sets an Icon in the image list, creates it if it is not there.")]
|
|
HRESULT ImageListSetIcon([in] LONG_PTR* pIcon, [in] long nLoc);
|
|
|
|
[helpstring("Sets a strip in the image list, starting at nLoc using a pair of bitmaps.")]
|
|
HRESULT ImageListSetStrip([in] LONG_PTR* pBMapSm,
|
|
[in] LONG_PTR* pBMapLg,[in] long nStartLoc, [in] COLORREF cMask);
|
|
};
|
|
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(31DA5FA0-E0EB-11cf-9F21-00AA003CA9F6),
|
|
helpstring("IResultData Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IResultData : IUnknown
|
|
{
|
|
[helpstring("Allows the snap-in to insert a single item.")]
|
|
HRESULT InsertItem([in,out] LPRESULTDATAITEM item);
|
|
|
|
[helpstring("Allows the snap-in to delete a single item.")]
|
|
HRESULT DeleteItem([in] HRESULTITEM itemID, [in] int nCol);
|
|
|
|
[helpstring("Allows the snap-in to find an item/subitem based on its user inserted lParam.")]
|
|
HRESULT FindItemByLParam([in] LPARAM lParam, [out] HRESULTITEM *pItemID);
|
|
|
|
[helpstring("Allows the snap-in to delete all the items.")]
|
|
HRESULT DeleteAllRsltItems();
|
|
|
|
[helpstring("Allows the snap-in to set a single item.")]
|
|
HRESULT SetItem([in] LPRESULTDATAITEM item);
|
|
|
|
[helpstring("Allows the snap-in to get a single item.")]
|
|
HRESULT GetItem([in,out] LPRESULTDATAITEM item);
|
|
|
|
[helpstring("Returns the lParam of the first item, which matches the given state.")]
|
|
HRESULT GetNextItem([in,out] LPRESULTDATAITEM item);
|
|
|
|
[helpstring("Allows the snap-in to modify the state of an item.")]
|
|
HRESULT ModifyItemState([in] int nIndex, [in] HRESULTITEM itemID,
|
|
[in] UINT uAdd, [in] UINT uRemove);
|
|
|
|
[helpstring("Allows the snap-in to set the result view style.")]
|
|
HRESULT ModifyViewStyle([in] MMC_RESULT_VIEW_STYLE add,
|
|
[in] MMC_RESULT_VIEW_STYLE remove);
|
|
|
|
[helpstring("Allows the snap-in to set the result view mode.")]
|
|
HRESULT SetViewMode([in] long lViewMode);
|
|
|
|
[helpstring("Allows the snap-in to get the result view mode.")]
|
|
HRESULT GetViewMode([out] long* lViewMode);
|
|
|
|
[helpstring("Allows the snap-in to update a single item.")]
|
|
HRESULT UpdateItem([in] HRESULTITEM itemID);
|
|
|
|
[helpstring("Sort all items in result pane")]
|
|
HRESULT Sort([in] int nColumn, [in] DWORD dwSortOptions, [in] LPARAM lUserParam);
|
|
|
|
[helpstring("Set the description bar text for the result view")]
|
|
HRESULT SetDescBarText([in] LPOLESTR DescText);
|
|
|
|
[helpstring("Set number of items in result pane list")]
|
|
HRESULT SetItemCount([in] int nItemCount, [in] DWORD dwOptions);
|
|
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(BEDEB620-F24D-11cf-8AFC-00AA003CA9F6),
|
|
helpstring("IConsoleNameSpace Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsoleNameSpace : IUnknown
|
|
{
|
|
import "oaidl.idl";
|
|
[helpstring("Allows the snap-in to insert a single item into the scope view.")]
|
|
HRESULT InsertItem([in,out] LPSCOPEDATAITEM item);
|
|
|
|
[helpstring("Allows the snap-in to delete a single item from the scope view.")]
|
|
HRESULT DeleteItem([in] HSCOPEITEM hItem, [in] long fDeleteThis);
|
|
|
|
[helpstring("Allows the snap-in to set a single scope view item.")]
|
|
HRESULT SetItem([in] LPSCOPEDATAITEM item);
|
|
|
|
[helpstring("Allows the snap-in to get a single scope view item.")]
|
|
HRESULT GetItem([in,out] LPSCOPEDATAITEM item);
|
|
|
|
[helpstring("The handle of the child item if successful, otherwise NULL.")]
|
|
HRESULT GetChildItem([in] HSCOPEITEM item, [out] HSCOPEITEM* pItemChild,
|
|
[out] MMC_COOKIE* pCookie);
|
|
|
|
[helpstring("The handle of the next item if successful, otherwise NULL.")]
|
|
HRESULT GetNextItem([in] HSCOPEITEM item, [out] HSCOPEITEM* pItemNext,
|
|
[out] MMC_COOKIE* pCookie);
|
|
|
|
[helpstring("The handle of the parent item if successful, otherwise NULL.")]
|
|
HRESULT GetParentItem([in] HSCOPEITEM item, [out] HSCOPEITEM* pItemParent,
|
|
[out] MMC_COOKIE* pCookie);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(255F18CC-65DB-11D1-A7DC-00C04FD8D565),
|
|
helpstring("IConsoleNameSpace2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsoleNameSpace2 : IConsoleNameSpace
|
|
{
|
|
[helpstring("Allows the snap-in to expand an item in the console namespace.")]
|
|
HRESULT Expand([in] HSCOPEITEM hItem);
|
|
|
|
[helpstring("Add a dynamic extension to a selected node")]
|
|
HRESULT AddExtension([in] HSCOPEITEM hItem, [in] LPCLSID lpClsid);
|
|
};
|
|
|
|
|
|
struct _PSP;
|
|
typedef struct _PSP * HPROPSHEETPAGE;
|
|
|
|
[
|
|
local,
|
|
object,
|
|
uuid(85DE64DD-EF21-11cf-A285-00C04FD8DBE6),
|
|
helpstring("IPropertySheetCallback Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IPropertySheetCallback : IUnknown
|
|
{
|
|
|
|
[helpstring("Snap-in uses this to add a page to a property sheet")]
|
|
HRESULT AddPage([in] HPROPSHEETPAGE hPage);
|
|
|
|
[helpstring("Snap-in uses this to remove a page from a property sheet")]
|
|
HRESULT RemovePage([in] HPROPSHEETPAGE hPage);
|
|
};
|
|
|
|
[
|
|
object,
|
|
uuid(85DE64DE-EF21-11cf-A285-00C04FD8DBE6),
|
|
helpstring("IPropertySheetProvider Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IPropertySheetProvider : IUnknown
|
|
{
|
|
[helpstring("Creates a property sheet frame")]
|
|
HRESULT CreatePropertySheet([in] LPCWSTR title, [in] boolean type,
|
|
[in] MMC_COOKIE cookie, [in] LPDATAOBJECT pIDataObjectm,
|
|
[in] DWORD dwOptions);
|
|
|
|
[helpstring("Determine if the property sheet exist")]
|
|
HRESULT FindPropertySheet([in] MMC_COOKIE cookie, [in] LPCOMPONENT lpComponent, [in] LPDATAOBJECT lpDataObject);
|
|
|
|
[helpstring("Collects the pages from the primary snap-in")]
|
|
HRESULT AddPrimaryPages(LPUNKNOWN lpUnknown, BOOL bCreateHandle, HWND hNotifyWindow, BOOL bScopePane);
|
|
|
|
[helpstring("Collects the pages from the extension snap-in(s)")]
|
|
HRESULT AddExtensionPages();
|
|
|
|
[helpstring("Shows a property sheet frame parented to the HWND passed in")]
|
|
HRESULT Show([in] LONG_PTR window, [in] int page);
|
|
};
|
|
|
|
[
|
|
object,
|
|
uuid(85DE64DC-EF21-11cf-A285-00C04FD8DBE6),
|
|
helpstring("IExtendPropertySheet Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendPropertySheet : IUnknown
|
|
{
|
|
[helpstring("Interface implemented by the snap-in to add pages to a sheet")]
|
|
// handle - This handle must be saved in the property page object
|
|
// to notify the parent of changes in property using API
|
|
// MMCPropertyChangeNotify. The API MMCFreeNotifyHandle
|
|
// should be called just before the property page is
|
|
// destroyed to delete the handle.
|
|
HRESULT CreatePropertyPages([in] LPPROPERTYSHEETCALLBACK lpProvider,
|
|
[in] LONG_PTR handle,
|
|
[in] LPDATAOBJECT lpIDataObject);
|
|
|
|
[helpstring("Interface implemented by the snap-in to determine if this object needs pages")]
|
|
HRESULT QueryPagesFor([in] LPDATAOBJECT lpDataObject);
|
|
};
|
|
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(69FB811E-6C1C-11D0-A2CB-00C04FD909DD),
|
|
helpstring("Control bar to hold toolbar and other controls"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IControlbar : IUnknown
|
|
{
|
|
[helpstring("Create and return the control requested")]
|
|
HRESULT Create([in] MMC_CONTROL_TYPE nType,
|
|
[in] LPEXTENDCONTROLBAR pExtendControlbar,
|
|
[out] LPUNKNOWN* ppUnknown);
|
|
|
|
[helpstring("Associated the control to the control bar")]
|
|
HRESULT Attach([in] MMC_CONTROL_TYPE nType, [in] LPUNKNOWN lpUnknown);
|
|
|
|
[helpstring("Break the association between the control and the control bar")]
|
|
HRESULT Detach([in] LPUNKNOWN lpUnknown);
|
|
};
|
|
|
|
[
|
|
object,
|
|
uuid(49506520-6F40-11D0-A98B-00C04FD8D565),
|
|
helpstring("IExtendControlbar Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendControlbar : IUnknown
|
|
{
|
|
[helpstring("Extension may add toolbars via callback interface")]
|
|
HRESULT SetControlbar([in] LPCONTROLBAR pControlbar);
|
|
|
|
[helpstring("User actions")]
|
|
HRESULT ControlbarNotify([in] MMC_NOTIFY_TYPE event,
|
|
[in] LPARAM arg, [in] LPARAM param);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(43136EB9-D36C-11CF-ADBC-00AA00A80033),
|
|
pointer_default(unique)
|
|
]
|
|
interface IToolbar : IUnknown
|
|
{
|
|
[helpstring("Add and image to the toolbar")]
|
|
HRESULT AddBitmap([in] int nImages, [in] HBITMAP hbmp, [in] int cxSize, [in] int cySize, [in] COLORREF crMask );
|
|
|
|
[helpstring("Add an array of buttons to the toolbar")]
|
|
HRESULT AddButtons([in] int nButtons, [in] LPMMCBUTTON lpButtons);
|
|
|
|
[helpstring("Add a single button to the toolbar at position nIndex")]
|
|
HRESULT InsertButton([in] int nIndex, [in] LPMMCBUTTON lpButton);
|
|
|
|
[helpstring("Remove a button at the index")]
|
|
HRESULT DeleteButton([in] int nIndex);
|
|
|
|
[helpstring("Get an attribute of a button")]
|
|
HRESULT GetButtonState([in] int idCommand, [in] MMC_BUTTON_STATE nState, [out] BOOL* pState);
|
|
|
|
[helpstring("Set an attribute of a button")]
|
|
HRESULT SetButtonState([in] int idCommand, [in] MMC_BUTTON_STATE nState, [in] BOOL bState);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(E49F7A60-74AF-11D0-A286-00C04FD8FE93),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsoleVerb : IUnknown
|
|
{
|
|
[helpstring("Get verb state")]
|
|
HRESULT GetVerbState([in] MMC_CONSOLE_VERB eCmdID, [in] MMC_BUTTON_STATE nState, [out] BOOL* pState);
|
|
|
|
[helpstring("Set verb state")]
|
|
HRESULT SetVerbState([in] MMC_CONSOLE_VERB eCmdID, [in] MMC_BUTTON_STATE nState, [in] BOOL bState);
|
|
|
|
[helpstring("Set default verb")]
|
|
HRESULT SetDefaultVerb([in] MMC_CONSOLE_VERB eCmdID);
|
|
|
|
[helpstring("Get default verb")]
|
|
HRESULT GetDefaultVerb([out] MMC_CONSOLE_VERB* peCmdID);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(1245208C-A151-11D0-A7D7-00C04FD909DD),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISnapinAbout : IUnknown
|
|
{
|
|
[helpstring("Text for the snap-in description box")]
|
|
HRESULT GetSnapinDescription([out] LPOLESTR* lpDescription);
|
|
|
|
[helpstring("Provider name")]
|
|
HRESULT GetProvider([out] LPOLESTR* lpName);
|
|
|
|
[helpstring("Version number for the snap-in")]
|
|
HRESULT GetSnapinVersion([out] LPOLESTR* lpVersion);
|
|
|
|
[helpstring("Main icon for about box")]
|
|
HRESULT GetSnapinImage([out] HICON* hAppIcon);
|
|
|
|
[helpstring("Static folder images for scope and result panes")]
|
|
HRESULT GetStaticFolderImage([out] HBITMAP* hSmallImage,
|
|
[out] HBITMAP* hSmallImageOpen,
|
|
[out] HBITMAP* hLargeImage,
|
|
[out] COLORREF* cMask);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(951ED750-D080-11d0-B197-000000000000),
|
|
pointer_default(unique)
|
|
]
|
|
interface IMenuButton : IUnknown
|
|
{
|
|
[helpstring("Adds a button")]
|
|
HRESULT AddButton([in] int idCommand,[in] LPOLESTR lpButtonText,
|
|
[in] LPOLESTR lpTooltipText);
|
|
|
|
[helpstring("Set an attributes of a button")]
|
|
HRESULT SetButton([in] int idCommand,[in] LPOLESTR lpButtonText,
|
|
[in] LPOLESTR lpTooltipText);
|
|
|
|
[helpstring("Set the state of a button")]
|
|
HRESULT SetButtonState([in] int idCommand,
|
|
[in] MMC_BUTTON_STATE nState,
|
|
[in] BOOL bState);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(A6B15ACE-DF59-11D0-A7DD-00C04FD909DD),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISnapinHelp : IUnknown
|
|
{
|
|
[helpstring("Get the compiled help file (.chm) from a snap-in to merge")]
|
|
HRESULT GetHelpTopic([out] LPOLESTR* lpCompiledHelpFile);
|
|
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
////
|
|
//// MMC 1.1 changes
|
|
////
|
|
cpp_quote("#if (MMC_VER >= 0x0110)")
|
|
|
|
[
|
|
object,
|
|
uuid(B7A87232-4A51-11D1-A7EA-00C04FD909DD),
|
|
helpstring("IExtendPropertySheet2 Interface, adds support for Wizard 97 specification"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendPropertySheet2 : IExtendPropertySheet
|
|
{
|
|
[helpstring("Interface implemented by the snap-in, to get the watermark and text for Wizard 97 style")]
|
|
HRESULT GetWatermarks([in] LPDATAOBJECT lpIDataObject,
|
|
[out] HBITMAP* lphWatermark,
|
|
[out] HBITMAP* lphHeader,
|
|
[out] HPALETTE* lphPalette,
|
|
[out] BOOL* bStretch);
|
|
};
|
|
|
|
[
|
|
object,
|
|
uuid(9757abb8-1b32-11d1-a7ce-00c04fd8d565),
|
|
helpstring("IHeaderCtrl2 Interface, adds filter support"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IHeaderCtrl2 : IHeaderCtrl
|
|
{
|
|
[helpstring("Sets the time out for filter change notification")]
|
|
HRESULT SetChangeTimeOut([in] unsigned long uTimeout);
|
|
|
|
[helpstring("Set filter data")]
|
|
HRESULT SetColumnFilter([in] UINT nColumn, [in] DWORD dwType, [in] MMC_FILTERDATA* pFilterData);
|
|
|
|
[helpstring("Get filter data")]
|
|
HRESULT GetColumnFilter([in] UINT nColumn, [in,out] LPDWORD pdwType, [in, out] MMC_FILTERDATA* pFilterData);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(4861A010-20F9-11d2-A510-00C04FB6DD2C),
|
|
helpstring("ISnapinHelp2 Interface, adds linked topics support"),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISnapinHelp2 : ISnapinHelp
|
|
{
|
|
[helpstring("Get additional topic files to merge into help collection")]
|
|
HRESULT GetLinkedTopics([out] LPOLESTR* lpCompiledHelpFiles);
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
////
|
|
//// Task Pad
|
|
|
|
typedef enum _MMC_TASK_DISPLAY_TYPE
|
|
{
|
|
MMC_TASK_DISPLAY_UNINITIALIZED = 0,
|
|
MMC_TASK_DISPLAY_TYPE_SYMBOL, // fontname, EOT, symbols
|
|
MMC_TASK_DISPLAY_TYPE_VANILLA_GIF, // (GIF) index 0 is transparent
|
|
MMC_TASK_DISPLAY_TYPE_CHOCOLATE_GIF, // (GIF) index 1 is transparent
|
|
MMC_TASK_DISPLAY_TYPE_BITMAP // non-transparent raster
|
|
} MMC_TASK_DISPLAY_TYPE;
|
|
|
|
typedef struct _MMC_TASK_DISPLAY_SYMBOL
|
|
{
|
|
LPOLESTR szFontFamilyName; // name of font family
|
|
LPOLESTR szURLtoEOT; // "res://"-type URL to EOT file
|
|
LPOLESTR szSymbolString; // 1 or more symbol characters
|
|
} MMC_TASK_DISPLAY_SYMBOL;
|
|
|
|
typedef struct _MMC_TASK_DISPLAY_BITMAP
|
|
{
|
|
LPOLESTR szMouseOverBitmap; // Note: URLs must be fully-qualified
|
|
LPOLESTR szMouseOffBitmap; // ("res://..." type) URLs
|
|
} MMC_TASK_DISPLAY_BITMAP;
|
|
|
|
typedef struct _MMC_TASK_DISPLAY_OBJECT
|
|
{
|
|
MMC_TASK_DISPLAY_TYPE eDisplayType;
|
|
[switch_type(MMC_TASK_DISPLAY_TYPE), switch_is((MMC_TASK_DISPLAY_TYPE)eDisplayType)]
|
|
union {
|
|
[case(MMC_TASK_DISPLAY_TYPE_BITMAP,MMC_TASK_DISPLAY_TYPE_VANILLA_GIF,MMC_TASK_DISPLAY_TYPE_CHOCOLATE_GIF)]
|
|
MMC_TASK_DISPLAY_BITMAP uBitmap;
|
|
[case(MMC_TASK_DISPLAY_TYPE_SYMBOL)]
|
|
MMC_TASK_DISPLAY_SYMBOL uSymbol;
|
|
[default];
|
|
};
|
|
} MMC_TASK_DISPLAY_OBJECT;
|
|
|
|
typedef enum _MMC_ACTION_TYPE
|
|
{
|
|
MMC_ACTION_UNINITIALIZED = -1,
|
|
MMC_ACTION_ID,
|
|
MMC_ACTION_LINK,
|
|
MMC_ACTION_SCRIPT,
|
|
} MMC_ACTION_TYPE;
|
|
|
|
typedef struct _MMC_TASK
|
|
{
|
|
MMC_TASK_DISPLAY_OBJECT sDisplayObject;
|
|
LPOLESTR szText;
|
|
LPOLESTR szHelpString;
|
|
MMC_ACTION_TYPE eActionType; // from enum above
|
|
union
|
|
{
|
|
LONG_PTR nCommandID; // command id (unique number)
|
|
LPOLESTR szActionURL; // either link or scriptlet
|
|
LPOLESTR szScript; // raw script code
|
|
};
|
|
} MMC_TASK;
|
|
|
|
typedef struct _MMC_LISTPAD_INFO
|
|
{
|
|
LPOLESTR szTitle; // title for ListView in TaskPad
|
|
LPOLESTR szButtonText; // text for ListView in TaskPad
|
|
LONG_PTR nCommandID; // command id (unique number)
|
|
} MMC_LISTPAD_INFO;
|
|
|
|
typedef DWORD MMC_STRING_ID;
|
|
|
|
|
|
[
|
|
local,
|
|
object,
|
|
uuid(338698b1-5a02-11d1-9fec-00600832db4a),
|
|
helpstring("Implemented by the snapins that want to add tasks"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IEnumTASK : IUnknown
|
|
{
|
|
HRESULT Next(
|
|
[in] ULONG celt,
|
|
[out, size_is(celt), length_is(*pceltFetched)] MMC_TASK *rgelt,
|
|
[out] ULONG *pceltFetched);
|
|
HRESULT Skip([in] ULONG celt);
|
|
HRESULT Reset();
|
|
HRESULT Clone([out] IEnumTASK **ppenum);
|
|
|
|
// Skip and Clone are not called
|
|
// Next will be called 1 at a time (i.e. celt will always be 1)
|
|
// Reset will be called
|
|
};
|
|
|
|
|
|
|
|
[
|
|
local,
|
|
object,
|
|
uuid(8dee6511-554d-11d1-9fea-00600832db4a),
|
|
helpstring("Interface to be supported by those snapins that support taskpads"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendTaskPad : IUnknown
|
|
{
|
|
// called from script via CIC
|
|
[helpstring("Notify.")]
|
|
HRESULT TaskNotify([in] IDataObject* pdo, [in] VARIANT* arg, [in] VARIANT* param);
|
|
|
|
[helpstring("Tasks to be inserted in the task pad.")]
|
|
HRESULT EnumTasks([in] IDataObject * pdo, [in,string] LPOLESTR szTaskGroup,
|
|
[out] IEnumTASK** ppEnumTASK);
|
|
|
|
// support for default taskpad
|
|
[helpstring("Title for the default task pad.")]
|
|
HRESULT GetTitle([in,string] LPOLESTR pszGroup, [out,string] LPOLESTR * pszTitle);
|
|
|
|
[helpstring("Descriptive Text for the default task pad.")]
|
|
HRESULT GetDescriptiveText([in,string] LPOLESTR pszGroup, [out,string] LPOLESTR * pszDescriptiveText);
|
|
|
|
[helpstring("Background for the default task pad.")]
|
|
HRESULT GetBackground([in,string] LPOLESTR pszGroup, [out] MMC_TASK_DISPLAY_OBJECT * pTDO);
|
|
|
|
// [helpstring("Branding for the default task pad.")]
|
|
// HRESULT GetBranding([in,string] LPOLESTR pszGroup, [out] MMC_TASK_DISPLAY_OBJECT * pTDO);
|
|
|
|
[helpstring("Get ListPad Info.")]
|
|
HRESULT GetListPadInfo ([in,string] LPOLESTR pszGroup, [out] MMC_LISTPAD_INFO * lpListPadInfo);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(103D842A-AA63-11D1-A7E1-00C04FD8D565),
|
|
helpstring("IConsole2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsole2 : IConsole
|
|
{
|
|
[helpstring("Allows the snap-in to expand/collapse a scope item in the corresponding view. Should be called only by the IConsole associated with a IComponent.")]
|
|
HRESULT Expand([in] HSCOPEITEM hItem, [in] BOOL bExpand);
|
|
|
|
[helpstring("Determines if the user prefers taskpad views by default.")]
|
|
HRESULT IsTaskpadViewPreferred();
|
|
|
|
[helpstring("Allows the snap-in to change the text on the status bar.")]
|
|
HRESULT SetStatusText ([in, string] LPOLESTR pszStatusText);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(cc593830-b926-11d1-8063-0000f875a9ce),
|
|
helpstring("IDisplayHelp Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IDisplayHelp : IUnknown
|
|
{
|
|
[helpstring("Allows the snap-in to display a help topic.")]
|
|
HRESULT ShowTopic([in] LPOLESTR pszHelpTopic);
|
|
};
|
|
|
|
|
|
[
|
|
local,
|
|
object,
|
|
uuid(72782D7A-A4A0-11d1-AF0F-00C04FB6DD2C),
|
|
helpstring("Interface for specifying required snap-in extensions"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IRequiredExtensions : IUnknown
|
|
{
|
|
[helpstring("Enable all extensions")]
|
|
HRESULT EnableAllExtensions();
|
|
|
|
[helpstring("Get first required extension")]
|
|
HRESULT GetFirstExtension([out] LPCLSID pExtCLSID);
|
|
|
|
[helpstring("Get next required extension")]
|
|
HRESULT GetNextExtension([out] LPCLSID pExtCLSID);
|
|
};
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(DE40B7A4-0F65-11d2-8E25-00C04F8ECD78),
|
|
helpstring("Interface for accessing strings in a console file"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IStringTable : IUnknown
|
|
{
|
|
[helpstring("Add a string to the snap-in's string table")]
|
|
HRESULT AddString (
|
|
[in] LPCOLESTR pszAdd, // string to add to the string table
|
|
[out] MMC_STRING_ID* pStringID // ID of added string
|
|
);
|
|
|
|
[helpstring("Retrieves a string from the snap-in's string table")]
|
|
HRESULT 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
|
|
);
|
|
|
|
[helpstring("Retrieves the length of a string in the snap-in's string table")]
|
|
HRESULT GetStringLength (
|
|
[in] MMC_STRING_ID StringID, // ID of string
|
|
[out] ULONG* pcchString // number of characters in string, not including terminator
|
|
);
|
|
|
|
[helpstring("Delete a string from the snap-in's string table")]
|
|
HRESULT DeleteString (
|
|
[in] MMC_STRING_ID StringID // ID of string to delete
|
|
);
|
|
|
|
[helpstring("Delete all strings from the snap-in's string table")]
|
|
HRESULT DeleteAllStrings ();
|
|
|
|
[helpstring("Find a string in the snap-in's string table")]
|
|
HRESULT FindString (
|
|
[in] LPCOLESTR pszFind, // string to find in the string table
|
|
[out] MMC_STRING_ID* pStringID // ID of string, if found
|
|
);
|
|
|
|
[helpstring("Returns an enumerator into a snap-in's string table")]
|
|
HRESULT Enumerate (
|
|
[out] IEnumString** ppEnum // string enumerator
|
|
);
|
|
};
|
|
cpp_quote("#endif // MMC_VER >= 0x0110")
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0120)")
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
////
|
|
//// MMC 1.2 changes
|
|
////
|
|
|
|
// Column Flags
|
|
const DWORD HDI_HIDDEN = 0x0001; // Column is hidden.
|
|
|
|
// Per Column data.
|
|
typedef struct _MMC_COLUMN_DATA
|
|
{
|
|
int nColIndex; // Column index
|
|
DWORD dwFlags; // Column flags
|
|
int nWidth; // Column width
|
|
ULONG_PTR ulReserved; // For future use
|
|
} MMC_COLUMN_DATA;
|
|
|
|
|
|
// Column-Set data.
|
|
typedef struct _MMC_COLUMN_SET_DATA
|
|
{
|
|
int cbSize; // Size of this struct.
|
|
int nNumCols; // Number of columns
|
|
MMC_COLUMN_DATA* pColData; // Array of column data
|
|
} MMC_COLUMN_SET_DATA;
|
|
|
|
// Sort data.
|
|
typedef struct _MMC_SORT_DATA
|
|
{
|
|
int nColIndex; // Column index
|
|
DWORD dwSortOptions; // Column sort options
|
|
ULONG_PTR ulReserved; // For future use
|
|
} MMC_SORT_DATA;
|
|
|
|
|
|
// Column sort data.
|
|
typedef struct _MMC_SORT_SET_DATA
|
|
{
|
|
int cbSize; // Size of this struct.
|
|
int nNumItems; // Number of items in the array below.
|
|
MMC_SORT_DATA* pSortData; // Array of column data
|
|
} MMC_SORT_SET_DATA;
|
|
|
|
[
|
|
object,
|
|
uuid(547C1354-024D-11d3-A707-00C04F8EF4CB),
|
|
helpstring("Interface for accessing persisted view data."),
|
|
pointer_default(unique)
|
|
]
|
|
interface IColumnData : IUnknown
|
|
{
|
|
[helpstring("Change the persisted column data for a ColumnSet ID")]
|
|
HRESULT SetColumnConfigData(
|
|
[in] SColumnSetID* pColID,
|
|
[in] MMC_COLUMN_SET_DATA* pColSetData
|
|
);
|
|
|
|
[helpstring("Retrieve the persisted column data for a ColumnSet ID")]
|
|
HRESULT GetColumnConfigData(
|
|
[in] SColumnSetID* pColID,
|
|
[out] MMC_COLUMN_SET_DATA** ppColSetData
|
|
);
|
|
|
|
[helpstring("Change the persisted column sort data for a ColumnSet ID")]
|
|
HRESULT SetColumnSortData(
|
|
[in] SColumnSetID* pColID,
|
|
[in] MMC_SORT_SET_DATA* pColSortData
|
|
);
|
|
|
|
[helpstring("Retrieve the persisted column sort data for a ColumnSet ID")]
|
|
HRESULT GetColumnSortData(
|
|
[in] SColumnSetID* pColID,
|
|
[out] MMC_SORT_SET_DATA** ppColSortData
|
|
);
|
|
};
|
|
|
|
[
|
|
object,
|
|
uuid(80F94174-FCCC-11d2-B991-00C04F8ECD78),
|
|
helpstring("Interface for displaying an informational message in the result pane"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IMessageView : IUnknown
|
|
{
|
|
[helpstring("Change the title for the result pane message")]
|
|
HRESULT SetTitleText(
|
|
[in] LPCOLESTR pszTitleText
|
|
);
|
|
|
|
[helpstring("Change the text for the result pane message")]
|
|
HRESULT SetBodyText(
|
|
[in] LPCOLESTR pszBodyText
|
|
);
|
|
|
|
typedef enum tagIconIdentifier
|
|
{
|
|
Icon_None = 0,
|
|
Icon_Error = 32513,
|
|
Icon_Question = 32514,
|
|
Icon_Warning = 32515,
|
|
Icon_Information = 32516,
|
|
|
|
Icon_First = Icon_Error,
|
|
Icon_Last = Icon_Information,
|
|
} IconIdentifier;
|
|
|
|
[helpstring("Change the icon for the result pane message")]
|
|
HRESULT SetIcon(
|
|
[in] IconIdentifier id
|
|
);
|
|
|
|
[helpstring("Clears the title, text, and icon of the result pane message")]
|
|
HRESULT Clear();
|
|
};
|
|
|
|
|
|
typedef struct _RDCITEMHDR
|
|
{
|
|
DWORD dwFlags; // scope item or result item?
|
|
MMC_COOKIE cookie;
|
|
LPARAM lpReserved;
|
|
} RDITEMHDR;
|
|
|
|
const DWORD RDCI_ScopeItem = 0x80000000;
|
|
|
|
typedef struct _RDCOMPARE
|
|
{
|
|
DWORD cbSize; // size of this structure
|
|
DWORD dwFlags; // reserved, always 0
|
|
int nColumn; // column we're sorting on, maps to in value of
|
|
// IResultDataCompare::Compare's pnResult param
|
|
LPARAM lUserParam; // IResultDataCompare::Compare's lUserParam param
|
|
RDITEMHDR* prdch1; // first item to compare
|
|
RDITEMHDR* prdch2; // second item to compare
|
|
} RDCOMPARE;
|
|
|
|
|
|
[
|
|
object,
|
|
uuid(96933476-0251-11d3-AEB0-00C04F8ECD78),
|
|
helpstring("Compare interface for sorting items in the result pane"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IResultDataCompareEx : IUnknown
|
|
{
|
|
[helpstring("Compare items in the result pane")]
|
|
HRESULT Compare([in] RDCOMPARE* prdc, [out] int* pnResult);
|
|
}
|
|
|
|
cpp_quote("#endif // MMC_VER >= 0x0120")
|
|
|
|
|
|
cpp_quote("#if (MMC_VER >= 0x0200)")
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
////
|
|
//// MMC 2.0 changes
|
|
////
|
|
|
|
typedef enum _MMC_VIEW_TYPE
|
|
{
|
|
MMC_VIEW_TYPE_LIST,
|
|
MMC_VIEW_TYPE_HTML,
|
|
MMC_VIEW_TYPE_OCX
|
|
|
|
} MMC_VIEW_TYPE;
|
|
|
|
// dwMiscOptions
|
|
const DWORD RVTI_MISC_OPTIONS_NOLISTVIEWS = 0x0001;
|
|
|
|
// dwListOptions - similar to MMC_VIEW_OPTIONS
|
|
const DWORD RVTI_LIST_OPTIONS_NONE = 0x0000;
|
|
const DWORD RVTI_LIST_OPTIONS_OWNERDATALIST = 0x0002;
|
|
const DWORD RVTI_LIST_OPTIONS_MULTISELECT = 0x0004;
|
|
const DWORD RVTI_LIST_OPTIONS_FILTERED = 0x0008;
|
|
const DWORD RVTI_LIST_OPTIONS_USEFONTLINKING = 0x0020;
|
|
const DWORD RVTI_LIST_OPTIONS_EXCLUDE_SCOPE_ITEMS_FROM_LIST = 0x0040;
|
|
const DWORD RVTI_LIST_OPTIONS_LEXICAL_SORT = 0x0080;
|
|
const DWORD RVTI_LIST_OPTIONS_ALLOWPASTE = 0x0100;
|
|
|
|
// dwHTMLOptions
|
|
const DWORD RVTI_HTML_OPTIONS_NONE = 0x0000;
|
|
const DWORD RVTI_HTML_OPTIONS_NOLISTVIEW = 0x0001;
|
|
|
|
// dwOCXOptions
|
|
const DWORD RVTI_OCX_OPTIONS_NONE = 0x0000;
|
|
const DWORD RVTI_OCX_OPTIONS_NOLISTVIEW = 0x0001;
|
|
const DWORD RVTI_OCX_OPTIONS_CACHE_OCX = 0x0002;
|
|
|
|
typedef struct _RESULT_VIEW_TYPE_INFO
|
|
{
|
|
LPOLESTR pstrPersistableViewDescription;
|
|
MMC_VIEW_TYPE eViewType;
|
|
DWORD dwMiscOptions;
|
|
|
|
[switch_type(MMC_VIEW_TYPE), switch_is((MMC_VIEW_TYPE)eViewType)]
|
|
union
|
|
{
|
|
|
|
[case(MMC_VIEW_TYPE_LIST)]
|
|
DWORD dwListOptions;
|
|
|
|
[case(MMC_VIEW_TYPE_HTML)]
|
|
struct
|
|
{
|
|
DWORD dwHTMLOptions; // must be zero for future expansion.
|
|
LPOLESTR pstrURL;
|
|
};
|
|
|
|
[case(MMC_VIEW_TYPE_OCX)]
|
|
struct
|
|
{
|
|
DWORD dwOCXOptions;
|
|
LPUNKNOWN pUnkControl;
|
|
};
|
|
|
|
[default];
|
|
};
|
|
} RESULT_VIEW_TYPE_INFO, *PRESULT_VIEW_TYPE_INFO;
|
|
|
|
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// Clipboard formats used by the built-in view extension
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
|
|
const wchar_t* CCF_DESCRIPTION = L"CCF_DESCRIPTION"; // text only
|
|
const wchar_t* CCF_HTML_DETAILS = L"CCF_HTML_DETAILS"; // interpreted as HTML
|
|
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// struct CONTEXTMENUITEM2: Adds a language independent name.
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
typedef struct _CONTEXTMENUITEM2
|
|
{
|
|
LPWSTR strName;
|
|
LPWSTR strStatusBarText;
|
|
LONG lCommandID;
|
|
LONG lInsertionPointID;
|
|
LONG fFlags;
|
|
LONG fSpecialFlags;
|
|
LPWSTR strLanguageIndependentName;
|
|
} CONTEXTMENUITEM2;
|
|
|
|
typedef CONTEXTMENUITEM2* LPCONTEXTMENUITEM2;
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// struct MMC_EXT_VIEW_DATA: definition of a view supplied by a view extension
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
typedef struct _MMC_EXT_VIEW_DATA
|
|
{
|
|
GUID viewID; // GUID used to describe the view. Used to restore a view.
|
|
LPCOLESTR pszURL; // URL describing extension page
|
|
LPCOLESTR pszViewTitle; // title of the view extension
|
|
LPCOLESTR pszTooltipText; // tooltip for the tab
|
|
BOOL bReplacesDefaultView; // TRUE == no "Normal" tab
|
|
} MMC_EXT_VIEW_DATA, *PMMC_EXT_VIEW_DATA;
|
|
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// MMCN_QUERY_PASTE flags: The param is used as out parameter which
|
|
// can define below flags.
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
const DWORD MMC_DEFAULT_OPERATION_COPY = 0x0001;
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IComponentData2 interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(CCA0F2D2-82DE-41B5-BF47-3B2076273D5C),
|
|
helpstring("IComponentData2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IComponentData2 : IComponentData
|
|
{
|
|
[helpstring("Returns a Dispatch interface which may be used to perform actions for the specified cookie.")]
|
|
HRESULT QueryDispatch([in] MMC_COOKIE cookie, [in] DATA_OBJECT_TYPES type,
|
|
[out] LPDISPATCH* ppDispatch);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IComponent2 interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(79A2D615-4A10-4ED4-8C65-8633F9335095),
|
|
helpstring("IComponent2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IComponent2 : IComponent
|
|
{
|
|
[helpstring("Returns a Dispatch interface which may be used to perform actions for the specified cookie.")]
|
|
HRESULT QueryDispatch([in] MMC_COOKIE cookie, [in] DATA_OBJECT_TYPES type,
|
|
[out] LPDISPATCH* ppDispatch);
|
|
|
|
[helpstring("Gets the result view type. Supersedes the GetResultViewType method.")]
|
|
HRESULT GetResultViewType2([in] MMC_COOKIE cookie, [in, out] PRESULT_VIEW_TYPE_INFO pResultViewType);
|
|
|
|
[helpstring("Restores the result view. Supersedes the MMCN_RESTORE notification")]
|
|
HRESULT RestoreResultView([in] MMC_COOKIE cookie, [in] PRESULT_VIEW_TYPE_INFO pResultViewType);
|
|
};
|
|
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IContextMenuCallback2 interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(E178BC0E-2ED0-4b5e-8097-42C9087E8B33),
|
|
helpstring("IContextMenuCallback2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IContextMenuCallback2 : IUnknown
|
|
{
|
|
// returns S_OK if the item was added
|
|
// returns E_INVALIDARG if given a NULL pointer
|
|
// returns E_INVALIDARG if an item already exists with this lCommandID
|
|
// returns E_INVALIDARG if insertion point ID could not be found
|
|
// returns E_INVALIDARG if command ID or insertion point ID is invalid
|
|
// returns E_INVALIDARG if fFlags contains MF_OWNERDRAW or MF_BITMAP
|
|
// returns E_INVALIDARG if an extension attempts to add an item where
|
|
// fFlags contains MF_SEPARATOR or fSpecialFlags contains CCM_SPECIAL_SEPARATOR
|
|
// except in submenus created by extensions
|
|
// otherwise an unexpected error occurred
|
|
[helpstring("Adds one item to context menu")]
|
|
HRESULT AddItem([in] CONTEXTMENUITEM2* pItem);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IMMCVersion interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
uuid(A8D2C5FE-CDCB-4b9d-BDE5-A27343FF54BC),
|
|
helpstring("IMMCVersionInfo Interface"),
|
|
]
|
|
interface IMMCVersionInfo : IUnknown
|
|
{
|
|
[helpstring("Returns the version information about the installed version of MMC")]
|
|
HRESULT GetMMCVersion([out] long * pVersionMajor, [out] long * pVersionMinor);
|
|
}
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The MMCVersion type library
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
uuid(9EECDD85-B715-4188-8A72-61159ABDB8C4),
|
|
version(1.0),
|
|
helpstring("MMCVersion Type Library")
|
|
]
|
|
library MMCVersionLib
|
|
{
|
|
importlib("stdole2.tlb");
|
|
|
|
[
|
|
helpstring("MMCVersionInfo coclass"),
|
|
uuid(D6FEDB1D-CF21-4bd9-AF3B-C5468E9C6684)
|
|
]
|
|
coclass MMCVersionInfo
|
|
{
|
|
[default] interface IMMCVersionInfo;
|
|
};
|
|
|
|
[
|
|
helpstring("ConsolePower coclass"),
|
|
uuid(f0285374-dff1-11d3-b433-00c04f8ecd78)
|
|
]
|
|
coclass ConsolePower
|
|
{
|
|
[default] interface IConsolePower;
|
|
};
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IExtendView interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(89995CEE-D2ED-4c0e-AE5E-DF7E76F3FA53),
|
|
helpstring("IExtendView Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IExtendView : IUnknown
|
|
{
|
|
[helpstring("Returns the view extension's information")]
|
|
HRESULT GetViews (
|
|
[in] LPDATAOBJECT pDataObject,
|
|
[in] LPVIEWEXTENSIONCALLBACK pViewExtensionCallback);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IViewExtensionCallback interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(34DD928A-7599-41E5-9F5E-D6BC3062C2DA),
|
|
helpstring("IViewExtensionCallback Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IViewExtensionCallback : IUnknown
|
|
{
|
|
[helpstring("Adds a view to the result pane")]
|
|
HRESULT AddView([in] PMMC_EXT_VIEW_DATA pExtViewData);
|
|
}
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IConsolePower interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(1cfbdd0e-62ca-49ce-a3af-dbb2de61b068),
|
|
helpstring("IConsolePower Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsolePower : IUnknown
|
|
{
|
|
[helpstring("Sets the execution state for the current thread")]
|
|
HRESULT SetExecutionState ([in] DWORD dwAdd, [in] DWORD dwRemove);
|
|
|
|
[helpstring("Resets the given idle timer(s)")]
|
|
HRESULT ResetIdleTimer ([in] DWORD dwFlags);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IConsolePowerSink interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(3333759f-fe4f-4975-b143-fec0a5dd6d65),
|
|
helpstring("IConsolePowerSink Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsolePowerSink : IUnknown
|
|
{
|
|
[helpstring("Handler for WM_POWERBROADCAST notification")]
|
|
HRESULT OnPowerBroadcast (
|
|
[in] UINT nEvent, // power-management event
|
|
[in] LPARAM lParam, // event-specific data
|
|
[out] LRESULT* plReturn); // event-specific return code
|
|
};
|
|
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The INodeProperties interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(15BC4D24-A522-4406-AA55-0749537A6865),
|
|
helpstring("INodeProperties Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface INodeProperties : IUnknown
|
|
{
|
|
[helpstring("Returns text-only properties for a node")]
|
|
HRESULT GetProperty([in] LPDATAOBJECT pDataObject, [in] BSTR szPropertyName, [out] PBSTR pbstrProperty);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IConsole3 interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(4F85EFDB-D0E1-498c-8D4A-D010DFDD404F),
|
|
helpstring("IConsole3 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IConsole3 : IConsole2
|
|
{
|
|
[helpstring("Puts the specified scope item into rename mode.")]
|
|
HRESULT RenameScopeItem([in] HSCOPEITEM hScopeItem);
|
|
};
|
|
|
|
//#######################################################################
|
|
//#######################################################################
|
|
//
|
|
// The IResultData2 interface
|
|
//
|
|
//#######################################################################
|
|
//#######################################################################
|
|
[
|
|
object,
|
|
uuid(0F36E0EB-A7F1-4a81-BE5A-9247F7DE4B1B),
|
|
helpstring("IResultData2 Interface"),
|
|
pointer_default(unique)
|
|
]
|
|
interface IResultData2 : IResultData
|
|
{
|
|
[helpstring("Puts the specified result item into rename mode.")]
|
|
HRESULT RenameResultItem([in] HRESULTITEM itemID);
|
|
};
|
|
|
|
cpp_quote("#endif // MMC_VER >= 0x0200")
|