Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1435 lines
49 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 2002.
//
// File: ciintf.idl
//
// Contents: Content Index Framework interfaces definition
//
// History: Nov-11-1996 SrikantS Created
//
//--------------------------------------------------------------------------
#ifdef IMPORT_IDL_DEPENDENTS
import "oaidl.idl";
import "filter.idl";
#endif
#include "idlmulti.h"
const ULONG CI_DEFAULT_PID = 0x0;
const ULONG CI_INVALID_PID = 0xffffffff;
const ULONG CI_VOLID_USN_NOT_ENABLED = 0x0;
typedef enum tagCI_GLOBAL_CONSTANTS
{
CI_LOW_RESOURCE = 1,
CI_RESET_UPDATES = 2
} CI_GLOBAL_CONSTANTS;
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocName
//
// Description : Interface that encapsulates a document name.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(76615076-3C2B-11D0-8C90-0020AF1D740E)
interface ICiCDocName : IUnknown
{
SCODE Init( [in, size_is(cbName)] BYTE const * pbName,
[in] ULONG cbName );
SCODE Set( [in] ICiCDocName const * pICiCDocName );
SCODE Clear( void );
SCODE IsValid( void ) const;
SCODE Duplicate( [out] ICiCDocName ** ppICiCDocName ) const;
SCODE Get( [out, size_is(*pcbName)] BYTE * pbName,
[in,out] ULONG *pcbName ) const;
SCODE GetNameBuffer( [out] BYTE const ** ppName,
[out] ULONG * pcbName );
SCODE GetBufSizeNeeded( [out] ULONG * pcbName ) const;
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCOpenedDoc
//
// Description : Represents an opened document which can be used to retrieve
// property sets and properties.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(151EDFBE-3C2F-11D0-8C90-0020AF1D740E)
interface ICiCOpenedDoc : IUnknown
{
SCODE Open( [in,size_is(cbDocName)] BYTE const * pbDocName,
[in] ULONG cbDocName );
SCODE Close( void );
SCODE GetDocumentName( [out] ICiCDocName ** ppICiDocName );
SCODE GetStatPropertyEnum( [out] IPropertyStorage ** ppIPropStorage );
SCODE GetPropertySetEnum( [out] IPropertySetStorage ** ppIPropSetStorage );
SCODE GetPropertyEnum( [in] REFFMTID GuidPropSet,
[out] IPropertyStorage ** ppIPropStorage );
SCODE GetIFilter( [out] IFilter ** ppIFilter );
SCODE GetSecurity( [out, size_is(*pcbData)] BYTE * pbData,
[in,out] ULONG * pcbData );
SCODE IsInUseByAnotherProcess( [out] BOOL *pfInUse );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiAdminParams
//
// Description : sets/gets CI configuration parameters.
//
// History : 19 Oct 1998 sundarA : added CI_AP_IS_ENUM_ALLOWED
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(a82d48c6-3f0f-11d0-8c91-0020af1d740e)
interface ICiAdminParams : IUnknown
{
//
// Enumerated values for the various admin parameters that can be set.
//
typedef enum tagCI_ADMIN_PARAMS
{
CI_AP_MERGE_INTERVAL, // Sleep time between merges
CI_AP_MAX_UPDATES, // Max # of updates passed by catalog
CI_AP_MAX_WORDLISTS, // Max # of word lists that can exist
CI_AP_MIN_SIZE_MERGE_WORDLISTS,// Min combined size of wordlists
CI_AP_MAX_WORDLIST_SIZE, // Max size at which docs can be added
CI_AP_MIN_WORDLIST_MEMORY, // Min free mem for wordlist creation
CI_AP_LOW_RESOURCE_SLEEP, // Time to wait after low resource condition
CI_AP_MAX_WORDLIST_MEMORY_LOAD,// Max mem load for wordlist creation
CI_AP_MAX_FRESH_COUNT, // Max fresh list entries before mmerge
CI_AP_MAX_SHADOW_INDEX_SIZE, // Max combined size of shadow indexes
CI_AP_MIN_DISK_FREE_FORCE_MERGE,// Min disk free before a mmerge is forced
CI_AP_MAX_SHADOW_FREE_FORCE_MERGE, // Max space for shadow indexes (% free space)
CI_AP_MAX_INDEXES, // Maximum number of indexes (persistent or wordlist)
CI_AP_MAX_IDEAL_INDEXES, // Maximum number of indexes in an 'ideal' system.
CI_AP_MIN_MERGE_IDLE_TIME, // Minumum idle time to perform annealing merge.
CI_AP_MAX_PENDING_DOCUMENTS, // Max pending docs for property queries
CI_AP_MASTER_MERGE_TIME, // Time for queue master merge
CI_AP_MAX_QUEUE_CHUNKS, // # of chunks in in-memory change list
CI_AP_MASTER_MERGE_CHECKPOINT_INTERVAL, // # of bytes to process before Checkpointing
CI_AP_FILTER_BUFFER_SIZE, // Mem buf size used by CI filter
CI_AP_FILTER_RETRIES, // # of attempts to filter a document
CI_AP_FILTER_RETRY_INTERVAL, // # of minutes between retrying an open doc
CI_AP_MIN_IDLE_QUERY_THREADS, // Min number of idle query threads to maintain
CI_AP_MAX_ACTIVE_QUERY_THREADS,// Maximum number of query threads to allow
CI_AP_MAX_QUERY_TIMESLICE, // Query timeslice (if waiting queries)
CI_AP_MAX_QUERY_EXECUTION_TIME,// Maximum query execution time (if waiting queries)
CI_AP_MAX_RESTRICTION_NODES, // Maximum normalized restriction nodes
CI_AP_CLUSTERINGTIME, // Time for clustering
CI_AP_MAX_FILESIZE_MULTIPLIER, // Largest amount of data from single file
CI_AP_DAEMON_RESPONSE_TIMEOUT, // Timeout waiting for response
CI_AP_FILTER_DELAY_INTERVAL, // Number of seconds the filter thread should wait
// if there are too few documents. (slm hack)
CI_AP_FILTER_REMAINING_THRESHOLD,
// Number of documents below which filter will
// introduce a delay
CI_AP_MAX_CHARACTERIZATION, // Maximum size in CWC of the
// characterization generated
CI_AP_MAX_FRESH_DELETES, // Maximum number of uncommitted delete entries
// before a delete merge is initiated.
CI_AP_MAX_WORDLIST_IO, // Greater than this amount of I/O activity will
// delay new wordlist creation. Units: KB/Sec
CI_AP_WORDLIST_RESOURCE_CHECK_INTERVAL,
// I/O and low memory resource threshold check
// performed at most once in this number of
// seconds. Units: Seconds
CI_AP_STARTUP_DELAY, // Milliseconds after boot when work can begin
CI_AP_GENERATE_CHARACTERIZATION, // TRUE if characterization should be generated.
CI_AP_MIN_WORDLIST_BATTERY, // Percentage of battery power required to generate wordlists
CI_AP_THREAD_PRIORITY_MERGE, // Priority of merge thread
CI_AP_THREAD_PRIORITY_FILTER, // Priority of update/filter thread
CI_AP_THREAD_CLASS_FILTER, // Priority class of the filter thread.
CI_AP_EVTLOG_FLAGS, // Flags for event log
CI_AP_MISC_FLAGS, // Miscellaneous Flags
CI_AP_GENERATE_RELEVANT_WORDS, // Set to TRUE if relevant words should be generated
CI_AP_FFILTER_FILES_WITH_UNKNOWN_EXTENSIONS,
// Flag indicating if files with unknown
// extensions should be filtered.
CI_AP_FILTER_DIRECTORIES, // Should queries return directories?
CI_AP_FILTER_CONTENTS, // Flag indicating if contents should be filtered
CI_AP_MAX_FILESIZE_FILTERED, // Maximum size of a file with unknown filter that will
// be filtered. Unit: Kilobytes
CI_AP_MIN_CLIENT_IDLE_TIME, // A client can afford to be idle for at least this many
// seconds before possibly getting disconnected.
CI_AP_MAX_DAEMON_VM_USE, // Maximum amount of pagefile, in KB, used by out-of-process daemon.
CI_AP_SECQ_FILTER_RETRIES, // # of attempts to filter a document in secondary Queue
CI_AP_WORDLIST_USER_IDLE, // User idle time to generate wordlists
CI_AP_IS_ENUM_ALLOWED, // Admin parameter for allowing enumeration
CI_AP_MIN_DISK_SPACE_TO_LEAVE, // Number of megabytes to leave on disk
CI_AP_MAX_DWORD_VAL, // THIS MUST BE THE LAST DWORD PARAM ALWAYS
//
// Values which don't fit in DWORD must be declared here.
//
CI_AP_MAX_VAL // THIS MUST BE THE LAST IN THE ENUMS
} CI_ADMIN_PARAMS;
//
// Enumerated values for types of "high-level" content index
// configuration.
//
typedef enum tagCI_CONFIG_TYPE
{
CI_CONFIG_DEFAULT = 0x0,
CI_CONFIG_OPTIMIZE_FOR_SPEED = 0x1,
CI_CONFIG_OPTIMIZE_FOR_SIZE = 0x2,
CI_CONFIG_OPTIMIZE_FOR_DEDICATED_INDEXING = 0x4,
CI_CONFIG_OPTIMIZE_FOR_DEDICATED_QUERYING = 0x8,
CI_CONFIG_OPTIMIZE_FOR_DEDICATED_INDEX_QUERY = 0x10,
CI_CONFIG_OPTIMIZE_FOR_MULTIPURPOSE_SERVER = 0x20
} CI_CONFIG_TYPE;
SCODE SetValue( [in] CI_ADMIN_PARAMS param,
[in] DWORD dwValue );
SCODE SetParamValue( [in] CI_ADMIN_PARAMS param,
[in] PROPVARIANT const * pVarValue );
SCODE SetValues( ULONG nParams,
[in, size_is(nParams)] const PROPVARIANT * aParamVals,
[in, size_is(nParams)] const CI_ADMIN_PARAMS * aParamNames );
SCODE GetValue( [in] CI_ADMIN_PARAMS param,
[out] DWORD * pdwValue );
SCODE GetInt64Value( [in] CI_ADMIN_PARAMS param,
[out] __int64 * pValue );
SCODE GetParamValue( [in] CI_ADMIN_PARAMS param,
[out] PROPVARIANT ** ppVarValue );
SCODE IsSame( [in] CI_ADMIN_PARAMS param,
[in] PROPVARIANT const * pVarValue,
[out] BOOL * pfSame );
SCODE SetConfigType( [in] CI_CONFIG_TYPE configType );
SCODE GetConfigType( [out] CI_CONFIG_TYPE * pConfigType );
}
interface IWordBreaker;
interface IStemmer;
interface IStream;
//+-------------------------------------------------------------------------
//
// Interface : ICiCLangRes
//
// Description : An interface to provide language resources like word
// breakers, stemmers, etc.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(914c2e6c-43fe-11d0-8c91-0020af1d740e)
interface ICiCLangRes : IUnknown
{
SCODE GetWordBreaker( [in] LCID locale,
[in] PROPID pid,
[out] IWordBreaker ** ppWordBreaker );
SCODE GetStemmer( [in] LCID locale,
[in] PROPID pid,
[out] IStemmer ** ppStemmer );
SCODE GetNoiseWordList( [in] LCID locale,
[in] PROPID pid,
[out] IStream ** ppNoiseWordList );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiAdmin
//
// Description : An interface with methods to adminster Ci internal state.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(AE67C7D8-85D3-11d0-8C45-00C04FC2DB8D)
interface ICiAdmin : IUnknown
{
SCODE InvalidateLangResources ();
}
//+-------------------------------------------------------------------------
//
// Interface : ICiFrameworkQuery
//
// Description : An interface with methods that provide access to
// various resources like CLangList
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(AE67C7D9-85D3-11d0-8C45-00C04FC2DB8D)
interface ICiFrameworkQuery : IUnknown
{
SCODE GetCCI( [out] void ** ppCCI );
SCODE ProcessError( [in] long lErrorCode );
SCODE GetLangList( [out] void **ppLangList );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCAdviseStatus
//
// Description : An interface notify the Content Index Client about
// performance counter values, event log messages, etc.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(ca05734a-1218-11d3-ae7a-00c04f72f831)
interface ICiCAdviseStatus : IUnknown
{
typedef enum tagCI_PERF_COUNTER_NAME
{
// Counters used in the main process
CI_PERF_NUM_WORDLIST,
CI_PERF_NUM_PERSISTENT_INDEXES,
CI_PERF_INDEX_SIZE,
CI_PERF_FILES_TO_BE_FILTERED,
CI_PERF_NUM_UNIQUE_KEY,
CI_PERF_RUNNING_QUERIES,
CI_PERF_MERGE_PROGRESS,
CI_PERF_DOCUMENTS_FILTERED,
CI_PERF_NUM_DOCUMENTS,
CI_PERF_TOTAL_QUERIES,
// Counters used in the filter daemon process
CI_PERF_FILTER_TIME_TOTAL,
CI_PERF_FILTER_TIME,
CI_PERF_BIND_TIME,
// Counters used in the main process
CI_PERF_DEFERRED_FILTER_FILES
} CI_PERF_COUNTER_NAME;
typedef enum tagCI_NOTIFY_STATUS_VALUE
{
CI_NOTIFY_FILTERING_FAILURE,
CI_NOTIFY_CORRUPT_INDEX,
CI_NOTIFY_SET_DISK_FULL,
CI_NOTIFY_CLEAR_DISK_FULL,
CI_NOTIFY_RESCAN_NEEDED,
CI_NOTIFY_FILTER_EMBEDDING_FAILURE,
CI_NOTIFY_FILTER_TOO_MANY_BLOCKS
} CI_NOTIFY_STATUS_VALUE;
SCODE SetPerfCounterValue( [in] CI_PERF_COUNTER_NAME counterName,
[in] long value );
SCODE GetPerfCounterValue( [in] CI_PERF_COUNTER_NAME counterName,
[out] long * pValue );
SCODE IncrementPerfCounterValue( [in] CI_PERF_COUNTER_NAME counterName );
SCODE DecrementPerfCounterValue( [in] CI_PERF_COUNTER_NAME counterName );
SCODE NotifyEvent( [in] WORD fType,
[in] DWORD eventId,
[in] ULONG nParams,
[in, size_is(nParams)] const PROPVARIANT *aParams,
[in] ULONG cbData,
[in, size_is(cbData)] void* data );
//
// BUGBUG - We should document that it may be called with internal CI locks
// held - don't call back into CI or get other locks. Fix this limitation
// it is a problem.
//
SCODE NotifyStatus( [in] CI_NOTIFY_STATUS_VALUE status,
[in] ULONG nParams,
[in, size_is(nParams)] const PROPVARIANT *aParams );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCFilterClient
//
// Description : An interface to control the client component responsible
// for filtering.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(A1E0BCB6-3C24-11D0-8C90-0020AF1D740E)
interface ICiCFilterClient : IUnknown
{
typedef struct tagCI_CLIENT_FILTER_CONFIG_INFO
{
BOOL fSupportsOpLocks;
BOOL fSupportsSecurity;
} CI_CLIENT_FILTER_CONFIG_INFO;
SCODE Init( [in, size_is(cbData)] BYTE const * pbData,
[in] ULONG cbData,
[in] ICiAdminParams * pICiAdminParams );
SCODE GetConfigInfo( [out] CI_CLIENT_FILTER_CONFIG_INFO * pConfigInfo );
SCODE GetOpenedDoc( [out] ICiCOpenedDoc ** ppICiCOpenedDoc );
}
interface ICiManager;
typedef ULONG VOLUMEID;
typedef LONGLONG USN;
typedef ULONG WORKID;
typedef ULONG PROPID;
typedef ULONG SDID;
typedef ULONG PARTITIONID;
typedef DWORD ACCESS_MASK;
//+---------------------------------------------------------------------------
//
// Struct: USN_FLUSH_INFO
//
// Purpose: A structure used to convey information about a
// changelog flush. Each entry has the volumeId and the
// highest USN flushed for that volumeId.
//
//----------------------------------------------------------------------------
typedef struct tagUSN_FLUSH_INFO
{
VOLUMEID volumeId;
USN usnHighest;
} USN_FLUSH_INFO;
//+---------------------------------------------------------------------------
//
// Enum: CI_UPDATE_TYPE
//
// Purpose: Types of updates
//
//----------------------------------------------------------------------------
typedef enum tagCI_UPDATE_TYPE
{
CI_UPDATE_ADD = 0x1, // Document add
CI_UPDATE_DELETE = 0x2, // Document delete
CI_UPDATE_MODIFY = 0x4 // Document modify
} CI_UPDATE_TYPE;
//+---------------------------------------------------------------------------
//
// Enum: CI_ACCESS_MODE
//
// Purpose: Type of access needed for a document.
//
//----------------------------------------------------------------------------
typedef enum tagCI_ACCESS_MODE
{
CI_READ_ACCESS = 0x1,
CI_WRITE_ACCESS = 0x2,
CI_EXECUTE_ACCESS = 0x4
} CI_ACCESS_MODE;
interface ICiCQuerySession;
interface IPropertyMapper;
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocStore
//
// Description : Main interface of the client in the content index.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(46625468-3C32-11D0-8C90-0020AF1D740E)
interface ICiCDocStore : IUnknown
{
//
// BUGBUG - temporary - will have to change. This is to allow
// fetching of the data for updating the perfmon counters.
//
typedef struct tagCI_CLIENT_STATUS
{
ULONG cDocuments; // Total number of documents
} CI_CLIENT_STATUS;
typedef enum tagCI_DISABLE_UPDATE_REASON
{
CI_LOST_UPDATE,
CI_CORRUPT_INDEX,
CI_DISK_FULL
} CI_DISABLE_UPDATE_REASON;
SCODE FlushPropertyStore();
SCODE GetClientStatus( [out] CI_CLIENT_STATUS * pStatus );
SCODE GetContentIndex( [out] ICiManager ** ppICiManager );
SCODE EnableUpdates( void );
SCODE DisableUpdates( [in] BOOL fIncremental,
[in] CI_DISABLE_UPDATE_REASON dwReason );
SCODE ProcessCiDaemonTermination( [in] DWORD dwStatus );
SCODE CheckPointChangesFlushed( [in] FILETIME ftFlushed,
[in] ULONG cEntries,
[in, size_is(cEntries)]
USN_FLUSH_INFO const * const * pUsnEntries );
SCODE GetQuerySession( [out] ICiCQuerySession ** ppICiCQuerySession );
SCODE MarkDocUnReachable( [in] WORKID wid );
SCODE GetPropertyMapper( [out] IPropertyMapper ** ppIPropertyMapper );
SCODE StoreSecurity( [in] WORKID wid,
[in] BYTE const * pbSecurity,
[in] ULONG cbSecurity );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocStoreEx
//
// Description : Extension to ICiCDocStore.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(f98282a7-fa72-11d1-9798-00c04fc2f410)
interface ICiCDocStoreEx : ICiCDocStore
{
SCODE IsNoQuery( [out] BOOL * fNoQuery );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocNameToWorkidTranslator
//
// Description : Interface to do document name to workid translation and
// vice-versa.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(25FC3F54-3CB4-11D0-8C90-0020AF1D740E)
interface ICiCDocNameToWorkidTranslator : IUnknown
{
SCODE QueryDocName( [out] ICiCDocName ** ppICiCDocName );
SCODE WorkIdToDocName( [in] WORKID workId,
[out] ICiCDocName * pICiCDocName );
SCODE DocNameToWorkId( [in] ICiCDocName const * pICiCDocName,
[out] WORKID *pWorkId );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocNameToWorkidTranslatorEx
//
// Description : Interface to do document name to workid translation and
// vice-versa. The Ex version includes an additional API
// to 'try harder and be more accurate' when resolving
// names.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(7BBA76E6-A0E3-11D2-BC5D-00C04FA354BA)
interface ICiCDocNameToWorkidTranslatorEx : ICiCDocNameToWorkidTranslator
{
SCODE WorkIdToAccurateDocName( [in] WORKID workId,
[out] ICiCDocName * pICiCDocName );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCPropertyStorage
//
// Description : Client interface to store properties.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(4C46225A-3CB5-11D0-8C90-0020AF1D740E)
interface ICiCPropertyStorage : IUnknown
{
SCODE IsPropertyCached( [in] FULLPROPSPEC const * pPropSpec,
[out] BOOL * pfValue );
SCODE StoreProperty( [in] WORKID workId,
[in] FULLPROPSPEC const * pPropSpec,
[in] PROPVARIANT const * pPropVariant );
//
// The following Fetch* methods are not used in the current version of
// CI framework. They are meant for a future version of CI framework.
//
SCODE FetchValueByPid( [in] WORKID workId,
[in] PROPID pid,
[out] PROPVARIANT * pbData,
[in,out] ULONG * pcb );
SCODE FetchValueByPropSpec( [in] WORKID workId,
[in] FULLPROPSPEC const * pPropSpec,
[out] PROPVARIANT * pbData,
[in,out] ULONG * pcb );
SCODE FetchVariantByPid( [in] WORKID workId,
[in] PROPID pid,
[out] PROPVARIANT ** ppVariant );
SCODE FetchVariantByByPropSpec( [in] WORKID workId,
[in] FULLPROPSPEC const * pPropSpec,
[out] PROPVARIANT ** ppVariant );
SCODE ClearNonStoragePropertiesForWid( [in] WORKID wid );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCPropRetriever
//
// Description : Interface to suport query time retrieval of properties,
// security checking, scope checking, etc.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(77d9b2da-4401-11d0-8c91-0020af1d740e)
interface ICiCPropRetriever : IUnknown
{
SCODE BeginPropertyRetrieval( [in] WORKID wid );
SCODE RetrieveValueByPid( [in] PROPID pid,
[out] PROPVARIANT * pbData,
[in,out] ULONG * pcb );
SCODE RetrieveValueByPropSpec( [in] FULLPROPSPEC const * pPropSpec,
[out] PROPVARIANT * pbData,
[in,out] ULONG * pcb );
SCODE FetchSDID( [out] SDID * pSDID );
SCODE CheckSecurity( [in] ACCESS_MASK am,
[out] BOOL * pfGranted );
SCODE IsInScope( [out] BOOL * pfInScope );
SCODE EndPropertyRetrieval();
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCDeferredPropRetriever
//
// Description : Interface to suport retrieval of deferred properties
//
// Notes : It's the responsibility of the caller to free the variant
// by calling VariantClear on pVar
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(c273af70-6d72-11d0-8d64-00a0c908dbf1)
interface ICiCDeferredPropRetriever : IUnknown
{
SCODE RetrieveDeferredValueByPid( [in] WORKID wid,
[in] PROPID pid,
[out] PROPVARIANT * pVar );
SCODE RetrieveDeferredValueByPropSpec( [in] WORKID wid,
[in] FULLPROPSPEC const * pPropSpec,
[out] PROPVARIANT * pVar );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCScopeEnumerator
//
// Description : Interface to enumerate.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(CF8505EA-3CCA-11D0-8C90-0020AF1D740E)
interface ICiCScopeEnumerator : IUnknown
{
SCODE Begin( void );
SCODE CurrentDocument( [out] WORKID * pWorkId );
SCODE NextDocument( [out] WORKID * pWorkId );
SCODE RatioFinished( [out] ULONG * pulDenominator,
[out] ULONG * pulNumerator );
SCODE End( void );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiQueryPropertyMapper
//
// Description : Converts propspec to pid and vice-versa. It differs from
// IPropertyMapper because it can convert properties that are
// of interest to a given query only
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(D2333EB0-756B-11D0-8D66-00A0C908DBF1)
interface ICiQueryPropertyMapper : IUnknown
{
SCODE PropertyToPropid( [in] FULLPROPSPEC const * pFullPropSpec,
[out] PROPID * pPropId );
SCODE PropidToProperty( [in] PROPID pid,
[out] FULLPROPSPEC const ** ppPropSpec );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCQuerySession
//
// Description : A resource manager for a query on the client side.
//
//+-------------------------------------------------------------------------
interface IDBProperties;
LOCAL_INTERFACE(AE461FD6-4E1D-11D0-8C94-0020AF1D740E)
interface ICiCQuerySession : IUnknown
{
typedef enum tagCI_ENUM_OPTIONS
{
CI_ENUM_MUST,
CI_ENUM_NEVER,
CI_ENUM_SMALL,
CI_ENUM_BIG,
CI_ENUM_MUST_NEVER_DEFER
} CI_ENUM_OPTIONS;
SCODE Init( [in] ULONG nProps,
[in, size_is(nProps)] FULLPROPSPEC const * const * apPropSpec,
[in] IDBProperties *pDBProperties,
[in] ICiQueryPropertyMapper *pQueryPropertyMapper );
SCODE GetEnumOption( [out] CI_ENUM_OPTIONS * pEnumOption );
SCODE CreatePropRetriever( [out] ICiCPropRetriever ** ppICiCPropRetriever );
SCODE CreateDeferredPropRetriever( [out] ICiCDeferredPropRetriever ** ppICiCDefPropRetriever );
SCODE CreateEnumerator( [out] ICiCScopeEnumerator ** ppICiCEnumerator );
}
interface ICiManager;
//+-------------------------------------------------------------------------
//
// Interface : ICiControl
//
// Description : An interface that controls the construction, destruction,
// lookup of multiple content index instances.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(63DEB7F4-3CCB-11D0-8C90-0020AF1D740E)
interface ICiControl : IUnknown
{
SCODE CreateContentIndex( [in] ICiCDocStore * pICiDocStore,
[out] ICiManager ** ppICiManager );
}
cpp_quote("#define CI_CONFIG_ENABLE_INDEXING 0x1")
cpp_quote("#define CI_CONFIG_ENABLE_QUERYING 0x2")
cpp_quote("#define CI_CONFIG_ENABLE_INDEXING 0x1")
cpp_quote("#define CI_CONFIG_ENABLE_QUERYING 0x2")
cpp_quote("#define CI_CONFIG_READONLY 0x4")
cpp_quote("#define CI_CONFIG_INPROCESS_FILTERING 0x8")
cpp_quote("#define CI_CONFIG_ENABLE_BULK_SECURITY 0x10")
cpp_quote("#define CI_CONFIG_ENABLE_INDEX_MIGRATION 0x20")
cpp_quote("#define CI_CONFIG_PROVIDE_PROPERTY_MAPPER 0x40")
cpp_quote("#define CI_CONFIG_EMPTY_DATA 0x80")
cpp_quote("#define CI_CONFIG_PUSH_FILTERING 0x100")
typedef ULONG CI_STARTUP_FLAGS;
//+-------------------------------------------------------------------------
//
// Interface : ICiStartup
//
// Description : Interface to specify the startup information to Content Index.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(68232cb8-3ccc-11d0-8c90-0020af1d740e)
interface ICiStartup : IUnknown
{
typedef struct tagCI_STARTUP_INFO
{
CI_STARTUP_FLAGS startupFlags;
CLSID clsidDaemonClientMgr;
BOOL fFull;
BOOL fCallerOwnsFiles;
IEnumString * pFileList;
} CI_STARTUP_INFO;
SCODE StartupContentIndex(
[string,in] WCHAR const * pwszCiDirectory,
[in] CI_STARTUP_INFO * pStartupInfo,
[in] IProgressNotify * pIProgressNotify,
[in] BOOL * pfAbort );
SCODE StartupNullContentIndex(
[in] CI_STARTUP_INFO * pStartupInfo,
[in] IProgressNotify * pIProgressNotify,
[in] BOOL * pfAbort );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiEnumWorkids
//
// Description : An interface provides the ability to enumerate workids.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(77900150-A09C-11D0-A80D-00A0C906241A)
interface ICiEnumWorkids : IUnknown
{
SCODE Count( [out] ULONG * pcWorkIds );
SCODE Reset();
SCODE Next( [in] ULONG celt,
[out,size_is(celt)] WORKID * rgelt,
[out] ULONG *pceltFetched );
SCODE Skip( [in] ULONG celt );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiPersistIncrFile
//
// Description : An interface that allows saving and loading of ci
// persistent data.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(31B311E2-4498-11D0-8C91-0020AF1D740E)
interface ICiPersistIncrFile : IUnknown
{
SCODE Load( [in] BOOL fFull,
[in] BOOL fCallerOwnsFiles,
[in] IEnumString * pIFileList,
[in] IProgressNotify * pIProgressNotify,
[in] BOOL * pfAbort );
SCODE Save( [string, in] WCHAR const * pwszSaveDirectory,
[in] BOOL fFull,
[in] IProgressNotify * pIProgressNotify,
[in] BOOL * pfAbort,
[out] ICiEnumWorkids ** ppWorkidList,
[out] IEnumString ** ppFileList,
[out] BOOL * pfFull,
[out] BOOL * pfCallerOwnsFiles
);
SCODE SaveCompleted();
}
typedef ULONG CIF_STATE_FLAGS;
cpp_quote("#define CIF_STATE_SHADOW_MERGE 0x001")
cpp_quote("#define CIF_STATE_MASTER_MERGE 0x002")
cpp_quote("#define CIF_STATE_CONTENT_SCAN_REQUIRED 0x004")
cpp_quote("#define CIF_STATE_ANNEALING_MERGE 0x008")
cpp_quote("#define CIF_STATE_INDEX_MIGRATION_MERGE 0x010")
cpp_quote("#define CIF_STATE_LOW_MEMORY 0x020")
cpp_quote("#define CIF_STATE_HIGH_IO 0x040")
cpp_quote("#define CIF_STATE_MASTER_MERGE_PAUSED 0x080")
cpp_quote("#define CIF_STATE_BATTERY_POWER 0x100")
cpp_quote("#define CIF_STATE_USER_ACTIVE 0x200")
typedef enum tagCI_MERGE_TYPE
{
CI_ANY_MERGE = 0,
CI_MASTER_MERGE = 1,
CI_SHADOW_MERGE = 2,
CI_ANNEALING_MERGE = 3
} CI_MERGE_TYPE;
//+-------------------------------------------------------------------------
//
// Interface : ICiManager
//
// Description : Main interface for Content Index.
// Supports QueryInterface to ICiAdminParams
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(CF0FCF56-3CCE-11D0-8C90-0020AF1D740E)
interface ICiManager : IUnknown
{
typedef struct tagCI_DOCUMENT_UPDATE_INFO
{
WORKID workId;
VOLUMEID volumeId;
USN usn;
PARTITIONID partId;
CI_UPDATE_TYPE change;
} CI_DOCUMENT_UPDATE_INFO;
typedef struct tagCIF_STATE
{
DWORD cbStruct; // size of the struct passed
DWORD cWordList; // # of wordlists
DWORD cPersistentIndex; // # of persistent indexes
DWORD cQueries; // # of running queries
DWORD cDocuments; // # of documents to filter
DWORD cFreshTest; // # of entires in the fresh test
DWORD dwMergeProgress; // % done in current merge
CIF_STATE_FLAGS eState; // bit array of state information
DWORD cFilteredDocuments; // # of documents filtered thus far
DWORD dwIndexSize; // Total size (in MB) of index
DWORD cUniqueKeys; // # of unique keys in index
DWORD cSecQDocuments; // # of documents in secondary Q
} CIF_STATE;
SCODE GetStatus( [out] CIF_STATE * pCiState );
SCODE Empty(void);
SCODE Shutdown(void);
SCODE UpdateDocument( [in] CI_DOCUMENT_UPDATE_INFO const * pInfo );
SCODE UpdateDocuments( [in] ULONG cDocs,
[in, size_is(cDocs)] CI_DOCUMENT_UPDATE_INFO const * aInfo );
SCODE StartFiltering( [in] ULONG cbData,
[in, size_is(cbData)] BYTE const * pbData );
SCODE FlushUpdates(void);
SCODE GetAdminParams( [out] ICiAdminParams ** ppICiAdminParams );
SCODE QueryRcovStorage( [out] IUnknown ** ppIUnknown );
SCODE ForceMerge( CI_MERGE_TYPE mt );
SCODE AbortMerge(void);
SCODE IsQuiesced( BOOL * pfState );
SCODE GetPropertyMapper( [out] IPropertyMapper ** ppIPropertyMapper );
SCODE IsNullCatalog( BOOL * pfNull );
}
//+-------------------------------------------------------------------------
//
// Interface : IPropertyMapper
//
// Description : Maps a FULLPROPSPEC to a 32 bit PROPID and vice-versa.
// This can be provided either by Content Index or the client.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(B324B226-41A0-11D0-8C91-0020AF1D740E)
interface IPropertyMapper : IUnknown
{
SCODE PropertyToPropid( [in] FULLPROPSPEC const * pFullPropSpec,
[in] BOOL fCreate,
[out] PROPID * pPropId );
SCODE PropidToProperty( [in] PROPID pid,
[out] FULLPROPSPEC ** ppPropSpec );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCDocStoreLocator
//
// Description : A client provided interface to locate a docstore given
// the client supplied parameters set on the data source
// object.
//
// Notes : ICiCDocStoreLocator is used only by the File System
// Client of framework until the transport interface to
// enable remoting of CI is speced, ie, running CI in a
// client and a server process.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(97EE7C06-5908-11D0-8C9B-0020AF1D740E)
interface ICiCDocStoreLocator : IUnknown
{
SCODE LookUpDocStore( [in] IDBProperties * pIDBProperties,
[out] ICiCDocStore ** ppICiCDocStore,
[in] BOOL fMustAlreadyBeOpen );
SCODE Shutdown();
SCODE GetDocStoreState( [in] WCHAR const * pwcDocStore,
[out] ICiCDocStore ** ppICiCDocStore,
[out] DWORD * pdwState );
SCODE IsMarkedReadOnly( [in] WCHAR const * wcsCat, [out] BOOL * pfReadOnly );
SCODE IsVolumeOrDirRO( [in] WCHAR const * wcsCat, [out] BOOL * pfReadOnly );
SCODE OpenAllDocStores( );
SCODE StopCatalogsOnVol( [in] WCHAR wcVol, [in] void * pRequestQ );
SCODE StartCatalogsOnVol( [in] WCHAR wcVol, [in] void * pRequestQ );
SCODE AddStoppedCat( [in] DWORD dwOldState, [in] WCHAR const * wcsCatName );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiISearchCreator
//
// Description : An interface for creating the CSearch object provided by
// the CI framework.
//
//+-------------------------------------------------------------------------
interface ISearchQueryHits;
typedef struct tagDBCOMMANDTREE DBCOMMANDTREE;
LOCAL_INTERFACE(7DC07FA0-902E-11D0-A80C-00A0C906241A)
interface ICiISearchCreator : IUnknown
{
SCODE CreateISearch( [in] DBCOMMANDTREE * pRst,
[in] ICiCLangRes * pILangRes,
[in] ICiCOpenedDoc * pOpenedDoc,
[out] ISearchQueryHits ** ppISearch );
}
//
// Class ids of objects provided by the CI framework that can be created
// using COM ( eg. CoCreateInstance)
//
//+-------------------------------------------------------------------------
//
// ClassId : CLSID_NLCiControl
//
// Description : ClassId of the CiControl object in ocifrmwrk.dll.
//
//+-------------------------------------------------------------------------
// 47C67B50-70B5-11D0-A808-00A0C906241A
cpp_quote("#define CLSID_NLCiControl { 0x47c67b50,0x70b5,0x11d0,{0xa8, 0x08, 0x00, 0xa0, 0xc9, 0x06, 0x24, 0x1a}}" )
//+-------------------------------------------------------------------------
//
// ClassId : CLSID_CiControl
//
// Description : ClassId of the CiControl object in cifrmwrk.dll.
//
//+-------------------------------------------------------------------------
// 1E9685E6-DB6D-11d0-BB63-00C04FC2F410
cpp_quote("#define CLSID_CiControl { 0x1e9685e6, 0xdb6d, 0x11d0, {0xbb, 0x63, 0x0, 0xc0, 0x4f, 0xc2, 0xf4, 0x10 }}" )
//+-------------------------------------------------------------------------
//
// ClassId : CLSID_ISearchCreator
//
// Description : ClassId of the ISearchCreator object. This object can be
// used to create an object implementing ISearchQueryHits interface.
//
//+-------------------------------------------------------------------------
// 1F247DC0-902E-11D0-A80C-00A0C906241A
cpp_quote("#define CLSID_ISearchCreator {0x1F247DC0, 0x902E, 0x11D0, {0xA8,0x0C,0x00,0xA0,0xC9,0x06,0x24,0x1A} }")
//+-------------------------------------------------------------------------
//
// ClassId : CLSID_TextIFilter
//
// Description : ClassId of the text filter implemented by CI framework.
//
//+-------------------------------------------------------------------------
// C1243CA0-BF96-11CD-B579-08002B30BFEB
cpp_quote("#define CLSID_TextIFilter {0xC1243CA0, 0xBF96, 0x11CD, {0xB5,0x79,0x08,0x00,0x2B,0x30,0xBF,0xEB } }")
//+-------------------------------------------------------------------------
//
// ClassId : GUID_Characterization
//
// Description : Use GUID_Characterization,"Description" as the FULLPROPSPEC
// for using a property as characterization.
//
//+-------------------------------------------------------------------------
// D1B5D3F0-C0B3-11CF-9A92-00A0C908DBF1
cpp_quote("#define GUID_Characterization {0xD1B5D3F0, 0xC0B3, 0x11CF, {0x9A,0x92,0x00,0xA0,0xC9,0x08,0xDB,0xF1 } }")
interface ICiCIndexNotificationStatus;
interface ICiIndexNotificationEntry;
//+-------------------------------------------------------------------------
//
// Interface : ICiIndexNotification
//
// Description : An interface provided by the push filtering framework that
// accepts document change notifications.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(4F2CD6E0-8E74-11D0-8D69-00A0C908DBF1)
interface ICiIndexNotification : IUnknown
{
SCODE AddNotification( [in] WORKID wid,
[in] ICiCIndexNotificationStatus *pIndexNotifStatus,
[out] ICiIndexNotificationEntry **ppIndexNotifEntry );
SCODE ModifyNotification( [in] WORKID wid,
[in] ICiCIndexNotificationStatus *pIndexNotifStatus,
[out] ICiIndexNotificationEntry **ppIndexNotifEntry );
SCODE DeleteNotification( [in] WORKID wid,
[in] ICiCIndexNotificationStatus *pIndexNotifStatus );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiIndexNotificationEntry
//
// Description : An interface provided by the push filtering framework that
// accepts the text and properties in of a modified document.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(210769D0-8E75-11D0-8D69-00A0C908DBF1)
interface ICiIndexNotificationEntry : IUnknown
{
SCODE AddText( [in] STAT_CHUNK const * pStatChunk,
[in] WCHAR const * pwszText );
SCODE AddProperty( [in] STAT_CHUNK const * pStatChunk,
[in] PROPVARIANT const * pPropVariant );
SCODE AddCompleted( [in] ULONG fAbort );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCIndexNotificationStatus
//
// Description : A client provided interface used by the push filtering
// framework to notify completion status to client. Commit
// means that the document notification has been persisted in
// the CI indexes. An abort means that the client should retry
// the notification. Note: the client should be careful about
// requeuing deletes. Finally, the simple filtering framework
// does not handle failures of Commit or Abort, say by retrying
// at a later time. Commit and Abort are expected to succeed.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(5FFF3840-8E76-11D0-8D69-00A0C908DBF1)
interface ICiCIndexNotificationStatus : IUnknown
{
SCODE Commit();
SCODE Abort();
}
//
// All of the following interfaces (from here till eof) are not used in the current version
// of CI framework. They are meant for a future version of CI framework.
//
//+-------------------------------------------------------------------------
//
// Interface : ICiCScope
//
// Description : An interface encapsulating a scope.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(1021C882-3CC0-11D0-8C90-0020AF1D740E)
interface ICiCScope : IUnknown
{
SCODE Init( [in] ULONG cbData,
[in, size_is(cbData)] BYTE const * pbData );
SCODE Clear(void);
SCODE IsValid(void) const;
SCODE QueryScope( [out] ICiCScope ** ppICiCScope ) const;
SCODE GetScope( [out,size_is(*pcbData) ] BYTE * pbScope,
[in,out] ULONG * pcbData );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCScopeChecker
//
// Description : Interface to test if a document is in a given set of scopes.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(7D820C9C-3CBC-11D0-8C90-0020AF1D740E)
interface ICiCScopeChecker : IUnknown
{
SCODE IsWorkidInScope( [in] ICiCScope const * pIScope,
[in] WORKID workId,
[out] BOOL * pfInScope );
SCODE IsDocNameInScope( [in] ICiCScope const * pIScope,
[in] ICiCDocName const * pICiCDocName,
[out] BOOL * pfInScope );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCUserSecurity
//
// Description : An interface to encapsulate a user's security identity.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(5D01D9CE-3CC2-11D0-8C90-0020AF1D740E)
interface ICiCUserSecurity : IUnknown
{
SCODE Init( [in] ULONG cbData,
[in, size_is(cbData)] BYTE const * pbData );
SCODE Clear(void);
SCODE IsValid( [out] BOOL * pfValid ) const ;
SCODE GetSecurityInfo( [out, size_is(*pcbData)] BYTE * pbData,
[in,out] ULONG * pcbData );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCSecurityChecker
//
// Description : An interface capable of checking if a given document allows
// the desired access to a user. Capable of doing bulk security
// checking also.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(CA130CF4-3CC2-11D0-8C90-0020AF1D740E)
interface ICiCSecurityChecker : IUnknown
{
SCODE AccessCheck( [in] ICiCUserSecurity const * pICiCUserSecurity,
[in] SDID sdid,
[in] CI_ACCESS_MODE am,
[out] BOOL * pfGranted );
SCODE BulkAccessCheck( [in] ICiCUserSecurity const * pICiCUserSecurity,
[in] ULONG nIds,
[in, size_is(nIds)] SDID const * aSDID,
[in, size_is(nIds)] CI_ACCESS_MODE const * pam,
[out, size_is(nIds)] BOOL * afGranted );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiDocChangeNotifySink
//
// Description : Interface capable of accepting document change notifications.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(8BFA1386-3CE5-11D0-8C90-0020AF1D740E)
interface ICiDocChangeNotifySink : IUnknown
{
SCODE ProcessWorkidChange( [in] WORKID wid,
[in] CI_UPDATE_TYPE change );
SCODE ProcessDocNameChange( [in] ICiCDocName * pICiCDocName,
[in] CI_UPDATE_TYPE change );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCQueryNotification
//
// Description : Interface to support document change notifications during
// query processing.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(0A9E9F6C-3CE2-11D0-8C90-0020AF1D740E)
interface ICiCQueryNotification : IUnknown
{
SCODE RegisterScope( [in] ICiDocChangeNotifySink * pINotifySink,
[in] ICiCScope const * pICiCScope,
[out] HANDLE * phNotify );
SCODE CloseNotifications( [in] HANDLE hNotify );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCEventLogItem
//
// Description : A client provided interface to log events.
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(44CC886A-4314-11D0-8C91-0020AF1D740E)
interface ICiCEventLogItem : IUnknown
{
SCODE Init( [in,string] WCHAR const * pwszEventSource,
[in] DWORD dwMsgId );
SCODE AddDWordParam( [in] DWORD dwParam );
SCODE AddAsciiString( [in, string] char const * pszParam );
SCODE AddUnicodeString( [in, string] WCHAR const * pwszParam );
SCODE AddVariantParam( [in] PROPVARIANT const * pVarnt );
SCODE AddData( [in] ULONG cbData,
[in, size_is(cbData)] BYTE const * pbData );
SCODE WriteEvent( void );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCFilterStatus
//
// Description : Per-object filtering status
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(BC5F3D60-8BBC-11D1-8F73-00A0C91917F5)
interface ICiCFilterStatus : IUnknown
{
SCODE PreFilter( [in, size_is(cbName)] BYTE const * pbName,
[in] ULONG cbName );
SCODE PostFilter( [in, size_is(cbName)] BYTE const * pbName,
[in] ULONG cbName,
[in] SCODE scFilterStatus );
}
//+-------------------------------------------------------------------------
//
// Interface : ICiCResourceMonitor
//
// Description : Allows client to monitor resources (i/o, memory, etc.)
//
//+-------------------------------------------------------------------------
LOCAL_INTERFACE(F700FF8E-20EE-11D2-80F7-00C04FA354BA)
interface ICiCResourceMonitor : IUnknown
{
SCODE IsMemoryLow();
SCODE IsBatteryLow();
SCODE IsIoHigh( [in] BOOL * pfAbort );
SCODE IsUserActive( BOOL fCheckLongTermActivity );
SCODE SampleUserActivity();
SCODE IsOnBatteryPower();
}