//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996 - 2000. // // 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") cpp_quote("#define CI_CONFIG_LOAD_FROM_FILES 0x200") 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(); } //+------------------------------------------------------------------------- // // Interface : ISimpleCommandCreator // // Description : A CI provided interface that exposes ICommand for CI. // //+------------------------------------------------------------------------- interface ICommand; LOCAL_INTERFACE(5e341ab7-02d0-11d1-900c-00a0c9063796) interface ISimpleCommandCreator : IUnknown { SCODE CreateICommand( IUnknown ** ppIUnknown, IUnknown * pOuterUnk ); SCODE VerifyCatalog( WCHAR const * pwszMachine, WCHAR const * pwszCatalogName ); SCODE GetDefaultCatalog( WCHAR * pwszCatalogName, ULONG cwcIn, ULONG * pcwcOut ); } //+------------------------------------------------------------------------- // // ClassId : CLSID_CISimpleCommandCreator // // Description : ClassId of the simple command creator implemented by CI. // //+------------------------------------------------------------------------- // C7B6C04A-CBB5-11d0-BB4C-00C04FC2F410 cpp_quote("#define CLSID_CISimpleCommandCreator {0xc7b6c04a, 0xcbb5, 0x11d0, {0xbb, 0x4c, 0x0, 0xc0, 0x4f, 0xc2, 0xf4, 0x10 } }") // // 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(); }