stash
[wine/wine64.git] / include / propidl.idl
blobbe673943d9a7159d713b4cb38519ab0beaf9981a
1 /*
2 * Copyright 2002 Ove Kaaven
3 * Copyright 2004 Francois Gouget
4 * Copyright 2005 Juan Lang
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef DO_NO_IMPORTS
22 import "objidl.idl";
23 import "oaidl.idl";
24 #endif
27 * Windows SDK braindamage alert
29 * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too
30 * PID_SECURITY is defined in msidefs.h with a different value!
31 * So these need to be undefined first.
33 cpp_quote("#ifdef PID_DICTIONARY")
34 cpp_quote("#undef PID_DICTIONARY")
35 cpp_quote("#endif")
37 cpp_quote("#ifdef PID_CODEPAGE")
38 cpp_quote("#undef PID_CODEPAGE")
39 cpp_quote("#endif")
41 cpp_quote("#ifdef PID_SECURITY")
42 cpp_quote("#undef PID_SECURITY")
43 cpp_quote("#endif")
45 /******************** Property Storage ********************/
47 interface IEnumSTATPROPSTG;
48 interface IEnumSTATPROPSETSTG;
51 object,
52 uuid(00000138-0000-0000-C000-000000000046),
53 pointer_default(unique)
55 interface IPropertyStorage : IUnknown
57 typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
59 const DWORD PROPSETFLAG_DEFAULT = 0;
60 const DWORD PROPSETFLAG_NONSIMPLE = 1;
61 const DWORD PROPSETFLAG_ANSI = 2;
62 const DWORD PROPSETFLAG_UNBUFFERED = 4;
63 const DWORD PROPSETFLAG_CASE_SENSITIVE = 8;
65 const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1;
67 const PROPID PID_DICTIONARY = 0x00000000;
68 const PROPID PID_CODEPAGE = 0x00000001;
69 const PROPID PID_FIRST_USABLE = 0x00000002;
70 const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
71 const PROPID PID_LOCALE = 0x80000000;
72 const PROPID PID_MODIFY_TIME = 0x80000001;
73 const PROPID PID_SECURITY = 0x80000002;
74 const PROPID PID_BEHAVIOR = 0x80000003;
75 const PROPID PID_ILLEGAL = 0xffffffff;
76 const PROPID PID_MIN_READONLY = 0x80000000;
77 const PROPID PID_MAX_READONLY = 0xbfffffff;
79 typedef struct tagPROPVARIANT PROPVARIANT;
81 #define TYPEDEF_CA(type, name) \
82 typedef struct tag##name { \
83 ULONG cElems; \
84 [size_is(cElems)] \
85 type *pElems; \
86 } name
88 TYPEDEF_CA(unsigned char, CAUB);
89 TYPEDEF_CA(short, CAI);
90 TYPEDEF_CA(USHORT, CAUI);
91 TYPEDEF_CA(long, CAL);
92 TYPEDEF_CA(ULONG, CAUL);
93 TYPEDEF_CA(float, CAFLT);
94 TYPEDEF_CA(double, CADBL);
95 TYPEDEF_CA(CY, CACY);
96 TYPEDEF_CA(DATE, CADATE);
97 TYPEDEF_CA(BSTR, CABSTR);
98 TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
99 TYPEDEF_CA(VARIANT_BOOL, CABOOL);
100 TYPEDEF_CA(SCODE, CASCODE);
101 TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
102 TYPEDEF_CA(LARGE_INTEGER, CAH);
103 TYPEDEF_CA(ULARGE_INTEGER, CAUH);
104 TYPEDEF_CA(LPSTR, CALPSTR);
105 TYPEDEF_CA(LPWSTR, CALPWSTR);
106 TYPEDEF_CA(FILETIME, CAFILETIME);
107 TYPEDEF_CA(CLIPDATA, CACLIPDATA);
108 TYPEDEF_CA(CLSID, CACLSID);
110 struct tagPROPVARIANT {
111 VARTYPE vt;
112 WORD wReserved1;
113 WORD wReserved2;
114 WORD wReserved3;
115 [switch_is(vt & 0x1fff)] union {
116 [case(VT_EMPTY, VT_NULL)] ;
117 [case(VT_I1)] char cVal;
118 [case(VT_UI1)] UCHAR bVal;
119 [case(VT_I2)] short iVal;
120 [case(VT_UI2)] USHORT uiVal;
121 [case(VT_BOOL)] VARIANT_BOOL boolVal;
122 #if 0 /* illegal in C++ */
123 [case(VT_ILLEGAL)] _VARIANT_BOOL bool;
124 #endif
125 [case(VT_I4)] long lVal;
126 [case(VT_UI4)] ULONG ulVal;
127 [case(VT_R4)] float fltVal;
128 [case(VT_ERROR)] SCODE scode;
129 [case(VT_I8)] LARGE_INTEGER hVal;
130 [case(VT_UI8)] ULARGE_INTEGER uhVal;
131 [case(VT_R8)] double dblVal;
132 [case(VT_CY)] CY cyVal;
133 [case(VT_DATE)] DATE date;
134 [case(VT_FILETIME)] FILETIME filetime;
135 [case(VT_CLSID)] CLSID *puuid;
136 [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob;
137 [case(VT_CF)] CLIPDATA *pclipdata;
138 [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;
139 [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage;
140 [case(VT_BSTR)] BSTR bstrVal;
141 [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal;
142 [case(VT_LPSTR)] LPSTR pszVal;
143 [case(VT_LPWSTR)] LPWSTR pwszVal;
144 [case(VT_UI1|VT_VECTOR)] CAUB caub;
145 [case(VT_I2|VT_VECTOR)] CAI cai;
146 [case(VT_UI2|VT_VECTOR)] CAUI caui;
147 [case(VT_BOOL|VT_VECTOR)] CABOOL cabool;
148 [case(VT_I4|VT_VECTOR)] CAL cal;
149 [case(VT_UI4|VT_VECTOR)] CAUL caul;
150 [case(VT_R4|VT_VECTOR)] CAFLT caflt;
151 [case(VT_ERROR|VT_VECTOR)] CASCODE cascode;
152 [case(VT_I8|VT_VECTOR)] CAH cah;
153 [case(VT_UI8|VT_VECTOR)] CAUH cauh;
154 [case(VT_R8|VT_VECTOR)] CADBL cadbl;
155 [case(VT_CY|VT_VECTOR)] CACY cacy;
156 [case(VT_DATE|VT_VECTOR)] CADATE cadate;
157 [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime;
158 [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid;
159 [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata;
160 [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr;
161 [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob;
162 [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr;
163 [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr;
164 [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar;
165 [case(VT_ARRAY|VT_I1,
166 VT_ARRAY|VT_UI1,
167 VT_ARRAY|VT_I2,
168 VT_ARRAY|VT_UI2,
169 VT_ARRAY|VT_I4,
170 VT_ARRAY|VT_UI4,
171 VT_ARRAY|VT_INT,
172 VT_ARRAY|VT_UINT,
173 VT_ARRAY|VT_R4,
174 VT_ARRAY|VT_R8,
175 VT_ARRAY|VT_CY,
176 VT_ARRAY|VT_DATE,
177 VT_ARRAY|VT_BSTR,
178 VT_ARRAY|VT_BOOL,
179 VT_ARRAY|VT_DECIMAL,
180 VT_ARRAY|VT_DISPATCH,
181 VT_ARRAY|VT_UNKNOWN,
182 VT_ARRAY|VT_ERROR,
183 VT_ARRAY|VT_VARIANT)] LPSAFEARRAY parray;
184 [case(VT_BYREF|VT_I1)] CHAR *pcVal;
185 [case(VT_BYREF|VT_UI1)] UCHAR *pbVal;
186 [case(VT_BYREF|VT_I2)] SHORT *piVal;
187 [case(VT_BYREF|VT_UI2)] USHORT *puiVal;
188 [case(VT_BYREF|VT_I4)] LONG *plVal;
189 [case(VT_BYREF|VT_UI4)] ULONG *pulVal;
190 [case(VT_BYREF|VT_INT)] INT *pintVal;
191 [case(VT_BYREF|VT_UINT)] UINT *puintVal;
192 [case(VT_BYREF|VT_R4)] FLOAT *pfltVal;
193 [case(VT_BYREF|VT_R8)] DOUBLE *pdblVal;
194 [case(VT_BYREF|VT_BOOL)] VARIANT_BOOL *pboolVal;
195 [case(VT_BYREF|VT_DECIMAL)] DECIMAL *pdecVal;
196 [case(VT_BYREF|VT_ERROR)] SCODE *pscode;
197 [case(VT_BYREF|VT_CY)] CY *pcyVal;
198 [case(VT_BYREF|VT_DATE)] DATE *pdate;
199 [case(VT_BYREF|VT_BSTR)] BSTR *pbstrVal;
200 [case(VT_BYREF|VT_UNKNOWN)] IUnknown **ppunkVal;
201 [case(VT_BYREF|VT_DISPATCH)] IDispatch **ppdispVal;
202 [case(VT_BYREF|VT_ARRAY)] LPSAFEARRAY *pparray;
203 [case(VT_BYREF|VT_VARIANT)] PROPVARIANT *pvarVal;
204 } DUMMYUNIONNAME;
207 typedef struct tagPROPVARIANT *LPPROPVARIANT;
209 cpp_quote("#define REFPROPVARIANT const PROPVARIANT *")
211 cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */")
212 cpp_quote("")
213 cpp_quote("#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */")
214 cpp_quote("#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */")
215 cpp_quote("#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */")
216 cpp_quote("#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */")
217 cpp_quote("#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */")
218 cpp_quote("#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */")
219 cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */")
220 cpp_quote("#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */")
221 cpp_quote("#define PIDSI_EDITTIME 0x0000000AL /* VT_FILETIME (UTC) */")
222 cpp_quote("#define PIDSI_LASTPRINTED 0x0000000BL /* VT_FILETIME (UTC) */")
223 cpp_quote("#define PIDSI_CREATE_DTM 0x0000000CL /* VT_FILETIME (UTC) */")
224 cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */")
225 cpp_quote("#define PIDSI_PAGECOUNT 0x0000000EL /* VT_I4 */")
226 cpp_quote("#define PIDSI_WORDCOUNT 0x0000000FL /* VT_I4 */")
227 cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */")
228 cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */")
229 cpp_quote("#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */")
230 cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */")
231 cpp_quote("")
232 cpp_quote("#define PIDDSI_CATEGORY 0x00000002L /* VT_LPSTR */")
233 cpp_quote("#define PIDDSI_PRESFORMAT 0x00000003L /* VT_LPSTR */")
234 cpp_quote("#define PIDDSI_BYTECOUNT 0x00000004L /* VT_I4 */")
235 cpp_quote("#define PIDDSI_LINECOUNT 0x00000005L /* VT_I4 */")
236 cpp_quote("#define PIDDSI_PARCOUNT 0x00000006L /* VT_I4 */")
237 cpp_quote("#define PIDDSI_SLIDECOUNT 0x00000007L /* VT_I4 */")
238 cpp_quote("#define PIDDSI_NOTECOUNT 0x00000008L /* VT_I4 */")
239 cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */")
240 cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */")
241 cpp_quote("#define PIDDSI_SCALE 0x0000000BL /* VT_BOOL */")
242 cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */")
243 cpp_quote("#define PIDDSI_DOCPARTS 0x0000000DL /* VT_LPSTR|VT_VECTOR */")
244 cpp_quote("#define PIDDSI_MANAGER 0x0000000EL /* VT_LPSTR */")
245 cpp_quote("#define PIDDSI_COMPANY 0x0000000FL /* VT_LPSTR */")
246 cpp_quote("#define PIDDSI_LINKSDIRTY 0x00000010L /* VT_B0OL */")
248 const ULONG PRSPEC_INVALID = 0xffffffff;
249 const ULONG PRSPEC_LPWSTR = 0;
250 const ULONG PRSPEC_PROPID = 1;
252 typedef struct tagPROPSPEC {
253 ULONG ulKind;
254 [switch_is(ulKind)] union {
255 [case(PRSPEC_PROPID)] PROPID propid;
256 [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;
257 [default] ;
258 } DUMMYUNIONNAME;
259 } PROPSPEC;
261 typedef struct tagSTATPROPSTG {
262 LPOLESTR lpwstrName;
263 PROPID propid;
264 VARTYPE vt;
265 } STATPROPSTG;
267 cpp_quote("/* Macros for dwOSVersion member of STATPROPSETSTG */")
268 cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD((dwOSVer))")
269 cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))")
270 cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))")
271 cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xffffffff")
273 typedef struct tagSTATPROPSETSTG {
274 FMTID fmtid;
275 CLSID clsid;
276 DWORD grfFlags;
277 FILETIME mtime;
278 FILETIME ctime;
279 FILETIME atime;
280 DWORD dwOSVersion;
281 } STATPROPSETSTG;
283 HRESULT ReadMultiple(
284 [in] ULONG cpspec,
285 [in, size_is(cpspec)] const PROPSPEC rgpspec[],
286 [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
288 HRESULT WriteMultiple(
289 [in] ULONG cpspec,
290 [in, size_is(cpspec)] const PROPSPEC rgpspec[],
291 [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
292 [in] PROPID propidNameFirst);
294 HRESULT DeleteMultiple(
295 [in] ULONG cpspec,
296 [in, size_is(cpspec)] const PROPSPEC rgpspec[]);
298 HRESULT ReadPropertyNames(
299 [in] ULONG cpropid,
300 [in, size_is(cpropid)] const PROPID rgpropid[],
301 [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);
303 HRESULT WritePropertyNames(
304 [in] ULONG cpropid,
305 [in, size_is(cpropid)] const PROPID rgpropid[],
306 [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);
308 HRESULT DeletePropertyNames(
309 [in] ULONG cpropid,
310 [in, size_is(cpropid)] const PROPID rgpropid[]);
312 HRESULT Commit(
313 [in] DWORD grfCommitFlags);
315 HRESULT Revert();
317 HRESULT Enum(
318 [out] IEnumSTATPROPSTG **ppenum);
320 HRESULT SetTimes(
321 [in] const FILETIME *pctime,
322 [in] const FILETIME *patime,
323 [in] const FILETIME *pmtime);
325 HRESULT SetClass(
326 [in] REFCLSID clsid);
328 HRESULT Stat(
329 [out] STATPROPSETSTG *statpsstg);
333 object,
334 uuid(0000013A-0000-0000-C000-000000000046),
335 pointer_default(unique)
337 interface IPropertySetStorage : IUnknown
339 typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;
341 HRESULT Create(
342 [in] REFFMTID rfmtid,
343 [in, unique] const CLSID *pclsid,
344 [in] DWORD grfFlags,
345 [in] DWORD grfMode,
346 [out] IPropertyStorage **ppprstg);
348 HRESULT Open(
349 [in] REFFMTID rfmtid,
350 [in] DWORD grfMode,
351 [out] IPropertyStorage **ppprstg);
353 HRESULT Delete(
354 [in] REFFMTID rfmtid);
356 HRESULT Enum(
357 [out] IEnumSTATPROPSETSTG **ppenum);
361 object,
362 uuid(00000139-0000-0000-C000-000000000046),
363 pointer_default(unique)
365 interface IEnumSTATPROPSTG : IUnknown
367 typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
369 [local]
370 HRESULT Next(
371 [in] ULONG celt,
372 [out, size_is(celt), length_is(*pceltFetched)]
373 STATPROPSTG *rgelt,
374 [out] ULONG *pceltFetched);
376 [call_as(Next)]
377 HRESULT RemoteNext(
378 [in] ULONG celt,
379 [out, size_is(celt), length_is(*pceltFetched)]
380 STATPROPSTG *rgelt,
381 [out] ULONG *pceltFetched);
383 HRESULT Skip(
384 [in] ULONG celt);
386 HRESULT Reset();
388 HRESULT Clone(
389 [out] IEnumSTATPROPSTG **ppenum);
393 object,
394 uuid(0000013B-0000-0000-C000-000000000046),
395 pointer_default(unique)
397 interface IEnumSTATPROPSETSTG : IUnknown
399 typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
401 [local]
402 HRESULT Next(
403 [in] ULONG celt,
404 [out, size_is(celt), length_is(*pceltFetched)]
405 STATPROPSETSTG *rgelt,
406 [out] ULONG *pceltFetched);
408 [call_as(Next)]
409 HRESULT RemoteNext(
410 [in] ULONG celt,
411 [out, size_is(celt), length_is(*pceltFetched)]
412 STATPROPSETSTG *rgelt,
413 [out] ULONG *pceltFetched);
415 HRESULT Skip(
416 [in] ULONG celt);
418 HRESULT Reset();
420 HRESULT Clone(
421 [out] IEnumSTATPROPSETSTG **ppenum);
425 cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);")
426 cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);")
427 cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);")
428 cpp_quote("")
429 cpp_quote("#define _PROPVARIANT_INIT_DEFINED_")
430 cpp_quote("#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))")
431 cpp_quote("")
432 cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_")
433 cpp_quote("#define _STGCREATEPROPSTG_DEFINED_")
434 cpp_quote("HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);")
435 cpp_quote("HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);")
436 cpp_quote("HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);")
437 cpp_quote("#define CCH_MAX_PROPSTG_NAME 31")
438 cpp_quote("HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);")
439 cpp_quote("HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);")
440 cpp_quote("#endif /* _STGCREATEPROPSTG_DEFINED_ */")
441 cpp_quote("")