xref: /reactos/sdk/include/psdk/propsys.idl (revision 8a978a17)
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
23import "objidl.idl";
24import "oleidl.idl";
25import "ocidl.idl";
26import "shtypes.idl";
27import "structuredquerycondition.idl";
28
29cpp_quote("#ifndef PSSTDAPI")
30cpp_quote("#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE")
31cpp_quote("#endif")
32
33cpp_quote("#if 0")
34typedef PROPERTYKEY *REFPROPERTYKEY;
35cpp_quote("#endif")
36cpp_quote("#include <propkeydef.h>")
37
38[
39    uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),
40    object,
41    pointer_default(unique)
42]
43interface 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]
56interface 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]
69interface 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
89typedef IPropertyStore *LPPROPERTYSTORE;
90
91[
92    uuid(71604b0f-97b0-4764-8577-2f13e98a1422),
93    object,
94    pointer_default(unique)
95]
96interface 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
115typedef [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
129cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)")
130
131[
132    uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23),
133    object
134]
135interface IObjectWithPropertyKey : IUnknown
136{
137    HRESULT SetPropertyKey(
138        [in] REFPROPERTYKEY key
139    );
140    HRESULT GetPropertyKey(
141        [out] PROPERTYKEY *key
142    );
143}
144
145typedef [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]
157interface 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]
167interface 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]
200interface 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]
212interface 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]
247interface 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]
279interface 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]
291interface 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]
317interface 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]
526interface 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]
539interface 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]
556interface 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]
597interface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription
598{
599    HRESULT GetRelatedProperty(
600        [in] LPCWSTR ppszRelationshipName,
601        [in] REFIID riid,
602        [out,iid_is(riid)] void **ppv
603    );
604}
605
606typedef [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]
622interface 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]
671interface 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]
688interface 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]
710interface 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};
725typedef int PERSIST_SPROPSTORE_FLAGS;
726
727typedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE;
728
729cpp_quote("#if 0") /* Wine doesn't have __unaligned builtin, hack */
730typedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE;
731typedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE;
732cpp_quote("#endif")
733cpp_quote("typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;")
734cpp_quote("typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;")
735
736[
737    uuid(e318ad57-0aa0-450f-aca5-6fab7103d917),
738    pointer_default(unique),
739    local
740]
741interface 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]
761interface 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]
778interface 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]
788interface 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
798cpp_quote("#define PKEY_PIDSTR_MAX 10")
799cpp_quote("#define GUIDSTRING_MAX 39")
800cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)")
801
802cpp_quote("HRESULT WINAPI PSCreateMemoryPropertyStore(REFIID,void **);")
803cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);")
804cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);")
805cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);")
806cpp_quote("HRESULT WINAPI PSGetPropertyDescriptionListFromString(LPCWSTR,REFIID,void **);")
807cpp_quote("HRESULT WINAPI PSRefreshPropertySchema(void);")
808cpp_quote("HRESULT WINAPI PSRegisterPropertySchema(LPCWSTR);")
809cpp_quote("HRESULT WINAPI PSUnregisterPropertySchema(LPCWSTR);")
810
811/* TODO: Add remainder of the C api here */
812
813[
814    uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),
815    lcid(0x0000),
816    version(1.0)
817]
818library PropSysObjects
819{
820    [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore
821    {
822        interface IPropertyStore;
823    }
824    [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem
825    {
826        interface IPropertySystem;
827    }
828}
829