| /* | |
| * Copyright 2002 Ove Kaaven | |
| * Copyright 2004 Francois Gouget | |
| * Copyright 2005 Juan Lang | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #ifndef DO_NO_IMPORTS | |
| import "objidl.idl"; | |
| import "oaidl.idl"; | |
| #endif | |
| /* | |
| * Windows SDK braindamage alert | |
| * | |
| * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too | |
| * PID_SECURITY is defined in msidefs.h with a different value! | |
| * So these need to be undefined first. | |
| */ | |
| cpp_quote("#ifdef PID_DICTIONARY") | |
| cpp_quote("#undef PID_DICTIONARY") | |
| cpp_quote("#endif") | |
| cpp_quote("#ifdef PID_CODEPAGE") | |
| cpp_quote("#undef PID_CODEPAGE") | |
| cpp_quote("#endif") | |
| cpp_quote("#ifdef PID_SECURITY") | |
| cpp_quote("#undef PID_SECURITY") | |
| cpp_quote("#endif") | |
| /******************** Property Storage ********************/ | |
| interface IEnumSTATPROPSTG; | |
| interface IEnumSTATPROPSETSTG; | |
| [ | |
| object, | |
| uuid(00000138-0000-0000-C000-000000000046), | |
| pointer_default(unique) | |
| ] | |
| interface IPropertyStorage : IUnknown | |
| { | |
| typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE; | |
| const DWORD PROPSETFLAG_DEFAULT = 0; | |
| const DWORD PROPSETFLAG_NONSIMPLE = 1; | |
| const DWORD PROPSETFLAG_ANSI = 2; | |
| const DWORD PROPSETFLAG_UNBUFFERED = 4; | |
| const DWORD PROPSETFLAG_CASE_SENSITIVE = 8; | |
| const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1; | |
| const PROPID PID_DICTIONARY = 0x00000000; | |
| const PROPID PID_CODEPAGE = 0x00000001; | |
| const PROPID PID_FIRST_USABLE = 0x00000002; | |
| const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff; | |
| const PROPID PID_LOCALE = 0x80000000; | |
| const PROPID PID_MODIFY_TIME = 0x80000001; | |
| const PROPID PID_SECURITY = 0x80000002; | |
| const PROPID PID_BEHAVIOR = 0x80000003; | |
| const PROPID PID_ILLEGAL = 0xffffffff; | |
| const PROPID PID_MIN_READONLY = 0x80000000; | |
| const PROPID PID_MAX_READONLY = 0xbfffffff; | |
| typedef struct tagPROPVARIANT PROPVARIANT; | |
| #define TYPEDEF_CA(type, name) \ | |
| typedef struct tag##name { \ | |
| ULONG cElems; \ | |
| [size_is(cElems)] \ | |
| type *pElems; \ | |
| } name | |
| TYPEDEF_CA(unsigned char, CAUB); | |
| TYPEDEF_CA(short, CAI); | |
| TYPEDEF_CA(USHORT, CAUI); | |
| TYPEDEF_CA(long, CAL); | |
| TYPEDEF_CA(ULONG, CAUL); | |
| TYPEDEF_CA(float, CAFLT); | |
| TYPEDEF_CA(double, CADBL); | |
| TYPEDEF_CA(CY, CACY); | |
| TYPEDEF_CA(DATE, CADATE); | |
| TYPEDEF_CA(BSTR, CABSTR); | |
| TYPEDEF_CA(BSTRBLOB, CABSTRBLOB); | |
| TYPEDEF_CA(VARIANT_BOOL, CABOOL); | |
| TYPEDEF_CA(SCODE, CASCODE); | |
| TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT); | |
| TYPEDEF_CA(LARGE_INTEGER, CAH); | |
| TYPEDEF_CA(ULARGE_INTEGER, CAUH); | |
| TYPEDEF_CA(LPSTR, CALPSTR); | |
| TYPEDEF_CA(LPWSTR, CALPWSTR); | |
| TYPEDEF_CA(FILETIME, CAFILETIME); | |
| TYPEDEF_CA(CLIPDATA, CACLIPDATA); | |
| TYPEDEF_CA(CLSID, CACLSID); | |
| struct tagPROPVARIANT { | |
| VARTYPE vt; | |
| WORD wReserved1; | |
| WORD wReserved2; | |
| WORD wReserved3; | |
| [switch_is(vt & 0x1fff)] union { | |
| [case(VT_EMPTY, VT_NULL)] ; | |
| [case(VT_I1)] char cVal; | |
| [case(VT_UI1)] UCHAR bVal; | |
| [case(VT_I2)] short iVal; | |
| [case(VT_UI2)] USHORT uiVal; | |
| [case(VT_BOOL)] VARIANT_BOOL boolVal; | |
| #if 0 /* illegal in C++ */ | |
| [case(VT_ILLEGAL)] _VARIANT_BOOL bool; | |
| #endif | |
| [case(VT_I4)] long lVal; | |
| [case(VT_UI4)] ULONG ulVal; | |
| [case(VT_R4)] float fltVal; | |
| [case(VT_ERROR)] SCODE scode; | |
| [case(VT_I8)] LARGE_INTEGER hVal; | |
| [case(VT_UI8)] ULARGE_INTEGER uhVal; | |
| [case(VT_R8)] double dblVal; | |
| [case(VT_CY)] CY cyVal; | |
| [case(VT_DATE)] DATE date; | |
| [case(VT_FILETIME)] FILETIME filetime; | |
| [case(VT_CLSID)] CLSID *puuid; | |
| [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob; | |
| [case(VT_CF)] CLIPDATA *pclipdata; | |
| [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream; | |
| [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage; | |
| [case(VT_BSTR)] BSTR bstrVal; | |
| [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal; | |
| [case(VT_LPSTR)] LPSTR pszVal; | |
| [case(VT_LPWSTR)] LPWSTR pwszVal; | |
| [case(VT_UI1|VT_VECTOR)] CAUB caub; | |
| [case(VT_I2|VT_VECTOR)] CAI cai; | |
| [case(VT_UI2|VT_VECTOR)] CAUI caui; | |
| [case(VT_BOOL|VT_VECTOR)] CABOOL cabool; | |
| [case(VT_I4|VT_VECTOR)] CAL cal; | |
| [case(VT_UI4|VT_VECTOR)] CAUL caul; | |
| [case(VT_R4|VT_VECTOR)] CAFLT caflt; | |
| [case(VT_ERROR|VT_VECTOR)] CASCODE cascode; | |
| [case(VT_I8|VT_VECTOR)] CAH cah; | |
| [case(VT_UI8|VT_VECTOR)] CAUH cauh; | |
| [case(VT_R8|VT_VECTOR)] CADBL cadbl; | |
| [case(VT_CY|VT_VECTOR)] CACY cacy; | |
| [case(VT_DATE|VT_VECTOR)] CADATE cadate; | |
| [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime; | |
| [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid; | |
| [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata; | |
| [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr; | |
| [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob; | |
| [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr; | |
| [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr; | |
| [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar; | |
| [case(VT_ARRAY|VT_I1, | |
| VT_ARRAY|VT_UI1, | |
| VT_ARRAY|VT_I2, | |
| VT_ARRAY|VT_UI2, | |
| VT_ARRAY|VT_I4, | |
| VT_ARRAY|VT_UI4, | |
| VT_ARRAY|VT_INT, | |
| VT_ARRAY|VT_UINT, | |
| VT_ARRAY|VT_R4, | |
| VT_ARRAY|VT_R8, | |
| VT_ARRAY|VT_CY, | |
| VT_ARRAY|VT_DATE, | |
| VT_ARRAY|VT_BSTR, | |
| VT_ARRAY|VT_BOOL, | |
| VT_ARRAY|VT_DECIMAL, | |
| VT_ARRAY|VT_DISPATCH, | |
| VT_ARRAY|VT_UNKNOWN, | |
| VT_ARRAY|VT_ERROR, | |
| VT_ARRAY|VT_VARIANT)] LPSAFEARRAY parray; | |
| [case(VT_BYREF|VT_I1)] CHAR *pcVal; | |
| [case(VT_BYREF|VT_UI1)] UCHAR *pbVal; | |
| [case(VT_BYREF|VT_I2)] SHORT *piVal; | |
| [case(VT_BYREF|VT_UI2)] USHORT *puiVal; | |
| [case(VT_BYREF|VT_I4)] LONG *plVal; | |
| [case(VT_BYREF|VT_UI4)] ULONG *pulVal; | |
| [case(VT_BYREF|VT_INT)] INT *pintVal; | |
| [case(VT_BYREF|VT_UINT)] UINT *puintVal; | |
| [case(VT_BYREF|VT_R4)] FLOAT *pfltVal; | |
| [case(VT_BYREF|VT_R8)] DOUBLE *pdblVal; | |
| [case(VT_BYREF|VT_BOOL)] VARIANT_BOOL *pboolVal; | |
| [case(VT_BYREF|VT_DECIMAL)] DECIMAL *pdecVal; | |
| [case(VT_BYREF|VT_ERROR)] SCODE *pscode; | |
| [case(VT_BYREF|VT_CY)] CY *pcyVal; | |
| [case(VT_BYREF|VT_DATE)] DATE *pdate; | |
| [case(VT_BYREF|VT_BSTR)] BSTR *pbstrVal; | |
| [case(VT_BYREF|VT_UNKNOWN)] IUnknown **ppunkVal; | |
| [case(VT_BYREF|VT_DISPATCH)] IDispatch **ppdispVal; | |
| [case(VT_BYREF|VT_ARRAY)] LPSAFEARRAY *pparray; | |
| [case(VT_BYREF|VT_VARIANT)] PROPVARIANT *pvarVal; | |
| } DUMMYUNIONNAME; | |
| }; | |
| typedef struct tagPROPVARIANT *LPPROPVARIANT; | |
| cpp_quote("#if 0") | |
| typedef const PROPVARIANT * REFPROPVARIANT; | |
| cpp_quote("#endif") | |
| cpp_quote("#ifndef _REFPROPVARIANT_DEFINED") | |
| cpp_quote("#define _REFPROPVARIANT_DEFINED") | |
| cpp_quote("#ifdef __cplusplus") | |
| cpp_quote("#define REFPROPVARIANT const PROPVARIANT &") | |
| cpp_quote("#else") | |
| cpp_quote("#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST") | |
| cpp_quote("#endif") | |
| cpp_quote("#endif") | |
| cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */") | |
| cpp_quote("") | |
| cpp_quote("#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_EDITTIME 0x0000000AL /* VT_FILETIME (UTC) */") | |
| cpp_quote("#define PIDSI_LASTPRINTED 0x0000000BL /* VT_FILETIME (UTC) */") | |
| cpp_quote("#define PIDSI_CREATE_DTM 0x0000000CL /* VT_FILETIME (UTC) */") | |
| cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */") | |
| cpp_quote("#define PIDSI_PAGECOUNT 0x0000000EL /* VT_I4 */") | |
| cpp_quote("#define PIDSI_WORDCOUNT 0x0000000FL /* VT_I4 */") | |
| cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */") | |
| cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */") | |
| cpp_quote("#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */") | |
| cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */") | |
| cpp_quote("") | |
| cpp_quote("#define PIDDSI_CATEGORY 0x00000002L /* VT_LPSTR */") | |
| cpp_quote("#define PIDDSI_PRESFORMAT 0x00000003L /* VT_LPSTR */") | |
| cpp_quote("#define PIDDSI_BYTECOUNT 0x00000004L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_LINECOUNT 0x00000005L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_PARCOUNT 0x00000006L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_SLIDECOUNT 0x00000007L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_NOTECOUNT 0x00000008L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */") | |
| cpp_quote("#define PIDDSI_SCALE 0x0000000BL /* VT_BOOL */") | |
| cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */") | |
| cpp_quote("#define PIDDSI_DOCPARTS 0x0000000DL /* VT_LPSTR|VT_VECTOR */") | |
| cpp_quote("#define PIDDSI_MANAGER 0x0000000EL /* VT_LPSTR */") | |
| cpp_quote("#define PIDDSI_COMPANY 0x0000000FL /* VT_LPSTR */") | |
| cpp_quote("#define PIDDSI_LINKSDIRTY 0x00000010L /* VT_B0OL */") | |
| const ULONG PRSPEC_INVALID = 0xffffffff; | |
| const ULONG PRSPEC_LPWSTR = 0; | |
| const ULONG PRSPEC_PROPID = 1; | |
| typedef struct tagPROPSPEC { | |
| ULONG ulKind; | |
| [switch_is(ulKind)] union { | |
| [case(PRSPEC_PROPID)] PROPID propid; | |
| [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr; | |
| [default] ; | |
| } DUMMYUNIONNAME; | |
| } PROPSPEC; | |
| typedef struct tagSTATPROPSTG { | |
| LPOLESTR lpwstrName; | |
| PROPID propid; | |
| VARTYPE vt; | |
| } STATPROPSTG; | |
| cpp_quote("/* Macros for dwOSVersion member of STATPROPSETSTG */") | |
| cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD((dwOSVer))") | |
| cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))") | |
| cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))") | |
| cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xffffffff") | |
| typedef struct tagSTATPROPSETSTG { | |
| FMTID fmtid; | |
| CLSID clsid; | |
| DWORD grfFlags; | |
| FILETIME mtime; | |
| FILETIME ctime; | |
| FILETIME atime; | |
| DWORD dwOSVersion; | |
| } STATPROPSETSTG; | |
| HRESULT ReadMultiple( | |
| [in] ULONG cpspec, | |
| [in, size_is(cpspec)] const PROPSPEC rgpspec[], | |
| [out, size_is(cpspec)] PROPVARIANT rgpropvar[]); | |
| HRESULT WriteMultiple( | |
| [in] ULONG cpspec, | |
| [in, size_is(cpspec)] const PROPSPEC rgpspec[], | |
| [in, size_is(cpspec)] const PROPVARIANT rgpropvar[], | |
| [in] PROPID propidNameFirst); | |
| HRESULT DeleteMultiple( | |
| [in] ULONG cpspec, | |
| [in, size_is(cpspec)] const PROPSPEC rgpspec[]); | |
| HRESULT ReadPropertyNames( | |
| [in] ULONG cpropid, | |
| [in, size_is(cpropid)] const PROPID rgpropid[], | |
| [out, size_is(cpropid)] LPOLESTR rglpwstrName[]); | |
| HRESULT WritePropertyNames( | |
| [in] ULONG cpropid, | |
| [in, size_is(cpropid)] const PROPID rgpropid[], | |
| [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]); | |
| HRESULT DeletePropertyNames( | |
| [in] ULONG cpropid, | |
| [in, size_is(cpropid)] const PROPID rgpropid[]); | |
| HRESULT Commit( | |
| [in] DWORD grfCommitFlags); | |
| HRESULT Revert(); | |
| HRESULT Enum( | |
| [out] IEnumSTATPROPSTG **ppenum); | |
| HRESULT SetTimes( | |
| [in] const FILETIME *pctime, | |
| [in] const FILETIME *patime, | |
| [in] const FILETIME *pmtime); | |
| HRESULT SetClass( | |
| [in] REFCLSID clsid); | |
| HRESULT Stat( | |
| [out] STATPROPSETSTG *statpsstg); | |
| } | |
| [ | |
| object, | |
| uuid(0000013A-0000-0000-C000-000000000046), | |
| pointer_default(unique) | |
| ] | |
| interface IPropertySetStorage : IUnknown | |
| { | |
| typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE; | |
| HRESULT Create( | |
| [in] REFFMTID rfmtid, | |
| [in, unique] const CLSID *pclsid, | |
| [in] DWORD grfFlags, | |
| [in] DWORD grfMode, | |
| [out] IPropertyStorage **ppprstg); | |
| HRESULT Open( | |
| [in] REFFMTID rfmtid, | |
| [in] DWORD grfMode, | |
| [out] IPropertyStorage **ppprstg); | |
| HRESULT Delete( | |
| [in] REFFMTID rfmtid); | |
| HRESULT Enum( | |
| [out] IEnumSTATPROPSETSTG **ppenum); | |
| } | |
| [ | |
| object, | |
| uuid(00000139-0000-0000-C000-000000000046), | |
| pointer_default(unique) | |
| ] | |
| interface IEnumSTATPROPSTG : IUnknown | |
| { | |
| typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG; | |
| [local] | |
| HRESULT Next( | |
| [in] ULONG celt, | |
| [out, size_is(celt), length_is(*pceltFetched)] | |
| STATPROPSTG *rgelt, | |
| [out] ULONG *pceltFetched); | |
| [call_as(Next)] | |
| HRESULT RemoteNext( | |
| [in] ULONG celt, | |
| [out, size_is(celt), length_is(*pceltFetched)] | |
| STATPROPSTG *rgelt, | |
| [out] ULONG *pceltFetched); | |
| HRESULT Skip( | |
| [in] ULONG celt); | |
| HRESULT Reset(); | |
| HRESULT Clone( | |
| [out] IEnumSTATPROPSTG **ppenum); | |
| } | |
| [ | |
| object, | |
| uuid(0000013B-0000-0000-C000-000000000046), | |
| pointer_default(unique) | |
| ] | |
| interface IEnumSTATPROPSETSTG : IUnknown | |
| { | |
| typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG; | |
| [local] | |
| HRESULT Next( | |
| [in] ULONG celt, | |
| [out, size_is(celt), length_is(*pceltFetched)] | |
| STATPROPSETSTG *rgelt, | |
| [out] ULONG *pceltFetched); | |
| [call_as(Next)] | |
| HRESULT RemoteNext( | |
| [in] ULONG celt, | |
| [out, size_is(celt), length_is(*pceltFetched)] | |
| STATPROPSETSTG *rgelt, | |
| [out] ULONG *pceltFetched); | |
| HRESULT Skip( | |
| [in] ULONG celt); | |
| HRESULT Reset(); | |
| HRESULT Clone( | |
| [out] IEnumSTATPROPSETSTG **ppenum); | |
| } | |
| cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);") | |
| cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);") | |
| cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);") | |
| cpp_quote("") | |
| cpp_quote("#define _PROPVARIANT_INIT_DEFINED_") | |
| cpp_quote("#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))") | |
| cpp_quote("") | |
| cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_") | |
| cpp_quote("#define _STGCREATEPROPSTG_DEFINED_") | |
| cpp_quote("HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);") | |
| cpp_quote("HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);") | |
| cpp_quote("HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);") | |
| cpp_quote("#define CCH_MAX_PROPSTG_NAME 31") | |
| cpp_quote("HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);") | |
| cpp_quote("HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);") | |
| cpp_quote("#endif /* _STGCREATEPROPSTG_DEFINED_ */") | |
| cpp_quote("") |