/*** Autogenerated by WIDL 0.1 from propidl.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_PROPIDL_H
#define __WIDL_PROPIDL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <objidl.h>
#include <oaidl.h>
#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
#define __IEnumSTATPROPSTG_FWD_DEFINED__
typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG;
#endif

#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
#endif

#ifndef __IPropertyStorage_FWD_DEFINED__
#define __IPropertyStorage_FWD_DEFINED__
typedef struct IPropertyStorage IPropertyStorage;
#endif

typedef IPropertyStorage *LPPROPERTYSTORAGE;

#define PROPSETFLAG_DEFAULT (0)

#define PROPSETFLAG_NONSIMPLE (1)

#define PROPSETFLAG_ANSI (2)

#define PROPSETFLAG_UNBUFFERED (4)

typedef struct tagPROPVARIANT PROPVARIANT;

typedef struct tagCAUB {
    ULONG cElems;
    unsigned char *pElems;
} CAUB;

typedef struct tagCAI {
    ULONG cElems;
    short *pElems;
} CAI;

typedef struct tagCAUI {
    ULONG cElems;
    USHORT *pElems;
} CAUI;

typedef struct tagCAL {
    ULONG cElems;
    long *pElems;
} CAL;

typedef struct tagCAUL {
    ULONG cElems;
    ULONG *pElems;
} CAUL;

typedef struct tagCAFLT {
    ULONG cElems;
    float *pElems;
} CAFLT;

typedef struct tagCADBL {
    ULONG cElems;
    double *pElems;
} CADBL;

typedef struct tagCACY {
    ULONG cElems;
    CY *pElems;
} CACY;

typedef struct tagCADATE {
    ULONG cElems;
    DATE *pElems;
} CADATE;

typedef struct tagCABSTR {
    ULONG cElems;
    BSTR *pElems;
} CABSTR;

typedef struct tagCABSTRBLOB {
    ULONG cElems;
    BSTRBLOB *pElems;
} CABSTRBLOB;

typedef struct tagCABOOL {
    ULONG cElems;
    VARIANT_BOOL *pElems;
} CABOOL;

typedef struct tagCASCODE {
    ULONG cElems;
    SCODE *pElems;
} CASCODE;

typedef struct tagCAPROPVARIANT {
    ULONG cElems;
    PROPVARIANT *pElems;
} CAPROPVARIANT;

typedef struct tagCAH {
    ULONG cElems;
    LARGE_INTEGER *pElems;
} CAH;

typedef struct tagCAUH {
    ULONG cElems;
    ULARGE_INTEGER *pElems;
} CAUH;

typedef struct tagCALPSTR {
    ULONG cElems;
    LPSTR *pElems;
} CALPSTR;

typedef struct tagCALPWSTR {
    ULONG cElems;
    LPWSTR *pElems;
} CALPWSTR;

typedef struct tagCAFILETIME {
    ULONG cElems;
    FILETIME *pElems;
} CAFILETIME;

typedef struct tagCACLIPDATA {
    ULONG cElems;
    CLIPDATA *pElems;
} CACLIPDATA;

typedef struct tagCACLSID {
    ULONG cElems;
    CLSID *pElems;
} CACLSID;

struct tagPROPVARIANT {
    VARTYPE vt;
    WORD wReserved1;
    WORD wReserved2;
    WORD wReserved3;
    union {
        char cVal;
        UCHAR bVal;
        short iVal;
        USHORT uiVal;
        VARIANT_BOOL boolVal;
        long lVal;
        ULONG ulVal;
        float fltVal;
        SCODE scode;
        LARGE_INTEGER hVal;
        ULARGE_INTEGER uhVal;
        double dblVal;
        CY cyVal;
        DATE date;
        FILETIME filetime;
        CLSID *puuid;
        BLOB blob;
        CLIPDATA *pclipdata;
        IStream *pStream;
        IStorage *pStorage;
        BSTR bstrVal;
        BSTRBLOB bstrblobVal;
        LPSTR pszVal;
        LPWSTR pwszVal;
        CAUB caub;
        CAI cai;
        CAUI caui;
        CABOOL cabool;
        CAL cal;
        CAUL caul;
        CAFLT caflt;
        CASCODE cascode;
        CAH cah;
        CAUH cauh;
        CADBL cadbl;
        CACY cacy;
        CADATE cadate;
        CAFILETIME cafiletime;
        CACLSID cauuid;
        CACLIPDATA caclipdata;
        CABSTR cabstr;
        CABSTRBLOB cabstrblob;
        CALPSTR calpstr;
        CALPWSTR calpwstr;
        CAPROPVARIANT capropvar;
    } DUMMYUNIONNAME;
};

typedef struct tagPROPVARIANT *LPPROPVARIANT;

#define PRSPEC_INVALID (0xffffffff)

#define PRSPEC_LPWSTR (0)

#define PRSPEC_PROPID (1)

typedef struct tagPROPSPEC {
    ULONG ulKind;
    union {
        PROPID propid;
        LPOLESTR lpwstr;
    } DUMMYUNIONNAME;
} PROPSPEC;

typedef struct tagSTATPROPSTG {
    LPOLESTR lpwstrName;
    PROPID propid;
    VARTYPE vt;
} STATPROPSTG;

typedef struct tagSTATPROPSETSTG {
    FMTID fmtid;
    CLSID clsid;
    DWORD grfFlags;
    FILETIME mtime;
    FILETIME ctime;
    FILETIME atime;
    DWORD dwOSVersion;
} STATPROPSETSTG;

/*****************************************************************************
 * IPropertyStorage interface
 */
#ifndef __IPropertyStorage_INTERFACE_DEFINED__
#define __IPropertyStorage_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPropertyStorage, 0x00000138, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IPropertyStorage : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
        ULONG cpspec,
        const PROPSPEC rgpspec[],
        PROPVARIANT rgpropvar[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
        ULONG cpspec,
        const PROPSPEC rgpspec[],
        const PROPVARIANT rgpropvar[],
        PROPID propidNameFirst) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
        ULONG cpspec,
        const PROPSPEC rgpspec[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
        ULONG cpropid,
        const PROPID rgpropid[],
        LPOLESTR rglpwstrName[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
        ULONG cpropid,
        const PROPID rgpropid[],
        const LPOLESTR rglpwstrName[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
        ULONG cpropid,
        const PROPID rgpropid[]) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        DWORD grfCommitFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Revert(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Enum(
        IEnumSTATPROPSTG** ppenum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTimes(
        const FILETIME* pctime,
        const FILETIME* patime,
        const FILETIME* pmtime) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetClass(
        REFCLSID clsid) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stat(
        STATPROPSETSTG* statpsstg) = 0;

};
#else
typedef struct IPropertyStorageVtbl IPropertyStorageVtbl;
struct IPropertyStorage {
    const IPropertyStorageVtbl* lpVtbl;
};
struct IPropertyStorageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPropertyStorage* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPropertyStorage* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPropertyStorage* This);

    /*** IPropertyStorage methods ***/
    HRESULT (STDMETHODCALLTYPE *ReadMultiple)(
        IPropertyStorage* This,
        ULONG cpspec,
        const PROPSPEC rgpspec[],
        PROPVARIANT rgpropvar[]);

    HRESULT (STDMETHODCALLTYPE *WriteMultiple)(
        IPropertyStorage* This,
        ULONG cpspec,
        const PROPSPEC rgpspec[],
        const PROPVARIANT rgpropvar[],
        PROPID propidNameFirst);

    HRESULT (STDMETHODCALLTYPE *DeleteMultiple)(
        IPropertyStorage* This,
        ULONG cpspec,
        const PROPSPEC rgpspec[]);

    HRESULT (STDMETHODCALLTYPE *ReadPropertyNames)(
        IPropertyStorage* This,
        ULONG cpropid,
        const PROPID rgpropid[],
        LPOLESTR rglpwstrName[]);

    HRESULT (STDMETHODCALLTYPE *WritePropertyNames)(
        IPropertyStorage* This,
        ULONG cpropid,
        const PROPID rgpropid[],
        const LPOLESTR rglpwstrName[]);

    HRESULT (STDMETHODCALLTYPE *DeletePropertyNames)(
        IPropertyStorage* This,
        ULONG cpropid,
        const PROPID rgpropid[]);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IPropertyStorage* This,
        DWORD grfCommitFlags);

    HRESULT (STDMETHODCALLTYPE *Revert)(
        IPropertyStorage* This);

    HRESULT (STDMETHODCALLTYPE *Enum)(
        IPropertyStorage* This,
        IEnumSTATPROPSTG** ppenum);

    HRESULT (STDMETHODCALLTYPE *SetTimes)(
        IPropertyStorage* This,
        const FILETIME* pctime,
        const FILETIME* patime,
        const FILETIME* pmtime);

    HRESULT (STDMETHODCALLTYPE *SetClass)(
        IPropertyStorage* This,
        REFCLSID clsid);

    HRESULT (STDMETHODCALLTYPE *Stat)(
        IPropertyStorage* This,
        STATPROPSETSTG* statpsstg);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPropertyStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IPropertyStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IPropertyStorage_Release(p) (p)->lpVtbl->Release(p)
/*** IPropertyStorage methods ***/
#define IPropertyStorage_ReadMultiple(p,a,b,c) (p)->lpVtbl->ReadMultiple(p,a,b,c)
#define IPropertyStorage_WriteMultiple(p,a,b,c,d) (p)->lpVtbl->WriteMultiple(p,a,b,c,d)
#define IPropertyStorage_DeleteMultiple(p,a,b) (p)->lpVtbl->DeleteMultiple(p,a,b)
#define IPropertyStorage_ReadPropertyNames(p,a,b,c) (p)->lpVtbl->ReadPropertyNames(p,a,b,c)
#define IPropertyStorage_WritePropertyNames(p,a,b,c) (p)->lpVtbl->WritePropertyNames(p,a,b,c)
#define IPropertyStorage_DeletePropertyNames(p,a,b) (p)->lpVtbl->DeletePropertyNames(p,a,b)
#define IPropertyStorage_Commit(p,a) (p)->lpVtbl->Commit(p,a)
#define IPropertyStorage_Revert(p) (p)->lpVtbl->Revert(p)
#define IPropertyStorage_Enum(p,a) (p)->lpVtbl->Enum(p,a)
#define IPropertyStorage_SetTimes(p,a,b,c) (p)->lpVtbl->SetTimes(p,a,b,c)
#define IPropertyStorage_SetClass(p,a) (p)->lpVtbl->SetClass(p,a)
#define IPropertyStorage_Stat(p,a) (p)->lpVtbl->Stat(p,a)
#endif

#endif

HRESULT CALLBACK IPropertyStorage_ReadMultiple_Proxy(
    IPropertyStorage* This,
    ULONG cpspec,
    const PROPSPEC rgpspec[],
    PROPVARIANT rgpropvar[]);
void __RPC_STUB IPropertyStorage_ReadMultiple_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_WriteMultiple_Proxy(
    IPropertyStorage* This,
    ULONG cpspec,
    const PROPSPEC rgpspec[],
    const PROPVARIANT rgpropvar[],
    PROPID propidNameFirst);
void __RPC_STUB IPropertyStorage_WriteMultiple_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_DeleteMultiple_Proxy(
    IPropertyStorage* This,
    ULONG cpspec,
    const PROPSPEC rgpspec[]);
void __RPC_STUB IPropertyStorage_DeleteMultiple_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_ReadPropertyNames_Proxy(
    IPropertyStorage* This,
    ULONG cpropid,
    const PROPID rgpropid[],
    LPOLESTR rglpwstrName[]);
void __RPC_STUB IPropertyStorage_ReadPropertyNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_WritePropertyNames_Proxy(
    IPropertyStorage* This,
    ULONG cpropid,
    const PROPID rgpropid[],
    const LPOLESTR rglpwstrName[]);
void __RPC_STUB IPropertyStorage_WritePropertyNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_DeletePropertyNames_Proxy(
    IPropertyStorage* This,
    ULONG cpropid,
    const PROPID rgpropid[]);
void __RPC_STUB IPropertyStorage_DeletePropertyNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_Commit_Proxy(
    IPropertyStorage* This,
    DWORD grfCommitFlags);
void __RPC_STUB IPropertyStorage_Commit_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_Revert_Proxy(
    IPropertyStorage* This);
void __RPC_STUB IPropertyStorage_Revert_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_Enum_Proxy(
    IPropertyStorage* This,
    IEnumSTATPROPSTG** ppenum);
void __RPC_STUB IPropertyStorage_Enum_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_SetTimes_Proxy(
    IPropertyStorage* This,
    const FILETIME* pctime,
    const FILETIME* patime,
    const FILETIME* pmtime);
void __RPC_STUB IPropertyStorage_SetTimes_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_SetClass_Proxy(
    IPropertyStorage* This,
    REFCLSID clsid);
void __RPC_STUB IPropertyStorage_SetClass_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertyStorage_Stat_Proxy(
    IPropertyStorage* This,
    STATPROPSETSTG* statpsstg);
void __RPC_STUB IPropertyStorage_Stat_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPropertyStorage_INTERFACE_DEFINED__ */

#ifndef __IPropertySetStorage_FWD_DEFINED__
#define __IPropertySetStorage_FWD_DEFINED__
typedef struct IPropertySetStorage IPropertySetStorage;
#endif

typedef IPropertySetStorage *LPPROPERTYSETSTORAGE;

/*****************************************************************************
 * IPropertySetStorage interface
 */
#ifndef __IPropertySetStorage_INTERFACE_DEFINED__
#define __IPropertySetStorage_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPropertySetStorage, 0x0000013a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IPropertySetStorage : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Create(
        REFFMTID rfmtid,
        const CLSID* pclsid,
        DWORD grfFlags,
        DWORD grfMode,
        IPropertyStorage** ppprstg) = 0;

    virtual HRESULT STDMETHODCALLTYPE Open(
        REFFMTID rfmtid,
        DWORD grfMode,
        IPropertyStorage** ppprstg) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        REFFMTID rfmtid) = 0;

    virtual HRESULT STDMETHODCALLTYPE Enum(
        IEnumSTATPROPSETSTG** ppenum) = 0;

};
#else
typedef struct IPropertySetStorageVtbl IPropertySetStorageVtbl;
struct IPropertySetStorage {
    const IPropertySetStorageVtbl* lpVtbl;
};
struct IPropertySetStorageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPropertySetStorage* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPropertySetStorage* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPropertySetStorage* This);

    /*** IPropertySetStorage methods ***/
    HRESULT (STDMETHODCALLTYPE *Create)(
        IPropertySetStorage* This,
        REFFMTID rfmtid,
        const CLSID* pclsid,
        DWORD grfFlags,
        DWORD grfMode,
        IPropertyStorage** ppprstg);

    HRESULT (STDMETHODCALLTYPE *Open)(
        IPropertySetStorage* This,
        REFFMTID rfmtid,
        DWORD grfMode,
        IPropertyStorage** ppprstg);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        IPropertySetStorage* This,
        REFFMTID rfmtid);

    HRESULT (STDMETHODCALLTYPE *Enum)(
        IPropertySetStorage* This,
        IEnumSTATPROPSETSTG** ppenum);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPropertySetStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IPropertySetStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IPropertySetStorage_Release(p) (p)->lpVtbl->Release(p)
/*** IPropertySetStorage methods ***/
#define IPropertySetStorage_Create(p,a,b,c,d,e) (p)->lpVtbl->Create(p,a,b,c,d,e)
#define IPropertySetStorage_Open(p,a,b,c) (p)->lpVtbl->Open(p,a,b,c)
#define IPropertySetStorage_Delete(p,a) (p)->lpVtbl->Delete(p,a)
#define IPropertySetStorage_Enum(p,a) (p)->lpVtbl->Enum(p,a)
#endif

#endif

HRESULT CALLBACK IPropertySetStorage_Create_Proxy(
    IPropertySetStorage* This,
    REFFMTID rfmtid,
    const CLSID* pclsid,
    DWORD grfFlags,
    DWORD grfMode,
    IPropertyStorage** ppprstg);
void __RPC_STUB IPropertySetStorage_Create_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertySetStorage_Open_Proxy(
    IPropertySetStorage* This,
    REFFMTID rfmtid,
    DWORD grfMode,
    IPropertyStorage** ppprstg);
void __RPC_STUB IPropertySetStorage_Open_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertySetStorage_Delete_Proxy(
    IPropertySetStorage* This,
    REFFMTID rfmtid);
void __RPC_STUB IPropertySetStorage_Delete_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IPropertySetStorage_Enum_Proxy(
    IPropertySetStorage* This,
    IEnumSTATPROPSETSTG** ppenum);
void __RPC_STUB IPropertySetStorage_Enum_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPropertySetStorage_INTERFACE_DEFINED__ */

typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG;

/*****************************************************************************
 * IEnumSTATPROPSTG interface
 */
#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__
#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumSTATPROPSTG, 0x00000139, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumSTATPROPSTG : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        STATPROPSTG* rgelt,
        ULONG* pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumSTATPROPSTG** ppenum) = 0;

};
#else
typedef struct IEnumSTATPROPSTGVtbl IEnumSTATPROPSTGVtbl;
struct IEnumSTATPROPSTG {
    const IEnumSTATPROPSTGVtbl* lpVtbl;
};
struct IEnumSTATPROPSTGVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumSTATPROPSTG* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumSTATPROPSTG* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumSTATPROPSTG* This);

    /*** IEnumSTATPROPSTG methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumSTATPROPSTG* This,
        ULONG celt,
        STATPROPSTG* rgelt,
        ULONG* pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumSTATPROPSTG* This,
        ULONG celt);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumSTATPROPSTG* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumSTATPROPSTG* This,
        IEnumSTATPROPSTG** ppenum);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IEnumSTATPROPSTG_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumSTATPROPSTG_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumSTATPROPSTG_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumSTATPROPSTG methods ***/
#define IEnumSTATPROPSTG_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumSTATPROPSTG_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumSTATPROPSTG_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumSTATPROPSTG_Clone(p,a) (p)->lpVtbl->Clone(p,a)
#endif

#endif

HRESULT CALLBACK IEnumSTATPROPSTG_RemoteNext_Proxy(
    IEnumSTATPROPSTG* This,
    ULONG celt,
    STATPROPSTG* rgelt,
    ULONG* pceltFetched);
void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSTG_Next_Proxy(
    IEnumSTATPROPSTG* This,
    ULONG celt,
    STATPROPSTG* rgelt,
    ULONG* pceltFetched);
HRESULT __RPC_STUB IEnumSTATPROPSTG_Next_Stub(
    IEnumSTATPROPSTG* This,
    ULONG celt,
    STATPROPSTG* rgelt,
    ULONG* pceltFetched);
HRESULT CALLBACK IEnumSTATPROPSTG_Skip_Proxy(
    IEnumSTATPROPSTG* This,
    ULONG celt);
void __RPC_STUB IEnumSTATPROPSTG_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSTG_Reset_Proxy(
    IEnumSTATPROPSTG* This);
void __RPC_STUB IEnumSTATPROPSTG_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSTG_Clone_Proxy(
    IEnumSTATPROPSTG* This,
    IEnumSTATPROPSTG** ppenum);
void __RPC_STUB IEnumSTATPROPSTG_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */

typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;

/*****************************************************************************
 * IEnumSTATPROPSETSTG interface
 */
#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumSTATPROPSETSTG, 0x0000013b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumSTATPROPSETSTG : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        STATPROPSETSTG* rgelt,
        ULONG* pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumSTATPROPSETSTG** ppenum) = 0;

};
#else
typedef struct IEnumSTATPROPSETSTGVtbl IEnumSTATPROPSETSTGVtbl;
struct IEnumSTATPROPSETSTG {
    const IEnumSTATPROPSETSTGVtbl* lpVtbl;
};
struct IEnumSTATPROPSETSTGVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumSTATPROPSETSTG* This,
        REFIID riid,
        void** ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumSTATPROPSETSTG* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumSTATPROPSETSTG* This);

    /*** IEnumSTATPROPSETSTG methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumSTATPROPSETSTG* This,
        ULONG celt,
        STATPROPSETSTG* rgelt,
        ULONG* pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumSTATPROPSETSTG* This,
        ULONG celt);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumSTATPROPSETSTG* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumSTATPROPSETSTG* This,
        IEnumSTATPROPSETSTG** ppenum);

    END_INTERFACE
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumSTATPROPSETSTG_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumSTATPROPSETSTG_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumSTATPROPSETSTG methods ***/
#define IEnumSTATPROPSETSTG_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumSTATPROPSETSTG_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumSTATPROPSETSTG_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumSTATPROPSETSTG_Clone(p,a) (p)->lpVtbl->Clone(p,a)
#endif

#endif

HRESULT CALLBACK IEnumSTATPROPSETSTG_RemoteNext_Proxy(
    IEnumSTATPROPSETSTG* This,
    ULONG celt,
    STATPROPSETSTG* rgelt,
    ULONG* pceltFetched);
void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSETSTG_Next_Proxy(
    IEnumSTATPROPSETSTG* This,
    ULONG celt,
    STATPROPSETSTG* rgelt,
    ULONG* pceltFetched);
HRESULT __RPC_STUB IEnumSTATPROPSETSTG_Next_Stub(
    IEnumSTATPROPSETSTG* This,
    ULONG celt,
    STATPROPSETSTG* rgelt,
    ULONG* pceltFetched);
HRESULT CALLBACK IEnumSTATPROPSETSTG_Skip_Proxy(
    IEnumSTATPROPSETSTG* This,
    ULONG celt);
void __RPC_STUB IEnumSTATPROPSETSTG_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSETSTG_Reset_Proxy(
    IEnumSTATPROPSETSTG* This);
void __RPC_STUB IEnumSTATPROPSETSTG_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumSTATPROPSETSTG_Clone_Proxy(
    IEnumSTATPROPSETSTG* This,
    IEnumSTATPROPSETSTG** ppenum);
void __RPC_STUB IEnumSTATPROPSETSTG_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */

HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);
HRESULT WINAPI PropVariantClear(PROPVARIANT*);
HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);
#ifdef __cplusplus
}
#endif
#endif /* __WIDL_PROPIDL_H */
