Source code of Windows XP (NT5)
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.
|
|
/**********************************************************************/ /** 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; }
|