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.
292 lines
6.8 KiB
292 lines
6.8 KiB
/*++
|
|
Module Name:
|
|
MmcAdmin.h
|
|
|
|
Abstract:
|
|
This module contains the definition for CMmcDfsAdmin. This is an class
|
|
for MMC display related calls for the static node(the DFS Admin root node)
|
|
Also contains code use to wrap a list of Dfs Roots.
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#if !defined(AFX_MMCDFSADMIN_H__2CC64E54_3BF4_11D1_AA17_00C06C00392D__INCLUDED_)
|
|
#define AFX_MMCDFSADMIN_H__2CC64E54_3BF4_11D1_AA17_00C06C00392D__INCLUDED_
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
|
|
#include "MmcDispl.h"
|
|
#include "connect.h"
|
|
#include "MmcRoot.h"
|
|
#include "DfsCore.h"
|
|
|
|
#include <list>
|
|
using namespace std;
|
|
|
|
class CMmcDfsAdmin;
|
|
class CDfsSnapinScopeManager;
|
|
|
|
// This structure defines a node of the list of Dfs Roots
|
|
// added to the snapin. This is maintained internally by the CMmcDfsAdmin
|
|
class DFS_ROOT_NODE
|
|
{
|
|
public:
|
|
DFS_ROOT_NODE(CMmcDfsRoot* i_pMmcDfsRoot, BSTR i_bstrRootEntryPath)
|
|
{
|
|
m_pMmcDfsRoot = i_pMmcDfsRoot;
|
|
// Get server name from the DfsDfsRoot Object. This is used
|
|
// to persist.
|
|
m_bstrRootEntryPath = i_bstrRootEntryPath;
|
|
};
|
|
|
|
~DFS_ROOT_NODE()
|
|
{
|
|
SAFE_RELEASE(m_pMmcDfsRoot);
|
|
};
|
|
|
|
|
|
CComBSTR m_bstrRootEntryPath; // Root Entry path of the Dfs Volume
|
|
|
|
CMmcDfsRoot* m_pMmcDfsRoot; // DfsRoot class for MMC display
|
|
|
|
};
|
|
|
|
typedef list<DFS_ROOT_NODE*> DFS_ROOT_LIST;
|
|
|
|
class CMmcDfsAdmin : public CMmcDisplay
|
|
{
|
|
public:
|
|
|
|
CMmcDfsAdmin( CDfsSnapinScopeManager* pScopeManager );
|
|
|
|
virtual ~CMmcDfsAdmin();
|
|
|
|
|
|
// For adding context menu items
|
|
STDMETHOD(AddMenuItems)(
|
|
IN LPCONTEXTMENUCALLBACK i_lpContextMenuCallback,
|
|
IN LPLONG i_lpInsertionAllowed
|
|
);
|
|
|
|
|
|
|
|
// For taking action on a context menu selection.
|
|
STDMETHOD(Command)(
|
|
IN LONG i_lCommandID
|
|
);
|
|
|
|
|
|
|
|
// Set the headers for the listview (in the result pane) column
|
|
STDMETHOD(SetColumnHeader)(
|
|
IN LPHEADERCTRL2 i_piHeaderControl
|
|
);
|
|
|
|
|
|
|
|
|
|
// Return the requested display information for the Result Pane
|
|
STDMETHOD(GetResultDisplayInfo)(
|
|
IN OUT LPRESULTDATAITEM io_pResultDataItem
|
|
) { return S_OK; };
|
|
|
|
|
|
|
|
// Return the requested display information for the Scope Pane
|
|
STDMETHOD(GetScopeDisplayInfo)(
|
|
IN OUT LPSCOPEDATAITEM io_pScopeDataItem
|
|
) { return S_OK; };
|
|
|
|
|
|
|
|
// Add all the items to the Scope Pane
|
|
STDMETHOD(EnumerateScopePane)(
|
|
IN LPCONSOLENAMESPACE i_lpConsoleNameSpace,
|
|
IN HSCOPEITEM i_hParent
|
|
);
|
|
|
|
|
|
|
|
// Add items(or folders), if any to the Result Pane
|
|
STDMETHOD(EnumerateResultPane)(
|
|
IN OUT IResultData* io_pResultData
|
|
) { return S_OK; };
|
|
|
|
|
|
|
|
// Returns the pointer to the list of DfsRoots currently added to the Snapin.
|
|
STDMETHOD(GetList)(
|
|
OUT DFS_ROOT_LIST** o_pList
|
|
);
|
|
|
|
|
|
// This method checks if DfsRoot is already added to the list.
|
|
STDMETHOD(IsAlreadyInList)(
|
|
IN BSTR i_bstrDfsRootServerName,
|
|
OUT CMmcDfsRoot **o_ppMmcDfsRoot = NULL
|
|
);
|
|
|
|
|
|
|
|
// Delete the node from m_RootList
|
|
STDMETHOD(DeleteMmcRootNode)(
|
|
IN CMmcDfsRoot* i_pMmcDfsRoot
|
|
);
|
|
|
|
|
|
|
|
// Add a Dfs root to the list and scope pane
|
|
STDMETHOD(AddDfsRoot)(
|
|
IN BSTR i_bstrDfsRootName
|
|
);
|
|
|
|
|
|
// Add a Dfs root to the list.
|
|
STDMETHOD(AddDfsRootToList)(
|
|
IN IDfsRoot* i_pDfsRoot, // IDfsRoot pointer of the DfsRoot.
|
|
IN ULONG i_ulLinkFilterMaxLimit = FILTERDFSLINKS_MAXLIMIT_DEFAULT,
|
|
IN FILTERDFSLINKS_TYPE i_lLinkFilterType = FILTERDFSLINKS_TYPE_NO_FILTER,
|
|
IN BSTR i_bstrLinkFilterName = NULL
|
|
);
|
|
|
|
|
|
|
|
// Set the console verb settings. Change the state, decide the default verb, etc
|
|
STDMETHOD(SetConsoleVerbs)(
|
|
IN LPCONSOLEVERB i_lpConsoleVerb
|
|
);
|
|
|
|
// let MMC handle the default verb.
|
|
STDMETHOD(DoDblClick)(
|
|
) { return S_FALSE; }
|
|
|
|
// Delete the current item.
|
|
STDMETHOD(DoDelete)(
|
|
) { return S_FALSE; };
|
|
|
|
|
|
|
|
// Checks whether the object has pages to display
|
|
STDMETHOD(QueryPagesFor)(
|
|
) { return S_FALSE; };
|
|
|
|
|
|
|
|
// Creates and passes back the pages to be displayed
|
|
STDMETHOD(CreatePropertyPages)(
|
|
IN LPPROPERTYSHEETCALLBACK i_lpPropSheetCallback,
|
|
IN LONG_PTR i_lNotifyHandle
|
|
) { return E_UNEXPECTED; };
|
|
|
|
|
|
|
|
// Used to notify the object that it's properties have changed
|
|
STDMETHOD(PropertyChanged)(
|
|
) { return E_UNEXPECTED; };
|
|
|
|
|
|
|
|
// Used to set the result view description bar text
|
|
STDMETHOD(SetDescriptionBarText)(
|
|
IN LPRESULTDATA i_lpResultData
|
|
);
|
|
|
|
STDMETHOD(SetStatusText)(
|
|
IN LPCONSOLE2 i_lpConsole
|
|
)
|
|
{
|
|
RETURN_INVALIDARG_IF_NULL(i_lpConsole);
|
|
return i_lpConsole->SetStatusText(NULL);
|
|
}
|
|
|
|
// Handle a select event for the node. Handle only toolbar related
|
|
// activities here
|
|
STDMETHOD(ToolbarSelect)(
|
|
IN const LONG i_lArg,
|
|
IN IToolbar* i_pToolBar
|
|
);
|
|
|
|
// Handle a click on the toolbar
|
|
STDMETHOD(ToolbarClick)(
|
|
IN const LPCONTROLBAR i_pControlbar,
|
|
IN const LPARAM i_lParam
|
|
);
|
|
|
|
STDMETHOD(CleanScopeChildren)(
|
|
VOID
|
|
);
|
|
|
|
STDMETHOD(CleanResultChildren)(
|
|
) { return S_OK; };
|
|
|
|
STDMETHOD(ViewChange)(
|
|
IResultData* i_pResultData,
|
|
LONG_PTR i_lHint
|
|
) { return S_OK; };
|
|
|
|
// Getters/Setters
|
|
public:
|
|
|
|
// Get the value of the dirty flag
|
|
bool GetDirty() { return m_bDirty; }
|
|
|
|
|
|
// Set the value of the dirty flag
|
|
void SetDirty(IN bool i_bDirty) { m_bDirty = i_bDirty; }
|
|
|
|
|
|
|
|
HRESULT PutConsolePtr(
|
|
IN const LPCONSOLE2 i_lpConsole
|
|
);
|
|
|
|
STDMETHOD(OnNewDfsRoot)(
|
|
);
|
|
|
|
DISPLAY_OBJECT_TYPE GetDisplayObjectType(
|
|
)
|
|
{
|
|
return DISPLAY_OBJECT_TYPE_ADMIN;
|
|
};
|
|
|
|
HRESULT CreateToolbar(
|
|
IN const LPCONTROLBAR i_pControlbar,
|
|
IN const LPEXTENDCONTROLBAR i_lExtendControlbar,
|
|
OUT IToolbar** o_pToolBar
|
|
);
|
|
|
|
HRESULT OnRefresh();
|
|
|
|
virtual HRESULT OnAddImages(IImageList *pImageList, HSCOPEITEM hsi);
|
|
|
|
// Helper methods
|
|
private:
|
|
|
|
// Menu Command handlers
|
|
STDMETHOD(OnConnectTo)(
|
|
);
|
|
|
|
STDMETHOD(GetEntryPath)(
|
|
BSTR* o_pbstrEntryPath
|
|
) { return E_NOTIMPL;};
|
|
|
|
// Data members
|
|
private:
|
|
|
|
DFS_ROOT_LIST m_RootList; // The list of Dfs Roots added to the snap-in
|
|
|
|
HSCOPEITEM m_hItemParent; // Parent of all nodes added in the Scope Pane
|
|
CComPtr<IConsoleNameSpace> m_lpConsoleNameSpace; // The Callback used to do Scope Pane operations
|
|
CComPtr<IConsole2> m_lpConsole; // The Console callback. The mother of all mmc interfaces
|
|
|
|
bool m_bDirty; // Dirty flag used while saving the console
|
|
|
|
public:
|
|
CDfsSnapinScopeManager* m_pScopeManager; // The corresponding Scope Manager object
|
|
};
|
|
|
|
#endif // !defined(AFX_MMCDFSADMIN_H__2CC64E54_3BF4_11D1_AA17_00C06C00392D__INCLUDED_)
|