windows-nt/Source/XPSP1/NT/inetsrv/query/admin/catalog.hxx

435 lines
12 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996-1999.
//
// File: Catalog.hxx
//
// Contents: Used to manage catalog(s) state
//
// History: 27-Nov-1996 KyleP Created
//
//--------------------------------------------------------------------------
#pragma once
#include <vquery.hxx>
#include <dynarray.hxx>
#include <thrd32.hxx>
#include "header.hxx"
#include "dataobj.hxx"
#include "scope.hxx"
#include "prop.hxx"
class CCatalog;
class CCatalogs;
//+-------------------------------------------------------------------------
//
// Class: CCatalog
//
// Purpose: Individual catalog state
//
// History: 27-Nov-1996 KyleP Created
//
//--------------------------------------------------------------------------
class CCatalog : INHERIT_VIRTUAL_UNWIND, public PCIObjectType
{
public:
CCatalog( CCatalogs & parent, WCHAR const * pwcsCat );
~CCatalog();
void SetResultHandle( HRESULTITEM id ) { _idResult = id; }
void SetScopeHandle( HRESULTITEM id ) { _idScope = id; }
BOOL IsAddedToResult() const { return (0 != _idResult); }
BOOL IsAddedToScope() const { return (0 != _idScope); }
BOOL Update();
BOOL UpdateProps();
void ClearProperties(IResultData * pResultPane);
void ClearScopes(IResultData * pResultPane);
void InitScopeHeader( CListViewHeader & Header );
void InitPropertyHeader( CListViewHeader & Header );
void DisplayIntermediate( IConsoleNameSpace * pScopePane );
void DisplayScopes( BOOL fFirstTime, IResultData * pResultPane );
void DisplayProperties( BOOL fFirstTime, IResultData * pResultPane );
void FillGroup1Settings();
void FillGroup2Settings();
void DeleteGroup1Settings();
void DeleteGroup2Settings();
BOOL DoGroup1SettingsExist();
BOOL DoGroup2SettingsExist();
//
// Access methods
//
inline void GetDisplayInfo( RESULTDATAITEM * item );
HRESULTITEM ResultHandle() const { return _idResult; }
HSCOPEITEM ScopeHandle() const { return _idScope; }
WCHAR const * GetDrive( BOOL fForceFetch ) const { return fForceFetch ? _pwcsDrive : 0; }
WCHAR const * GetCat( BOOL fForceFetch ) const { return fForceFetch ? _pwcsCat : 0; }
WCHAR const * GetSize( BOOL fForceFetch ) const { return (fForceFetch | _fSizeChanged ) ? _awcSize : 0; }
WCHAR const * GetPropCacheSize( BOOL fForceFetch ) const { return (fForceFetch | _fPropCacheSizeChanged ) ? _awcPropCacheSize : 0; }
WCHAR const * GetDocs( BOOL fForceFetch ) const { return (fForceFetch | _fDocsChanged ) ? _awcDocs : 0; }
WCHAR const * GetDocsToFilter( BOOL fForceFetch ) const { return (fForceFetch | _fDocsToFilterChanged ) ? _awcDocsToFilter : 0; }
WCHAR const * GetWordlists( BOOL fForceFetch ) const { return (fForceFetch | _fWordlistsChanged ) ? _awcWordlists : 0; }
WCHAR const * GetPersIndex( BOOL fForceFetch ) const { return (fForceFetch | _fPersIndexChanged ) ? _awcPersIndex : 0; }
WCHAR const * GetStatus( BOOL fForceFetch ) const { return (fForceFetch | _fStatusChanged ) ? _awcStatus : 0; }
WCHAR const * GetSecQDocuments( BOOL fForceFetch ) const { return (fForceFetch | _fSecQDocumentsChanged ) ? _awcSecQDocuments : 0; }
inline WCHAR const * GetMachine() const;
inline BOOL IsLocalMachine() const;
inline CCatalogs& GetParent() const;
//
// Direct access to state
//
void GetGeneration( BOOL & fFilterUnknown,
BOOL & fGenerateCharacterization,
ULONG & ccCharacterization );
void SetGeneration( BOOL fFilterUnknown,
BOOL fGenerateCharacterization,
ULONG ccCharacterization );
void GetWeb( BOOL & fVirtualRoots,
BOOL & fNNTPRoots,
ULONG & iVirtualServer,
ULONG & iNNTPServer );
void SetWeb( BOOL fVirtualRoots,
BOOL fNNTPRoots,
ULONG iVirtualServer,
ULONG iNNTPServer );
void GetTracking( BOOL & fAutoAlias );
void SetTracking( BOOL fAutoAlias );
//
// Typing
//
PCIObjectType::OType Type() const { return PCIObjectType::Catalog; }
//
// Manipulation
//
void RemoveScope( CScope * pScope );
SCODE AddScope( WCHAR const * pwszScope,
WCHAR const * pwszAlias,
BOOL fExclude,
WCHAR const * pwszLogon,
WCHAR const * pwszPassword );
SCODE ModifyScope( CScope & rScope,
WCHAR const * pwszScope,
WCHAR const * pwszAlias,
BOOL fExclude,
WCHAR const * pwszLogon,
WCHAR const * pwszPassword );
void RescanScope( WCHAR const * pwszScope, BOOL fFull );
void Merge();
BOOL ChangesPending() { return ( _fSizeChanged | _fDocsChanged | _fDocsToFilterChanged | _fWordlistsChanged | _fPersIndexChanged | _fStatusChanged ); }
void UpdateCachedProperty(CCachedProperty *pProperty);
//
// Parent reference
//
CIntermediate * GetIntermediateScopeNode() { return &_interScopes; }
CIntermediate * GetIntermediatePropNode() { return &_interProperties; }
CIntermediate * GetIntermediateUnfilteredNode() { return &_interUnfiltered; }
//
// Misc.
//
void Zombify() { _fZombie = TRUE; }
BOOL IsZombie() { return _fZombie; }
BOOL IsInactive() { return _fInactive; }
void SetInactive(BOOL fInactive) { _fInactive = fInactive; }
private:
void Set( WCHAR const * pwcsSrc, WCHAR * & pwcsDst );
static void Stringize( DWORD dwValue, WCHAR * pwcsDst, unsigned ccDst );
static void Null( WCHAR * pwcsDst )
{
wcscpy( pwcsDst, L" " );
}
void FormatStatus( CI_STATE & state );
unsigned AppendToStatus( unsigned ccLeft,
CI_STATE & state,
DWORD dwFlag,
StringResource & srFlag,
unsigned ccFlag );
void PopulateScopes();
HRESULTITEM _idResult;
HSCOPEITEM _idScope;
//
// Back-pointer(s)
//
CIntermediate _interScopes;
CIntermediate _interProperties;
CIntermediate _interUnfiltered;
//
// Per-catalog state
//
WCHAR * _pwcsDrive;
WCHAR * _pwcsCat;
BOOL _fZombie;
CI_STATE _state;
//
// Buffers to string-ize output. Size * 2 for safe formatting + 1 for null
//
WCHAR _awcSize[9]; // Max # is 4,096,
WCHAR _awcPropCacheSize[9]; // Can't be too large. The size is in MBs
WCHAR _awcDocs[19]; // Max supported for display: 999,999,999
WCHAR _awcDocsToFilter[19]; // Max supported for display: 999,999,999
WCHAR _awcWordlists[7]; // Max # is 999
WCHAR _awcPersIndex[7]; // Max # is 999
WCHAR _awcStatus[100]; // Artificial size cap.
WCHAR _awcSecQDocuments[19]; // Max supported for display: 999,999,999
BOOL _fSizeChanged;
BOOL _fPropCacheSizeChanged;
BOOL _fDocsChanged;
BOOL _fDocsToFilterChanged;
BOOL _fWordlistsChanged;
BOOL _fPersIndexChanged;
BOOL _fStatusChanged;
BOOL _fInactive;
BOOL _fSecQDocumentsChanged;
CCountedDynArray<CScope> _aScope;
CCountedDynArray<CCachedProperty> _aProperty;
CCatalogs & _parent;
};
//+-------------------------------------------------------------------------
//
// Class: CCatalogs
//
// Purpose: Catalog state
//
// History: 27-Nov-1996 KyleP Created
//
//--------------------------------------------------------------------------
class CCatalogs
{
public:
CCatalogs();
~CCatalogs();
void SetMachine( WCHAR const * pwcsMachine );
void Init( IConsoleNameSpace * pScopePane );
SCODE ReInit();
void InitHeader( CListViewHeader & Header );
void DisplayScope( HSCOPEITEM hScopeItem );
void Display( BOOL fFirstTime = TRUE );
void Quiesce();
WCHAR const * GetMachine() const { return _xwcsMachine.Get(); }
BOOL IsLocalMachine() const { return (_xwcsMachine[0] == L'.' && _xwcsMachine[1] == 0); }
// Direct access to an individual catalog
// i is a 0 based index
CCatalog * GetCatalog( UINT i)
{
if (i >= _aCatalog.Count())
return 0;
return _aCatalog[i];
}
//
// Direct access to state
//
void GetGeneration( BOOL & fFilterUnknown,
BOOL & fGenerateCharacterization,
ULONG & ccCharacterization );
void SetGeneration( BOOL fFilterUnknown,
BOOL fGenerateCharacterization,
ULONG ccCharacterization );
void GetTracking( BOOL & fAutoAlias );
void SetTracking( BOOL fAutoAlias );
//
// Manipulation
//
SCODE AddCatalog( WCHAR const * pwcsCatName, WCHAR const * pwcsLocation );
SCODE RemoveCatalog( CCatalog * pCat );
void UpdateActiveState();
//
// Manipulation of catalog entry in scope pane
//
void AddCatalogToScope(CCatalog *pCat);
void RemoveCatalogFromScope(CCatalog *pCat);
// Set snapindata
void SetSnapinData( CCISnapinData *pSnapinData )
{
_pSnapinData = pSnapinData;
}
// Get toolbar
CCISnapinData * SnapinData() { return _pSnapinData; }
// Get/Set service usage info
void SetServiceUsage(DWORD dwUsage) { _dwUsage = dwUsage; }
DWORD GetServiceUsage() const { return _dwUsage; }
SCODE GetSavedServiceUsage(DWORD &dwUsage, DWORD &dwIdxPos, DWORD &dwQryPos);
SCODE SaveServiceUsage(DWORD dwUsage, DWORD dwIdxPos, DWORD dwQryPos);
// All parameters are within the wLowPos and wHighPos range.
// For indexing and querying functionality, the values dictate the desired performance level.
void SaveServicePerformanceSettings(WORD wIndexingPos, WORD wQueryingPos);
void GetServicePerformanceSettings(WORD &wIndexingPos, WORD &wQueryingPos);
SCODE TuneServicePerformance();
SCODE DisableService();
SCODE EnableService();
void SetButtonState( int idCommand,
MMC_BUTTON_STATE nState,
BOOL bState );
private:
friend void CALLBACK DisplayTimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime);
void Populate();
void PickupNewCatalogs();
CCountedDynArray<CCatalog> _aCatalog;
IConsoleNameSpace * _pScopePane;
HSCOPEITEM _hRootScopeItem; // Catalogs inserted under here.
BOOL _fFirstScopeExpansion;
BOOL _fAbort;
static BOOL _fFirstTime; // Used for one-shot resource init.
UINT _uiTimerIndex; // index into array of timer ids
DWORD _dwUsage; // How will this service be used?
WORD _wIndexingPos; // Indexing position
WORD _wQueryingPos; // Querying position
CCISnapinData * _pSnapinData;
XGrowable<WCHAR,MAX_COMPUTERNAME_LENGTH> _xwcsMachine;
};
//
// Catalog columns
//
struct SCatalogColumn
{
WCHAR const * (CCatalog::*pfGet)( BOOL fForceFetch ) const;
StringResource srTitle;
};
extern SCatalogColumn coldefCatalog[];
extern const unsigned cColDefCatalog;
inline void CCatalog::GetDisplayInfo( RESULTDATAITEM * item )
{
// Win4Assert( item->itemID == ResultHandle() );
if ( item->nCol >= (int)cColDefCatalog )
{
item->str = L"";
return;
}
item->str = (WCHAR *)(this->*coldefCatalog[item->nCol].pfGet)( TRUE );
item->nImage = ICON_CATALOG;
}
inline WCHAR const * CCatalog::GetMachine() const
{
return _parent.GetMachine();
}
inline BOOL CCatalog::IsLocalMachine() const
{
return _parent.IsLocalMachine();
}
inline CCatalogs& CCatalog::GetParent() const
{
return _parent;
}
// Refresh
void CALLBACK DisplayTimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime);
// Miscellaneous
BOOL IsNTServer();