792 lines
25 KiB
C++
792 lines
25 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 2000.
|
|
//
|
|
// File: ciframe.cxx
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 11-22-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include <pch.cxx>
|
|
#pragma hdrstop
|
|
|
|
#include <frmutils.hxx>
|
|
#include <lang.hxx>
|
|
#include <worker.hxx>
|
|
|
|
#include "ciframe.hxx"
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::QueryInterface
|
|
//
|
|
// Arguments: [riid] -- Interface ID
|
|
// [ppvObject] -- Object returned here
|
|
//
|
|
// Returns: S_OK if [riid] found.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CCiAdminParams::QueryInterface(
|
|
REFIID riid,
|
|
void **ppvObject)
|
|
{
|
|
Win4Assert( 0 != ppvObject );
|
|
|
|
*ppvObject = 0;
|
|
|
|
if ( IID_ICiAdminParams == riid )
|
|
*ppvObject = (void *)((ICiAdminParams *)this);
|
|
else if ( IID_ICiAdmin == riid )
|
|
*ppvObject = (void *)((ICiAdmin *)this);
|
|
else if ( IID_IUnknown == riid )
|
|
*ppvObject = (void *)((IUnknown *)(ICiAdminParams *)this);
|
|
else
|
|
return E_NOINTERFACE;
|
|
|
|
AddRef();
|
|
return S_OK;
|
|
} //QueryInterface
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiCDocName::AddRef
|
|
//
|
|
// History: 11-22-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP_(ULONG) CCiAdminParams::AddRef()
|
|
{
|
|
return InterlockedIncrement(&_refCount);
|
|
} //AddRef
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiCDocName::Release
|
|
//
|
|
// History: 11-22-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP_(ULONG) CCiAdminParams::Release()
|
|
{
|
|
Win4Assert( _refCount > 0 );
|
|
|
|
LONG refCount = InterlockedDecrement(&_refCount);
|
|
|
|
if ( refCount <= 0 )
|
|
delete this;
|
|
|
|
return (ULONG) refCount;
|
|
} //Release
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::GetValue
|
|
//
|
|
// Synopsis: Gets the parameter value, if it is a DWORD type.
|
|
//
|
|
// Arguments: [param] - [in] Parameter to retrive
|
|
// [pdwValue] - [out] The value of the parameter.
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if wrong parameters.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
STDMETHODIMP CCiAdminParams::GetValue(
|
|
CI_ADMIN_PARAMS param,
|
|
DWORD * pdwValue )
|
|
{
|
|
Win4Assert( 0 != pdwValue );
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
{
|
|
*pdwValue = (DWORD) _adwParams[ param ];
|
|
return S_OK;
|
|
}
|
|
else
|
|
{
|
|
return E_INVALIDARG;
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::GetValue
|
|
//
|
|
// Synopsis: Gets the parameter value, if it is a DWORD type.
|
|
//
|
|
// Arguments: [param] - [in] Parameter to retrive
|
|
// [pdwValue] - [out] The value of the parameter.
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if wrong parameters.
|
|
//
|
|
// History: 10-Jun-97 KyleP Added header, MaxFileSize in KB.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CCiAdminParams::GetInt64Value( CI_ADMIN_PARAMS param, __int64 * pValue )
|
|
{
|
|
Win4Assert( 0 != pValue );
|
|
|
|
if ( !IsValidParam(param) )
|
|
return E_INVALIDARG;
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
{
|
|
*pValue = _adwParams[param];
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Currently, there are no non-dword values.
|
|
//
|
|
|
|
Win4Assert( param < CI_AP_MAX_DWORD_VAL );
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::SetValues
|
|
//
|
|
// Synopsis: calls CCiAdminParams::SetValue() for each of the property
|
|
// variant values.
|
|
//
|
|
// Arguments: [ULONG nParams] - [in] number of elements in the array.
|
|
// [PROPVARIANT *] - [in] array of property variants of
|
|
// size CI_AP_MAX_VAL containing
|
|
// new CI settings.
|
|
// [CI_ADMIN_PARAMS *] - [in] array of CI_ADMIN_PARAMS values
|
|
// used as indices in teh prop variant array.
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if wrong parameters (returned from SetParamValue()).
|
|
//
|
|
// History: 1-24-97 mohamedn Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CCiAdminParams::SetValues(ULONG nParams,
|
|
const PROPVARIANT * aParamVals,
|
|
const CI_ADMIN_PARAMS * aParamNames)
|
|
{
|
|
SCODE sc = S_OK;
|
|
|
|
for ( ULONG i = 0; i < nParams; i++)
|
|
{
|
|
switch ( aParamNames[i] )
|
|
{
|
|
case CI_AP_MAX_DWORD_VAL:
|
|
case CI_AP_MAX_VAL:
|
|
continue; // values are place holders.
|
|
|
|
default:
|
|
Win4Assert( aParamNames[i] < CI_AP_MAX_VAL );
|
|
|
|
sc = SetParamValue( aParamNames[i], aParamVals+i );
|
|
|
|
if (sc != S_OK)
|
|
return sc;
|
|
}
|
|
}
|
|
return sc;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::SetValue
|
|
//
|
|
// Synopsis: Sets the value of the given parameter, if it is a DWORD type.
|
|
//
|
|
// Arguments: [param] - [in] Parameter
|
|
// [dwValue] - [in] Value to set
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if wrong parameters.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
STDMETHODIMP CCiAdminParams::SetValue(
|
|
CI_ADMIN_PARAMS param,
|
|
DWORD dwValue )
|
|
{
|
|
|
|
SCODE sc = S_OK;
|
|
|
|
// =================================================================
|
|
CLock lock(_mutex);
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
_adwParams[param] = _GetValueInRange( param, dwValue );
|
|
else
|
|
sc = E_INVALIDARG;
|
|
|
|
// =================================================================
|
|
|
|
return sc;
|
|
}
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::SetParamValue
|
|
//
|
|
// Synopsis: Sets the value of a parameter, given a DWORD
|
|
//
|
|
// Arguments: [param] - [in] Parameter
|
|
// [pvarValue] - [in] Value
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if bad parameter.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//-----------------------------------------------------------------------
|
|
|
|
|
|
STDMETHODIMP CCiAdminParams::SetParamValue(
|
|
CI_ADMIN_PARAMS param,
|
|
PROPVARIANT const * pvarValue )
|
|
{
|
|
Win4Assert( 0 != pvarValue );
|
|
|
|
SCODE sc = S_OK;
|
|
|
|
// =================================================================
|
|
|
|
CLock lock( _mutex );
|
|
|
|
CStorageVariant const * pVar = ConvertToStgVariant( pvarValue );
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
{
|
|
Win4Assert( VT_I4 == pvarValue->vt ||
|
|
VT_UI4 == pvarValue->vt );
|
|
|
|
long lVal = *pVar;
|
|
_adwParams[param] = (DWORD) *pVar;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Currently no non-dword values.
|
|
//
|
|
|
|
Win4Assert( param < CI_AP_MAX_DWORD_VAL );
|
|
|
|
sc = E_INVALIDARG;
|
|
}
|
|
|
|
// =================================================================
|
|
|
|
return sc;
|
|
}
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::GetParamValue
|
|
//
|
|
// Synopsis: Retrieves the value of a parameter as a variant.
|
|
//
|
|
// Arguments: [param] - [in] Parameter
|
|
// [ppvarValue] - [out] Value on return
|
|
//
|
|
// Returns: S_OK if successful;
|
|
// E_INVALIDARG if bad parameters.
|
|
// E_OUTOFMEMORY if no memory.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
STDMETHODIMP CCiAdminParams::GetParamValue(
|
|
CI_ADMIN_PARAMS param,
|
|
PROPVARIANT ** ppvarValue )
|
|
{
|
|
Win4Assert( 0 != ppvarValue );
|
|
|
|
if ( !IsValidParam(param) )
|
|
return E_INVALIDARG;
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
{
|
|
CStorageVariant * pVar = new CStorageVariant( (long) _adwParams[param] );
|
|
*ppvarValue = ConvertToPropVariant( pVar );
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Currently no non-dword parameters.
|
|
//
|
|
|
|
Win4Assert( param < CI_AP_MAX_DWORD_VAL );
|
|
}
|
|
|
|
if ( *ppvarValue )
|
|
return S_OK;
|
|
else
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::IsSame
|
|
//
|
|
// Synopsis: Tests if the value for the parameter specified is same as
|
|
// the one given.
|
|
//
|
|
// Arguments: [param] - [in] Parameter
|
|
// [pvarValue] - [in] Value given by the caller
|
|
// [pfSame] - [out] TRUE if the value contained is same as
|
|
// the one passed; FALSE o/w
|
|
//
|
|
// Returns: S_OK if successful
|
|
// E_INVALIDARG if bad parameter.
|
|
//
|
|
// History: 11-27-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
STDMETHODIMP CCiAdminParams::IsSame(
|
|
CI_ADMIN_PARAMS param,
|
|
const PROPVARIANT * pvarValue,
|
|
BOOL * pfSame )
|
|
{
|
|
Win4Assert( pvarValue );
|
|
Win4Assert( pfSame );
|
|
|
|
CStorageVariant const * pVar = ConvertToStgVariant( pvarValue );
|
|
|
|
if ( param < CI_AP_MAX_DWORD_VAL )
|
|
{
|
|
DWORD dwVal = *pVar;
|
|
*pfSame = ( dwVal == _adwParams[param] );
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Currently no non-dword parameters.
|
|
//
|
|
|
|
Win4Assert( param < CI_AP_MAX_DWORD_VAL );
|
|
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
STDMETHODIMP CCiAdminParams::InvalidateLangResources()
|
|
{
|
|
if ( 0 != _pLangList )
|
|
_pLangList->InvalidateLangResources();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CCiAdminParams::CCiAdminParams
|
|
//
|
|
// Synopsis: Constructor of the CI admin parameters. Sets the values to
|
|
// default values.
|
|
//
|
|
// History: 12-02-96 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CCiAdminParams::CCiAdminParams( CLangList * pLangList )
|
|
: _refCount( 1 ),
|
|
_pLangList( pLangList )
|
|
{
|
|
RtlZeroMemory( &_adwParams, sizeof(_adwParams) );
|
|
|
|
//
|
|
// Initialize the default values of all parameters.
|
|
//
|
|
for ( unsigned i = 0; i < CI_AP_MAX_DWORD_VAL; i++ )
|
|
{
|
|
_adwParams[i] = _adwRangeParams[i]._dwDefault;
|
|
}
|
|
|
|
//
|
|
// Add assertions to verify that the default values are correct.
|
|
//
|
|
|
|
#if 0
|
|
Win4Assert( _adwRangeParams[CI_AP_XXXX]._dwDefault ==
|
|
CI_XXXX_DEFAULT );
|
|
|
|
{ CI_XXXX_DEFAULT, CI_XXXX_DEFAULT,
|
|
CI_XXXX_DEFAULT },
|
|
|
|
#endif // 0
|
|
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MERGE_INTERVAL]._dwDefault ==
|
|
CI_MAX_MERGE_INTERVAL_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_UPDATES]._dwDefault ==
|
|
CI_MAX_UPDATES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_WORDLISTS]._dwDefault ==
|
|
CI_MAX_WORDLISTS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_SIZE_MERGE_WORDLISTS]._dwDefault ==
|
|
CI_MIN_SIZE_MERGE_WORDLISTS_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_WORDLIST_SIZE]._dwDefault ==
|
|
CI_MAX_WORDLIST_SIZE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_WORDLIST_MEMORY]._dwDefault ==
|
|
CI_MIN_WORDLIST_MEMORY_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_LOW_RESOURCE_SLEEP]._dwDefault ==
|
|
CI_LOW_RESOURCE_SLEEP_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_WORDLIST_MEMORY_LOAD]._dwDefault ==
|
|
CI_MAX_WORDLIST_MEMORY_LOAD_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_FRESH_COUNT]._dwDefault ==
|
|
CI_MAX_FRESHCOUNT_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_SHADOW_INDEX_SIZE]._dwDefault ==
|
|
CI_MAX_SHADOW_INDEX_SIZE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_DISK_FREE_FORCE_MERGE]._dwDefault ==
|
|
CI_MIN_DISKFREE_FORCE_MERGE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_SHADOW_FREE_FORCE_MERGE]._dwDefault ==
|
|
CI_MAX_SHADOW_FREE_FORCE_MERGE_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_INDEXES]._dwDefault ==
|
|
CI_MAX_INDEXES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_IDEAL_INDEXES]._dwDefault ==
|
|
CI_MAX_IDEAL_INDEXES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_MERGE_IDLE_TIME]._dwDefault ==
|
|
CI_MIN_MERGE_IDLE_TIME_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_PENDING_DOCUMENTS]._dwDefault ==
|
|
CI_MAX_PENDING_DOCUMENTS_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MASTER_MERGE_TIME]._dwDefault ==
|
|
CI_MASTER_MERGE_TIME_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_QUEUE_CHUNKS]._dwDefault ==
|
|
CI_MAX_QUEUE_CHUNKS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MASTER_MERGE_CHECKPOINT_INTERVAL]._dwDefault ==
|
|
CI_MASTER_MERGE_CHECKPOINT_INTERVAL_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_BUFFER_SIZE]._dwDefault ==
|
|
CI_FILTER_BUFFER_SIZE_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_RETRIES]._dwDefault ==
|
|
CI_FILTER_RETRIES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_RETRY_INTERVAL]._dwDefault ==
|
|
CI_FILTER_RETRY_INTERVAL_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_IDLE_QUERY_THREADS]._dwDefault ==
|
|
CI_MIN_IDLE_QUERY_THREADS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_ACTIVE_QUERY_THREADS]._dwDefault ==
|
|
CI_MAX_ACTIVE_QUERY_THREADS_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_QUERY_TIMESLICE]._dwDefault ==
|
|
CI_MAX_QUERY_TIMESLICE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_QUERY_EXECUTION_TIME]._dwDefault ==
|
|
CI_MAX_QUERY_EXECUTION_TIME_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_RESTRICTION_NODES]._dwDefault ==
|
|
CI_MAX_RESTRICTION_NODES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_CLUSTERINGTIME]._dwDefault ==
|
|
CI_CLUSTERINGTIME_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_FILESIZE_MULTIPLIER]._dwDefault ==
|
|
CI_MAX_FILESIZE_MULTIPLIER_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_DAEMON_RESPONSE_TIMEOUT]._dwDefault ==
|
|
CI_DAEMON_RESPONSE_TIMEOUT_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_DELAY_INTERVAL]._dwDefault ==
|
|
CI_FILTER_DELAY_INTERVAL_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_REMAINING_THRESHOLD]._dwDefault ==
|
|
CI_FILTER_REMAINING_THRESHOLD_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_CHARACTERIZATION]._dwDefault ==
|
|
CI_MAX_CHARACTERIZATION_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_FILESIZE_FILTERED]._dwDefault ==
|
|
CI_MAX_FILESIZE_FILTERED_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_WORDLIST_IO]._dwDefault ==
|
|
CI_MAX_WORDLIST_IO_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_WORDLIST_RESOURCE_CHECK_INTERVAL]._dwDefault ==
|
|
CI_WORDLIST_RESOURCE_CHECK_INTERVAL_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_STARTUP_DELAY]._dwDefault ==
|
|
CI_STARTUP_DELAY_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_GENERATE_CHARACTERIZATION]._dwDefault ==
|
|
CI_GENERATE_CHARACTERIZATION_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_SECQ_FILTER_RETRIES]._dwDefault ==
|
|
CI_SECQ_FILTER_RETRIES_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_WORDLIST_BATTERY]._dwDefault ==
|
|
CI_MIN_WORDLIST_BATTERY_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_THREAD_PRIORITY_MERGE]._dwDefault ==
|
|
CI_THREAD_PRIORITY_MERGE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_THREAD_PRIORITY_FILTER]._dwDefault ==
|
|
CI_THREAD_PRIORITY_FILTER_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_THREAD_CLASS_FILTER]._dwDefault ==
|
|
CI_THREAD_CLASS_FILTER_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_EVTLOG_FLAGS]._dwDefault ==
|
|
CI_EVTLOG_FLAGS_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MISC_FLAGS]._dwDefault ==
|
|
CI_MISC_FLAGS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_GENERATE_RELEVANT_WORDS]._dwDefault ==
|
|
CI_GENERATE_RELEVANT_WORDS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS]._dwDefault ==
|
|
CI_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_DIRECTORIES]._dwDefault ==
|
|
CI_FILTER_DIRECTORIES_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_FILTER_CONTENTS]._dwDefault ==
|
|
CI_FILTER_CONTENTS_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_MAX_DAEMON_VM_USE]._dwDefault ==
|
|
CI_MAX_DAEMON_VM_USE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_WORDLIST_USER_IDLE]._dwDefault ==
|
|
CI_WORDLIST_USER_IDLE_DEFAULT );
|
|
Win4Assert( _adwRangeParams[CI_AP_IS_ENUM_ALLOWED]._dwDefault ==
|
|
CI_IS_ENUM_ALLOWED_DEFAULT );
|
|
|
|
Win4Assert( _adwRangeParams[CI_AP_MIN_DISK_SPACE_TO_LEAVE]._dwDefault ==
|
|
CI_MIN_DISK_SPACE_TO_LEAVE_DEFAULT );
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Array of the min, max, default values for the DWORD parameters.
|
|
// Organize the array as sets of 4 for readability.
|
|
// ---------------------------------------------------------------------------
|
|
|
|
const CI_ADMIN_PARAMS_RANGE CCiAdminParams::_adwRangeParams[CI_AP_MAX_DWORD_VAL] =
|
|
{
|
|
|
|
{ CI_MAX_MERGE_INTERVAL_MIN, CI_MAX_MERGE_INTERVAL_MAX,
|
|
CI_MAX_MERGE_INTERVAL_DEFAULT },
|
|
{ CI_MAX_UPDATES_MIN, CI_MAX_UPDATES_MAX,
|
|
CI_MAX_UPDATES_DEFAULT },
|
|
{ CI_MAX_WORDLISTS_MIN, CI_MAX_WORDLISTS_MAX,
|
|
CI_MAX_WORDLISTS_DEFAULT },
|
|
{ CI_MIN_SIZE_MERGE_WORDLISTS_MIN, CI_MIN_SIZE_MERGE_WORDLISTS_MAX,
|
|
CI_MIN_SIZE_MERGE_WORDLISTS_DEFAULT },
|
|
|
|
{ CI_MAX_WORDLIST_SIZE_MIN, CI_MAX_WORDLIST_SIZE_MAX,
|
|
CI_MAX_WORDLIST_SIZE_DEFAULT },
|
|
{ CI_MIN_WORDLIST_MEMORY_MIN, CI_MIN_WORDLIST_MEMORY_MAX,
|
|
CI_MIN_WORDLIST_MEMORY_DEFAULT },
|
|
{ CI_LOW_RESOURCE_SLEEP_MIN, CI_LOW_RESOURCE_SLEEP_MAX,
|
|
CI_LOW_RESOURCE_SLEEP_DEFAULT },
|
|
{ CI_MAX_WORDLIST_MEMORY_LOAD_MIN, CI_MAX_WORDLIST_MEMORY_LOAD_MAX,
|
|
CI_MAX_WORDLIST_MEMORY_LOAD_DEFAULT },
|
|
|
|
{ CI_MAX_FRESHCOUNT_MIN, CI_MAX_FRESHCOUNT_MAX,
|
|
CI_MAX_FRESHCOUNT_DEFAULT },
|
|
{ CI_MAX_SHADOW_INDEX_SIZE_MIN, CI_MAX_SHADOW_INDEX_SIZE_MAX,
|
|
CI_MAX_SHADOW_INDEX_SIZE_DEFAULT },
|
|
{ CI_MIN_DISKFREE_FORCE_MERGE_MIN, CI_MIN_DISKFREE_FORCE_MERGE_MAX,
|
|
CI_MIN_DISKFREE_FORCE_MERGE_DEFAULT },
|
|
{ CI_MAX_SHADOW_FREE_FORCE_MERGE_MIN, CI_MAX_SHADOW_FREE_FORCE_MERGE_MAX,
|
|
CI_MAX_SHADOW_FREE_FORCE_MERGE_DEFAULT },
|
|
|
|
{ CI_MAX_INDEXES_MIN, CI_MAX_INDEXES_MAX,
|
|
CI_MAX_INDEXES_DEFAULT },
|
|
{ CI_MAX_IDEAL_INDEXES_MIN, CI_MAX_IDEAL_INDEXES_MAX,
|
|
CI_MAX_IDEAL_INDEXES_DEFAULT },
|
|
{ CI_MIN_MERGE_IDLE_TIME_MIN, CI_MIN_MERGE_IDLE_TIME_MAX,
|
|
CI_MIN_MERGE_IDLE_TIME_DEFAULT },
|
|
{ CI_MAX_PENDING_DOCUMENTS_MIN, CI_MAX_PENDING_DOCUMENTS_MAX,
|
|
CI_MAX_PENDING_DOCUMENTS_DEFAULT },
|
|
|
|
{ CI_MASTER_MERGE_TIME_MIN, CI_MASTER_MERGE_TIME_MAX,
|
|
CI_MASTER_MERGE_TIME_DEFAULT },
|
|
{ CI_MAX_QUEUE_CHUNKS_MIN, CI_MAX_QUEUE_CHUNKS_MAX,
|
|
CI_MAX_QUEUE_CHUNKS_DEFAULT },
|
|
{ CI_MASTER_MERGE_CHECKPOINT_INTERVAL_MIN,
|
|
CI_MASTER_MERGE_CHECKPOINT_INTERVAL_MAX,
|
|
CI_MASTER_MERGE_CHECKPOINT_INTERVAL_DEFAULT },
|
|
{ CI_FILTER_BUFFER_SIZE_MIN, CI_FILTER_BUFFER_SIZE_MAX,
|
|
CI_FILTER_BUFFER_SIZE_DEFAULT },
|
|
|
|
|
|
{ CI_FILTER_RETRIES_MIN, CI_FILTER_RETRIES_MAX,
|
|
CI_FILTER_RETRIES_DEFAULT },
|
|
{ CI_FILTER_RETRY_INTERVAL_MIN, CI_FILTER_RETRY_INTERVAL_MAX,
|
|
CI_FILTER_RETRY_INTERVAL_DEFAULT },
|
|
{ CI_MIN_IDLE_QUERY_THREADS_MIN, CI_MIN_IDLE_QUERY_THREADS_MAX,
|
|
CI_MIN_IDLE_QUERY_THREADS_DEFAULT },
|
|
{ CI_MAX_ACTIVE_QUERY_THREADS_MIN, CI_MAX_ACTIVE_QUERY_THREADS_MAX,
|
|
CI_MAX_ACTIVE_QUERY_THREADS_DEFAULT },
|
|
|
|
|
|
{ CI_MAX_QUERY_TIMESLICE_MIN, CI_MAX_QUERY_TIMESLICE_MAX,
|
|
CI_MAX_QUERY_TIMESLICE_DEFAULT },
|
|
{ CI_MAX_QUERY_EXECUTION_TIME_MIN, CI_MAX_QUERY_EXECUTION_TIME_MAX,
|
|
CI_MAX_QUERY_EXECUTION_TIME_DEFAULT },
|
|
{ CI_MAX_RESTRICTION_NODES_MIN, CI_MAX_RESTRICTION_NODES_MAX,
|
|
CI_MAX_RESTRICTION_NODES_DEFAULT },
|
|
{ CI_CLUSTERINGTIME_MIN, CI_CLUSTERINGTIME_MAX,
|
|
CI_CLUSTERINGTIME_DEFAULT },
|
|
|
|
{ CI_MAX_FILESIZE_MULTIPLIER_MIN, CI_MAX_FILESIZE_MULTIPLIER_MAX,
|
|
CI_MAX_FILESIZE_MULTIPLIER_DEFAULT },
|
|
{ CI_DAEMON_RESPONSE_TIMEOUT_MIN, CI_DAEMON_RESPONSE_TIMEOUT_MAX,
|
|
CI_DAEMON_RESPONSE_TIMEOUT_DEFAULT },
|
|
{ CI_FILTER_DELAY_INTERVAL_MIN, CI_FILTER_DELAY_INTERVAL_MAX,
|
|
CI_FILTER_DELAY_INTERVAL_DEFAULT },
|
|
{ CI_FILTER_REMAINING_THRESHOLD_MIN, CI_FILTER_REMAINING_THRESHOLD_MAX,
|
|
CI_FILTER_REMAINING_THRESHOLD_DEFAULT },
|
|
|
|
{ CI_MAX_CHARACTERIZATION_MIN, CI_MAX_CHARACTERIZATION_MAX,
|
|
CI_MAX_CHARACTERIZATION_DEFAULT },
|
|
{ CI_MAX_FRESH_DELETES_MIN, CI_MAX_FRESH_DELETES_MAX,
|
|
CI_MAX_FRESH_DELETES_DEFAULT },
|
|
{ CI_MAX_WORDLIST_IO_MIN, CI_MAX_WORDLIST_IO_MAX,
|
|
CI_MAX_WORDLIST_IO_DEFAULT },
|
|
{ CI_WORDLIST_RESOURCE_CHECK_INTERVAL_MIN, CI_WORDLIST_RESOURCE_CHECK_INTERVAL_MAX,
|
|
CI_WORDLIST_RESOURCE_CHECK_INTERVAL_DEFAULT },
|
|
|
|
{ CI_STARTUP_DELAY_MIN, CI_STARTUP_DELAY_MAX,
|
|
CI_STARTUP_DELAY_DEFAULT },
|
|
{ CI_GENERATE_CHARACTERIZATION_MIN, CI_GENERATE_CHARACTERIZATION_MAX,
|
|
CI_GENERATE_CHARACTERIZATION_DEFAULT },
|
|
{ CI_MIN_WORDLIST_BATTERY_MIN, CI_MIN_WORDLIST_BATTERY_MAX,
|
|
CI_MIN_WORDLIST_BATTERY_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
(DWORD) CI_THREAD_PRIORITY_MERGE_DEFAULT },
|
|
|
|
{ 0, 0,
|
|
(DWORD) CI_THREAD_PRIORITY_FILTER_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_THREAD_CLASS_FILTER_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_EVTLOG_FLAGS_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_MISC_FLAGS_DEFAULT },
|
|
|
|
{ 0,0xFFFFFFFF,
|
|
CI_GENERATE_RELEVANT_WORDS_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_FILTER_DIRECTORIES_DEFAULT },
|
|
{ 0,0xFFFFFFFF,
|
|
CI_FILTER_CONTENTS_DEFAULT },
|
|
|
|
{ 0, 0xFFFFFFFF,
|
|
CI_MAX_FILESIZE_FILTERED_DEFAULT },
|
|
{ 0, 0xFFFFFFFF,
|
|
CI_MIN_CLIENT_IDLE_TIME },
|
|
{ CI_MAX_DAEMON_VM_USE_MIN, CI_MAX_DAEMON_VM_USE_MAX,
|
|
CI_MAX_DAEMON_VM_USE_DEFAULT },
|
|
{ CI_SECQ_FILTER_RETRIES_MIN, CI_SECQ_FILTER_RETRIES_MAX,
|
|
CI_SECQ_FILTER_RETRIES_DEFAULT },
|
|
|
|
{ CI_WORDLIST_USER_IDLE_MIN, CI_WORDLIST_USER_IDLE_MAX,
|
|
CI_WORDLIST_USER_IDLE_DEFAULT },
|
|
{ 0, 0xFFFFFFFF,
|
|
CI_IS_ENUM_ALLOWED_DEFAULT },
|
|
{ CI_MIN_DISK_SPACE_TO_LEAVE_MIN, CI_MIN_DISK_SPACE_TO_LEAVE_MAX,
|
|
CI_MIN_DISK_SPACE_TO_LEAVE_DEFAULT },
|
|
|
|
// End of DWORD values
|
|
};
|
|
|
|
// global c++ objects are evil, sick, and wrong.
|
|
|
|
CWorkQueue TheWorkQueue( 2, CWorkQueue::workQueueQuery );
|
|
CLocateDocStore g_DocStoreLocator;
|
|
CLocateDocStore g_svcDocStoreLocator;
|
|
|
|
void InitializeDocStore(void)
|
|
{
|
|
TheWorkQueue.Init();
|
|
g_DocStoreLocator.Init();
|
|
g_svcDocStoreLocator.Init();
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CLocateDocStore::Get
|
|
//
|
|
// Synopsis: Gets the docstore locator with the given clsid.
|
|
//
|
|
// History: 1-17-97 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
ICiCDocStoreLocator * CLocateDocStore::Get( GUID const & guidDocStoreLocator )
|
|
{
|
|
if ( !_fShutdown )
|
|
{
|
|
CLock lock( _mutex );
|
|
|
|
if ( 0 == _pDocStoreLocator )
|
|
{
|
|
SCODE sc = CoCreateInstance( guidDocStoreLocator,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_ICiCDocStoreLocator,
|
|
(void **) &_pDocStoreLocator );
|
|
|
|
if ( FAILED(sc) )
|
|
{
|
|
ciDebugOut(( DEB_ERROR,
|
|
"Failed to create ICiCDocStoreLocator (0x%X) \n",
|
|
sc ));
|
|
THROW( CException( sc ) );
|
|
}
|
|
}
|
|
|
|
_pDocStoreLocator->AddRef();
|
|
}
|
|
|
|
return _pDocStoreLocator;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CLocateDocStore::Shutdown
|
|
//
|
|
// Synopsis: Shutsdown the Content Index Framework side of the things.
|
|
// This shuts down the whole Content Index. If there are
|
|
// multiple instances of CI in the same process, this affects
|
|
// all the instances.
|
|
//
|
|
// History: 3-20-97 srikants Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void CLocateDocStore::Shutdown()
|
|
{
|
|
CLock lock( _mutex );
|
|
|
|
if ( _pDocStoreLocator )
|
|
{
|
|
//
|
|
// Shutdown on the docstore locator must be called only once.
|
|
//
|
|
if ( !_fShutdown )
|
|
_pDocStoreLocator->Shutdown();
|
|
|
|
_pDocStoreLocator->Release();
|
|
_pDocStoreLocator = 0;
|
|
}
|
|
|
|
_fShutdown = TRUE;
|
|
}
|
|
|