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.
 
 
 
 
 
 

457 lines
13 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (c) Microsoft Corporation, 1997 - 1998.
//
// File: CatAdmin.hxx
//
// Contents: Catalog administration API
//
// History: 28-Jan-97 KyleP Created
//
//----------------------------------------------------------------------------
#pragma once
#include <fsciexps.hxx>
#include <smartsvc.hxx>
//
// Constants used for performance tuning
//
const WORD wDedicatedServer = 0;
const WORD wUsedOften = 1;
const WORD wUsedOccasionally = 2;
const WORD wNeverUsed = 3;
const WORD wCustom = 4;
const WORD wLowPos = 1;
const WORD wMidPos = 2;
const WORD wHighPos = 3;
//
// Forward declarations
//
class CCatalogAdmin;
class CCatalogEnum;
class CScopeEnum;
class CScopeAdmin;
//
// Utility routines
//
void AssembleScopeValueString( WCHAR const * pwszAlias,
BOOL fExclude,
WCHAR const * pwszLogon,
XGrowable<WCHAR> & xLine );
SCODE IsScopeValid( WCHAR const * pwszScope, unsigned len, BOOL fLocal );
//+---------------------------------------------------------------------------
//
// Class: CMachineAdmin
//
// Purpose: Administer CI on a given machine
//
// History: 28-Jan-97 KyleP Created.
//
//----------------------------------------------------------------------------
class CMachineAdmin
{
public:
CMachineAdmin( WCHAR const * pwszMachine = 0, // NULL --> Current machine
BOOL fWrite = TRUE );
~CMachineAdmin();
//
// Service manipulation
//
BOOL IsCIStarted();
BOOL IsCIStopped();
BOOL IsCIPaused();
BOOL StartCI();
BOOL StopCI();
BOOL PauseCI();
BOOL IsCIEnabled();
BOOL EnableCI();
BOOL DisableCI();
//
// Catalog manipulation
//
void AddCatalog( WCHAR const * pwszCatalog,
WCHAR const * pwszDataLocation );
void RemoveCatalog( WCHAR const * pwszCatalog,
BOOL fRemoveData = TRUE ); // FALSE --> Don't delete directory
void RemoveCatalogFiles( WCHAR const * pwszCatalog );
CCatalogEnum * QueryCatalogEnum();
CCatalogAdmin * QueryCatalogAdmin( WCHAR const * pwszCatalog );
BOOL GetDWORDParam( WCHAR const * pwszParam, DWORD & dwValue );
void SetDWORDParam( WCHAR const * pwszParam, DWORD dwValue );
void SetSZParam( WCHAR const * pwszParam, WCHAR const * pwszVal, DWORD cbLen );
BOOL GetSZParam( WCHAR const * pwszParam, WCHAR * pwszVal, DWORD cbLen );
BOOL RegisterForNotification( HANDLE hEvent );
BOOL IsLocal()
{
return ( (HKEY_LOCAL_MACHINE == _hkeyLM) ||
(_xwcsMachName[0] == L'.' && _xwcsMachName[1] == 0) );
}
void CreateSubdirs( WCHAR const * pwszPath );
// Performance Tuning
void TunePerformance(BOOL fServer, WORD wIndexingPerf, WORD wQueryingPerf);
private:
BOOL OpenSCM();
void TuneFilteringParameters(BOOL fServer, WORD wIndexingPerf, WORD wQueryingPerf);
void TuneMergeParameters(BOOL fServer, WORD wIndexingPerf, WORD wQueryingPerf);
void TunePropCacheParameters(BOOL fServer, WORD wIndexingPerf, WORD wQueryingPerf);
void TuneMiscellaneousParameters(BOOL fServer, WORD wIndexingPerf, WORD wQueryingPerf);
// Wait on service
BOOL WaitForSvcStateChange( SERVICE_STATUS *pss, int iSecs = 120);
HKEY _hkeyLM; // HKEY_LOCAL_MACHINE (may be remote)
HKEY _hkeyContentIndex; // Content Index key (top level)
BOOL _fWrite; // Writable access to the registry
//
// Service handles (for start and stop)
//
CServiceHandle _xSCRoot;
CServiceHandle _xSCCI;
XGrowable<WCHAR,MAX_COMPUTERNAME_LENGTH> _xwcsMachName; // Name of machine
};
//+---------------------------------------------------------------------------
//
// Class: CCatStateInfo
//
// Purpose: maintains catalog state information
//
// History: 4-3-98 mohamedn created
//
//----------------------------------------------------------------------------
class CCatStateInfo
{
public:
CCatStateInfo(CCatalogAdmin &catAdmin) : _catAdmin(catAdmin), _sc(S_OK)
{
RtlZeroMemory( &_state, sizeof(CI_STATE) );
}
BOOL LokUpdate(void);
BOOL IsValid(void) { return ( S_OK == _sc ); }
SCODE GetErrorCode(void) { return _sc; }
DWORD GetWordListCount(void) { return _state.cWordList; }
DWORD GetPersistentIndexCount(void) { return _state.cPersistentIndex; }
DWORD GetQueryCount(void) { return _state.cQueries; }
DWORD GetDocumentsToFilter(void) { return _state.cDocuments; }
DWORD GetFreshTestCount(void) { return _state.cFreshTest; }
DWORD PctMergeComplete(void) { return _state.dwMergeProgress; }
DWORD GetStateInfo(void) { return _state.eState; }
DWORD GetFilteredDocumentCount(void){ return _state.cFilteredDocuments; }
DWORD GetTotalDocumentCount(void) { return _state.cTotalDocuments; }
DWORD GetPendingScanCount(void) { return _state.cPendingScans; }
DWORD GetIndexSize(void) { return _state.dwIndexSize; }
DWORD GetUniqueKeyCount(void) { return _state.cUniqueKeys; }
DWORD GetDelayedFilterCount(void) { return _state.cSecQDocuments; }
private:
CCatalogAdmin & _catAdmin;
CI_STATE _state;
SCODE _sc;
};
//+---------------------------------------------------------------------------
//
// Class: CCatalogAdmin
//
// Purpose: Administer a catalog
//
// History: 28-Jan-97 KyleP Created.
//
//----------------------------------------------------------------------------
class CCatalogAdmin
{
public:
~CCatalogAdmin();
//
// Service manipulation
//
BOOL IsStarted();
BOOL IsStopped();
BOOL IsPaused();
BOOL Start();
BOOL Stop();
BOOL Pause();
//
// Scope manipulation
//
void AddScope( WCHAR const * pwszScope,
WCHAR const * pwszAlias = 0,
BOOL fExclude = FALSE,
WCHAR const * pwszLogon = 0,
WCHAR const * pwszPassword = 0 );
void RemoveScope( WCHAR const * pwszScope );
BOOL IsPathInScope( WCHAR const * pwszPath );
//
// Properties
//
void AddCachedProperty(CFullPropSpec const & fps,
ULONG vt,
ULONG cb,
DWORD dwStoreLevel = SECONDARY_STORE,
BOOL fModifiable = TRUE);
//
// Parameters
//
void TrackIIS( BOOL fTrackIIS );
BOOL IsTrackingIIS();
BOOL IsCatalogInactive();
CScopeEnum * QueryScopeEnum();
CScopeAdmin* QueryScopeAdmin( WCHAR const * pwszPath);
void DeleteRegistryParamNoThrow( WCHAR const * pwszParam );
BOOL GetDWORDParam( WCHAR const * pwszParam, DWORD & dwValue );
void SetDWORDParam( WCHAR const * pwszParam, DWORD dwValue );
WCHAR const * GetMachName() { return _xwcsMachName.Get(); }
WCHAR const * GetName() { return _wcsCatName; }
WCHAR const * GetLocation();
BOOL IsLocal() const
{
return ( L'.' == _xwcsMachName[0] && 0 == _xwcsMachName[1] );
}
void AddOrReplaceSecret( WCHAR const * pwcUser, WCHAR const * pwcPW );
CCatStateInfo & State(void) { return _catStateInfo; }
private:
friend class CMachineAdmin;
friend class CCatalogEnum;
CCatalogAdmin( HKEY hkeyLM,
WCHAR const * pwszMachine,
WCHAR const * pwszCatalog,
BOOL fWrite );
HKEY _hkeyCatalog; // Root of catalog
BOOL _fWrite; // Write access
CCatStateInfo _catStateInfo; // catalog state info
XGrowable<WCHAR,MAX_COMPUTERNAME_LENGTH> _xwcsMachName; // Name of machine
WCHAR _wcsCatName[MAX_PATH]; // Name of catalog
WCHAR _wcsLocation[MAX_PATH]; // Catalog location
WCHAR _wcsDriveOfLocation[_MAX_DRIVE]; // Drive where catalog is located
};
//+---------------------------------------------------------------------------
//
// Class: CCatalogEnum
//
// Purpose: Enumerates available catalogs
//
// History: 28-Jan-97 KyleP Created.
//
//----------------------------------------------------------------------------
class CCatalogEnum
{
public:
WCHAR const * Name() { return _awcCurrentCatalog; }
CCatalogAdmin * QueryCatalogAdmin();
BOOL Next();
~CCatalogEnum();
private:
friend class CMachineAdmin;
CCatalogEnum( HKEY hkeyLM, WCHAR const * pwcsMachine, BOOL fWrite );
HKEY _hkeyLM; // Root of machine (not owned)
HKEY _hkeyCatalogs; // Root of catalog area
DWORD _dwIndex; // Index of NEXT entry
BOOL _fWrite; // TRUE for writable access
XGrowable<WCHAR,MAX_COMPUTERNAME_LENGTH> _xawcCurrentMachine;
WCHAR _awcCurrentCatalog[MAX_PATH];
};
//+---------------------------------------------------------------------------
//
// Class: CScopeEnum
//
// Purpose: Enumerates available scopes
//
// History: 28-Jan-97 KyleP Created.
//
//----------------------------------------------------------------------------
class CScopeEnum
{
public:
~CScopeEnum();
WCHAR const * Path() { return _awcCurrentScope; }
CScopeAdmin * QueryScopeAdmin();
BOOL Next();
private:
friend class CCatalogAdmin;
CScopeEnum( HKEY hkeyCatalog, BOOL fIsLocal, BOOL fWrite );
SRegKey _xkeyCatalog;
SRegKey _xkeyScopes; // Root of scope area
DWORD _dwIndex; // Index of NEXT entry
WCHAR * _pwcsAlias; // Points into Data at alias
WCHAR * _pwcsLogon; // Points into Data at logon
BOOL _fExclude; // TRUE for exclude scope
BOOL _fVirtual; // TRUE for virtual place-holder
BOOL _fShadowAlias; // TRUE for shadow alias place-holder
BOOL _fIsLocal; // TRUE if the local machine
BOOL _fWrite; // TRUE for writable access
WCHAR _awcCurrentScope[MAX_PATH];
};
//+---------------------------------------------------------------------------
//
// Class: CScopeAdmin
//
// Purpose: Set/Get scope properties
//
// History: 12-10-97 mohamedn created
//
//----------------------------------------------------------------------------
class CScopeAdmin
{
public:
WCHAR const * GetPath() { return _awcScope; }
WCHAR const * GetAlias();
WCHAR const * GetLogon() { return _awcLogon; }
BOOL IsExclude() { return _fExclude; }
BOOL IsVirtual() { return _fVirtual; }
BOOL IsShadowAlias() { return _fShadowAlias; }
BOOL IsLocal() { return _fIsLocal; }
void SetPath (WCHAR const *pwszPath);
void SetAlias (WCHAR const *pwszAlias);
void SetExclude (BOOL fExclude);
void SetLogonInfo(WCHAR const *pwszLogon,
WCHAR const *pwszPassword,
CCatalogAdmin & pCatAdmin);
private:
friend class CScopeEnum;
void SetScopeValueString();
CScopeAdmin( HKEY hkeyCatalog,
WCHAR const * pwszScope,
WCHAR const * pwszAlias,
WCHAR const * pwszLogon,
BOOL fExclude,
BOOL fVirtual,
BOOL fShadowAlias,
BOOL fIsLocal,
BOOL fWrite,
BOOL fValidityCheck = TRUE );
SRegKey _xkeyScopes;
BOOL _fExclude; // TRUE for exclude scope
BOOL _fVirtual; // TRUE for virtual place-holder
BOOL _fShadowAlias; // TRUE for shadow alias place-holder
BOOL _fWrite; // TRUE if writable access
BOOL _fIsLocal; // TRUE if the scope is on the local machine
WCHAR _awcScope[MAX_PATH];
WCHAR _awcAlias[MAX_PATH]; // Points into Data at alias
WCHAR _awcLogon[MAX_PATH]; // Points into Data at logon
};
//+---------------------------------------------------------------------------
//
// Member: CScopeAdmin::GetAlias, public
//
// Returns: Alias to scope (or scope itself if it is a UNC path)
//
// History: 9-May-97 KyleP Created
//
//----------------------------------------------------------------------------
inline WCHAR const * CScopeAdmin::GetAlias()
{
return _awcAlias;
}