[CSRSRV]: Fix two DPRINTs.
[reactos.git] / reactos / include / psdk / 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 cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);")
805 cpp_quote("HRESULT WINAPI PSRefreshPropertySchema(void);")
806
807 /* TODO: Add remainder of the C api here */
808
809 [
810 uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),
811 lcid(0x0000),
812 version(1.0)
813 ]
814 library PropSysObjects
815 {
816 [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore
817 {
818 interface IPropertyStore;
819 }
820 [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem
821 {
822 interface IPropertySystem;
823 }
824 }