2 * Defines the COM interfaces and APIs related to saving properties to file.
5 #ifndef __WINE_WINE_OBJ_PROPERTYSTORAGE_H
6 #define __WINE_WINE_OBJ_PROPERTYSTORAGE_H
10 #endif /* defined(__cplusplus) */
12 /*****************************************************************************
13 * Predeclare the interfaces
15 DEFINE_OLEGUID(IID_IEnumSTATPROPSETSTG, 0x0000013bL, 0, 0);
16 typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG,*LPENUMSTATPROPSETSTG;
18 DEFINE_OLEGUID(IID_IEnumSTATPROPSTG, 0x00000139L, 0, 0);
19 typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG,*LPENUMSTATPROPSTG;
21 DEFINE_OLEGUID(IID_IPropertySetStorage, 0x0000013aL, 0, 0);
22 typedef struct IPropertySetStorage IPropertySetStorage,*LPPROPERTYSETSTORAGE;
24 DEFINE_OLEGUID(IID_IPropertyStorage, 0x00000138L, 0, 0);
25 typedef struct IPropertyStorage IPropertyStorage,*LPPROPERTYSTORAGE;
28 /*****************************************************************************
29 * Predeclare the structures
32 typedef struct tagSTATPROPSETSTG STATPROPSETSTG;
33 typedef struct tagSTATPROPSTG STATPROPSTG;
35 extern const FMTID FMTID_SummaryInformation;
36 extern const FMTID FMTID_DocSummaryInformation;
37 extern const FMTID FMTID_UserDefinedProperties;
39 /*****************************************************************************
43 /* Reserved global Property IDs */
44 #define PID_DICTIONARY ( 0 )
46 #define PID_CODEPAGE ( 0x1 )
48 #define PID_FIRST_USABLE ( 0x2 )
50 #define PID_FIRST_NAME_DEFAULT ( 0xfff )
52 #define PID_LOCALE ( 0x80000000 )
54 #define PID_MODIFY_TIME ( 0x80000001 )
56 #define PID_SECURITY ( 0x80000002 )
58 #define PID_ILLEGAL ( 0xffffffff )
60 /* Property IDs for the SummaryInformation Property Set */
62 #define PIDSI_TITLE 0x00000002L /* VT_LPSTR */
63 #define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */
64 #define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */
65 #define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */
66 #define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */
67 #define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */
68 #define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */
69 #define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */
70 #define PIDSI_EDITTIME 0x0000000aL /* VT_FILETIME (UTC) */
71 #define PIDSI_LASTPRINTED 0x0000000bL /* VT_FILETIME (UTC) */
72 #define PIDSI_CREATE_DTM 0x0000000cL /* VT_FILETIME (UTC) */
73 #define PIDSI_LASTSAVE_DTM 0x0000000dL /* VT_FILETIME (UTC) */
74 #define PIDSI_PAGECOUNT 0x0000000eL /* VT_I4 */
75 #define PIDSI_WORDCOUNT 0x0000000fL /* VT_I4 */
76 #define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */
77 #define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */
78 #define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */
79 #define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */
80 #define PRSPEC_INVALID ( 0xffffffff )
83 #define PRSPEC_LPWSTR ( 0 )
84 #define PRSPEC_PROPID ( 1 )
86 typedef struct tagPROPSPEC
97 /*****************************************************************************
98 * STATPROPSETSTG structure
100 /* Macros for parsing the OS Version of the Property Set Header */
101 #define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD( (dwOSVer) )
102 #define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD( (dwOSVer) ))
103 #define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD( (dwOSVer) ))
104 #define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF
106 struct tagSTATPROPSETSTG
118 /*****************************************************************************
119 * STATPROPSTG structure
121 struct tagSTATPROPSTG
129 /*****************************************************************************
130 * IEnumSTATPROPSETSTG interface
132 #define ICOM_INTERFACE IEnumSTATPROPSETSTG
133 #define IEnumSTATPROPSETSTG_METHODS \
134 ICOM_METHOD3(HRESULT,Next, ULONG,celt, STATPROPSETSTG*,rgelt, ULONG*,pceltFethed) \
135 ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
136 ICOM_METHOD (HRESULT,Reset) \
137 ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSETSTG**,ppenum)
138 #define IEnumSTATPROPSETSTG_IMETHODS \
140 IEnumSTATPROPSETSTG_METHODS
141 ICOM_DEFINE(IEnumSTATPROPSETSTG,IUnknown)
142 #undef ICOM_INTERFACE
144 /*** IUnknown methods ***/
145 #define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
146 #define IEnumSTATPROPSETSTG_AddRef(p) ICOM_CALL (AddRef,p)
147 #define IEnumSTATPROPSETSTG_Release(p) ICOM_CALL (Release,p)
148 /*** IEnumSTATPROPSETSTG methods ***/
149 #define IEnumSTATPROPSETSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
150 #define IEnumSTATPROPSETSTG_Skip(p,a) ICOM_CALL1(Skip,p,a)
151 #define IEnumSTATPROPSETSTG_Reset(p) ICOM_CALL (Reset,p)
152 #define IEnumSTATPROPSETSTG_Clone(p,a) ICOM_CALL1(Clone,p,a)
155 /*****************************************************************************
156 * IEnumSTATPROPSTG interface
158 #define ICOM_INTERFACE IEnumSTATPROPSTG
159 #define IEnumSTATPROPSTG_METHODS \
160 ICOM_METHOD3(HRESULT,Next, ULONG,celt, STATPROPSTG*,rgelt, ULONG*,pceltFethed) \
161 ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
162 ICOM_METHOD (HRESULT,Reset) \
163 ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSTG**,ppenum)
164 #define IEnumSTATPROPSTG_IMETHODS \
166 IEnumSTATPROPSTG_METHODS
167 ICOM_DEFINE(IEnumSTATPROPSTG,IUnknown)
168 #undef ICOM_INTERFACE
170 /*** IUnknown methods ***/
171 #define IEnumSTATPROPSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
172 #define IEnumSTATPROPSTG_AddRef(p) ICOM_CALL (AddRef,p)
173 #define IEnumSTATPROPSTG_Release(p) ICOM_CALL (Release,p)
174 /*** IEnumSTATPROPSTG methods ***/
175 #define IEnumSTATPROPSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
176 #define IEnumSTATPROPSTG_Skip(p,a) ICOM_CALL1(Skip,p,a)
177 #define IEnumSTATPROPSTG_Reset(p) ICOM_CALL (Reset,p)
178 #define IEnumSTATPROPSTG_Clone(p,a) ICOM_CALL1(Clone,p,a)
181 /*****************************************************************************
182 * IPropertySetStorage interface
184 #define ICOM_INTERFACE IPropertySetStorage
185 #define IPropertySetStorage_METHODS \
186 ICOM_METHOD5(HRESULT,Create, REFFMTID,rfmtid, const CLSID*,pclsid, DWORD,grfFlags, DWORD,grfMode, IPropertyStorage**,ppprstg) \
187 ICOM_METHOD3(HRESULT,Open, REFFMTID,rfmtid, DWORD,grfMode, IPropertyStorage**,ppprstg) \
188 ICOM_METHOD1(HRESULT,Delete, REFFMTID,rfmtid) \
189 ICOM_METHOD1(HRESULT,Enum, IEnumSTATPROPSETSTG**,ppenum)
190 #define IPropertySetStorage_IMETHODS \
192 IPropertySetStorage_METHODS
193 ICOM_DEFINE(IPropertySetStorage,IUnknown)
194 #undef ICOM_INTERFACE
196 /*** IUnknown methods ***/
197 #define IPropertySetStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
198 #define IPropertySetStorage_AddRef(p) ICOM_CALL (AddRef,p)
199 #define IPropertySetStorage_Release(p) ICOM_CALL (Release,p)
200 /*** IPropertySetStorage methods ***/
201 #define IPropertySetStorage_Create(p,a,b,c,d,e) ICOM_CALL5(Create,p,a,b,c,d,e)
202 #define IPropertySetStorage_Open(p,a,b,c) ICOM_CALL3(Open,p,a,b,c)
203 #define IPropertySetStorage_Delete(p,a) ICOM_CALL1(Delete,p,a)
204 #define IPropertySetStorage_Enum(p,a) ICOM_CALL1(Enum,p,a)
207 /*****************************************************************************
208 * IPropertyStorage interface
210 typedef struct tagPROPVARIANT PROPVARIANT,*LPPROPVARIANT;
212 /* Flags for IPropertySetStorage::Create */
213 #define PROPSETFLAG_DEFAULT ( 0 )
214 #define PROPSETFLAG_NONSIMPLE ( 1 )
215 #define PROPSETFLAG_ANSI ( 2 )
217 typedef struct tagCAUB
220 unsigned char *pElems;
223 typedef struct tagCAI
229 typedef struct tagCAUI
235 typedef struct tagCAL
241 typedef struct tagCAUL
247 typedef struct tagCAFLT
253 typedef struct tagCADBL
259 typedef struct tagCACY
265 typedef struct tagCADATE
271 typedef struct tagCABSTR
277 typedef struct tagCABOOL
280 VARIANT_BOOL *pElems;
283 typedef struct tagCASCODE
289 typedef struct tagCAPROPVARIANT
295 typedef struct tagCAH
298 LARGE_INTEGER *pElems;
301 typedef struct tagCAUH
304 ULARGE_INTEGER *pElems;
307 typedef struct tagCALPSTR
313 typedef struct tagCALPWSTR
319 typedef struct tagCAFILETIME
325 typedef struct tagCACLIPDATA
331 typedef struct tagCACLSID
337 struct tagPROPVARIANT
345 /* Empty union arm */
349 VARIANT_BOOL boolVal;
351 /* FIXME: bool is reserved in C++, how can we deal with that ? */
359 ULARGE_INTEGER uhVal;
385 CAFILETIME cafiletime;
387 CACLIPDATA caclipdata;
391 CAPROPVARIANT capropvar;
396 #define ICOM_INTERFACE IPropertyStorage
397 #define IPropertyStorage_METHODS \
398 ICOM_METHOD3(HRESULT,ReadMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec, PROPVARIANT*,rgpropvar) \
399 ICOM_METHOD4(HRESULT,WriteMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec, const PROPVARIANT*,rgpropvar, PROPID,propidNameFirst) \
400 ICOM_METHOD2(HRESULT,DeleteMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec) \
401 ICOM_METHOD2(HRESULT,ReadPropertyNames, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
402 ICOM_METHOD3(HRESULT,WritePropertyNames, ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
403 ICOM_METHOD2(HRESULT,DeletePropertyNames, ULONG,cpropid, const PROPID*,rgpropid) \
404 ICOM_METHOD1(HRESULT,Commit, DWORD,grfCommitFlags) \
405 ICOM_METHOD (HRESULT,Revert) \
406 ICOM_METHOD1(HRESULT,Enum, IEnumSTATPROPSTG**,ppenum) \
407 ICOM_METHOD3(HRESULT,SetTimes, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
408 ICOM_METHOD1(HRESULT,SetClass, REFCLSID,clsid) \
409 ICOM_METHOD1(HRESULT,Stat, STATPROPSETSTG*,pstatpsstg)
410 #define IPropertyStorage_IMETHODS \
412 IPropertyStorage_METHODS
413 ICOM_DEFINE(IPropertyStorage,IUnknown)
414 #undef ICOM_INTERFACE
416 /*** IUnknown methods ***/
417 #define IPropertyStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
418 #define IPropertyStorage_AddRef(p) ICOM_CALL (AddRef,p)
419 #define IPropertyStorage_Release(p) ICOM_CALL (Release,p)
420 /*** IPropertyStorage methods ***/
421 #define IPropertyStorage_ReadMultiple(p,a,b,c) ICOM_CALL3(ReadMultiple,p,a,b,c)
422 #define IPropertyStorage_WriteMultiple(p,a,b,c,d) ICOM_CALL4(WriteMultiple,p,a,b,c,d)
423 #define IPropertyStorage_DeleteMultiple(p,a,b) ICOM_CALL2(DeleteMultiple,p,a,b)
424 #define IPropertyStorage_ReadPropertyNames(p,a,b) ICOM_CALL2(ReadPropertyNames,p,a,b)
425 #define IPropertyStorage_WritePropertyNames(p,a,b,c) ICOM_CALL3(WritePropertyNames,p,a,b,c)
426 #define IPropertyStorage_DeletePropertyNames(p,a,b) ICOM_CALL2(DeletePropertyNames,p,a,b)
427 #define IPropertyStorage_Commit(p,a) ICOM_CALL1(Commit,p,a)
428 #define IPropertyStorage_Revert(p) ICOM_CALL (Revert,p)
429 #define IPropertyStorage_Enum(p,a) ICOM_CALL1(Enum,p,a)
430 #define IPropertyStorage_SetTimes(p,a,b,c) ICOM_CALL3(SetTimes,p,a,b,c)
431 #define IPropertyStorage_SetClass(p,a) ICOM_CALL1(SetClass,p,a)
432 #define IPropertyStorage_Stat(p,a) ICOM_CALL1(Stat,p,a)
436 #endif /* defined(__cplusplus) */
438 #endif /* __WINE_WINE_OBJ_PROPERTYSTORAGE_H */