Leaked source code of windows server 2003
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.
 
 
 
 
 
 

129 lines
4.1 KiB

/*--------------------------------------------------------------------------*
*
* Microsoft Windows
* Copyright (C) Microsoft Corporation, 1992 - 1999
*
* File: bookmark.h
*
* Contents: Interface file for CBookmark
*
* History: 05-Oct-98 jeffro Created
*
*--------------------------------------------------------------------------*/
#ifndef BOOKMARK_H
#define BOOKMARK_H
#pragma once
#include <windows.h>
#include <vector>
#include <objbase.h>
#include "ndmgr.h"
#include "ndmgrpriv.h"
#include "stddbg.h"
#include "stgio.h"
#include "xmlbase.h"
typedef std::vector<BYTE> ByteVector;
#define BOOKMARK_CUSTOMSTREAMSIGNATURE "MMCCustomStream"
//***************************************************************************
// class CDynamicPathEntry
//
//
// PURPOSE: Encapsulates a single entry in the dynamic path of a bookmark.
//
// NOTES: In MMC2.0 which shipped with WindowsXP, the m_type member could be
// just one of NDTYP_STRING or NDTYP_CUSTOM. In MMC2.0 that shipped with
// .net server, this was changed to allow a third possibility - a bitwise OR
// of NDTYP_STRING and NDTYP_CUSTOM. This is because snap-ins that previously
// did not implement a CCF_ format and later changed to implement the format
// would find that their old bookmarks no longer worked.
//
// The pattern matching strategy has therefore changed to match whatever
// data is present in the bookmark.
//
//****************************************************************************
class CDynamicPathEntry : public CXMLObject
{
protected:
enum PathEntryType
{
NDTYP_STRING = 0x01,
NDTYP_CUSTOM = 0x02
};
public:
// comparison
bool operator ==(const CDynamicPathEntry &rhs) const;
bool operator < (const CDynamicPathEntry &rhs) const;
SC ScInitialize(bool bIs10Path, /*[IN,OUT]*/ByteVector::iterator &iter);
virtual void Persist(CPersistor &persistor);
DEFINE_XML_TYPE(XML_TAG_DYNAMIC_PATH_ENTRY);
protected:
BYTE m_type; // A combination of one or more flags from the enum PathEntryType - See above note.
ByteVector m_byteVector; // the actual data if it is a custom ID
std::wstring m_strEntry; // the actual data if it is a string.
};
/*+-------------------------------------------------------------------------*
* class CBookmark
*
*
* PURPOSE: Maintains a persistent representation of a scope node.
*
*+-------------------------------------------------------------------------*/
class CBookmark : public CXMLObject
{
friend class CScopeTree;
typedef std::list<CDynamicPathEntry> CDynamicPath;
public:
enum { ID_Unknown = -1 };
CBookmark(MTNODEID idStatic = ID_Unknown) : m_idStatic (idStatic) , m_bIsFastBookmark(true) {}
CBookmark(bool bIsFastBookmark) : m_idStatic (0), m_bIsFastBookmark(bIsFastBookmark) {}
virtual ~CBookmark () {}
bool IsValid () const { return (m_idStatic != ID_Unknown); }
bool IsStatic () const { ASSERT (IsValid()); return (m_dynamicPath.empty()); }
bool IsDynamic () const { return (!IsStatic());}
void Reset() {m_idStatic = ID_Unknown; m_dynamicPath.clear();}
IStream & Load(IStream &stm);
// Casts
operator HBOOKMARK() const;
static CBookmark * GetBookmark(HBOOKMARK hbm);
// XML
DEFINE_XML_TYPE(XML_TAG_BOOKMARK);
virtual void Persist(CPersistor &persistor);
public:
bool operator ==(const CBookmark& other) const;
bool operator !=(const CBookmark& other) const;
bool operator < (const CBookmark& other) const;
void SetFastBookmark(bool b) {m_bIsFastBookmark = b;}
protected:
MTNODEID m_idStatic;
CDynamicPath m_dynamicPath;
protected:
bool m_bIsFastBookmark;
bool IsFastBookmark() {return m_bIsFastBookmark;}
};
inline IStream& operator>> (IStream& stm, CBookmark& bm)
{
return bm.Load(stm);
}
#include "bookmark.inl"
#endif // BOOKMARK_H