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.
457 lines
13 KiB
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;
|
|
}
|
|
|
|
|