| /* | |
| * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| import "objidl.idl"; | |
| import "oaidl.idl"; | |
| /* | |
| * 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; | |
| }; | |
| }; | |
| typedef struct tagPROPVARIANT *LPPROPVARIANT; | |
| 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] ; | |
| }; | |
| } 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))") |