//---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1996
//
//  File:      core.odl
//
//  Contents:  Core Interfaces
//
//----------------------------------------------------------------------------

#define DISPID_NEWENUM -4


//
// The constants below are control codes acceptable for
// IADs::PutEx functions
//

enum {
   ADS_PROPERTY_CLEAR=1,
   ADS_PROPERTY_UPDATE=2,
   ADS_PROPERTY_APPEND=3,
   ADS_PROPERTY_DELETE=4

};


[ uuid(OLEDS_IID_IADs), oleautomation, dual]
interface IADs : IDispatch
{

    PROPERTY_RO(Name, BSTR, 2)
    PROPERTY_RO(Class,  BSTR, 3)
    PROPERTY_RO(GUID, BSTR, 4)
    PROPERTY_RO(ADsPath, BSTR, 5)
    PROPERTY_RO(Parent, BSTR, 6)
    PROPERTY_RO(Schema, BSTR, 7)

    [id(8)]
    HRESULT
    GetInfo();

    [id(9)]
    HRESULT
    SetInfo();

    [id(10)]
    HRESULT
    Get (
        [in] BSTR bstrName,
        [out, retval] VARIANT *pvProp
        );

    [id(11)]
    HRESULT
    Put (
        [in] BSTR bstrName,
        [in] VARIANT vProp
        );

    [id(12)]
    HRESULT
    GetEx(
        [in] BSTR bstrName,
        [out, retval] VARIANT *pvProp
        );

    [id(13)]
    HRESULT
    PutEx(
        [in] long lnControlCode,
        [in] BSTR bstrName,
        [in] VARIANT vProp
        );

    [id(14)]
    HRESULT
    GetInfoEx(
        [in] VARIANT vProperties,
        [in] long lnReserved
        );


};

[ uuid(OLEDS_IID_IADsContainer), oleautomation, dual]
interface IADsContainer : IDispatch
{

    [propget, id(2)]
    HRESULT
    Count(
        [out, retval] long *retval
        );

    [propget, restricted, id(DISPID_NEWENUM)]    // Must be propget.
    HRESULT
    _NewEnum(
        [out, retval] IUnknown** retval
        );

    [propget, id(3)]
    HRESULT
    Filter(
        [out,retval] VARIANT *pVar
        );

    [propput, id(3)]
    HRESULT
    Filter(
        [in] VARIANT Var
        );

    [propget, id(4)]
    HRESULT
    Hints(
        [out,retval] VARIANT *pvFilter
        );

    [propput, id(4)]
    HRESULT
    Hints(
        [in] VARIANT vHints
        );

    [id(5)]
    HRESULT
    GetObject(
        [in] BSTR ClassName,
        [in] BSTR RelativeName,
        [out, retval] IDispatch **ppObject
        );

    [id(6)]
    HRESULT
    Create(
        [in]BSTR ClassName,
        [in] BSTR RelativeName,
        [out, retval] IDispatch **ppObject
        );

    [id(7)]
    HRESULT
    Delete(
        [in] BSTR bstrClassName,
        [in] BSTR bstrRelativeName
        );

    [id(8)]
    HRESULT
    CopyHere(
        [in] BSTR SourceName,
        [in] BSTR NewName,
        [retval, out] IDispatch **ppObject
        );

    [id(9)]
    HRESULT
    MoveHere(
        [in] BSTR SourceName,
        [in]BSTR NewName,
        [retval, out] IDispatch **ppObject
        );
};


[uuid(OLEDS_IID_IADsCollection), oleautomation, dual]
interface IADsCollection: IDispatch
{

    [id(DISPID_NEWENUM), propget]
    HRESULT
    _NewEnum(
        [out, retval] IUnknown **ppEnumerator
        );

    [id(4)]
    HRESULT
    Add(
        [in]BSTR bstrName,
        [in] VARIANT vItem
        );

    [id(5)]
    HRESULT
    Remove(
        [in] BSTR bstrItemToBeRemoved
        );

    [id(6)]
    HRESULT
    GetObject(
        [in] BSTR bstrName,
        [out, retval] VARIANT *pvItem
        );

};


[uuid(OLEDS_IID_IADsMembers), oleautomation, dual]
interface IADsMembers: IDispatch
{
    [id(2), propget]
    HRESULT
    Count(
        [out, retval] long *plCount
        );

    [id(DISPID_NEWENUM), propget]
    HRESULT
    _NewEnum(
        [out, retval] IUnknown **ppEnumerator
        );

    [id(3), propget]
    HRESULT
    Filter(
        [out, retval] VARIANT *pvFilter
        );

    [id(3), propput]
    HRESULT
    Filter(
        [in] VARIANT pvFilter
        );
};



[uuid(OLEDS_IID_IADsPropertyList), oleautomation, dual]
interface IADsPropertyList: IDispatch
{
    [id(2), propget]
    HRESULT
    PropertyCount(
        [out, retval] long *plCount
        );

    [id(3)]
    HRESULT
    Next(
         [out, retval] VARIANT *pVariant
         );

    [id(4)]
    HRESULT
    Skip([in] ULONG cElements);

    [id(5)]
    HRESULT
    Reset();

    [id(DISPID_VALUE)]
    HRESULT
    Item(
        [in] VARIANT varIndex,
        [out, retval] VARIANT *pVariant
        );

    [id(6)]
    HRESULT
    GetPropertyItem(
        [in] BSTR bstrName,
        [in] LONG lnADsType,
        [out, retval] VARIANT *pVariant
        );

    [id(7)]
    HRESULT
    PutPropertyItem(
        [in] VARIANT varData
        );

    [id(8)]
    HRESULT
    ResetPropertyItem(
        [in] VARIANT varEntry
        );


    [id(9)]
    HRESULT
    PurgePropertyList();

};







[uuid(OLEDS_IID_IADsPropertyEntry), oleautomation, dual]
interface IADsPropertyEntry: IDispatch
{
   [id(1)]
   HRESULT
   Clear();

   PROPERTY_BSTR_RW(Name, 2)

   PROPERTY_LONG_RW(ADsType, 3)

   PROPERTY_LONG_RW(ControlCode, 4)

   PROPERTY_VARIANT_RW(Values, 5)

};

[uuid(OLEDS_IID_IADsAttrInfo)]
interface IADsAttrInfo: IUnknown
{
   HRESULT
   ConvertAttrInfoToPropertyEntry(
        PADS_ATTR_INFO pAttrInfo
        );

   HRESULT
   ConvertPropertyEntryToAttrInfo(
        PADS_ATTR_INFO * ppAttrInfo
        );
};



[ uuid(OLEDS_CLSID_PropertyEntry)]
coclass PropertyEntry
{
        [default] interface IADsPropertyEntry;
                  interface IDispatch;
};


[uuid(OLEDS_IID_IADsPropertyValue), oleautomation, dual]
interface IADsPropertyValue: IDispatch
{

   [id(1)]
   HRESULT
   Clear();

   PROPERTY_LONG_RW(ADsType, 2)

   PROPERTY_BSTR_RW(DNString, 3)

   PROPERTY_BSTR_RW(CaseExactString, 4)

   PROPERTY_BSTR_RW(CaseIgnoreString, 5)

   PROPERTY_BSTR_RW(PrintableString, 6)

   PROPERTY_BSTR_RW(NumericString, 7)

   PROPERTY_LONG_RW(Boolean, 8)

   PROPERTY_LONG_RW(Integer, 9)

   PROPERTY_VARIANT_RW(OctetString, 10)

   PROPERTY_DISPATCH_RW(SecurityDescriptor, 11)

   PROPERTY_DISPATCH_RW(LargeInteger, 12)
   
   PROPERTY_DATE_RW(UTCTime, 13)
};

[uuid(OLEDS_IID_IADsValue)]
interface IADsValue: IUnknown
{
   HRESULT
   ConvertADsValueToPropertyValue(
        PADSVALUE pADsValue
        );

   HRESULT
   ConvertPropertyValueToADsValue(
        PADSVALUE  pADsValue
        );
};


[ uuid(OLEDS_CLSID_PropertyValue)]
coclass PropertyValue
{
        [default] interface IADsPropertyValue;
                  interface IDispatch;
};


