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.
1240 lines
44 KiB
1240 lines
44 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1991 - 2000.
|
|
//
|
|
// File: PARAMS.HXX
|
|
//
|
|
// Contents: Default content index parameters
|
|
//
|
|
// History: 25-Mar-92 BartoszM Created.
|
|
// 04-Jan-94 DwightKr Added MAX_PERSIST_DEL_RECORDS
|
|
// 19-Oct-98 SundarA Added IS_ENUM_ALLOWED
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <ciintf.h>
|
|
|
|
const BOOL CI_GENERATE_RELEVANT_WORDS_DEFAULT = FALSE;
|
|
const BOOL CI_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS_DEFAULT = TRUE;
|
|
const BOOL CI_FILTER_CONTENTS_DEFAULT = TRUE;
|
|
|
|
//
|
|
// Maximum time spent creating a clustering.
|
|
// Units: seconds
|
|
// Note: this isn't currenly used anywhere.
|
|
//
|
|
|
|
const ULONG CI_CLUSTERINGTIME_DEFAULT = 500;
|
|
const ULONG CI_CLUSTERINGTIME_MIN = 100;
|
|
const ULONG CI_CLUSTERINGTIME_MAX = 10000;
|
|
|
|
//
|
|
// Minimum number of idle threads kept alive to process
|
|
// incoming queries.
|
|
//
|
|
|
|
const ULONG CI_MIN_IDLE_QUERY_THREADS_DEFAULT = 1;
|
|
const ULONG CI_MIN_IDLE_QUERY_THREADS_MIN = 0;
|
|
const ULONG CI_MIN_IDLE_QUERY_THREADS_MAX = 1000;
|
|
|
|
//
|
|
// Maximum number of query threads. This caps the number of concurrently
|
|
// processed asynchronous queries.
|
|
//
|
|
|
|
const ULONG CI_MAX_ACTIVE_QUERY_THREADS_DEFAULT = 2;
|
|
const ULONG CI_MAX_ACTIVE_QUERY_THREADS_MIN = 1;
|
|
const ULONG CI_MAX_ACTIVE_QUERY_THREADS_MAX = 1000;
|
|
|
|
//
|
|
// Minimum number of idle request threads kept alive to process
|
|
// incoming query requests.
|
|
//
|
|
|
|
const ULONG CI_MIN_IDLE_REQUEST_THREADS_DEFAULT = 1;
|
|
const ULONG CI_MIN_IDLE_REQUEST_THREADS_MIN = 0;
|
|
const ULONG CI_MIN_IDLE_REQUEST_THREADS_MAX = 1000;
|
|
|
|
//
|
|
// Maximum number of request threads. This caps the number of concurrently
|
|
// processed synchronous queries.
|
|
//
|
|
|
|
const ULONG CI_MAX_ACTIVE_REQUEST_THREADS_DEFAULT = 2;
|
|
const ULONG CI_MAX_ACTIVE_REQUEST_THREADS_MIN = 1;
|
|
const ULONG CI_MAX_ACTIVE_REQUEST_THREADS_MAX = 1000;
|
|
|
|
//
|
|
// Maximum number of simultaneous query/catalog request connections
|
|
// (pipe instances).
|
|
//
|
|
|
|
const ULONG CI_MAX_SIMULTANEOUS_REQUESTS_DEFAULT = 100;
|
|
const ULONG CI_MAX_SIMULTANEOUS_REQUESTS_MIN = 1;
|
|
const ULONG CI_MAX_SIMULTANEOUS_REQUESTS_MAX = 20000;
|
|
|
|
//
|
|
// Maximum number of cached pipe instances
|
|
//
|
|
|
|
const ULONG CI_MAX_CACHED_PIPES_DEFAULT = 3;
|
|
const ULONG CI_MAX_CACHED_PIPES_MIN = 0;
|
|
const ULONG CI_MAX_CACHED_PIPES_MAX = 1000;
|
|
|
|
//
|
|
// Timeout (in milleseconds) for clients trying to obtain a pipe instance
|
|
// when all available pipe instances are busy.
|
|
//
|
|
|
|
const ULONG CI_REQUEST_TIMEOUT_DEFAULT = 10000;
|
|
const ULONG CI_REQUEST_TIMEOUT_MIN = 0;
|
|
const ULONG CI_REQUEST_TIMEOUT_MAX = 1000000000;
|
|
|
|
//
|
|
// Minimum idle time a client can enjoy. After this expires, it can be
|
|
// kicked out on the server's discretion to allow newer clients.
|
|
// This is in seconds.
|
|
//
|
|
|
|
const ULONG CI_MIN_CLIENT_IDLE_TIME = 600; // 10 minutes. Is this a reasonable default?
|
|
|
|
//
|
|
// W3 Server Instance #
|
|
//
|
|
|
|
const ULONG CI_W3SVC_INSTANCE_DEFAULT = 1;
|
|
const ULONG CI_W3SVC_INSTANCE_MIN = 1;
|
|
const ULONG CI_W3SVC_INSTANCE_MAX = ~0;
|
|
|
|
//
|
|
// NNTP Server Instance #
|
|
//
|
|
|
|
const ULONG CI_NNTPSVC_INSTANCE_DEFAULT = 1;
|
|
const ULONG CI_NNTPSVC_INSTANCE_MIN = 1;
|
|
const ULONG CI_NNTPSVC_INSTANCE_MAX = ~0;
|
|
|
|
//
|
|
// IMAP Server Instance #
|
|
//
|
|
|
|
const ULONG CI_IMAPSVC_INSTANCE_DEFAULT = 1;
|
|
const ULONG CI_IMAPSVC_INSTANCE_MIN = 1;
|
|
const ULONG CI_IMAPSVC_INSTANCE_MAX = ~0;
|
|
|
|
//
|
|
// Whether to trim working set when idle
|
|
//
|
|
|
|
const BOOL CI_MINIMIZE_WORKINGSET_DEFAULT = 0;
|
|
|
|
//
|
|
// Maximum amount of time to execute a query in a single time-slice.
|
|
// If more asynchronous queries are active than allowed query threads,
|
|
// then a query is put back on the pending queue after this time interval.
|
|
// Timeslicing is done only after a matching row is found, so the time
|
|
// spent in a timeslice may overrun this and a considerable number of
|
|
// rows may be examined in the time slice.
|
|
//
|
|
// Units: milliseconds of CPU time
|
|
//
|
|
|
|
const ULONG CI_MAX_QUERY_TIMESLICE_DEFAULT = 50;
|
|
const ULONG CI_MAX_QUERY_TIMESLICE_MIN = 1;
|
|
const ULONG CI_MAX_QUERY_TIMESLICE_MAX = 1000;
|
|
|
|
//
|
|
// Maximum execution time of a query. If a query takes more than this
|
|
// amount of CPU time, processing of it will be stopped and an error
|
|
// status indicated.
|
|
// A special value of 0 means no timeout or timeout specified by the client
|
|
//
|
|
// Units: milliseconds of CPU time
|
|
//
|
|
|
|
const ULONG CI_MAX_QUERY_EXECUTION_TIME_DEFAULT = 10*1000;
|
|
const ULONG CI_MAX_QUERY_EXECUTION_TIME_MIN = 0;
|
|
const ULONG CI_MAX_QUERY_EXECUTION_TIME_MAX = ~0;
|
|
|
|
|
|
//++++++++++++++++++++++++++++++++++++
|
|
//+ Content index parameters +
|
|
//++++++++++++++++++++++++++++++++++++
|
|
|
|
//
|
|
// Sleep time between merges. Content index wakes up this often to determine
|
|
// if a merge is necessary. Usually an annealing merge, but may be a shadow
|
|
// or master merge.
|
|
//
|
|
// Units: minutes
|
|
//
|
|
const ULONG CI_MAX_MERGE_INTERVAL_DEFAULT = 10;
|
|
const ULONG CI_MAX_MERGE_INTERVAL_MIN = 1;
|
|
const ULONG CI_MAX_MERGE_INTERVAL_MAX = 60;
|
|
|
|
//
|
|
// Priority class of the filter process. Priority within class is always
|
|
// above normal.
|
|
//
|
|
|
|
const int CI_THREAD_CLASS_FILTER_DEFAULT = IDLE_PRIORITY_CLASS;
|
|
const int CI_THREAD_CLASS_FILTER_MIN = NORMAL_PRIORITY_CLASS;
|
|
const int CI_THREAD_CLASS_FILTER_MAX = HIGH_PRIORITY_CLASS;
|
|
|
|
//
|
|
// Maximum number of word lists that can exists at one time.
|
|
//
|
|
|
|
const ULONG CI_MAX_WORDLISTS_DEFAULT = 25;
|
|
const ULONG CI_MAX_WORDLISTS_MIN = 10;
|
|
const ULONG CI_MAX_WORDLISTS_MAX = 2000;
|
|
|
|
//
|
|
// Minimum combined size of wordlists which will force shadow merge.
|
|
// Units: 4k pages.
|
|
//
|
|
|
|
const ULONG CI_MIN_SIZE_MERGE_WORDLISTS_DEFAULT = 256;
|
|
const ULONG CI_MIN_SIZE_MERGE_WORDLISTS_MIN = 16;
|
|
const ULONG CI_MIN_SIZE_MERGE_WORDLISTS_MAX = ~0;
|
|
|
|
//
|
|
// Minimum free memory for wordlist creation.
|
|
// Units: MBytes
|
|
//
|
|
|
|
const ULONG CI_MIN_WORDLIST_MEMORY_DEFAULT = 5;
|
|
const ULONG CI_MIN_WORDLIST_MEMORY_MIN = 1;
|
|
const ULONG CI_MIN_WORDLIST_MEMORY_MAX = 100;
|
|
|
|
//
|
|
// Milliseconds after system boot until CI starts scanning/filtering
|
|
// Units: Milliseconds
|
|
//
|
|
|
|
const ULONG CI_STARTUP_DELAY_DEFAULT = 1000 * 60 * 8; // 8 minutes
|
|
const ULONG CI_STARTUP_DELAY_MIN = 0;
|
|
const ULONG CI_STARTUP_DELAY_MAX = ~0;
|
|
|
|
//
|
|
// More than this amount of I/O results in a delay before
|
|
// creating a word list.
|
|
// Units: KB/Sec
|
|
//
|
|
|
|
const ULONG CI_MAX_WORDLIST_IO_MIN = 100;
|
|
const ULONG CI_MAX_WORDLIST_IO_MAX = ~0;
|
|
const ULONG CI_MAX_WORDLIST_IO_DEFAULT = 410; // ~ 2 Mb / 5 Seconds
|
|
|
|
//
|
|
// More than this amount of I/O results in a delay before creating a
|
|
// word list. FSCI-specific, and only enabled if DiskPerf counters are
|
|
// enabled.
|
|
// Units: % Disk in use.
|
|
//
|
|
|
|
const ULONG CI_MAX_WORDLIST_IO_DISKPERF_MIN = 1; // 0% doesn't make any sense. We'd never run.
|
|
const ULONG CI_MAX_WORDLIST_IO_DISKPERF_MAX = 100;
|
|
const ULONG CI_MAX_WORDLIST_IO_DISKPERF_DEFAULT = 10;
|
|
|
|
//
|
|
// Interval at which resource limitations such as low memory and
|
|
// heavy [user] I/O will be checked. This is the minimum unit of
|
|
// time devoted to wordlist creation.
|
|
// Units: Seconds
|
|
//
|
|
|
|
const ULONG CI_WORDLIST_RESOURCE_CHECK_INTERVAL_MIN = 5;
|
|
const ULONG CI_WORDLIST_RESOURCE_CHECK_INTERVAL_MAX = ~0;
|
|
const ULONG CI_WORDLIST_RESOURCE_CHECK_INTERVAL_DEFAULT = 60;
|
|
|
|
//
|
|
// Maximum fresh list entries--forces master merge
|
|
// Each fresh entry takes up 8 bytes.
|
|
//
|
|
|
|
const ULONG CI_MAX_FRESHCOUNT_DEFAULT = 60000;
|
|
const ULONG CI_MAX_FRESHCOUNT_MIN = 1000;
|
|
const ULONG CI_MAX_FRESHCOUNT_MAX = ~0;
|
|
|
|
//
|
|
// Maximum number of delete entries in fresh list before a
|
|
// delete merge is forced.
|
|
//
|
|
|
|
const ULONG CI_MAX_FRESH_DELETES_DEFAULT = 5000;
|
|
const ULONG CI_MAX_FRESH_DELETES_MIN = 10;
|
|
const ULONG CI_MAX_FRESH_DELETES_MAX = ~0;
|
|
|
|
//
|
|
// Maximum amount of data which can be gernated from a single file, based
|
|
// on its size. This value is a multiplier. 8 means that a file can generate
|
|
// up to 8 times it size in content index data.
|
|
//
|
|
|
|
const ULONG CI_MAX_FILESIZE_MULTIPLIER_DEFAULT = 8;
|
|
const ULONG CI_MAX_FILESIZE_MULTIPLIER_MIN = 4;
|
|
const ULONG CI_MAX_FILESIZE_MULTIPLIER_MAX = ~0;
|
|
|
|
//
|
|
// Time at which master merge will occur. This is stored as the number of
|
|
// minutes after midnight.
|
|
// Units: minutes
|
|
//
|
|
|
|
const ULONG CI_MASTER_MERGE_TIME_DEFAULT = 60;
|
|
const ULONG CI_MASTER_MERGE_TIME_MIN = 0;
|
|
const ULONG CI_MASTER_MERGE_TIME_MAX = 1439;
|
|
|
|
//
|
|
// Maximum number of indices considered acceptable in a well-tuned system.
|
|
// When the number of indices climbs above this number and the system is
|
|
// idle then an 'annealing' merge will take place to bring the total count
|
|
// of indices under this number.
|
|
//
|
|
|
|
const ULONG CI_MAX_IDEAL_INDEXES_DEFAULT = 5;
|
|
const ULONG CI_MAX_IDEAL_INDEXES_MIN = 2;
|
|
const ULONG CI_MAX_IDEAL_INDEXES_MAX = 100;
|
|
|
|
//
|
|
// If average system idle time for the last merge check period is greater
|
|
// than this value, then we may perform an annealing merge.
|
|
// Units: Percentage of total CPU time.
|
|
//
|
|
|
|
const ULONG CI_MIN_MERGE_IDLE_TIME_DEFAULT = 90;
|
|
const ULONG CI_MIN_MERGE_IDLE_TIME_MIN = 10;
|
|
const ULONG CI_MIN_MERGE_IDLE_TIME_MAX = 100;
|
|
|
|
|
|
//
|
|
// Time interval between forced scans on network shares with no notifications.
|
|
// Units: minutes
|
|
//
|
|
|
|
const ULONG CI_FORCED_NETPATH_SCAN_DEFAULT = 120;
|
|
const ULONG CI_FORCED_NETPATH_SCAN_MIN = 10;
|
|
const ULONG CI_FORCED_NETPATH_SCAN_MAX = 0x00FFFFFF;
|
|
|
|
//
|
|
// Maximum # of catalogs that can be opened at once.
|
|
// Units: count of catalogs
|
|
//
|
|
|
|
const ULONG CI_MAX_CATALOGS_DEFAULT = 33; // enough to fit in 1 perfmon shared-memory page
|
|
const ULONG CI_MAX_CATALOGS_MIN = 1;
|
|
const ULONG CI_MAX_CATALOGS_MAX = 1000;
|
|
|
|
//
|
|
// Default value for _fIsEnumAllowed is TRUE
|
|
//
|
|
|
|
const BOOL CI_IS_ENUM_ALLOWED_DEFAULT = TRUE;
|
|
|
|
//
|
|
// Default value for _fIsReadOnly is FALSE
|
|
//
|
|
|
|
const BOOL CI_IS_READ_ONLY_DEFAULT = FALSE;
|
|
|
|
//
|
|
// Number of megabytes to leave on disk
|
|
// If there is less than this amount of space on disk then fail attempts to
|
|
// extend files.
|
|
//
|
|
const ULONG CI_MIN_DISK_SPACE_TO_LEAVE_DEFAULT = 20;
|
|
const ULONG CI_MIN_DISK_SPACE_TO_LEAVE_MIN = 0;
|
|
const ULONG CI_MIN_DISK_SPACE_TO_LEAVE_MAX = ~0;
|
|
|
|
//++++++++++++++++++++++++++++++++++++++
|
|
//+ IDQ ISAPI extension parameters +
|
|
//++++++++++++++++++++++++++++++++++++++
|
|
|
|
//
|
|
// Maximum total number of rows to fetch for a single query.
|
|
//
|
|
const ULONG IS_MAX_ROWS_IN_RESULT_DEFAULT = 0;
|
|
const ULONG IS_MAX_ROWS_IN_RESULT_MIN = 0;
|
|
const ULONG IS_MAX_ROWS_IN_RESULT_MAX = 1000000;
|
|
|
|
//
|
|
// Only fetch and sort this number of rows in a single query.
|
|
//
|
|
const ULONG IS_FIRST_ROWS_IN_RESULT_DEFAULT = 0;
|
|
const ULONG IS_FIRST_ROWS_IN_RESULT_MIN = 0;
|
|
const ULONG IS_FIRST_ROWS_IN_RESULT_MAX = 1000000;
|
|
|
|
//
|
|
// Maximum number of cached queries.
|
|
//
|
|
const ULONG IS_MAX_ENTRIES_IN_CACHE_DEFAULT = 10;
|
|
const ULONG IS_MAX_ENTRIES_IN_CACHE_MIN = 0;
|
|
const ULONG IS_MAX_ENTRIES_IN_CACHE_MAX = 100;
|
|
|
|
//
|
|
// Time interval a query cache entry will remain live.
|
|
// Units: Minutes
|
|
//
|
|
const ULONG IS_QUERY_CACHE_PURGE_INTERVAL_DEFAULT = 5;
|
|
const ULONG IS_QUERY_CACHE_PURGE_INTERVAL_MIN = 1;
|
|
const ULONG IS_QUERY_CACHE_PURGE_INTERVAL_MAX = 120;
|
|
|
|
//
|
|
// Default IS catalog directory
|
|
extern const WCHAR * IS_DEFAULT_CATALOG_DIRECTORY;
|
|
|
|
//
|
|
// # of web query requests to queue at most when busy with
|
|
// other queries
|
|
// Units: Count
|
|
//
|
|
const ULONG IS_QUERY_REQUEST_QUEUE_SIZE_DEFAULT = 16;
|
|
const ULONG IS_QUERY_REQUEST_QUEUE_SIZE_MIN = 0;
|
|
const ULONG IS_QUERY_REQUEST_QUEUE_SIZE_MAX = 100000;
|
|
|
|
|
|
//
|
|
// # of threads per processor beyond which query requests are queued.
|
|
// Units: Count of threads per processor
|
|
//
|
|
const ULONG IS_QUERY_REQUEST_THRESHOLD_FACTOR_DEFAULT = 3;
|
|
const ULONG IS_QUERY_REQUEST_THRESHOLD_FACTOR_MIN = 1;
|
|
const ULONG IS_QUERY_REQUEST_THRESHOLD_FACTOR_MAX = 100000;
|
|
|
|
//
|
|
// Date/Time formatting settings for IDQ
|
|
// 0 -- user default locale (slow) (half of all time spent formatting date/time)
|
|
// 1 -- system default locale (ok) (default)
|
|
// 2 -- hard-coded formatting (fast)
|
|
//
|
|
const ULONG IS_QUERY_DATETIME_FORMATTING_DEFAULT = 1;
|
|
const ULONG IS_QUERY_DATETIME_FORMATTING_MIN = 0;
|
|
const ULONG IS_QUERY_DATETIME_FORMATTING_MAX = 2;
|
|
|
|
//
|
|
// Date/Time local/gmt settings for IDQ
|
|
// 0 -- GMT (default)
|
|
// 1 -- Local system time
|
|
//
|
|
const ULONG IS_QUERY_DATETIME_LOCAL_DEFAULT = 0;
|
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//+ Internal parameters (not exposed outside registry) +
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//
|
|
// maximum number of updates passed by the catalog
|
|
// update to content index in a single batch
|
|
//
|
|
|
|
const ULONG CI_MAX_UPDATES_DEFAULT = 100;
|
|
const ULONG CI_MAX_UPDATES_MIN = 50;
|
|
const ULONG CI_MAX_UPDATES_MAX = 200;
|
|
|
|
//
|
|
// Maximum size (in 4k pages) of wordlist at which new documents
|
|
// can still be added to wordlist.
|
|
//
|
|
|
|
const ULONG CI_MAX_WORDLIST_SIZE_DEFAULT = 20;
|
|
const ULONG CI_MAX_WORDLIST_SIZE_MIN = 10;
|
|
const ULONG CI_MAX_WORDLIST_SIZE_MAX = 262144;
|
|
|
|
//
|
|
// Time to wait after low resource conditions before retrying operation.
|
|
// Units: seconds
|
|
//
|
|
|
|
const ULONG CI_LOW_RESOURCE_SLEEP_DEFAULT = 180;
|
|
const ULONG CI_LOW_RESOURCE_SLEEP_MIN = 5;
|
|
const ULONG CI_LOW_RESOURCE_SLEEP_MAX = 1200; // 20 minutes
|
|
|
|
//
|
|
// Maximum memory load for wordlist creation
|
|
// Units: percentage of total memory
|
|
//
|
|
|
|
const ULONG CI_MAX_WORDLIST_MEMORY_LOAD_DEFAULT = 95;
|
|
const ULONG CI_MAX_WORDLIST_MEMORY_LOAD_MIN = 80;
|
|
const ULONG CI_MAX_WORDLIST_MEMORY_LOAD_MAX = 95;
|
|
|
|
//
|
|
// Number of chunks allowed in the in-memory copy of the change list.
|
|
// Units: chunks
|
|
//
|
|
|
|
const ULONG CI_MAX_QUEUE_CHUNKS_DEFAULT = 20;
|
|
const ULONG CI_MAX_QUEUE_CHUNKS_MIN = 10;
|
|
const ULONG CI_MAX_QUEUE_CHUNKS_MAX = 30;
|
|
|
|
//
|
|
// Number of kilobytes to process before checkpointing during master merge
|
|
// Units: Kbytes
|
|
//
|
|
|
|
const ULONG CI_MASTER_MERGE_CHECKPOINT_INTERVAL_DEFAULT = 0x0800;
|
|
const ULONG CI_MASTER_MERGE_CHECKPOINT_INTERVAL_MIN = 0x0100;
|
|
const ULONG CI_MASTER_MERGE_CHECKPOINT_INTERVAL_MAX = 0x1000;
|
|
|
|
//
|
|
// Maximum number of indexes. Normally, a shadow merge will merge all
|
|
// existing wordlists into a new shadow index. When the total number of
|
|
// indexes climbs beyond this count, then existing shadow indexes will
|
|
// participate in a shadow merge.
|
|
//
|
|
|
|
const ULONG CI_MAX_INDEXES_DEFAULT = 25;
|
|
const ULONG CI_MAX_INDEXES_MIN = 10;
|
|
const ULONG CI_MAX_INDEXES_MAX = 150;
|
|
|
|
|
|
//
|
|
// Memory buffer size used for CI filter to communicate between
|
|
// server and kernel space.
|
|
// Units: KBytes
|
|
//
|
|
|
|
const ULONG CI_FILTER_BUFFER_SIZE_DEFAULT = 128;
|
|
const ULONG CI_FILTER_BUFFER_SIZE_MIN = 64;
|
|
const ULONG CI_FILTER_BUFFER_SIZE_MAX = 1024;
|
|
|
|
#if 0
|
|
//
|
|
// Time in minutes between polling the system for new OFS drives to start
|
|
// filtering.
|
|
// Units: minutes
|
|
//
|
|
|
|
const ULONG CI_CHANGE_NOTIFICATION_INTERVAL_DEFAULT = 15;
|
|
const ULONG CI_CHANGE_NOTIFICATION_INTERVAL_MIN = 1;
|
|
const ULONG CI_CHANGE_NOTIFICATION_INTERVAL_MAX = 20;
|
|
#endif
|
|
|
|
//
|
|
// Number of attempts to filter a document.
|
|
//
|
|
//
|
|
|
|
const ULONG CI_FILTER_RETRIES_DEFAULT = 4;
|
|
const ULONG CI_FILTER_RETRIES_MIN = 1;
|
|
const ULONG CI_FILTER_RETRIES_MAX = 10;
|
|
|
|
//
|
|
// Number of attempts to filter a document in secondary Q.
|
|
//
|
|
//
|
|
|
|
const ULONG CI_SECQ_FILTER_RETRIES_DEFAULT = 10;
|
|
const ULONG CI_SECQ_FILTER_RETRIES_MIN = 0;
|
|
const ULONG CI_SECQ_FILTER_RETRIES_MAX = 32000; // long enough
|
|
|
|
//
|
|
// Interval between retries for filtering "open" documents.
|
|
// Units: minutes
|
|
//
|
|
const ULONG CI_FILTER_RETRY_INTERVAL_DEFAULT = 5;
|
|
const ULONG CI_FILTER_RETRY_INTERVAL_MIN = 1;
|
|
const ULONG CI_FILTER_RETRY_INTERVAL_MAX = 240;
|
|
|
|
//
|
|
// Filtering delay in case there are very few documents to be filtered. This
|
|
// will allow filtering more documents per call rather than 1 per call.
|
|
// Units: seconds
|
|
//
|
|
const ULONG CI_FILTER_DELAY_INTERVAL_DEFAULT = 20;
|
|
const ULONG CI_FILTER_DELAY_INTERVAL_MIN = 0;
|
|
const ULONG CI_FILTER_DELAY_INTERVAL_MAX = 600;
|
|
|
|
//
|
|
// If the number of un-filtered documents is below this threshold, a filtering
|
|
// delay will be introduced.
|
|
//
|
|
const ULONG CI_FILTER_REMAINING_THRESHOLD_DEFAULT = 32;
|
|
const ULONG CI_FILTER_REMAINING_THRESHOLD_MIN = 0;
|
|
const ULONG CI_FILTER_REMAINING_THRESHOLD_MAX = 320;
|
|
|
|
//
|
|
// If a filter has not been used in the below time, the daemon will ask if
|
|
// it can unload its DLL.
|
|
// Units: milliseconds
|
|
//
|
|
const ULONG CI_FILTER_IDLE_TIMEOUT_DEFAULT = 15 * 60 * 1000;
|
|
const ULONG CI_FILTER_IDLE_TIMEOUT_MIN = 0;
|
|
const ULONG CI_FILTER_IDLE_TIMEOUT_MAX = ~0;
|
|
|
|
//
|
|
// Min disk space available before a master merge is forced, thus freeing
|
|
// up disk space.
|
|
// Units: percentage of disk size
|
|
//
|
|
|
|
const ULONG CI_MIN_DISKFREE_FORCE_MERGE_DEFAULT = 15;
|
|
const ULONG CI_MIN_DISKFREE_FORCE_MERGE_MIN = 5;
|
|
const ULONG CI_MIN_DISKFREE_FORCE_MERGE_MAX = 25;
|
|
|
|
//
|
|
// Max disk free space consumed by shadow indexes before a master merge
|
|
// is forced, thus freeing up a significant portion of shadow index
|
|
// disk space.
|
|
// Units: percentage of disk free space
|
|
//
|
|
|
|
const ULONG CI_MAX_SHADOW_FREE_FORCE_MERGE_DEFAULT = 20;
|
|
const ULONG CI_MAX_SHADOW_FREE_FORCE_MERGE_MIN = 5;
|
|
const ULONG CI_MAX_SHADOW_FREE_FORCE_MERGE_MAX = ~0;
|
|
|
|
//
|
|
// Max combined size of shadow indexes before a master merge is forced.
|
|
// Units: percentage of disk space
|
|
//
|
|
|
|
const ULONG CI_MAX_SHADOW_INDEX_SIZE_DEFAULT = 15;
|
|
const ULONG CI_MAX_SHADOW_INDEX_SIZE_MIN = 5;
|
|
const ULONG CI_MAX_SHADOW_INDEX_SIZE_MAX = 25;
|
|
|
|
//
|
|
// Time to wait for a response from the CI daemon on a query status
|
|
// call.
|
|
// Units: minutes
|
|
//
|
|
const ULONG CI_DAEMON_RESPONSE_TIMEOUT_DEFAULT = 5;
|
|
const ULONG CI_DAEMON_RESPONSE_TIMEOUT_MIN = 1;
|
|
const ULONG CI_DAEMON_RESPONSE_TIMEOUT_MAX = 120;
|
|
|
|
//
|
|
// Maximum number of documents pending filtering before considering
|
|
// CI out-of-date for property queries.
|
|
// Units: documents
|
|
//
|
|
|
|
const ULONG CI_MAX_PENDING_DOCUMENTS_DEFAULT = 32;
|
|
const ULONG CI_MAX_PENDING_DOCUMENTS_MIN = 1;
|
|
const ULONG CI_MAX_PENDING_DOCUMENTS_MAX = 50000;
|
|
|
|
//
|
|
// Whether or not characterizations are generated and stored by default
|
|
// in the ci, and the max size in wide characters if they are generated.
|
|
//
|
|
|
|
const ULONG CI_MAX_CHARACTERIZATION_DEFAULT = 160;
|
|
const ULONG CI_MAX_CHARACTERIZATION_MIN = 0;
|
|
const ULONG CI_MAX_CHARACTERIZATION_MAX = 500;
|
|
|
|
//
|
|
// Determines whether characterizations should be generated at all. (Default: TRUE)
|
|
//
|
|
|
|
const ULONG CI_GENERATE_CHARACTERIZATION_DEFAULT = 1;
|
|
const ULONG CI_GENERATE_CHARACTERIZATION_MIN = 0;
|
|
const ULONG CI_GENERATE_CHARACTERIZATION_MAX = 1;
|
|
|
|
//
|
|
// Size of the property store mapped large pages cache (in physical storage)
|
|
// Units: pages
|
|
//
|
|
|
|
const ULONG CI_PROPERTY_STORE_MAPPED_CACHE_DEFAULT = 4;
|
|
const ULONG CI_PROPERTY_STORE_MAPPED_CACHE_MIN = 0;
|
|
const ULONG CI_PROPERTY_STORE_MAPPED_CACHE_MAX = ~0;
|
|
|
|
//
|
|
// The mode for backing off on scans
|
|
// 0 -- no backing off -- the original behavior
|
|
// 1 -- moderate backoff
|
|
// 10 -- aggressive backoff
|
|
// 11-20 -- reserved for special cases like battery power
|
|
|
|
const ULONG CI_SCAN_BACKOFF_DEFAULT = 3;
|
|
const ULONG CI_SCAN_BACKOFF_MIN = 0;
|
|
const ULONG CI_SCAN_BACKOFF_MAX_RANGE = 10;
|
|
const ULONG CI_SCAN_BACKOFF_MAX = 20;
|
|
|
|
//
|
|
// Number of OS pages to be backed up in the backup page
|
|
// Min filesize is 128 KB and max is 2 GB
|
|
//
|
|
|
|
#if defined (_X86_)
|
|
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_DEFAULT = 1024;
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_MIN = 32;
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_MAX = 500000;
|
|
|
|
;///////////////////// RISC ////////////////
|
|
#else
|
|
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_DEFAULT = 512;
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_MIN = 16;
|
|
const ULONG CI_PROPERTY_STORE_BACKUP_SIZE_MAX = 250000;
|
|
|
|
#endif
|
|
|
|
|
|
//
|
|
// Maximum number of expanded restriction nodes in a single query
|
|
//
|
|
|
|
const ULONG CI_MAX_RESTRICTION_NODES_DEFAULT = 5000;
|
|
const ULONG CI_MAX_RESTRICTION_NODES_MIN = 1;
|
|
const ULONG CI_MAX_RESTRICTION_NODES_MAX = ~0;
|
|
|
|
//
|
|
// Whether CI should auto-alias (add fixups for net shares). (default TRUE)
|
|
//
|
|
|
|
const BOOL CI_IS_AUTO_ALIAS_DEFAULT = 1;
|
|
|
|
//
|
|
// Maximum refresh frequency for alias checks
|
|
// Units: Minutes
|
|
//
|
|
|
|
const ULONG CI_MAX_AUTO_ALIAS_REFRESH_DEFAULT = 15;
|
|
const ULONG CI_MAX_AUTO_ALIAS_REFRESH_MIN = 0;
|
|
const ULONG CI_MAX_AUTO_ALIAS_REFRESH_MAX = 10080; // 1 week
|
|
|
|
//
|
|
// Force path fixups in query results, default is FALSE
|
|
//
|
|
|
|
const ULONG CI_FORCE_PATH_ALIAS_DEFAULT = 0;
|
|
|
|
//
|
|
// Whether CI should index w3 vroots (default TRUE)
|
|
//
|
|
|
|
const BOOL CI_IS_INDEXING_W3_ROOTS_DEFAULT = 1;
|
|
|
|
//
|
|
// Whether CI should index nntp vroots (default FALSE)
|
|
//
|
|
|
|
const ULONG CI_IS_INDEXING_NNTP_ROOTS_DEFAULT = 0;
|
|
|
|
//
|
|
// Whether CI should index imap vroots (default FALSE)
|
|
//
|
|
|
|
const ULONG CI_IS_INDEXING_IMAP_ROOTS_DEFAULT = 0;
|
|
|
|
//
|
|
// Wether to auto-mount catalogs on the roots of removable drives (TRUE)
|
|
//
|
|
|
|
const ULONG CI_AUTO_MOUNT_CATALOGS_DEFAULT = 1;
|
|
|
|
//
|
|
// Whether directories should be filtered and returned in queries by default
|
|
//
|
|
const ULONG CI_FILTER_DIRECTORIES_DEFAULT = 1;
|
|
|
|
//
|
|
// Whether files with unknown extensions should be filtered by default
|
|
//
|
|
const ULONG CI_FILTER_FILES_WITH_UNKNOWN_EXTENSIONS_DEFAULT = 1;
|
|
|
|
//
|
|
// Flags that control type of events that are logged.
|
|
//
|
|
const ULONG CI_EVTLOG_FLAGS_UNKNOWN_CLASS = 0x00000001;
|
|
const ULONG CI_EVTLOG_FLAGS_FAILED_EMBEDDING = 0x00000002;
|
|
|
|
const ULONG CI_EVTLOG_FLAGS_DEFAULT = 0x00000002;
|
|
|
|
//
|
|
// Usn log parameters
|
|
//
|
|
const CI_MAX_USN_LOG_SIZE_DEFAULT = 0x800000; // Max size of usn log in bytes
|
|
const CI_USN_LOG_ALLOCATION_DELTA_DEFAULT = 0x100000; // Allocation/deallocation size in bytes
|
|
|
|
//
|
|
// Usn Log timeout. Wait until buffer is full or this many seconds since call.
|
|
//
|
|
|
|
const ULONG CI_USN_READ_TIMEOUT_DEFAULT = 1 * 60; // 1 minute
|
|
const ULONG CI_USN_READ_TIMEOUT_MIN = 0;
|
|
const ULONG CI_USN_READ_TIMEOUT_MAX = 12 * 60 * 60; // 12 hours
|
|
|
|
//
|
|
// Usn Log minimum read size. Wait until at least this many bytes in the log
|
|
// before returning.
|
|
//
|
|
|
|
const ULONG CI_USN_READ_MIN_SIZE_DEFAULT = 4 * 1024;
|
|
const ULONG CI_USN_READ_MIN_SIZE_MIN = 1;
|
|
const ULONG CI_USN_READ_MIN_SIZE_MAX = 512 * 1024;
|
|
|
|
//
|
|
// Determines whether USN read should be delayed when machine is busy. Default: TRUE
|
|
//
|
|
|
|
const BOOL CI_DELAY_USN_READ_ON_LOW_RESOURCE_DEFAULT = TRUE;
|
|
|
|
//
|
|
// Files with last access times older than this don't have their last access times modified
|
|
// by the filter daemon. This is parameterized becuase there is a cost, both in terms
|
|
// of extra downlevel notifications and extra USN records when last access time is reset
|
|
// by the daemon.
|
|
// Units: Days
|
|
//
|
|
|
|
const ULONG CI_STOMP_LAST_ACCESS_DELAY_DEFAULT = 7;
|
|
const ULONG CI_STOMP_LAST_ACCESS_DELAY_MIN = 0;
|
|
const ULONG CI_STOMP_LAST_ACCESS_DELAY_MAX = 1000000000; // Don't overflow 64-bit FILETIME
|
|
|
|
//
|
|
// Minimim amount of battery life required to keep filtering running.
|
|
// Units: Percent of battery life remaining. 0 --> Always run.
|
|
//
|
|
|
|
const ULONG CI_MIN_WORDLIST_BATTERY_DEFAULT = 100; // Never filter on batteries
|
|
const ULONG CI_MIN_WORDLIST_BATTERY_MIN = 0;
|
|
const ULONG CI_MIN_WORDLIST_BATTERY_MAX = 100;
|
|
|
|
//
|
|
// User idle time required to keep filtering running.
|
|
// Units: seconds 0 --> Always run.
|
|
//
|
|
|
|
const ULONG CI_WORDLIST_USER_IDLE_DEFAULT = 120;
|
|
const ULONG CI_WORDLIST_USER_IDLE_MIN = 0;
|
|
const ULONG CI_WORDLIST_USER_IDLE_MAX = 1200;
|
|
|
|
//
|
|
// Maximum amount of pagefile space consumed by out-of-process filter daemon.
|
|
// Allocations beyond this limit will fail.
|
|
// Units: KB
|
|
//
|
|
|
|
const ULONG CI_MAX_DAEMON_VM_USE_DEFAULT = 40 * 1024; // Big, but shouldn't kill the machine
|
|
const ULONG CI_MAX_DAEMON_VM_USE_MIN = 10 * 1024; // 10 Mb
|
|
const ULONG CI_MAX_DAEMON_VM_USE_MAX = 0x3FFFFF; // Avoid overflow when converted to bytes
|
|
|
|
//
|
|
// Flags for miscellaneous use - internal only.
|
|
//
|
|
const ULONG CI_MISC_FLAGS_DONT_FILTER = 0x00000001;
|
|
const ULONG CI_MISC_FLAGS_NO_QUERIES = 0x00000002;
|
|
|
|
const ULONG CI_MISC_FLAGS_DEFAULT = 0x00000000;
|
|
|
|
//
|
|
// Maximum portion of a file with a well-known extenstion the text filter
|
|
// will index. Default is 25 meg.
|
|
//
|
|
|
|
const ULONG CI_MAX_TEXT_FILTER_BYTES_DEFAULT = 1024 * 1024 * 25;
|
|
const ULONG CI_MAX_TEXT_FILTER_BYTES_MIN = 1;
|
|
const ULONG CI_MAX_TEXT_FILTER_BYTES_MAX = ~0;
|
|
|
|
//
|
|
// Flags for Content Index Use
|
|
//
|
|
|
|
//
|
|
// Set this flag to turn off notifications on all remote roots.
|
|
//
|
|
const ULONG CI_FLAGS_NO_REMOTE_NOTIFY = 0x00000001;
|
|
|
|
//
|
|
// Set this flag to turn off notifications on all local roots.
|
|
//
|
|
const ULONG CI_FLAGS_NO_LOCAL_NOTIFY = 0x00000002;
|
|
|
|
const ULONG CI_FLAGS_DEFAULT = 0x00000000;
|
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
//+ Internal parameters (not even in registry) +
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//
|
|
// Priority of the filter daemon and merge thread. Only class of
|
|
// filter daemon is controlled via registry.
|
|
//
|
|
|
|
const int CI_THREAD_PRIORITY_FILTER_DEFAULT = THREAD_PRIORITY_ABOVE_NORMAL;
|
|
const int CI_THREAD_PRIORITY_MERGE_DEFAULT = THREAD_BASE_PRIORITY_MIN;
|
|
|
|
//
|
|
// Maximum number of documents to be filtered at once and put
|
|
// into a single wordlist. Cannot be > 16 given current
|
|
// wordlist compression scheme.
|
|
//
|
|
|
|
const ULONG CI_MAX_DOCS_IN_WORDLIST = 16;
|
|
|
|
//
|
|
// Content index version. Increment both current_index_version and
|
|
// fsci_version when a change is made that will affect all framework
|
|
// client, but increment fsci_version only when changes are made to
|
|
// data structures such as property store that are used only by the
|
|
// File System client. Site Server Search also uses these, but they
|
|
// are not always using the same versions as the fsci is.
|
|
//
|
|
// For example, FSCI moved to a two-level store in Dec '97 but Site
|
|
// Server Search will remain with the older single level store for the
|
|
// 3.0 release.
|
|
//
|
|
|
|
//
|
|
// INDEX_VERSION HISTORY:
|
|
//
|
|
// Version Date Change
|
|
// ------- -------- ----------------------------------------------------------
|
|
// 1 Original
|
|
// 10 06/11/97 USN Support
|
|
// 11 07/01/97 Parent WorkId
|
|
// 30 07/18/97 Property Store Backup
|
|
// 31 08/06/97 64-bit file ids
|
|
// 32 09/21/97 File id hash function change
|
|
// 33 09/29/97 Scope checking fix
|
|
// 34 12/16/97 Size/Performance changes
|
|
// 35 01/26/98 Added signatures at beginning/end of index pages.
|
|
// 36 02/26/98 Changed directory format to fit count in 1 byte
|
|
// 37 04/14/98 Added SecondaryQ Retry Count for documents
|
|
// 38 05/27/98 Added checksums to all recoverable stream records
|
|
// 39 06/23/98 Changed the way variable records are written
|
|
// 3A 08/11/98 Changed .dir files to support ro catalogs during MM
|
|
// 3B 01/04/99 dlee Changed cicat.hsh and cicat.fid hash chaining
|
|
|
|
//
|
|
// FSCI_VERSION HISTORY:
|
|
//
|
|
// Version Date Change
|
|
// ------- -------- ----------------------------------------------------------
|
|
// 34 12/02/97 2 level property store
|
|
// 35 12/16/97 Size/Performance changes
|
|
// 36 12/30/97 Lean primary store
|
|
// 37 01/08/98 Move file index to primary store
|
|
// 38 02/02/98 Move attrib to primary store
|
|
// 39 04/10/98 Track volume id for NTFS v5 volumes
|
|
// 3A 05/27/98 Added checksums to all recoverable stream records
|
|
// 3B 06/01/98 Changed the way variable records are written
|
|
// 3C 08/11/98 Changed .dir files to support ro catalogs during MM
|
|
// 3D 01/04/99 dlee Changed cicat.hsh and cicat.fid hash chaining
|
|
//
|
|
|
|
const ULONG CURRENT_INDEX_VERSION = 0x3B; // PLEASE CHANGE HISTORY ABOVE
|
|
const ULONG CURRENT_FSCI_VERSION = 0x3D; // PLEASE CHANGE HISTORY ABOVE
|
|
|
|
const ULONG CURRENT_VERSION_STAMP = (CURRENT_INDEX_VERSION << 16);
|
|
const ULONG FSCI_VERSION_STAMP = (CURRENT_FSCI_VERSION << 16);
|
|
|
|
//
|
|
// 64K common page size for memory mapped streams
|
|
//
|
|
|
|
const ULONG COMMON_PAGE_SIZE = 0x10000L;
|
|
|
|
// This is 4 Kb == 2^12
|
|
const ULONG CI_PAGE_SIZE = 0x1000;
|
|
const ULONG CI_PAGE_SHIFT = 12;
|
|
|
|
//
|
|
// Size of page in DWORDs. Missing two DWORDs for signatures.
|
|
//
|
|
|
|
const ULONG SMARTBUF_PAGE_SIZE_IN_DWORDS = CI_PAGE_SIZE / sizeof(DWORD) - 2;
|
|
const ULONG SMARTBUF_PAGE_SIZE_IN_BITS = SMARTBUF_PAGE_SIZE_IN_DWORDS * 8 * sizeof(DWORD);
|
|
|
|
// This is 64 b == 2^6
|
|
//const ULONG CI_PAGE_SIZE = 64; // For testing
|
|
//const ULONG CI_PAGE_SHIFT = 6; // For testing
|
|
|
|
const ULONG PAGES_PER_COMMON_PAGE = (COMMON_PAGE_SIZE/CI_PAGE_SIZE);
|
|
|
|
//
|
|
// Maximum file size for which the contents will be filtered. Files
|
|
// larger than this will have only their properities included in the CI.
|
|
// Units: KBytes
|
|
//
|
|
|
|
const ULONG CI_MAX_FILESIZE_FILTERED_DEFAULT = 256;
|
|
|
|
//
|
|
// Use Cairo/Daytona for binding
|
|
//
|
|
|
|
const BOOL CI_USE_OLE_DEFAULT = TRUE;
|
|
|
|
|
|
//
|
|
// Default IP address for the default virtual server.
|
|
//
|
|
const CI_DEFAULT_IP_ADDRESS = ~0;
|
|
|
|
//
|
|
// Default is a catalog is active
|
|
//
|
|
|
|
const ULONG CI_CATALOG_INACTIVE_DEFAULT = 0;
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CCiRegVars
|
|
//
|
|
// Purpose: Registry variables used by CI
|
|
//
|
|
// Notes: Does not include registry params used by IDQ, Webhits or
|
|
// other client-side only functionality.
|
|
//
|
|
// History 10-11-96 dlee Created from user+kernel params
|
|
// 02-04-98 kitmanh Added _fIsReadOnly
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CCiRegVars
|
|
{
|
|
|
|
public:
|
|
|
|
void SetDefault();
|
|
|
|
ULONG _maxMergeInterval; // Sleep time between merges
|
|
int _threadPriorityMerge; // Priority of merge thread
|
|
ULONG _maxUpdates; // Max # of updates passed by catalog
|
|
ULONG _maxWordlists; // Max # of word lists that can exist
|
|
ULONG _minSizeMergeWordlist; // Min combined size of wordlists
|
|
ULONG _maxWordlistSize; // Max size at which docs can be added
|
|
ULONG _minWordlistMemory; // Min free mem for wordlist creation
|
|
ULONG _maxWordlistIo; // User I/O has to be below this for wordlist creation
|
|
ULONG _maxWordlistIoDiskPerf; // User I/O has to be below this for wordlist creation
|
|
ULONG _minWordlistBattery; // Min remaining batter for wordlist creation
|
|
ULONG _WordlistUserIdle; // User idle time for wordlist creation
|
|
ULONG _ResourceCheckInterval; // Low memory / high I/O are checked at most this often.
|
|
ULONG _maxFreshDeletes; // Max # of uncommitted deletes in fresh list
|
|
ULONG _lowResourceSleep; // Time to wait after low resource condition
|
|
ULONG _maxWordlistMemoryLoad; // Max mem load for wordlist creation
|
|
ULONG _maxFreshCount; // Max fresh list entries before mmerge
|
|
ULONG _maxQueueChunks; // # of chunks in in-memory change list
|
|
ULONG _masterMergeCheckpointInterval; // # of bytes to process before Checkpointing
|
|
ULONG _filterRetries; // # of attempts to filter a document
|
|
ULONG _secQFilterRetries; // # of attempts to filter a document in Sec. Q
|
|
ULONG _filterRetryInterval; // # of minutes between retrying an open doc
|
|
ULONG _maxShadowIndexSize; // Max combined size of shadow indexes
|
|
ULONG _minDiskFreeForceMerge; // Min disk free before a mmerge is forced
|
|
ULONG _maxShadowFreeForceMerge; // Max space for shadow indexes (% free space)
|
|
ULONG _maxIndexes; // Maximum number of indexes (persistent or wordlist)
|
|
ULONG _maxIdealIndexes; // Maximum number of indexes in an 'ideal' system.
|
|
ULONG _minMergeIdleTime; // Minumum idle time to perform annealing merge.
|
|
ULONG _maxPendingDocuments; // Max pending docs for property queries
|
|
ULONG _minIdleQueryThreads; // Min number of idle query threads to maintain
|
|
ULONG _maxActiveQueryThreads; // Maximum number of query threads to allow
|
|
ULONG _maxQueryTimeslice; // Query timeslice (if waiting queries)
|
|
ULONG _maxQueryExecutionTime; // Maximum query execution time (if waiting queries)
|
|
ULONG _evtLogFlags; // Flags for event log
|
|
ULONG _miscCiFlags; // Miscellaneous CI Flags
|
|
ULONG _ciCatalogFlags; // CI external flags
|
|
ULONG _maxRestrictionNodes; // Maximum normalized restriction nodes
|
|
ULONG _minIdleRequestThreads; // Min number of idle request threads to maintain
|
|
ULONG _minClientIdleTime; // Minimum client idle time after which it can be disconnected.
|
|
ULONG _maxActiveRequestThreads; // Maximum number of request threads to allow
|
|
ULONG _maxSimultaneousRequests; // Maximum number of simultaneous client/server connections
|
|
ULONG _maxCachedPipes; // Maximum number of cached pipe instances
|
|
ULONG _requestTimeout; // Milliseconds after which clients timeout
|
|
BOOL _fIsAutoAlias; // TRUE if fixups should be automatically added for net shares
|
|
ULONG _maxAutoAliasRefresh; // Time between net share polls
|
|
ULONG _W3SvcInstance; // W3SVC Instance ID
|
|
ULONG _NNTPSvcInstance; // NNTP Instance ID
|
|
ULONG _IMAPSvcInstance; // IMAP Instance ID
|
|
BOOL _fIsIndexingW3Roots; // TRUE if should index w3 vroots
|
|
BOOL _fIsIndexingNNTPRoots; // TRUE if should index nntp vroots
|
|
BOOL _fIsIndexingIMAPRoots; // TRUE if should index imap vroots
|
|
BOOL _fMinimizeWorkingSet; // if TRUE, minimize WS when idle
|
|
BOOL _fIsReadOnly; // Catalogs are in read-only mode
|
|
BOOL _fIsEnumAllowed; // Flag to perform enumeration
|
|
BOOL _fForcePathAlias; // If TRUE, query result paths are fixed up
|
|
ULONG _minDiskSpaceToLeave; // Number of megabytes to leave on disk
|
|
|
|
BOOL _useOle; // Use OLE for filtering
|
|
ULONG _filterBufferSize; // Buffer size for filtering
|
|
BOOL _filterContents; // Should the daemon filter contents?
|
|
ULONG _filterDelayInterval; // Number of seconds the filter should delay
|
|
// in case there are few documents.
|
|
ULONG _filterRemainingThreshold;
|
|
// The number of unfiltered documents below
|
|
// which a delay will be introduced.
|
|
ULONG _maxFilesizeFiltered; // Maximum filesize filtered
|
|
ULONG _masterMergeTime; // Time for queue master merge
|
|
ULONG _maxFilesizeMultiplier; // Largest amount of data from single file
|
|
int _threadPriorityFilter; // Priority of update/filter thread
|
|
int _threadClassFilter; // Priority class of update/filter thread
|
|
ULONG _daemonResponseTimeout; // Timeout waiting for response
|
|
ULONG _maxCharacterization; // Max size in cwc of a characterization
|
|
BOOL _fFilterDirectories; // Should queries return directories?
|
|
BOOL _fFilterFilesWithUnknownExtensions; // Should files with unknown(to IFilter) extensions be filtered ?
|
|
BOOL _fCatalogInactive; // TRUE if the catalog shouldn't be auto-loaded
|
|
ULONG _maxPropertyStoreMappedCache; // # of mapped large pages cached in primary
|
|
ULONG _maxPropertyStoreBackupSize; // # of backed up OS pages in primary
|
|
ULONG _maxSecPropertyStoreMappedCache; // # of mapped large pages cached in secondary
|
|
ULONG _maxSecPropertyStoreBackupSize; // # of backed up OS pages in secondary
|
|
ULONG _forcedNetPathScanInterval; // Number of minutes for forced net path scans
|
|
ULONG _maxUsnLogSize; // Max size of usn log in bytes
|
|
ULONG _usnLogAllocationDelta; // Allocation/deallocation size in bytes
|
|
ULONG _ulScanBackoff; // Mode for backing off on scans
|
|
ULONG _ulStartupDelay; // Delay in MS after boot
|
|
ULONG _ulUsnReadTimeout; // Max wait in MS for Usn log data
|
|
ULONG _ulUsnReadMinSize; // Wait until timeout or this many bytes
|
|
ULONG _fDelayUsnReadOnLowResource; // TRUE --> Don't read USN Journal during high i/o, low memory
|
|
ULONG _maxDaemonVmUse; // Max amount of pagefile used by OOP daemon
|
|
ULONG _ulStompLastAccessDelay; // Files accessed more recently than this delta are not reset
|
|
};
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CCiRegParams
|
|
//
|
|
// Purpose: Registry variables used by CI
|
|
//
|
|
// History 10-11-96 dlee Created from user+kernel params
|
|
// 02-04-98 kitmanh Added IsReadOnly()
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CRegAccess;
|
|
|
|
class CCiRegParams : public CCiRegVars
|
|
{
|
|
public :
|
|
|
|
CCiRegParams( const WCHAR * pwcName = 0 );
|
|
|
|
void Refresh( ICiAdminParams * pICiAdminParams = 0,
|
|
BOOL fUseDefaultsOnFailure = FALSE );
|
|
|
|
const BOOL UseOle() { return _useOle; }
|
|
const BOOL FilterContents() { return _filterContents; }
|
|
const ULONG GetMasterMergeTime() { return _masterMergeTime; }
|
|
const ULONG GetMaxFilesizeMultiplier() { return _maxFilesizeMultiplier; }
|
|
|
|
const int GetThreadPriorityFilter() { return _threadPriorityFilter; }
|
|
const int GetThreadClassFilter() { return _threadClassFilter; }
|
|
const ULONG GetDaemonResponseTimeout() { return _daemonResponseTimeout; }
|
|
|
|
const BOOL GetGenerateCharacterization() { return (0 != _maxCharacterization); }
|
|
const ULONG GetMaxCharacterization() { return _maxCharacterization; }
|
|
const BOOL IsAutoAlias() { return _fIsAutoAlias; }
|
|
const ULONG MaxAutoAliasRefresh() { return _maxAutoAliasRefresh; }
|
|
|
|
const BOOL IsIndexingW3Roots() { return _fIsIndexingW3Roots; }
|
|
const BOOL IsIndexingIMAPRoots() { return _fIsIndexingIMAPRoots; }
|
|
const BOOL IsIndexingNNTPRoots() { return _fIsIndexingNNTPRoots; }
|
|
const BOOL IsReadOnly() { return _fIsReadOnly; }
|
|
|
|
const BOOL IsEnumAllowed() { return _fIsEnumAllowed; }
|
|
const BOOL FilterDirectories() { return _fFilterDirectories; }
|
|
const BOOL FilterFilesWithUnknownExtensions() { return _fFilterFilesWithUnknownExtensions; }
|
|
const ULONG GetPrimaryStoreMappedCache() { return _maxPropertyStoreMappedCache; }
|
|
|
|
const ULONG GetSecondaryStoreMappedCache() { return _maxSecPropertyStoreMappedCache; }
|
|
const ULONG GetMaxFilesizeFiltered() { return _maxFilesizeFiltered; }
|
|
const ULONG GetPrimaryStoreBackupSize() { return _maxPropertyStoreBackupSize; }
|
|
const ULONG GetSecondaryStoreBackupSize() { return _maxSecPropertyStoreBackupSize; }
|
|
|
|
void SetPrimaryStoreMappedCache(ULONG ulVal) { _maxPropertyStoreMappedCache = ulVal; }
|
|
void SetPrimaryStoreBackupSize(ULONG ulVal) { _maxPropertyStoreBackupSize = ulVal; }
|
|
void SetSecondaryStoreMappedCache(ULONG ulVal) { _maxPropertyStoreMappedCache = ulVal; }
|
|
void SetSecondaryStoreBackupSize(ULONG ulVal) { _maxSecPropertyStoreBackupSize = ulVal; }
|
|
|
|
const BOOL GetCatalogInactive() { return _fCatalogInactive; }
|
|
const BOOL GetForcePathAlias() const { return _fForcePathAlias; }
|
|
const ULONG GetForcedNetPathScanInterval() { return _forcedNetPathScanInterval; }
|
|
const ULONG GetFilterDelayInterval() { return _filterDelayInterval; }
|
|
const ULONG GetFilterRemainingThreshold() { return _filterRemainingThreshold; }
|
|
|
|
const ULONG GetMaxMergeInterval() { return _maxMergeInterval; }
|
|
const int GetThreadPriorityMerge() { return _threadPriorityMerge; }
|
|
const ULONG GetMaxUpdates() { return _maxUpdates; }
|
|
const ULONG GetMaxWordlists() { return _maxWordlists; }
|
|
|
|
const ULONG GetMinSizeMergeWordlist() { return _minSizeMergeWordlist; }
|
|
const ULONG GetMaxWordlistSize() { return _maxWordlistSize; }
|
|
const ULONG GetMinWordlistMemory() { return _minWordlistMemory; }
|
|
const ULONG GetMaxWordlistIo() { return _maxWordlistIo; }
|
|
|
|
const ULONG GetMaxWordlistIoDiskPerf() { return _maxWordlistIoDiskPerf; }
|
|
const ULONG GetMinWordlistBattery() { return _minWordlistBattery; }
|
|
const ULONG GetWordlistUserIdle() { return _WordlistUserIdle; }
|
|
const ULONG GetResourceCheckInterval() { return _ResourceCheckInterval; }
|
|
|
|
const ULONG GetMaxFreshDeletes() { return _maxFreshDeletes; }
|
|
const ULONG GetLowResourceSleep() { return _lowResourceSleep; }
|
|
const ULONG GetMaxWordlistMemoryLoad() { return _maxWordlistMemoryLoad; }
|
|
const ULONG GetMaxFreshCount() { return _maxFreshCount; }
|
|
|
|
const ULONG GetMaxQueueChunks() { return _maxQueueChunks; }
|
|
const ULONG GetMasterMergeCheckpointInterval() { return _masterMergeCheckpointInterval; }
|
|
const ULONG GetFilterBufferSize() { return _filterBufferSize; }
|
|
const ULONG GetFilterRetries() { return _filterRetries; }
|
|
|
|
const ULONG GetSecQFilterRetries() { return _secQFilterRetries; }
|
|
const ULONG GetFilterRetryInterval() { return _filterRetryInterval; }
|
|
const ULONG GetMaxShadowIndexSize() { return _maxShadowIndexSize; }
|
|
const ULONG GetMinDiskFreeForceMerge() { return _minDiskFreeForceMerge; }
|
|
|
|
const ULONG GetMaxShadowFreeForceMerge() { return _maxShadowFreeForceMerge; }
|
|
const ULONG GetMaxIndexes() { return _maxIndexes; }
|
|
const ULONG GetMaxIdealIndexes() { return _maxIdealIndexes; }
|
|
const ULONG GetMinMergeIdleTime() { return _minMergeIdleTime; }
|
|
|
|
const ULONG GetMaxPendingDocuments() { return _maxPendingDocuments; }
|
|
const ULONG GetMinIdleQueryThreads() { return _minIdleQueryThreads; }
|
|
const ULONG GetMaxActiveQueryThreads() { return _maxActiveQueryThreads; }
|
|
const ULONG GetMaxQueryTimeslice() { return _maxQueryTimeslice; }
|
|
|
|
const ULONG GetMaxQueryExecutionTime() { return _maxQueryExecutionTime; }
|
|
const ULONG GetMinIdleRequestThreads() { return _minIdleRequestThreads; }
|
|
const ULONG GetMinClientIdleTime() { return _minClientIdleTime; }
|
|
const ULONG GetMaxActiveRequestThreads() { return _maxActiveRequestThreads; }
|
|
|
|
const ULONG GetMaxSimultaneousRequests() { return _maxSimultaneousRequests; }
|
|
const ULONG GetMaxCachedPipes() { return _maxCachedPipes; }
|
|
const ULONG GetRequestTimeout() { return _requestTimeout; }
|
|
const ULONG GetW3SvcInstance() { return _W3SvcInstance; }
|
|
|
|
const ULONG GetNNTPSvcInstance() { return _NNTPSvcInstance; }
|
|
const ULONG GetIMAPSvcInstance() { return _IMAPSvcInstance; }
|
|
const BOOL GetMinimizeWorkingSet() { return _fMinimizeWorkingSet; }
|
|
const ULONG GetEventLogFlags() { return _evtLogFlags; }
|
|
|
|
const ULONG GetMiscCiFlags() { return _miscCiFlags; }
|
|
const ULONG GetCiCatalogFlags() { return _ciCatalogFlags; }
|
|
const ULONG GetMaxRestrictionNodes() { return _maxRestrictionNodes; }
|
|
const ULONG GetMaxUsnLogSize() { return _maxUsnLogSize; }
|
|
|
|
const ULONG GetUsnLogAllocationDelta() { return _usnLogAllocationDelta; }
|
|
const ULONG GetScanBackoff() { return _ulScanBackoff; }
|
|
const ULONG GetStartupDelay() { return _ulStartupDelay; }
|
|
const ULONG GetUsnReadTimeout() { return _ulUsnReadTimeout; }
|
|
|
|
const ULONG GetUsnReadMinSize() { return _ulUsnReadMinSize; }
|
|
const BOOL DelayUsnReadOnLowResource() { return _fDelayUsnReadOnLowResource; }
|
|
const ULONG GetMaxDaemonVmUse() { return _maxDaemonVmUse; }
|
|
const ULONG GetStompLastAccessDelay() { return _ulStompLastAccessDelay; }
|
|
const ULONG GetMinDiskSpaceToLeave() {return _minDiskSpaceToLeave; }
|
|
|
|
private:
|
|
|
|
void _ReadValues( CRegAccess & reg, CCiRegVars & vars );
|
|
void _ReadAndOverrideValues( CRegAccess & reg );
|
|
void _StoreCIValues ( CCiRegVars & vars, ICiAdminParams * pICiAdminParams );
|
|
void _StoreNewValues( CCiRegVars & vars );
|
|
void _OverrideForCatalog();
|
|
|
|
static void _CheckNamedValues();
|
|
|
|
CMutexSem _mutex; // Used to serialize access
|
|
XArray<WCHAR> _xOverrideName;
|
|
static const CI_ADMIN_PARAMS _aParamNames[CI_AP_MAX_VAL];
|
|
};
|
|
|
|
void BuildRegistryScopesKey( XArray<WCHAR> & xKey, WCHAR const *pwcName );
|
|
void BuildRegistryPropertiesKey( XArray<WCHAR> & xKey, WCHAR const *pwcName );
|
|
|
|
ULONG GetMaxCatalogs();
|
|
|