162 lines
4.5 KiB
C++
162 lines
4.5 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
root.h
|
|
Root node information (the root node is not displayed
|
|
in the MMC framework but contains information such as
|
|
all of the subnodes in this snapin).
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#ifndef _ROOT_H
|
|
#define _ROOT_H
|
|
|
|
#ifndef _BASEHAND_H
|
|
#include "basehand.h"
|
|
#endif
|
|
|
|
#ifndef _HANDLERS_H
|
|
#include "handlers.h"
|
|
#endif
|
|
|
|
#ifndef _QUERYOBJ_H
|
|
#include "queryobj.h"
|
|
#endif
|
|
|
|
#ifndef _IPXSTRM_H
|
|
#include "ipxstrm.h"
|
|
#endif
|
|
|
|
#ifndef _INFO_H
|
|
#include "info.h"
|
|
#endif
|
|
|
|
// The follow two classes are used by the protocol extension root to
|
|
// nodes map their connection ID to the appropriate Router Object.
|
|
// A Router Object may be an IRouterInfo or an IRtrMgrInfo.
|
|
|
|
// create this class so that the references get freed up correctly
|
|
|
|
class RtrObjRecord
|
|
{
|
|
public:
|
|
RtrObjRecord()
|
|
{
|
|
m_fAddedProtocolNode = FALSE;
|
|
m_fComputerAddedAsLocal = FALSE;
|
|
}
|
|
RtrObjRecord(RtrObjRecord & objRtrObjRecord)
|
|
{
|
|
*this = objRtrObjRecord;
|
|
}
|
|
|
|
RtrObjRecord & operator = (const RtrObjRecord & objRtrObjRecord)
|
|
{
|
|
if (this != &objRtrObjRecord)
|
|
{
|
|
m_riid = objRtrObjRecord.m_riid;
|
|
m_spUnk.Set(objRtrObjRecord.m_spUnk.p);
|
|
m_fAddedProtocolNode = objRtrObjRecord.m_fAddedProtocolNode;
|
|
m_fComputerAddedAsLocal = objRtrObjRecord.m_fComputerAddedAsLocal;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
public:
|
|
// NOTE: the m_riid is NOT the iid of the m_spUnk. It is used
|
|
// as a flag to indicate the type of action to be performed
|
|
// on the m_spUnk.
|
|
GUID m_riid;
|
|
SPIUnknown m_spUnk;
|
|
BOOL m_fAddedProtocolNode;
|
|
BOOL m_fComputerAddedAsLocal;
|
|
};
|
|
|
|
// hash table for RtrObjRecord records
|
|
typedef CMap<LONG_PTR, LONG_PTR, RtrObjRecord, RtrObjRecord&> RtrObjMap;
|
|
|
|
|
|
class RootHandler
|
|
: public BaseRouterHandler, public IPersistStreamInit
|
|
{
|
|
public:
|
|
RootHandler(ITFSComponentData *pCompData);
|
|
virtual ~RootHandler()
|
|
{ DEBUG_DECREMENT_INSTANCE_COUNTER(RootHandler); };
|
|
|
|
DeclareIUnknownMembers(IMPL)
|
|
DeclareIPersistStreamInitMembers(IMPL)
|
|
|
|
// Basic initialization
|
|
virtual HRESULT Init();
|
|
|
|
virtual HRESULT ConstructNode(ITFSNode *pNode);
|
|
|
|
// Notification overrides
|
|
OVERRIDE_BaseHandlerNotify_OnExpand() = 0;
|
|
OVERRIDE_BaseHandlerNotify_OnRemoveChildren();
|
|
|
|
// Handler overrides
|
|
OVERRIDE_NodeHandler_OnCreateDataObject() = 0;
|
|
|
|
// Access ConfigStream
|
|
virtual ConfigStream * GetConfigStream() = 0;
|
|
|
|
// for RtrObj access
|
|
HRESULT AddRtrObj(LONG_PTR ulConnId, REFIID riid, IUnknown * pUnk);
|
|
HRESULT RemoveRtrObj(LONG_PTR ulConnId);
|
|
HRESULT GetRtrObj(LONG_PTR ulConnId, IUnknown ** ppUnk);
|
|
HRESULT SetProtocolAdded(LONG_PTR ulConnId, BOOL fProtocolAdded);
|
|
BOOL IsProtocolAdded(LONG_PTR ulConnId);
|
|
HRESULT SetComputerAddedAsLocal(LONG_PTR ulConnId, BOOL fAddedAsLocal);
|
|
BOOL IsComputerAddedAsLocal(LONG_PTR ulConnId);
|
|
HRESULT RemoveAllRtrObj();
|
|
|
|
// For the machine-name to scopeitem map
|
|
|
|
HRESULT AddScopeItem(LPCTSTR pszMachineName, HSCOPEITEM hScopeItem);
|
|
HRESULT GetScopeItem(LPCTSTR pszMachineName, HSCOPEITEM *phScopeItem);
|
|
HRESULT RemoveScopeItem(HSCOPEITEM hScopeItem);
|
|
|
|
// For the HSCOPEITEM to cookie map
|
|
HRESULT AddCookie(HSCOPEITEM hScopeItem, MMC_COOKIE cookie);
|
|
HRESULT GetCookie(HSCOPEITEM hScopeItem, MMC_COOKIE *pCookie);
|
|
HRESULT RemoveCookie(HSCOPEITEM hScopeItem);
|
|
|
|
// Useful function to remove a node. The CompareNodeToMachineName()
|
|
// function must be implemted in order for this to be used.
|
|
HRESULT RemoveNode(ITFSNode *pNode, LPCTSTR pszMachineName);
|
|
virtual HRESULT CompareNodeToMachineName(ITFSNode *pNode, LPCTSTR pszName);
|
|
|
|
// Removes all nodes
|
|
HRESULT RemoveAllNodes(ITFSNode *pNode);
|
|
|
|
protected:
|
|
SPITFSComponentData m_spTFSCompData;
|
|
|
|
// maps a refresh connection id to an RtrObj ptr
|
|
// This is needed by the refresh code (it gets a conn id).
|
|
RtrObjMap m_mapRtrObj;
|
|
|
|
// maps a machine name to an HSCOPEITEM
|
|
// Needed to differentiate among the various nodes.
|
|
CMapStringToPtr m_mapScopeItem;
|
|
|
|
// maps a HSCOPEITEM to a node (or a cookie)
|
|
// This is used by the OnRemoveChildren() code (so that
|
|
// the correct node gets removed).
|
|
CMapPtrToPtr m_mapNode;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif _ROOT_H
|