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.
196 lines
3.8 KiB
196 lines
3.8 KiB
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
root.cpp
|
|
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:
|
|
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "root.h"
|
|
#include "machine.h"
|
|
#include "rtrdata.h" // CRouterDataObject
|
|
|
|
/*---------------------------------------------------------------------------
|
|
RootHandler implementation
|
|
---------------------------------------------------------------------------*/
|
|
|
|
IMPLEMENT_ADDREF_RELEASE(RootHandler)
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(RootHandler)
|
|
|
|
HRESULT RootHandler::QueryInterface(REFIID riid, LPVOID *ppv)
|
|
{
|
|
// Is the pointer bad?
|
|
if (ppv == NULL)
|
|
return E_INVALIDARG;
|
|
|
|
// Place NULL in *ppv in case of failure
|
|
*ppv = NULL;
|
|
|
|
// This is the non-delegating IUnknown implementation
|
|
if (riid == IID_IUnknown)
|
|
*ppv = (LPVOID) this;
|
|
else if (riid == IID_IPersistStreamInit)
|
|
*ppv = (IPersistStreamInit *) this;
|
|
|
|
// If we're going to return an interface, AddRef it first
|
|
if (*ppv)
|
|
{
|
|
((LPUNKNOWN) *ppv)->AddRef();
|
|
return hrOK;
|
|
}
|
|
else
|
|
return BaseRouterHandler::QueryInterface(riid, ppv);
|
|
}
|
|
|
|
RootHandler::RootHandler(ITFSComponentData *pCompData)
|
|
: BaseRouterHandler(pCompData)
|
|
{
|
|
m_spTFSCompData.Set(pCompData);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(RootHandler)
|
|
}
|
|
|
|
HRESULT RootHandler::Init()
|
|
{
|
|
return hrOK;
|
|
}
|
|
|
|
/*!--------------------------------------------------------------------------
|
|
RootHandler::ConstructNode
|
|
Initializes the root node (sets it up).
|
|
Author: KennT
|
|
---------------------------------------------------------------------------*/
|
|
HRESULT RootHandler::ConstructNode(ITFSNode *pNode)
|
|
{
|
|
HRESULT hr = hrOK;
|
|
|
|
if (pNode == NULL)
|
|
return hrOK;
|
|
|
|
COM_PROTECT_TRY
|
|
{
|
|
// Need to initialize the data for the root node
|
|
pNode->SetData(TFS_DATA_IMAGEINDEX, IMAGE_IDX_FOLDER_CLOSED);
|
|
pNode->SetData(TFS_DATA_OPENIMAGEINDEX, IMAGE_IDX_FOLDER_OPEN);
|
|
pNode->SetData(TFS_DATA_SCOPEID, 0);
|
|
|
|
pNode->SetData(TFS_DATA_COOKIE, 0);
|
|
}
|
|
COM_PROTECT_CATCH
|
|
|
|
return hr;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//// IPersistStream interface members
|
|
|
|
STDMETHODIMP RootHandler::GetClassID
|
|
(
|
|
CLSID *pClassID
|
|
)
|
|
{
|
|
ASSERT(pClassID != NULL);
|
|
|
|
// Copy the CLSID for this snapin
|
|
*pClassID = CLSID_RouterSnapin;
|
|
|
|
return hrOK;
|
|
}
|
|
|
|
STDMETHODIMP RootHandler::IsDirty()
|
|
{
|
|
SPITFSNode spNode;
|
|
|
|
m_spTFSCompData->GetRootNode(&spNode);
|
|
return (spNode->GetData(TFS_DATA_DIRTY) || GetConfigStream()->GetDirty()) ? hrOK : hrFalse;
|
|
}
|
|
|
|
STDMETHODIMP RootHandler::Load
|
|
(
|
|
IStream *pStm
|
|
)
|
|
{
|
|
Assert(pStm);
|
|
HRESULT hr = hrOK;
|
|
CString st;
|
|
BOOL fServer;
|
|
|
|
COM_PROTECT_TRY
|
|
{
|
|
hr = GetConfigStream()->LoadFrom(pStm);
|
|
}
|
|
COM_PROTECT_CATCH;
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP RootHandler::Save
|
|
(
|
|
IStream *pStm,
|
|
BOOL fClearDirty
|
|
)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
SPITFSNode spNode;
|
|
|
|
Assert(pStm);
|
|
|
|
COM_PROTECT_TRY
|
|
{
|
|
if (fClearDirty)
|
|
{
|
|
m_spTFSCompData->GetRootNode(&spNode);
|
|
spNode->SetData(TFS_DATA_DIRTY, FALSE);
|
|
}
|
|
|
|
hr = GetConfigStream()->SaveTo(pStm);
|
|
}
|
|
COM_PROTECT_CATCH;
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP RootHandler::GetSizeMax
|
|
(
|
|
ULARGE_INTEGER *pcbSize
|
|
)
|
|
{
|
|
ULONG cbSize;
|
|
HRESULT hr = hrOK;
|
|
|
|
COM_PROTECT_TRY
|
|
{
|
|
hr = GetConfigStream()->GetSize(&cbSize);
|
|
if (FHrSucceeded(hr))
|
|
{
|
|
pcbSize->HighPart = 0;
|
|
pcbSize->LowPart = cbSize;
|
|
}
|
|
}
|
|
COM_PROTECT_CATCH;
|
|
return hr;
|
|
|
|
}
|
|
|
|
STDMETHODIMP RootHandler::InitNew()
|
|
{
|
|
HRESULT hr = hrOK;
|
|
COM_PROTECT_TRY
|
|
{
|
|
hr = GetConfigStream()->InitNew();
|
|
}
|
|
COM_PROTECT_CATCH;
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|