|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 2000.
//
// File: FrmUtils.hxx
//
// Contents: Framework parameter utility classes
//
// History: 14-Jan-1998 KyleP Added header
//
//----------------------------------------------------------------------------
#pragma once
#include <ciintf.h>
#include <driveinf.hxx>
class PDeSerStream; class PSerStream;
//+---------------------------------------------------------------------------
//
// Class: CCiFrameworkParams
//
// Purpose: A wrapper around the administrative parameters interface
// for the frame work.
//
// History: 12-05-96 srikants Created
// 19-10-98 sundara added IS_ENUM_ALLOWED
//
// Notes:
//
//----------------------------------------------------------------------------
class CCiFrameworkParams { public:
CCiFrameworkParams( ICiAdminParams * pCiAdminParams = 0 ) : _pCiAdminParams(pCiAdminParams) { if ( _pCiAdminParams ) _pCiAdminParams->AddRef(); }
~CCiFrameworkParams() { if ( _pCiAdminParams ) _pCiAdminParams->Release(); }
void Set( ICiAdminParams * pCiAdminParams ) { Win4Assert( 0 != pCiAdminParams ); Win4Assert( 0 == _pCiAdminParams );
pCiAdminParams->AddRef(); _pCiAdminParams = pCiAdminParams; }
const BOOL FilterContents() { DWORD dwVal = 0; _pCiAdminParams->GetValue( CI_AP_FILTER_CONTENTS, &dwVal ); return 0 != dwVal; }
const __int64 GetMaxFilesizeFiltered() { __int64 val; _pCiAdminParams->GetInt64Value( CI_AP_MAX_FILESIZE_FILTERED, &val );
//
// Filesize is specified in Kilobytes but used in bytes.
//
val *= 1024;
return val; }
const ULONG GetMasterMergeTime() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MASTER_MERGE_TIME, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxFilesizeMultiplier() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_FILESIZE_MULTIPLIER, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const int GetThreadPriorityFilter() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_THREAD_PRIORITY_FILTER, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const int GetThreadClassFilter() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_THREAD_CLASS_FILTER, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetDaemonResponseTimeout() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_DAEMON_RESPONSE_TIMEOUT, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxCharacterization() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_CHARACTERIZATION, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const BOOL GenerateCharacterization() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_GENERATE_CHARACTERIZATION, &dwVal ); Win4Assert( S_OK == sc );
return 0 != dwVal; }
const BOOL FilterDirectories() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_DIRECTORIES, &dwVal ); Win4Assert( S_OK == sc );
return 0 != dwVal; }
const BOOL FilterFilesWithUnknownExtensions() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS, &dwVal ); Win4Assert( S_OK == sc );
return 0 != dwVal; }
const ULONG GetFilterDelayInterval() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_DELAY_INTERVAL, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetFilterRemainingThreshold() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_REMAINING_THRESHOLD, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxMergeInterval() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MERGE_INTERVAL, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const int GetThreadPriorityMerge() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_THREAD_PRIORITY_MERGE, &dwVal ); Win4Assert( S_OK == sc );
return (int) dwVal; }
const ULONG GetMaxUpdates() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_UPDATES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxWordlists() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_WORDLISTS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMinSizeMergeWordlist() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_SIZE_MERGE_WORDLISTS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxWordlistSize() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_WORDLIST_SIZE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMinWordlistMemory() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_WORDLIST_MEMORY, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxWordlistIo() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_WORDLIST_IO, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMinWordlistBattery() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_WORDLIST_BATTERY, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetWordlistUserIdle() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_WORDLIST_USER_IDLE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetWordlistResourceCheckInterval() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_WORDLIST_RESOURCE_CHECK_INTERVAL, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetStartupDelay() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_STARTUP_DELAY, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxFreshDeletes() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_FRESH_DELETES, &dwVal );
Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetLowResourceSleep() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_LOW_RESOURCE_SLEEP, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxWordlistMemoryLoad() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_WORDLIST_MEMORY_LOAD, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxFreshCount() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_FRESH_COUNT, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxQueueChunks() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_QUEUE_CHUNKS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMasterMergeCheckpointInterval() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MASTER_MERGE_CHECKPOINT_INTERVAL, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetFilterBufferSize() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_BUFFER_SIZE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetFilterRetries() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_RETRIES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetSecQFilterRetries() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_SECQ_FILTER_RETRIES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetFilterRetryInterval() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_FILTER_RETRY_INTERVAL, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxShadowIndexSize() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_SHADOW_INDEX_SIZE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMinDiskFreeForceMerge() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_DISK_FREE_FORCE_MERGE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxShadowFreeForceMerge() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_SHADOW_FREE_FORCE_MERGE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxIndexes() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_INDEXES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxIdealIndexes() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_IDEAL_INDEXES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal;
}
const ULONG GetMinMergeIdleTime() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_MERGE_IDLE_TIME, &dwVal ); Win4Assert( S_OK == sc );
return dwVal;
}
const ULONG GetMaxPendingDocuments() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_PENDING_DOCUMENTS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal;
}
const ULONG GetMinIdleQueryThreads() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_IDLE_QUERY_THREADS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxActiveQueryThreads() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_ACTIVE_QUERY_THREADS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxQueryTimeslice() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_QUERY_TIMESLICE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxQueryExecutionTime() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_QUERY_EXECUTION_TIME, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMiscCiFlags() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MISC_FLAGS, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxRestrictionNodes() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_RESTRICTION_NODES, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const ULONG GetMaxDaemonVmUse() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MAX_DAEMON_VM_USE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; }
const BOOL IsEnumAllowed() { DWORD dwVal=0; SCODE sc = _pCiAdminParams->GetValue( CI_AP_IS_ENUM_ALLOWED, &dwVal); Win4Assert( S_OK == sc ); if(dwVal) { return TRUE; } return FALSE ; }
const ULONG GetMinDiskSpaceToLeave() { DWORD dwVal;
SCODE sc = _pCiAdminParams->GetValue( CI_AP_MIN_DISK_SPACE_TO_LEAVE, &dwVal ); Win4Assert( S_OK == sc );
return dwVal; } const BOOL UseOle() { return FALSE; }
const BOOL IsGenerateCharacterization() { return TRUE; }
const ULONG GetEventLogFlags() { return 0; }
private:
ICiAdminParams * _pCiAdminParams;
};
//+---------------------------------------------------------------------------
//
// Class: CCiFrmPerfCounter
//
// Purpose: A performance counter using the framework ICiCAdviseStatus
//
// History: 12-09-96 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
class CCiFrmPerfCounter { public:
CCiFrmPerfCounter( ICiCAdviseStatus * pAdviseStatus = 0, CI_PERF_COUNTER_NAME name = CI_PERF_TOTAL_QUERIES ) : _xAdviseStatus( pAdviseStatus ), _name(name) { if ( 0 != pAdviseStatus ) _xAdviseStatus->AddRef(); }
~CCiFrmPerfCounter() { _xAdviseStatus.Free(); }
void SetAdviseStatus( ICiCAdviseStatus * pAdviseStatus ) { _xAdviseStatus.Set( pAdviseStatus ); _xAdviseStatus->AddRef(); }
void Update( CI_PERF_COUNTER_NAME name, long val ) { _xAdviseStatus->SetPerfCounterValue( name, val ); }
void Update( long val ) { Update( _name, val ); }
long GetCurrValue( CI_PERF_COUNTER_NAME name ) { long val = 0; SCODE sc = _xAdviseStatus->GetPerfCounterValue( _name, &val );
return S_OK == sc ? val : 0; }
long GetCurrValue() { return GetCurrValue( _name ); }
private:
XInterface<ICiCAdviseStatus> _xAdviseStatus; const CI_PERF_COUNTER_NAME _name; };
//+---------------------------------------------------------------------------
//
// Class: CDiskFreeStatus
//
// Purpose: A class to monitor free space in a disk.
//
// History: 12-09-96 srikants Created
// 01-Nov-98 KLam Added DiskSpaceToLeave to constructor
// 20-Nov-98 KLam Added CDriveInfo private member
//
//----------------------------------------------------------------------------
class CDiskFreeStatus { public:
CDiskFreeStatus( WCHAR const * pwszPath, ULONG cMegToLeaveOnDisk ) :_fIsLow(FALSE), _driveInfo ( pwszPath, cMegToLeaveOnDisk ) { Win4Assert( pwszPath ); }
BOOL IsLow() const { return _fIsLow; }
void UpdateDiskLowInfo();
ULONG GetDiskSpaceToFree() { return highDiskWaterMark; }
private:
enum { lowDiskWaterMark = 3 * 512 * 1024, // 1.5 MB
highDiskWaterMark = lowDiskWaterMark + 512 * 1024 // 2.0 MB
};
BOOL _fIsLow;
CDriveInfo _driveInfo; };
WCHAR * AllocHeapAndCopy( WCHAR const * pwszSrc, ULONG & cc );
inline WCHAR * AllocHeapAndCopy( WCHAR const * pwszSrc ) { ULONG cc; return AllocHeapAndCopy( pwszSrc, cc ); }
WCHAR * AllocHeapAndGetWString( PDeSerStream & stm );
void PutWString( PSerStream & stm, WCHAR const * pwszStr );
//+---------------------------------------------------------------------------
//
// Class: CFwPerfTime
//
// Purpose: A class analogous to CPerfTime but adapted to the framework.
//
// History: 1-07-97 srikants Created
//
// Notes: We don't AddRef and Release the ICiCAdviseStatus interface
// here because we know it will not be deleted during the
// existence of this class.
//
//----------------------------------------------------------------------------
class CFwPerfTime {
public:
CFwPerfTime( ICiCAdviseStatus * pCiCAdviseStatus, CI_PERF_COUNTER_NAME name, int SizeDivisor=1, int TimeMultiplier=1 );
~CFwPerfTime() {}
void TStart ();
void TStop ( DWORD dwValue = 0 );
private:
LARGE_INTEGER _liStartTime;
LONGLONG _llSizeDivisor; LONGLONG _llTimeMultiplier;
long _counterVal;
CI_PERF_COUNTER_NAME _name; ICiCAdviseStatus * _pAdviseStatus; };
|