shell32: Add stubbed SHGetKnownFolderPath.
[wine] / include / propsys.idl
1 /*
2  * system property interfaces
3  *
4  * Copyright 2009 Maarten Lankhorst
5  *
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.
10  *
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.
15  *
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
19  *
20  */
21
22
23 import "objidl.idl";
24 import "oleidl.idl";
25 import "ocidl.idl";
26 import "shtypes.idl";
27 import "structuredquerycondition.idl";
28
29 cpp_quote("#ifndef PSSTDAPI")
30 cpp_quote("#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE")
31 cpp_quote("#endif")
32
33 cpp_quote("#if 0")
34 typedef PROPERTYKEY *REFPROPERTYKEY;
35 cpp_quote("#endif")
36 cpp_quote("#include <propkeydef.h>")
37
38 [
39     uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),
40     object,
41     pointer_default(unique)
42 ]
43 interface IInitializeWithFile : IUnknown
44 {
45     HRESULT Initialize(
46         [in,string] LPCWSTR pszFilePath,
47         [in] DWORD grfMode
48     );
49 }
50
51 [
52     uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f),
53     object,
54     pointer_default(unique)
55 ]
56 interface IInitializeWithStream : IUnknown
57 {
58     [local] HRESULT Initialize(
59         [in] IStream *pstream,
60         [in] DWORD grfMode
61     );
62 }
63
64 [
65     uuid(886d8eeb-8cf2-4446-8d02-cdba1dbdcf99),
66     object,
67     pointer_default(unique)
68 ]
69 interface IPropertyStore : IUnknown
70 {
71     HRESULT GetCount(
72         [out] DWORD *cProps
73     );
74     HRESULT GetAt(
75         [in] DWORD iProp,
76         [out] PROPERTYKEY *pkey
77     );
78     HRESULT GetValue(
79         [in] REFPROPERTYKEY key,
80         [out] PROPVARIANT *pv
81     );
82     HRESULT SetValue(
83         [in] REFPROPERTYKEY key,
84         [in] REFPROPVARIANT propvar
85     );
86     HRESULT Commit(void);
87 }
88
89 typedef IPropertyStore *LPPROPERTYSTORE;
90
91 [
92     uuid(71604b0f-97b0-4764-8577-2f13e98a1422),
93     object,
94     pointer_default(unique)
95 ]
96 interface INamedPropertyStore : IUnknown
97 {
98     HRESULT GetNamedValue(
99         [in,string] LPCWSTR pszName,
100         [out] PROPVARIANT *ppropvar
101     );
102     HRESULT SetNamedValue(
103         [in,string] LPCWSTR pszName,
104         [in] REFPROPVARIANT propvar
105     );
106     HRESULT GetNameCount(
107         [out] DWORD *pdwCount
108     );
109     HRESULT GetNameAt(
110         [in] DWORD iProp,
111         [out] BSTR *pbstrName
112     );
113 }
114
115 typedef [v1_enum] enum GETPROPERTYSTOREFLAGS
116 {
117     GPS_DEFAULT = 0x00,
118     GPS_HANDLERPROPERTIESONLY = 0x01,
119     GPS_READWRITE = 0x02,
120     GPS_TEMPORARY = 0x04,
121     GPS_FASTPROPERTIESONLY = 0x08,
122     GPS_OPENSLOWITEM = 0x10,
123     GPS_DELAYCREATION = 0x20,
124     GPS_BESTEFFORT = 0x40,
125     GPS_NO_OPLOCK = 0x80,
126     GPS_MASK_VALID = 0xff
127 } GETPROPERTYSTOREFLAGS;
128
129 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)")
130
131 [
132     uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23),
133     object
134 ]
135 interface IObjectWithPropertyKey : IUnknown
136 {
137     HRESULT SetPropertyKey(
138         [in] REFPROPERTYKEY key
139     );
140     HRESULT GetPropertyKey(
141         [out] PROPERTYKEY *key
142     );
143 }
144
145 typedef [v1_enum] enum PKA_FLAGS
146 {
147     PKA_SET,
148     PKA_APPEND,
149     PKA_DELETE
150 } PKA_FLAGS;
151
152 [
153     uuid(f917bc8a-1bba-4478-a245-1bde03eb9431),
154     object,
155     pointer_default(unique)
156 ]
157 interface IPropertyChange : IObjectWithPropertyKey
158 {
159     HRESULT ApplyToPropVariant([in] REFPROPVARIANT propvarin, [out] PROPVARIANT *propvarout);
160 }
161
162 [
163     uuid(380f5cad-1b5e-42f2-805d-637fd392d31e),
164     object,
165     pointer_default(unique)
166 ]
167 interface IPropertyChangeArray : IUnknown
168 {
169     HRESULT GetCount(
170         [out] UINT *pcOperations
171     );
172     HRESULT GetAt(
173         [in] UINT iIndex,
174         [in] REFIID riid,
175         [out, iid_is(riid)] void **ppv
176     );
177     HRESULT InsertAt(
178         [in] UINT iIndex,
179         [in] IPropertyChange *ppropChange
180     );
181     HRESULT Append(
182         [in] IPropertyChange *ppropChange
183     );
184     HRESULT AppendOrReplace(
185         [in] IPropertyChange *ppropChange
186     );
187     HRESULT RemoveAt(
188         [in] UINT iIndex
189     );
190     HRESULT IsKeyInArray(
191         [in] REFPROPERTYKEY key
192     );
193 }
194
195 [
196     uuid(c8e2d566-186e-4d49-bf41-6909ead56acc),
197     object,
198     pointer_default(unique)
199 ]
200 interface IPropertyStoreCapabilities : IUnknown
201 {
202     HRESULT IsPropertyWritable(
203         [in] REFPROPERTYKEY key
204     );
205 }
206
207 [
208     uuid(3017056d-9a91-4e90-937d-746c72abbf4f),
209     object,
210     pointer_default(unique)
211 ]
212 interface IPropertyStoreCache : IPropertyStore
213 {
214     typedef [v1_enum] enum PSC_STATE
215     {
216         PSC_NORMAL = 0,
217         PSC_NOTINSOURCE,
218         PSC_DIRTY,
219         PSC_READONLY
220     } PSC_STATE;
221
222     HRESULT GetState(
223         [in] REFPROPERTYKEY key,
224         [out] PSC_STATE *pstate
225     );
226     HRESULT GetValueAndState(
227         [in] REFPROPERTYKEY key,
228         [out] PROPVARIANT *ppropvar,
229         [out] PSC_STATE *pstate
230     );
231     HRESULT SetState(
232         [in] REFPROPERTYKEY key,
233         [in] PSC_STATE pstate
234     );
235     HRESULT SetValueAndState(
236         [in] REFPROPERTYKEY key,
237         [in, unique] const PROPVARIANT *ppropvar,
238         [in] PSC_STATE state
239     );
240 }
241
242 [
243     uuid(11e1fbf9-2d56-4a6b-8db3-7cd193a471f2),
244     object,
245     pointer_default(unique)
246 ]
247 interface IPropertyEnumType : IUnknown
248 {
249     typedef [v1_enum] enum PROPENUMTYPE
250     {
251         PET_DISCRETEVALUE = 0,
252         PET_RANGEDVALUE,
253         PET_DEFAULTVALUE,
254         PET_ENDRANGE
255     } PROPENUMTYPE;
256
257     HRESULT GetEnumType(
258         [out] PROPENUMTYPE *penumtype
259     );
260     HRESULT GetValue(
261         [out] PROPVARIANT *ppropvar
262     );
263     HRESULT GetRangeMinValue(
264         [out] PROPVARIANT *ppropvar
265     );
266     HRESULT GetRangeSetValue(
267         [out] PROPVARIANT *ppropvar
268     );
269     HRESULT GetDisplayText(
270         [out] LPWSTR *ppszDisplay
271     );
272 }
273
274 [
275     uuid(9b6e051c-5ddd-4321-9070-fe2acb55e974),
276     object,
277     pointer_default(unique)
278 ]
279 interface IPropertyEnumType2 : IPropertyEnumType
280 {
281     HRESULT GetImageReference(
282         [out] LPWSTR *ppszImageRes
283     );
284 }
285
286 [
287     uuid(a99400f4-3d84-4557-94ba-1242fb2cc9a6),
288     object,
289     pointer_default(unique)
290 ]
291 interface IPropertyEnumTypeList : IUnknown
292 {
293     HRESULT GetCount(
294         [out] UINT *pctypes
295     );
296     HRESULT GetAt(
297         [in] UINT itype,
298         [in] REFIID riid,
299         [out, iid_is(riid)] void **ppv
300     );
301     HRESULT GetConditionAt(
302         [in] UINT nIndex,
303         [in] REFIID riid,
304         [out, iid_is(riid)] void **ppv
305     );
306     HRESULT FindMatchingIndex(
307         [in] REFPROPVARIANT propvarCmp,
308         [out] UINT *pnIndex
309     );
310 }
311
312 [
313     uuid(6f79d558-3e96-4549-a1d1-7d75d2288814),
314     object,
315     pointer_default(unique)
316 ]
317 interface IPropertyDescription : IUnknown
318 {
319     typedef [v1_enum] enum PROPDESC_TYPE_FLAGS
320     {
321         PDTF_DEFAULT = 0,
322         PDTF_MULTIPLEVALUES = 0x001,
323         PDTF_ISINNATE = 0x002,
324         PDTF_ISGROUP = 0x004,
325         PDTF_CANGROUPBY = 0x008,
326         PDTF_CANSTACKBY = 0x010,
327         PDTF_ISTREEPROPERTY = 0x020,
328         PDTF_INCLUDEINFULLTEXTQUERY = 0x040,
329         PDTF_ISVIEWABLE = 0x080,
330         PDTF_ISQUERYABLE = 0x100,
331         PDTF_CANBEPURGED = 0x200,
332         PDTF_SEARCHRAWVALUE = 0x400,
333         PDTF_ISSYSTEMPROPERTY = 0x80000000,
334         PDTF_MASK_ALL = 0x800007ff
335     } PROPDESC_TYPE_FLAGS;
336     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_TYPE_FLAGS)")
337
338     typedef [v1_enum] enum PROPDESC_VIEW_FLAGS
339     {
340         PDVF_DEFAULT = 0x0000,
341         PDVF_CENTERALIGN = 0x0001,
342         PDVF_RIGHTALIGN = 0x0002,
343         PDVF_BEGINNEWGROUP = 0x0004,
344         PDVF_FILLAREA = 0x0008,
345         PDVF_SORTDESCENDING = 0x0010,
346         PDVF_SHOWONLYIFPRESENT = 0x0020,
347         PDVF_SHOWBYDEFAULT = 0x0040,
348         PDVF_SHOWINPRIMARYLIST = 0x0080,
349         PDVF_SHOWINSECONDARYLIST = 0x0100,
350         PDVF_HIDELABEL = 0x0200,
351         PDVF_HIDDEN = 0x0800,
352         PDVF_CANWRAP = 0x1000,
353         PDVF_MASK_ALL = 0x1bff
354     } PROPDESC_VIEW_FLAGS;
355     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_VIEW_FLAGS)")
356
357     typedef [v1_enum] enum PROPDESC_DISPLAYTYPE
358     {
359         PDDT_STRING = 0,
360         PDDT_NUMBER,
361         PDDT_BOOLEAN,
362         PDDT_DATETIME,
363         PDDT_ENUMERATED
364     } PROPDESC_DISPLAYTYPE;
365
366     typedef [v1_enum] enum PROPDESC_GROUPING_RANGE
367     {
368         PDGR_DISCRETE = 0,
369         PDGR_ALPHANUMERIC,
370         PDGR_SIZE,
371         PDGR_DYNAMIC,
372         PDGR_DATE,
373         PDGR_PERCENT,
374         PDGR_ENUMERATED
375     } PROPDESC_GROUPING_RANGE;
376
377     typedef [v1_enum] enum PROPDESC_FORMAT_FLAGS
378     {
379         PDFF_DEFAULT = 0x0000,
380         PDFF_PREFIXNAME = 0x0001,
381         PDFF_FILENAME = 0x0002,
382         PDFF_ALWAYSKB = 0x0004,
383         PDFF_RESERVED_RIGHTTOLEFT = 0x0008,
384         PDFF_SHORTTIME = 0x0010,
385         PDFF_LONGTIME = 0x0020,
386         PDFF_HIDETIME = 0x0040,
387         PDFF_SHORTDATE = 0x0080,
388         PDFF_LONGDATE = 0x0100,
389         PDFF_HIDEDATE = 0x0200,
390         PDFF_RELATIVEDATE = 0x0400,
391         PDFF_USEEDITINVITATION = 0x0800,
392         PDFF_READONLY = 0x1000,
393         PDFF_NOAUTOREADINGORDER = 0x2000
394     } PROPDESC_FORMAT_FLAGS;
395     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_FORMAT_FLAGS)")
396
397     typedef [v1_enum] enum PROPDESC_SORTDESCRIPTION
398     {
399         PDSD_GENERAL = 0,
400         PDSD_A_Z,
401         PDSD_LOWEST_HIGHEST,
402         PDSD_SMALLEST_BIGGEST,
403         PDSD_OLDEST_NEWEST
404     } PROPDESC_SORTDESCRIPTION;
405
406     typedef [v1_enum] enum PROPDESC_RELATIVEDESCRIPTION_TYPE
407     {
408         PDRDT_GENERAL = 0,
409         PDRDT_DATE,
410         PDRDT_SIZE,
411         PDRDT_COUNT,
412         PDRDT_REVISION,
413         PDRDT_LENGTH,
414         PDRDT_DURATION,
415         PDRDT_SPEED,
416         PDRDT_RATE,
417         PDRDT_RATING,
418         PDRDT_PRIORITY
419     } PROPDESC_RELATIVEDESCRIPTION_TYPE;
420
421     typedef [v1_enum] enum PROPDESC_AGGREGATION_TYPE
422     {
423         PDAT_DEFAULT = 0,
424         PDAT_FIRST,
425         PDAT_SUM,
426         PDAT_AVERAGE,
427         PDAT_DATERANGE,
428         PDAT_UNION,
429         PDAT_MAX,
430         PDAT_MIN
431     } PROPDESC_AGGREGATION_TYPE;
432
433     typedef [v1_enum] enum PROPDESC_CONDITION_TYPE
434     {
435         PDCOT_NONE = 0,
436         PDCOT_STRING,
437         PDCOT_SIZE,
438         PDCOT_DATETIME,
439         PDCOT_BOOLEAN,
440         PDCOT_NUMBER
441     } PROPDESC_CONDITION_TYPE;
442
443     HRESULT GetPropertyKey(
444         [out] PROPERTYKEY *pkey
445     );
446     HRESULT GetCanonicalName(
447         [out, string] LPWSTR *ppszName
448     );
449     HRESULT GetPropertyType(
450         [out] VARTYPE *pvartype
451     );
452     HRESULT GetDisplayName(
453         [out, string] LPWSTR *ppszName
454     );
455     HRESULT GetEditInvitation(
456         [out, string] LPWSTR *ppszName
457     );
458     HRESULT GetTypeFlags(
459         [in] PROPDESC_TYPE_FLAGS mask,
460         [out] PROPDESC_TYPE_FLAGS *ppdtFlags
461     );
462     HRESULT GetViewFlags(
463         [out] PROPDESC_VIEW_FLAGS *ppdvFlags
464     );
465     HRESULT GetDefaultColumnWidth(
466         [out] UINT *pcxChars
467     );
468     HRESULT GetDisplayType(
469         [out] PROPDESC_DISPLAYTYPE *pdisplaytype
470     );
471     HRESULT GetColumnState(
472         [out] SHCOLSTATEF *pcsFlags
473     );
474     HRESULT GetGroupingRange(
475         [out] PROPDESC_GROUPING_RANGE *psd
476     );
477     HRESULT GetRelativeDescriptionType(
478         [out] PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt
479     );
480     HRESULT GetRelativeDescription(
481         [in] REFPROPVARIANT propvar1,
482         [in] REFPROPVARIANT propvar2,
483         [out,string] LPWSTR *ppszDesc1,
484         [out,string] LPWSTR *ppszDesc2
485     );
486     HRESULT GetSortDescription(
487         [out] PROPDESC_SORTDESCRIPTION *psd
488     );
489     HRESULT GetSortDescriptionLabel(
490         [in] BOOL fDescending,
491         [out,string] LPWSTR *ppszDescription
492     );
493     HRESULT GetAggregationType(
494         [out] PROPDESC_AGGREGATION_TYPE *paggtype
495     );
496     HRESULT GetConditionType(
497         [out] PROPDESC_CONDITION_TYPE *pcontype,
498         [out] CONDITION_OPERATION *popDefault
499     );
500     HRESULT GetEnumTypeList(
501         [in] REFIID riid,
502         [out,iid_is(riid)] void **ppv
503     );
504     [local] HRESULT CoerceToCanonicalValue(
505         [in,out] PROPVARIANT *propvar
506     );
507     [call_as(CoerceToCanonicalValue)] HRESULT RemoteCoerceToCanonicalValue(
508         [in] REFPROPVARIANT propvar,
509         [out] PROPVARIANT *ppropvar
510     );
511     HRESULT FormatForDisplay(
512         [in] REFPROPVARIANT propvar,
513         [in] PROPDESC_FORMAT_FLAGS flags,
514         [out,string] LPWSTR *ppszDisplay
515     );
516     HRESULT IsValueCanonical(
517         [in] REFPROPVARIANT propvar
518     );
519 }
520
521 [
522     uuid(57d2eded-5062-400e-b107-5dae79fe57a6),
523     object,
524     pointer_default(unique)
525 ]
526 interface IPropertyDescription2 : IPropertyDescription
527 {
528     HRESULT GetImageReferenceForValue(
529         [in] REFPROPVARIANT propvar,
530         [out,string] LPWSTR *ppszImageRes
531     );
532 }
533
534 [
535     uuid(f67104fc-2af9-46fd-b32d-243c1404f3d1),
536     object,
537     pointer_default(unique)
538 ]
539 interface IPropertyDescriptionAliasInfo : IPropertyDescription
540 {
541     HRESULT GetSortByAlias(
542         [in] REFIID riid,
543         [out,iid_is(riid)] void **ppv
544     );
545     HRESULT GetAdditionalSortByAliases(
546         [in] REFIID riid,
547         [out,iid_is(riid)] void **ppv
548     );
549 }
550
551 [
552     uuid(078f91bd-29a2-440f-924e-46a291524520),
553     object,
554     pointer_default(unique)
555 ]
556 interface IPropertyDescriptionSearchInfo : IPropertyDescription
557 {
558     typedef [v1_enum] enum PROPDESC_SEARCHINFO_FLAGS
559     {
560         PDSIF_DEFAULT = 0x0,
561         PDSIF_ININVERTEDINDEX = 0x1,
562         PDSIF_ISCOLUMN = 0x2,
563         PDSIF_ISCOLUMNSPARSE = 0x4,
564         PDSIF_ALWAYSINCLUDE = 0x8,
565     } PROPDESC_SEARCHINFO_FLAGS;
566     cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_SEARCHINFO_FLAGS)")
567
568     typedef [v1_enum] enum PROPDESC_COLUMNINDEX_TYPE
569     {
570         PDCIT_NONE = 0,
571         PDCIT_ONDISK,
572         PDCIT_INMEMORY,
573         PDCIT_ONDEMAND,
574         PDCIT_ONDISKALL,
575         PDCIT_ONDISKVECTOR
576     } PROPDESC_COLUMNINDEX_TYPE;
577
578     HRESULT GetSearchInfoFlags(
579         [out] PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags
580     );
581     HRESULT GetColumnIndexType(
582         [out] PROPDESC_COLUMNINDEX_TYPE *ppdciType
583     );
584     HRESULT GetProjectionString(
585         [out] LPWSTR *ppszProjection
586     );
587     HRESULT GetMaxSize(
588         [out] UINT *pcbMaxSize
589     );
590 }
591
592 [
593     uuid(507393f4-2a3d-4a60-b59e-d9c75716c2dd),
594     object,
595     pointer_default(unique)
596 ]
597 interface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription
598 {
599     HRESULT GetRelatedProperty(
600         [in] LPCWSTR ppszRelationshipName,
601         [in] REFIID riid,
602         [out,iid_is(riid)] void **ppv
603     );
604 }
605
606 typedef [v1_enum] enum PROPDESC_ENUMFILTER
607 {
608     PDEF_ALL = 0,
609     PDEF_SYSTEM,
610     PDEF_NONSYSTEM,
611     PDEF_VIEWABLE,
612     PDEF_QUERYABLE,
613     PDEF_INFULLTEXTQUERY,
614     PDEF_COLUMN
615 } PROPDESC_ENUMFILTER;
616
617 [
618     uuid(ca724e8a-c3e6-442b-88a4-6fb0db8035a3),
619     object,
620     pointer_default(unique)
621 ]
622 interface IPropertySystem : IUnknown
623 {
624     HRESULT GetPropertyDescription(
625         [in] REFPROPERTYKEY propkey,
626         [in] REFIID riid,
627         [out,iid_is(riid)] void **ppv
628     );
629     HRESULT GetPropertyDescriptionByName(
630         [in,string] LPCWSTR pszCanonicalName,
631         [in] REFIID riid,
632         [out,iid_is(riid)] void **ppv
633     );
634     HRESULT GetPropertyDescriptionListFromString(
635         [in,string] LPCWSTR pszPropList,
636         [in] REFIID riid,
637         [out,iid_is(riid)] void **ppv
638     );
639     HRESULT EnumeratePropertyDescriptions(
640         [in] PROPDESC_ENUMFILTER filterOn,
641         [in] REFIID riid,
642         [out,iid_is(riid)] void **ppv
643     );
644     HRESULT FormatForDisplay(
645         [in] REFPROPERTYKEY key,
646         [in] REFPROPVARIANT propvar,
647         [in] PROPDESC_FORMAT_FLAGS pdff,
648         [out,string,size_is(cchText)] LPWSTR pszText,
649         [in] DWORD cchText
650     );
651     HRESULT FormatForDisplayAlloc(
652         [in] REFPROPERTYKEY key,
653         [in] REFPROPVARIANT propvar,
654         [in] PROPDESC_FORMAT_FLAGS pdff,
655         [out,string] LPWSTR *pszText
656     );
657     HRESULT RegisterPropertySchema(
658         [in,string] LPCWSTR pszPath
659     );
660     HRESULT UnregisterPropertySchema(
661         [in,string] LPCWSTR pszPath
662     );
663     HRESULT RefreshPropertySchema(void);
664 }
665
666 [
667     uuid(1f9fc1d0-c39b-4b26-817f-011967d3440e),
668     object,
669     pointer_default(unique)
670 ]
671 interface IPropertyDescriptionList : IUnknown
672 {
673     HRESULT GetCount(
674         [out] UINT *pcelem
675     );
676     HRESULT GetAt(
677         [in] UINT iElem,
678         [in] REFIID riid,
679         [out,iid_is(riid)] void **ppv
680     );
681 }
682
683 [
684     uuid(bc110b6d-57e8-4148-a9c6-91015ab2f3a5),
685     object,
686     pointer_default(unique)
687 ]
688 interface IPropertyStoreFactory : IUnknown
689 {
690     HRESULT GetPropertyStore(
691         [in] GETPROPERTYSTOREFLAGS flags,
692         [in,unique] IUnknown *pUnkFactory,
693         [in] REFIID riid,
694         [out,iid_is(riid)] void **ppv
695     );
696     HRESULT GetPropertyStoreForKeys(
697         [in,unique] const PROPERTYKEY *rgKeys,
698         [in] UINT cKeys,
699         [in] GETPROPERTYSTOREFLAGS flags,
700         [in] REFIID riid,
701         [out,iid_is(riid)] void **ppv
702     );
703 }
704
705 [
706     uuid(40d4577f-e237-4bdb-bd69-58f089431b6a),
707     object,
708     pointer_default(unique)
709 ]
710 interface IDelayedPropertyStoreFactory : IPropertyStoreFactory
711 {
712     HRESULT GetDelayedPropertyStore(
713         [in] GETPROPERTYSTOREFLAGS flags,
714         [in] DWORD dwStoreId,
715         [in] REFIID riid,
716         [out,iid_is(riid)] void **ppv
717     );
718 }
719
720 [v1_enum] enum _PERSIST_SPROPSTORE_FLAGS
721 {
722     FPSPS_DEFAULT = 0,
723     FPSPS_READONLY = 1
724 };
725 typedef int PERSIST_SPROPSTORE_FLAGS;
726
727 typedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE;
728
729 cpp_quote("#if 0") /* Wine doesn't have __unaligned builtin, hack */
730 typedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE;
731 typedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE;
732 cpp_quote("#endif")
733 cpp_quote("typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;")
734 cpp_quote("typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;")
735
736 [
737     uuid(e318ad57-0aa0-450f-aca5-6fab7103d917),
738     pointer_default(unique),
739     local
740 ]
741 interface IPersistSerializedPropStorage : IUnknown
742 {
743     HRESULT SetFlags(
744         [in] PERSIST_SPROPSTORE_FLAGS flags
745     );
746     HRESULT SetPropertyStorage(
747         [in] PCUSERIALIZEDPROPSTORAGE psps,
748         [in] DWORD cb
749     );
750     HRESULT GetPropertyStorage(
751         [out] SERIALIZEDPROPSTORAGE **psps,
752         [out] DWORD *pcb
753     );
754 }
755
756 [
757     uuid(77effa68-4f98-4366-ba72-573b3d880571),
758     pointer_default(unique),
759     local
760 ]
761 interface IPersistSerializedPropStorage2 : IPersistSerializedPropStorage
762 {
763     HRESULT GetpropertyStorageSize(
764         [out] DWORD *pcb
765     );
766     HRESULT GetPropertyStorageBuffer(
767         [out] SERIALIZEDPROPSTORAGE *psps,
768         [in] DWORD cb,
769         [out] DWORD *pcbWritten
770     );
771 }
772
773 [
774     uuid(fa955fd9-38be-4879-a6ce-824cf52d609f),
775     object,
776     pointer_default(unique)
777 ]
778 interface IPropertySystemChangeNotify : IUnknown
779 {
780     HRESULT SchemaRefreshed(void);
781 }
782
783 /* Interface for CoCreateInstance? */
784 [
785     uuid(75121952-e0d0-43e5-9380-1d80483acf72),
786     pointer_default(unique)
787 ]
788 interface ICreateObject : IUnknown
789 {
790     HRESULT CreateObject(
791         [in] REFCLSID clsid,
792         [in,unique] IUnknown *pUnkOuter,
793         [in] REFIID riid,
794         [out,iid_is(riid)] void **ppv
795     );
796 }
797
798 cpp_quote("#define PKEY_PIDSTR_MAX 10")
799 cpp_quote("#define GUIDSTRING_MAX 39")
800 cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)")
801
802 cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);")
803 cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);")
804
805 /* TODO: Add remainder of the C api here */
806
807 [
808     uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),
809     lcid(0x0000),
810     version(1.0)
811 ]
812 library PropSysObjects
813 {
814     [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore
815     {
816         interface IPropertyStore;
817     }
818     [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem
819     {
820         interface IPropertySystem;
821     }
822 }