324 lines
7.8 KiB
C++
324 lines
7.8 KiB
C++
/*++
|
|
Module Name:
|
|
|
|
MmcDispl.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the definition for CMmcDisplay class. This is an abstract class
|
|
for MMC Display related calls
|
|
--*/
|
|
|
|
|
|
#if !defined(AFX_MMCDISPLAY_H__2CC64E53_3BF4_11D1_AA17_00C06C00392D__INCLUDED_)
|
|
#define AFX_MMCDISPLAY_H__2CC64E53_3BF4_11D1_AA17_00C06C00392D__INCLUDED_
|
|
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "resource.h" // main symbols
|
|
#include "stdafx.h"
|
|
|
|
#define CCF_DFS_SNAPIN_INTERNAL ( L"CCF_DFS_SNAPIN_INTERNAL" )
|
|
|
|
#define MMC_DISP_CTOR_RETURN_INVALIDARG_IF_NULL(ptr) if(!(ptr)) {m_hrValueFromCtor = E_INVALIDARG; return;}
|
|
#define MMC_DISP_CTOR_RETURN_HR_IF_FAILED(hr) if (FAILED(hr)) {m_hrValueFromCtor = hr; return;}
|
|
#define MMC_DISP_CTOR_RETURN_OUTOFMEMORY_IF_NULL(ptr) if (!(ptr)) {m_hrValueFromCtor = E_OUTOFMEMORY; return;}
|
|
|
|
typedef enum DISPLAY_OBJECT_TYPE
|
|
{
|
|
DISPLAY_OBJECT_TYPE_ADMIN = 0,
|
|
DISPLAY_OBJECT_TYPE_ROOT,
|
|
DISPLAY_OBJECT_TYPE_JUNCTION,
|
|
DISPLAY_OBJECT_TYPE_REPLICA
|
|
};
|
|
|
|
class ATL_NO_VTABLE CMmcDisplay:
|
|
public IDataObject,
|
|
public CComObjectRootEx<CComSingleThreadModel>
|
|
{
|
|
public:
|
|
|
|
CMmcDisplay();
|
|
|
|
virtual ~CMmcDisplay();
|
|
|
|
BEGIN_COM_MAP(CMmcDisplay)
|
|
COM_INTERFACE_ENTRY(IDataObject)
|
|
END_COM_MAP()
|
|
|
|
// Clipboard formats that are required by the console
|
|
public:
|
|
|
|
// This stores the clipboard format identifier for CCF_NODETYPE.
|
|
static CLIPFORMAT mMMC_CF_NodeType;
|
|
|
|
// stores the clipboard format identifier for CCF_SZNODETYPE.
|
|
static CLIPFORMAT mMMC_CF_NodeTypeString;
|
|
|
|
// This stores the clipboard format identifier for CCF_DISPLAY_NAME.
|
|
static CLIPFORMAT mMMC_CF_DisplayName;
|
|
|
|
// This stores the clipboard format identifier for CCF_SNAPIN_CLASSID.
|
|
static CLIPFORMAT mMMC_CF_CoClass;
|
|
|
|
// This stores the clipboard format identifier for CCF_DFS_SNAPIN_INTERNAL.
|
|
static CLIPFORMAT mMMC_CF_Dfs_Snapin_Internal;
|
|
// IUnknown Interface
|
|
|
|
STDMETHOD(QueryInterface)(const struct _GUID & i_refiid,
|
|
void ** o_pUnk);
|
|
|
|
unsigned long __stdcall AddRef(void);
|
|
|
|
unsigned long __stdcall Release(void);
|
|
|
|
// IDataObject interface
|
|
public:
|
|
// Implemented : This is the method needed by MMC
|
|
STDMETHOD(GetDataHere)(
|
|
IN LPFORMATETC i_lpFormatetc,
|
|
OUT LPSTGMEDIUM o_lpMedium
|
|
);
|
|
|
|
STDMETHOD(GetData)(
|
|
IN LPFORMATETC lpFormatetcIn,
|
|
OUT LPSTGMEDIUM lpMedium
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
STDMETHOD(EnumFormatEtc)(
|
|
DWORD dwDirection,
|
|
LPENUMFORMATETC* ppEnumFormatEtc
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
STDMETHOD(QueryGetData)(
|
|
LPFORMATETC lpFormatetc
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
STDMETHOD(GetCanonicalFormatEtc)(
|
|
LPFORMATETC lpFormatetcIn,
|
|
LPFORMATETC lpFormatetcOut
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
STDMETHOD(SetData)(
|
|
LPFORMATETC lpFormatetc,
|
|
LPSTGMEDIUM lpMedium,
|
|
BOOL bRelease
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
STDMETHOD(DAdvise)(
|
|
LPFORMATETC lpFormatetc,
|
|
DWORD advf,
|
|
LPADVISESINK pAdvSink,
|
|
LPDWORD pdwConnection
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
STDMETHOD(DUnadvise)(
|
|
DWORD dwConnection
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
STDMETHOD(EnumDAdvise)(
|
|
LPENUMSTATDATA* ppEnumAdvise
|
|
)
|
|
{
|
|
return E_NOTIMPL;
|
|
};
|
|
|
|
public:
|
|
|
|
// To set Snapin CLSID.
|
|
|
|
STDMETHOD(put_CoClassCLSID)(
|
|
IN CLSID newVal
|
|
);
|
|
|
|
// For adding context menu items
|
|
STDMETHOD(AddMenuItems)(
|
|
IN LPCONTEXTMENUCALLBACK i_lpContextMenuCallback,
|
|
IN LPLONG i_lpInsertionAllowed
|
|
) = 0;
|
|
|
|
|
|
|
|
// For taking action on a context menu selection.
|
|
STDMETHOD(Command)(
|
|
IN LONG i_lCommandID
|
|
) = 0;
|
|
|
|
|
|
|
|
// Set the headers for the listview (in the result pane) column
|
|
STDMETHOD(SetColumnHeader)(
|
|
IN LPHEADERCTRL2 i_piHeaderControl
|
|
) = 0;
|
|
|
|
|
|
|
|
// Return the requested display information for the Result Pane
|
|
STDMETHOD(GetResultDisplayInfo)(
|
|
IN OUT LPRESULTDATAITEM io_pResultDataItem
|
|
) = 0;
|
|
|
|
|
|
|
|
// Return the requested display information for the Scope Pane
|
|
STDMETHOD(GetScopeDisplayInfo)(
|
|
IN OUT LPSCOPEDATAITEM io_pScopeDataItem
|
|
) = 0;
|
|
|
|
|
|
|
|
// Add items(or folders), if any to the Scope Pane
|
|
STDMETHOD(EnumerateScopePane)(
|
|
IN LPCONSOLENAMESPACE i_lpConsoleNameSpace,
|
|
IN HSCOPEITEM i_hParent
|
|
) = 0;
|
|
|
|
|
|
|
|
// Add items(or folders), if any to the Result Pane
|
|
STDMETHOD(EnumerateResultPane)(
|
|
IN OUT IResultData* io_pResultData
|
|
) = 0;
|
|
|
|
|
|
|
|
// Set the console verb settings. Change the state, decide the default verb, etc
|
|
STDMETHOD(SetConsoleVerbs)(
|
|
IN LPCONSOLEVERB i_lpConsoleVerb
|
|
) = 0;
|
|
|
|
|
|
// MMCN_DBLCLICK, return S_FALSE if you want MMC handle the default verb.
|
|
STDMETHOD(DoDblClick)(
|
|
) = 0;
|
|
|
|
|
|
// Delete the current item.
|
|
STDMETHOD(DoDelete)(
|
|
) = 0;
|
|
|
|
|
|
|
|
// Checks whether the object has pages to display
|
|
STDMETHOD(QueryPagesFor)(
|
|
) = 0;
|
|
|
|
|
|
|
|
// Creates and passes back the pages to be displayed
|
|
STDMETHOD(CreatePropertyPages)(
|
|
IN LPPROPERTYSHEETCALLBACK i_lpPropSheetCallback,
|
|
IN LONG_PTR i_lNotifyHandle
|
|
) = 0;
|
|
|
|
|
|
|
|
// Used to notify the object that it's properties have changed
|
|
STDMETHOD(PropertyChanged)(
|
|
) = 0;
|
|
|
|
|
|
|
|
// Used to set the result view description bar text
|
|
STDMETHOD(SetDescriptionBarText)(
|
|
IN LPRESULTDATA i_lpResultData
|
|
) = 0;
|
|
|
|
// Used to set the result view description bar text
|
|
STDMETHOD(SetStatusText)(
|
|
IN LPCONSOLE2 i_lpConsole
|
|
) = 0;
|
|
|
|
// Handle a select event for the node. Handle only toolbar related
|
|
// activities here
|
|
STDMETHOD(ToolbarSelect)(
|
|
IN const LONG i_lArg,
|
|
IN IToolbar* i_pToolBar
|
|
) = 0;
|
|
|
|
// Handle a click on the toolbar
|
|
STDMETHOD(ToolbarClick)(
|
|
IN const LPCONTROLBAR i_pControlbar,
|
|
IN const LPARAM i_lParam
|
|
) = 0;
|
|
|
|
STDMETHOD(CleanScopeChildren)(
|
|
VOID
|
|
) = 0;
|
|
|
|
STDMETHOD(CleanResultChildren)(
|
|
) = 0;
|
|
|
|
STDMETHOD(ViewChange)(
|
|
IResultData* i_pResultData,
|
|
LONG_PTR i_lHint
|
|
) = 0;
|
|
|
|
STDMETHOD(GetEntryPath)(
|
|
BSTR* o_pbstrEntryPath
|
|
) = 0;
|
|
|
|
virtual DISPLAY_OBJECT_TYPE GetDisplayObjectType(
|
|
) = 0;
|
|
|
|
virtual HRESULT CreateToolbar(
|
|
IN const LPCONTROLBAR i_pControlbar,
|
|
IN const LPEXTENDCONTROLBAR i_lExtendControlbar,
|
|
OUT IToolbar** o_pToolBar
|
|
) = 0;
|
|
|
|
virtual HRESULT OnRefresh(
|
|
);
|
|
|
|
virtual HRESULT OnAddImages(IImageList *pImageList, HSCOPEITEM hsi);
|
|
|
|
// Helper Methods
|
|
private:
|
|
HRESULT WriteToStream(
|
|
IN const void* i_pBuffer,
|
|
IN int i_len,
|
|
OUT LPSTGMEDIUM o_lpMedium
|
|
);
|
|
|
|
// Member variables.
|
|
protected:
|
|
|
|
CLSID m_CLSIDClass; // The CLSID of the object
|
|
|
|
CLSID m_CLSIDNodeType; // The node type as a CLSID
|
|
|
|
CComBSTR m_bstrDNodeType; // The node type as a CLSID
|
|
|
|
DWORD m_dwRefCount; // Reference Count for dataobjects returned.
|
|
|
|
public:
|
|
|
|
HRESULT m_hrValueFromCtor;
|
|
};
|
|
|
|
#endif // !defined(AFX_MMCDISPLAY_H__2CC64E53_3BF4_11D1_AA17_00C06C00392D__INCLUDED_)
|