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.
383 lines
9.6 KiB
383 lines
9.6 KiB
/*++
|
|
Module Name:
|
|
|
|
MmcRoot.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the definition for CMmcDfsRoot class. This is an class
|
|
for MMC display related calls for the first level node(the DfsRoot nodes)
|
|
Also contains members and method to be able to manipulate IDfsRoot object
|
|
and add the same to the MMC Console
|
|
|
|
--*/
|
|
|
|
|
|
|
|
#if !defined(AFX_MMCDFSROOT_H__D78B64F3_3E2B_11D1_AA1A_00C06C00392D__INCLUDED_)
|
|
#define AFX_MMCDFSROOT_H__D78B64F3_3E2B_11D1_AA1A_00C06C00392D__INCLUDED_
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
|
|
|
|
#include "MmcDispl.h"
|
|
#include "DfsCore.h"
|
|
#include "JPProp.h"
|
|
#include "frsProp.h"
|
|
#include "pubProp.h"
|
|
#include "DfsEnums.h"
|
|
|
|
#include <list>
|
|
using namespace std;
|
|
|
|
class CMmcDfsAdmin;
|
|
class CMmcDfsJunctionPoint;
|
|
class CMmcDfsReplica;
|
|
|
|
class JP_LIST_NODE
|
|
{
|
|
public:
|
|
CMmcDfsJunctionPoint* pJPoint;
|
|
|
|
JP_LIST_NODE (CMmcDfsJunctionPoint* i_pMmcJP); // constructor defined as inline in MmcJp.cpp
|
|
|
|
~JP_LIST_NODE (); // destructor defined as inline in MmcJp.cpp
|
|
};
|
|
|
|
typedef list<JP_LIST_NODE*> DFS_JUNCTION_LIST;
|
|
|
|
class REP_LIST_NODE
|
|
{
|
|
public:
|
|
CMmcDfsReplica* pReplica;
|
|
|
|
REP_LIST_NODE (CMmcDfsReplica* i_pMmcReplica); // constructor defined as inline in MmcRep.cpp
|
|
|
|
~REP_LIST_NODE (); // destructor defined as inline in MmcRep.cpp
|
|
};
|
|
|
|
|
|
typedef list<REP_LIST_NODE*> DFS_REPLICA_LIST;
|
|
|
|
class CMmcDfsRoot : public CMmcDisplay
|
|
{
|
|
|
|
public:
|
|
CMmcDfsRoot(
|
|
IN IDfsRoot* i_pDfsRoot,
|
|
IN CMmcDfsAdmin* i_pMmcDfsAdmin,
|
|
IN LPCONSOLE2 i_lpConsole,
|
|
IN ULONG i_ulLinkFilterMaxLimit = FILTERDFSLINKS_MAXLIMIT_DEFAULT,
|
|
IN FILTERDFSLINKS_TYPE i_lLinkFilterType = FILTERDFSLINKS_TYPE_NO_FILTER,
|
|
IN BSTR i_bstrLinkFilterName = NULL
|
|
);
|
|
|
|
virtual ~CMmcDfsRoot();
|
|
|
|
|
|
// Not implemented
|
|
private:
|
|
CMmcDfsRoot();
|
|
|
|
public:
|
|
|
|
// 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 the requested display information for the Scope Pane
|
|
STDMETHOD(GetScopeDisplayInfo)(
|
|
IN OUT LPSCOPEDATAITEM io_pScopeDataItem
|
|
);
|
|
|
|
|
|
|
|
// Add all containing items to the Scope Pane
|
|
STDMETHOD(EnumerateScopePane)(
|
|
IN LPCONSOLENAMESPACE i_lpConsoleNameSpace,
|
|
IN HSCOPEITEM i_hParent
|
|
);
|
|
|
|
|
|
|
|
// Add all containing items to the Result Pane
|
|
STDMETHOD(EnumerateResultPane)(
|
|
IN OUT IResultData* io_pResultData
|
|
);
|
|
|
|
|
|
// Delete the node from m_MmcJPList
|
|
STDMETHOD(DeleteMmcJPNode)(
|
|
IN CMmcDfsJunctionPoint* i_pJPoint
|
|
);
|
|
|
|
// Delete the current object
|
|
STDMETHOD(OnDeleteConnectionToDfsRoot)(
|
|
BOOLEAN i_bForRemoveDfs = FALSE
|
|
);
|
|
|
|
|
|
|
|
// Add the current item to the Scope Pane
|
|
STDMETHOD(AddItemToScopePane)(
|
|
IN LPCONSOLENAMESPACE i_lpConsoleNameSpace,
|
|
IN HSCOPEITEM i_hParent
|
|
);
|
|
|
|
|
|
|
|
// 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)(
|
|
);
|
|
|
|
|
|
// Checks whether the object has pages to display
|
|
STDMETHOD(QueryPagesFor)(
|
|
);
|
|
|
|
|
|
|
|
// Creates and passes back the pages to be displayed
|
|
STDMETHOD(CreatePropertyPages)(
|
|
IN LPPROPERTYSHEETCALLBACK i_lpPropSheetCallback,
|
|
IN LONG_PTR i_lNotifyHandle
|
|
);
|
|
|
|
STDMETHOD(CreateFrsPropertyPage)(
|
|
IN LPPROPERTYSHEETCALLBACK i_lpPropSheetCallback,
|
|
IN LONG_PTR i_lNotifyHandle
|
|
);
|
|
|
|
STDMETHOD(CreatePublishPropertyPage)(
|
|
IN LPPROPERTYSHEETCALLBACK i_lpPropSheetCallback,
|
|
IN LONG_PTR i_lNotifyHandle
|
|
);
|
|
|
|
// Used to notify the object that it's properties have changed
|
|
STDMETHOD(PropertyChanged)(
|
|
);
|
|
|
|
|
|
|
|
// Used to set the result view description bar text
|
|
STDMETHOD(SetDescriptionBarText)(
|
|
IN LPRESULTDATA i_lpResultData
|
|
);
|
|
|
|
STDMETHOD(SetStatusText)(
|
|
IN LPCONSOLE2 i_lpConsole
|
|
);
|
|
|
|
|
|
// Delete the Remove (Stop hosting) the Dfs Root.
|
|
STDMETHOD(OnDeleteDfsRoot)(
|
|
);
|
|
|
|
STDMETHOD(OnDeleteDisplayedDfsLinks)(
|
|
);
|
|
|
|
// 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
|
|
);
|
|
|
|
|
|
// Handle the menu item (and toolbar) for root replica.
|
|
STDMETHOD(OnNewRootReplica)(
|
|
);
|
|
|
|
// Helper member function to actually delete (Stop hosting) the Dfs Root.
|
|
// This is also called to delete root level replica.
|
|
HRESULT _DeleteDfsRoot(
|
|
IN BSTR i_bstrServerName,
|
|
IN BSTR i_bstrShareName,
|
|
IN BSTR i_bstrFtDfsName
|
|
);
|
|
|
|
|
|
STDMETHOD(CleanScopeChildren)(
|
|
VOID
|
|
);
|
|
|
|
STDMETHOD(CleanResultChildren)(
|
|
);
|
|
|
|
STDMETHOD(RefreshResultChildren)(
|
|
);
|
|
|
|
STDMETHOD(ViewChange)(
|
|
IResultData* i_pResultData,
|
|
LONG_PTR i_lHint
|
|
);
|
|
|
|
STDMETHOD(AddResultPaneItem)(
|
|
CMmcDfsReplica* i_pReplicaDispObject
|
|
);
|
|
|
|
STDMETHOD(RemoveJP)(LPCTSTR i_pszDisplayName);
|
|
|
|
STDMETHOD(RemoveReplica)(LPCTSTR i_pszDisplayName);
|
|
|
|
STDMETHOD(RemoveResultPaneItem)(
|
|
CMmcDfsReplica* i_pReplicaDispObject
|
|
);
|
|
|
|
// Check the replica status
|
|
STDMETHOD(OnCheckStatus)(
|
|
);
|
|
|
|
STDMETHOD(GetEntryPath)(BSTR* o_pbstrEntryPath)
|
|
{ GET_BSTR(m_bstrRootEntryPath, o_pbstrEntryPath); }
|
|
|
|
|
|
DISPLAY_OBJECT_TYPE GetDisplayObjectType() { return DISPLAY_OBJECT_TYPE_ROOT; }
|
|
|
|
|
|
HRESULT CreateToolbar(
|
|
IN const LPCONTROLBAR i_pControlbar,
|
|
IN const LPEXTENDCONTROLBAR i_lExtendControlbar,
|
|
OUT IToolbar** o_ppToolBar
|
|
);
|
|
|
|
|
|
HRESULT OnRefresh(
|
|
);
|
|
|
|
HRESULT OnRefreshFilteredLinks(
|
|
);
|
|
|
|
STDMETHOD(OnFilterDfsLinks)();
|
|
|
|
ULONG get_LinkFilterMaxLimit() { return m_ulLinkFilterMaxLimit; }
|
|
FILTERDFSLINKS_TYPE get_LinkFilterType() { return m_lLinkFilterType; }
|
|
BSTR get_LinkFilterName() { return (BSTR)m_bstrLinkFilterName; }
|
|
BOOL get_ShowFRS() { return m_bShowFRS; }
|
|
|
|
HRESULT ClosePropertySheet(BOOL bSilent);
|
|
HRESULT ClosePropertySheetsOfAllLinks(BOOL bSilent);
|
|
HRESULT CloseAllPropertySheets(BOOL bSilent);
|
|
|
|
private:
|
|
// Create a new junction point. Displays the dialog box and call the other method
|
|
STDMETHOD(OnCreateNewJunctionPoint)();
|
|
|
|
|
|
// Create a new junction point.
|
|
STDMETHOD(OnCreateNewJunctionPoint)(
|
|
IN LPCTSTR i_szJPName,
|
|
IN LPCTSTR i_szServerName,
|
|
IN LPCTSTR i_szShareName,
|
|
IN LPCTSTR i_szComment,
|
|
IN long i_lTimeOut
|
|
);
|
|
|
|
HRESULT OnNewReplicaSet();
|
|
|
|
HRESULT OnShowReplication();
|
|
|
|
HRESULT OnStopReplication(BOOL bConfirm = FALSE);
|
|
|
|
HRESULT GetIReplicaSetPtr(IReplicaSet** o_ppiReplicaSet);
|
|
|
|
// Confirm the delete operation with the user.
|
|
HRESULT ConfirmOperationOnDfsRoot(int idString);
|
|
|
|
HRESULT ConfirmDeleteDisplayedDfsLinks(
|
|
);
|
|
|
|
HRESULT _InitReplicaSet(); // init m_piReplicaSet
|
|
|
|
BOOL IsNewSchema() { return m_bNewSchema; }
|
|
|
|
// Constants, Statics, etc
|
|
public:
|
|
static const int m_iIMAGEINDEX;
|
|
static const int m_iOPENIMAGEINDEX;
|
|
|
|
|
|
// Data members
|
|
private:
|
|
friend class CMmcDfsJunctionPoint;
|
|
friend class CMmcDfsReplica; // so that MmcJP can access m_DfsRoot;
|
|
|
|
CComPtr<IDfsRoot> m_DfsRoot; // IDfsRoot object
|
|
CComPtr<IReplicaSet> m_piReplicaSet;
|
|
|
|
CComBSTR m_bstrDisplayName; // Display name of the current DfsRoot
|
|
CComBSTR m_bstrRootEntryPath; // Root EntryPath;
|
|
DFS_TYPE m_lDfsRootType; // Type of the DfsRoot, Standalone or Fault Tolerant
|
|
long m_lRootJunctionState;
|
|
|
|
HSCOPEITEM m_hScopeItem; // Scopeitem handle
|
|
CMmcDfsAdmin* m_pParent; // Pointer to the parent
|
|
|
|
DFS_JUNCTION_LIST m_MmcJPList; // The list of child Junction points
|
|
DFS_REPLICA_LIST m_MmcRepList; // The list of replicas
|
|
|
|
CComBSTR m_bstrFullDisplayName;
|
|
ULONG m_ulLinkFilterMaxLimit;
|
|
FILTERDFSLINKS_TYPE m_lLinkFilterType;
|
|
CComBSTR m_bstrLinkFilterName; // string filter on junction points
|
|
ULONG m_ulCountOfDfsJunctionPointsFiltered;
|
|
|
|
CReplicaSetPropPage m_PropPage; // The property page
|
|
CRealReplicaSetPropPage m_frsPropPage;
|
|
BOOL m_bShowFRS;
|
|
|
|
BOOL m_bNewSchema;
|
|
CPublishPropPage m_publishPropPage;
|
|
|
|
CComPtr<IConsole2> m_lpConsole; // The Console callback. The mother of all mmc interfaces
|
|
CComPtr<IConsoleNameSpace> m_lpConsoleNameSpace; // The Callback used to do Scope Pane operations
|
|
};
|
|
|
|
#endif // !defined(AFX_MMCDFSROOT_H__D78B64F3_3E2B_11D1_AA1A_00C06C00392D__INCLUDED_)
|