//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-1998
//
// File:        ciodm.idl
//
// Contents:    Indexing Service administration Interfaces
//
// History:     12-10-97    mohamedn    created
//
//----------------------------------------------------------------------------

// ciodm.idl : IDL source for ciodm.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (ciodm.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

    typedef [
     helpstring("Constants that define the different catalog states."),
    ] enum 
    {
        csStopped   = 1,
        csReadOnly  = 2,
        csWritable  = 4 
    } CatalogStateType;
     
    [
        object,
        uuid(3BC4F3A0-652A-11D1-B4D4-00C04FC2DB8D),
        dual,
        helpstring("Indexing Service Administration Interface"),
        pointer_default(unique)
    ]
    interface IAdminIndexServer : IDispatch
    {
        //
        // property set/get
        //
        [propget, id(1), helpstring("property MachineName")] HRESULT MachineName([out, retval] BSTR *pVal);
        [propput, id(1), helpstring("property MachineName")] HRESULT MachineName([in] BSTR newVal);

        [id(2), helpstring("Adds a Catalog to Indexing Service")] HRESULT AddCatalog(BSTR bstrCatName, BSTR bstrCatLocation, [out, retval] IDispatch **pIDsip);
        [id(3), helpstring("Removes an existing Catalog")]   HRESULT RemoveCatalog(BSTR bstrCatName, [defaultvalue(FALSE)] VARIANT_BOOL fDelDirectory);
        [id(4), helpstring("Finds a catalog given a catalog name")]  HRESULT GetCatalogByName(BSTR bstrCatalogName, [out, retval] IDispatch **pDisp);

        //
        // Catalog enumeration
        //
        [id(5), helpstring("Catalog Enumerator ")]         HRESULT FindFirstCatalog([out, retval] VARIANT_BOOL * pfFound);
        [id(6), helpstring("Catalog Enumerator")]          HRESULT FindNextCatalog([out, retval] VARIANT_BOOL * pfFound);
        [id(7), helpstring("Gets current catalog")]        HRESULT GetCatalog([out, retval] IDispatch ** pIDisp);

        //
        // start/stop Indexing Service
        //
        [id(8), helpstring("Starts Indexing Service")]     HRESULT Start();
        [id(9), helpstring("Stops Indexing Service")]      HRESULT Stop();
        [id(10),helpstring("Is Indexing Service running")] HRESULT IsRunning( [out, retval] VARIANT_BOOL *pfIsRunning );
        [id(11),helpstring("Set Indexing Service (CiSvc) to Auto-Start if True")] HRESULT EnableCI( VARIANT_BOOL fAutoStart );

        //
        // pause/continue cisvc service
        //
        [id(12), helpstring("Pause Indexing Service")]     HRESULT Pause();
        [id(13), helpstring("Is Indexing Service Paused")] HRESULT IsPaused( [out, retval] VARIANT_BOOL *pfIsPaused );
        [id(14), helpstring("Continue Indexing Service")]  HRESULT Continue();

        //
        // set/get CI registry params
        //
        [id(15), helpstring("sets CI Long param")]         HRESULT SetLongProperty( BSTR bstrPropName, LONG lVal );
        [id(16), helpstring("gets CI Long param")]         HRESULT GetLongProperty( BSTR bstrPropName, [out, retval]  LONG * plVal );
        [id(17), helpstring("sets CI SZ param")]           HRESULT SetSZProperty( BSTR bstrPropName, BSTR bstrVal );
        [id(18), helpstring("gets CI SZ param")]           HRESULT GetSZProperty( BSTR bstrPropName, [out, retval] BSTR * pbstrVal );
    };
    [
        object,
        uuid(3BC4F3A2-652A-11D1-B4D4-00C04FC2DB8D),
        dual,
        helpstring("Indexing Service catalog administration Interface"),
        pointer_default(unique)
    ]
    interface ICatAdm : IDispatch
    {
        //
        // MergeCatalog/Add/Remove/Find scopes
        //
        [id(1), helpstring("Force a catalog master merge")]             HRESULT ForceMasterMerge(void);
        [id(2), helpstring("Adds a scope to current catalog")]          HRESULT AddScope(BSTR bstrScopeName, VARIANT_BOOL fExclude,[in, optional] VARIANT vtLogon, [in, optional] VARIANT vtPassword, [out, retval] IDispatch ** pIDisp);
        [id(3), helpstring("Removes a scope from current catalog")]     HRESULT RemoveScope(BSTR bstrScopePath);
        [id(4), helpstring("Finds a scope object given its path name")] HRESULT GetScopeByPath(BSTR bstrPath, [out, retval] IDispatch ** pIDisp);
        [id(5), helpstring("Finds a scope object given its Alias")]     HRESULT GetScopeByAlias(BSTR bstrAlias, [out, retval] IDispatch ** pIDisp);

        //
        // Scope enumeration
        //
        [id(6), helpstring("Scope Enumerator")]      HRESULT FindFirstScope([out, retval] VARIANT_BOOL * pfFound);
        [id(7), helpstring("Scope Enumerator")]      HRESULT FindNextScope([out, retval] VARIANT_BOOL  * pfFound);
        [id(8), helpstring("Gets current scope")]    HRESULT GetScope([out, retval] IDispatch ** pIDisp);

        //
        // Set/Get catalog name/location properties.
        //
        [propget, id(9),  helpstring("property CatalogName")]           HRESULT CatalogName([out, retval] BSTR *pVal);
        [propget, id(10), helpstring("property CatalogLocation")]       HRESULT CatalogLocation([out, retval] BSTR *pVal);
        [propget, id(11), helpstring("property WordListCount")]         HRESULT WordListCount( [out, retval] LONG *pVal);
        [propget, id(12), helpstring("property PersistentIndexCount")]  HRESULT PersistentIndexCount( [out, retval] LONG *pVal);
        [propget, id(13), helpstring("property QueryCount")]            HRESULT QueryCount( [out, retval] LONG *pVal);
        [propget, id(14), helpstring("property DocumentsToFilter")]     HRESULT DocumentsToFilter( [out, retval] LONG *pVal);
        [propget, id(15), helpstring("property FreshTestCount")]        HRESULT FreshTestCount( [out, retval] LONG *pVal);
        [propget, id(16), helpstring("property PctMergeComplete")]      HRESULT PctMergeComplete( [out, retval] LONG *pVal);
        [propget, id(17), helpstring("property FilteredDocumentCount")] HRESULT FilteredDocumentCount( [out, retval] LONG *pVal);
        [propget, id(18), helpstring("property TotalDocumentCount")]    HRESULT TotalDocumentCount( [out, retval] LONG *pVal);
        [propget, id(19), helpstring("property PendingScanCount")]      HRESULT PendingScanCount( [out, retval] LONG *pVal);
        [propget, id(20), helpstring("property IndexSize")]             HRESULT IndexSize( [out, retval] LONG *pVal);
        [propget, id(21), helpstring("property UniqueKeyCount")]        HRESULT UniqueKeyCount( [out, retval] LONG *pVal);
        [propget, id(22), helpstring("property StateInfo")]             HRESULT StateInfo( [out, retval] LONG *pVal);
        [propget, id(23), helpstring("property IsUpToDate")]            HRESULT IsUpToDate( [out, retval] VARIANT_BOOL *pVal);
        [propget, id(24), helpstring("property DelayedFilterCount")]    HRESULT DelayedFilterCount( [out, retval] LONG *pVal);

        //
        // Start/Stop/Pause/Continue a catalog
        //
        [id(25), helpstring("Start Catalog")]                           HRESULT StartCatalog( [out, retval] CatalogStateType *pdwOldState);
        [id(26), helpstring("Stop Catalog")]                            HRESULT StopCatalog( [out, retval] CatalogStateType *pdwOldState);
        [id(27), helpstring("Pause Catalog")]                           HRESULT PauseCatalog( [out, retval] CatalogStateType *pdwOldState);
        [id(28), helpstring("Continue Catalog")]                        HRESULT ContinueCatalog( [out, retval] CatalogStateType *pdwOldState);
        [id(29), helpstring("Is the catalog running")]                  HRESULT IsCatalogRunning( [out, retval] VARIANT_BOOL *pfIsRunning );
        [id(30), helpstring("Is the catalog paused")]                   HRESULT IsCatalogPaused( [out, retval] VARIANT_BOOL *pfIsPaused );
        [id(31), helpstring("Is the catalog stopped")]                  HRESULT IsCatalogStopped( [out, retval] VARIANT_BOOL *pIsStopped );

    };
    [
        object,
        uuid(3BC4F3A4-652A-11D1-B4D4-00C04FC2DB8D),
        dual,
        helpstring("Indexing Service scope administration Interface"),
        pointer_default(unique)
    ]
    interface IScopeAdm : IDispatch
    {
        [id(1), helpstring("Initiates full/incremental rescan.")] HRESULT Rescan(VARIANT_BOOL fFull);
        [id(2), helpstring("change logon/password.")]             HRESULT SetLogonInfo( BSTR bstrLogon, BSTR bstrPassword );

        [propget, id(3), helpstring("property Path")]             HRESULT Path([out, retval] BSTR *pVal);
        [propput, id(3), helpstring("property Path")]             HRESULT Path([in] BSTR newVal);
        [propget, id(4), helpstring("property Alias")]            HRESULT Alias([out, retval] BSTR *pVal);
        [propput, id(4), helpstring("property Alias")]            HRESULT Alias([in] BSTR newVal);
        [propget, id(5), helpstring("property ExcludeScope")]     HRESULT ExcludeScope([out, retval] VARIANT_BOOL *pVal);
        [propput, id(5), helpstring("property ExcludeScope")]     HRESULT ExcludeScope([in] VARIANT_BOOL newVal);
        [propget, id(6), helpstring("property VirtualScope")]     HRESULT VirtualScope([out, retval] VARIANT_BOOL *pVal);
        [propget, id(7), helpstring("property Logon")]            HRESULT Logon([out, retval] BSTR *pVal);
    };
    [
        uuid(3BC4F393-652A-11D1-B4D4-00C04FC2DB8D),
        version(1.0),
        helpstring("Indexing Service Administration Type Library 1.0")
    ]
library CIODMLib
{
    importlib("stdole2.tlb");

    [
        uuid(3BC4F3A1-652A-11D1-B4D4-00C04FC2DB8D),
        helpstring("Indexing Service Machine Administration Class")
    ]
    coclass AdminIndexServer
    {
        [default] interface IAdminIndexServer;
    };
    [
        uuid(3BC4F3A3-652A-11D1-B4D4-00C04FC2DB8D),
        helpstring("Indexing Service Catalog Administration Class")
    ]
    coclass CatAdm
    {
        [default] interface ICatAdm;
    };
    [
        uuid(3BC4F3A7-652A-11D1-B4D4-00C04FC2DB8D),
        helpstring("Indexing Service Scope Administration Class")
    ]
    coclass ScopeAdm
    {
        [default] interface IScopeAdm;
    };
        
};
