//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File: propidl.idl
//
//--------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (c) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")
cpp_quote("#if ( _MSC_VER >= 1020 )")
cpp_quote("#pragma once")
cpp_quote("#endif")

#ifndef DO_NO_IMPORTS
import "propidl.idl";
#endif

cpp_quote("#include <pshpack8.h>")


/****************************************************************************
 *  Property Bag Interfaces
 ****************************************************************************/

interface IEnumSTATPROPBAG;

cpp_quote("EXTERN_C const FMTID FMTID_PropertyBag;")

[
    object,
    uuid(20011801-5DE6-11D1-8E38-00C04FB9386D),
    pointer_default(unique)
]
interface IPropertyBagEx : IUnknown
{
    typedef IPropertyBagEx * LPPROPERTYBAGEX;

    HRESULT ReadMultiple( [in] ULONG cprops,	
                          [in, size_is(cprops)] LPCOLESTR const rgwszPropNames[],
                          [in, out, size_is(cprops)] PROPVARIANT rgvar[ ],
                          [in] IErrorLog* pErrorLog );

    HRESULT WriteMultiple( [in] ULONG cprops,
                           [in, size_is(cprops)] LPCOLESTR const rgwszPropNames[],
                           [in, size_is(cprops)] const PROPVARIANT rgvar[] );

    HRESULT DeleteMultiple( [in] ULONG cprops,
	                    [in, size_is(cprops)] LPCOLESTR const rgwszPropNames[],
                            [in] DWORD dwReserved  );

    const DWORD OPENPROPERTY_OVERWRITE  = 1;
    HRESULT Open( [in] IUnknown* pUnkOuter,	
                  [in] LPCOLESTR wszPropName,	
                  [in] GUID guidPropertyType,	
                  [in] DWORD dwFlags,	
                  [in] REFIID riid,	
                  [out, iid_is(riid)] IUnknown ** ppUnk );


    HRESULT Enum( [in] LPCOLESTR wszPropNameMask,	
                  [in] DWORD dwFlags,	
                  [out]IEnumSTATPROPBAG ** ppenum );

}


[
    object,
    uuid(20021801-5DE6-11D1-8E38-00C04FB9386D),
    pointer_default(unique)
]
interface IEnumSTATPROPBAG: IUnknown
{

    typedef [unique] IEnumSTATPROPBAG* LPENUMSTATPROPBAG;
    typedef struct tagSTATPROPBAG
    {
        LPOLESTR lpwstrName;
        VARTYPE  vt;
        GUID     guidPropertyType;
    }   STATPROPBAG;

    HRESULT Next(
        [in]    ULONG                   celt,
        [out, size_is(celt), length_is(*pceltFetched)]
                STATPROPBAG*                rgelt,
        [out]   ULONG *                 pceltFetched
        );

    HRESULT Skip(
        [in]    ULONG                   celt
        );

    HRESULT Reset();

    HRESULT Clone(
        [out]   IEnumSTATPROPBAG **     ppenum
        );
}

cpp_quote("#include <poppack.h>")
