Fixed a problem pointed out by Kevin Holbrook.
[wine] / include / wine / obj_storage.h
1 /*
2  * Defines the COM interfaces and APIs related to structured data storage.
3  */
4
5 #ifndef __WINE_WINE_OBJ_STORAGE_H
6 #define __WINE_WINE_OBJ_STORAGE_H
7
8
9 #include "winnt.h"
10 #include "wine/obj_base.h"
11
12 /*****************************************************************************
13  * Predeclare the structures
14  */
15 typedef enum tagLOCKTYPE
16 {
17         LOCK_WRITE = 1,
18         LOCK_EXCLUSIVE = 2,
19         LOCK_ONLYONCE = 4
20 } LOCKTYPE;
21
22 typedef struct tagStorageLayout
23 {
24     DWORD LayoutType;
25     OLECHAR16* pwcsElementName;
26     LARGE_INTEGER cOffset;
27     LARGE_INTEGER cBytes;
28 } StorageLayout;
29
30 typedef struct tagSTATSTG {
31     LPOLESTR    pwcsName;
32     DWORD       type;
33     ULARGE_INTEGER cbSize;
34     FILETIME    mtime;
35     FILETIME    ctime;
36     FILETIME    atime;
37     DWORD       grfMode;
38     DWORD       grfLocksSupported;
39     CLSID       clsid;
40     DWORD       grfStateBits;
41     DWORD       reserved;
42 } STATSTG;
43
44 typedef LPOLESTR16 *SNB16;
45 typedef LPOLESTR *SNB;
46
47
48 /*****************************************************************************
49  * Predeclare the interfaces
50  */
51 DEFINE_OLEGUID(IID_IEnumSTATSTG,        0x0000000dL, 0, 0);
52 typedef struct IEnumSTATSTG IEnumSTATSTG,*LPENUMSTATSTG;
53
54 DEFINE_GUID   (IID_IFillLockBytes,      0x99caf010L, 0x415e, 0x11cf, 0x88, 0x14, 0x00, 0xaa, 0x00, 0xb5, 0x69, 0xf5);
55 typedef struct IFillLockBytes IFillLockBytes,*LPFILLLOCKBYTES;
56
57 DEFINE_GUID   (IID_ILayoutStorage,      0x0e6d4d90L, 0x6738, 0x11cf, 0x96, 0x08, 0x00, 0xaa, 0x00, 0x68, 0x0d, 0xb4);
58 typedef struct ILayoutStorage ILayoutStorage,*LPLAYOUTSTORAGE;
59
60 DEFINE_OLEGUID(IID_ILockBytes,          0x0000000aL, 0, 0);
61 typedef struct ILockBytes ILockBytes,*LPLOCKBYTES;
62
63 DEFINE_OLEGUID(IID_IPersist,            0x0000010cL, 0, 0);
64 typedef struct IPersist IPersist,*LPPERSIST;
65
66 DEFINE_OLEGUID(IID_IPersistFile,        0x0000010bL, 0, 0);
67 typedef struct IPersistFile IPersistFile,*LPPERSISTFILE;
68
69 DEFINE_OLEGUID(IID_IPersistStorage,     0x0000010aL, 0, 0);
70 typedef struct IPersistStorage IPersistStorage,*LPPERSISTSTORAGE;
71
72 DEFINE_OLEGUID(IID_IPersistStream,      0x00000109L, 0, 0);
73 typedef struct IPersistStream IPersistStream,*LPPERSISTSTREAM;
74
75 DEFINE_GUID   (IID_IProgressNotify,     0xa9d758a0L, 0x4617, 0x11cf, 0x95, 0xfc, 0x00, 0xaa, 0x00, 0x68, 0x0d, 0xb4);
76 typedef struct IProgressNotify IProgressNotify,*LPPROGRESSNOTIFY;
77
78 DEFINE_OLEGUID(IID_IRootStorage,        0x00000012L, 0, 0);
79 typedef struct IRootStorage IRootStorage,*LPROOTSTORAGE;
80
81 DEFINE_GUID   (IID_ISequentialStream,   0x0c733a30L, 0x2a1c, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
82 typedef struct ISequentialStream ISequentialStream,*LPSEQUENTIALSTREAM;
83
84 DEFINE_OLEGUID(IID_IStorage,            0x0000000bL, 0, 0);
85 typedef struct IStorage16 IStorage16,*LPSTORAGE16;
86 typedef struct IStorage IStorage,*LPSTORAGE;
87
88 DEFINE_OLEGUID(IID_IStream,             0x0000000cL, 0, 0);
89 typedef struct IStream16 IStream16,*LPSTREAM16;
90 typedef struct IStream IStream,*LPSTREAM;
91
92
93 /*****************************************************************************
94  * STGM enumeration
95  *
96  * See IStorage and IStream
97  */
98 #define STGM_DIRECT             0x00000000
99 #define STGM_TRANSACTED         0x00010000
100 #define STGM_SIMPLE             0x08000000
101 #define STGM_READ               0x00000000
102 #define STGM_WRITE              0x00000001
103 #define STGM_READWRITE          0x00000002
104 #define STGM_SHARE_DENY_NONE    0x00000040
105 #define STGM_SHARE_DENY_READ    0x00000030
106 #define STGM_SHARE_DENY_WRITE   0x00000020
107 #define STGM_SHARE_EXCLUSIVE    0x00000010
108 #define STGM_PRIORITY           0x00040000
109 #define STGM_DELETEONRELEASE    0x04000000
110 #define STGM_CREATE             0x00001000
111 #define STGM_CONVERT            0x00020000
112 #define STGM_FAILIFTHERE        0x00000000
113 #define STGM_NOSCRATCH          0x00100000
114 #define STGM_NOSNAPSHOT         0x00200000
115
116 /*****************************************************************************
117  * STGTY enumeration
118  *
119  * See IStorage
120  */
121 #define STGTY_STORAGE 1
122 #define STGTY_STREAM  2
123
124 /*****************************************************************************
125  * STATFLAG enumeration
126  *
127  * See IStorage and IStream
128  */
129 #define STATFLAG_DEFAULT 0
130 #define STATFLAG_NONAME  1
131
132 /*****************************************************************************
133  * STREAM_SEEK enumeration
134  *
135  * See IStream
136  */
137 #define STREAM_SEEK_SET 0
138 #define STREAM_SEEK_CUR 1
139 #define STREAM_SEEK_END 2
140
141 /*****************************************************************************
142  * IEnumSTATSTG interface
143  */
144 #define ICOM_INTERFACE IEnumSTATSTG
145 #define IEnumSTATSTG_METHODS \
146     ICOM_METHOD3(HRESULT,Next,  ULONG,celt, STATSTG*,rgelt, ULONG*,pceltFethed) \
147     ICOM_METHOD1(HRESULT,Skip,  ULONG,celt) \
148     ICOM_METHOD (HRESULT,Reset) \
149     ICOM_METHOD1(HRESULT,Clone, IEnumSTATSTG**,ppenum)
150 #define IEnumSTATSTG_IMETHODS \
151     IUnknown_IMETHODS \
152     IEnumSTATSTG_METHODS
153 ICOM_DEFINE(IEnumSTATSTG,IUnknown)
154 #undef ICOM_INTERFACE
155
156 #ifdef ICOM_CINTERFACE
157 /*** IUnknown methods ***/
158 #define IEnumSTATSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
159 #define IEnumSTATSTG_AddRef(p)             ICOM_CALL (AddRef,p)
160 #define IEnumSTATSTG_Release(p)            ICOM_CALL (Release,p)
161 /*** IEnumSTATSTG methods ***/
162 #define IEnumSTATSTG_Next(p,a,b,c)         ICOM_CALL3(Next,p,a,b,c)
163 #define IEnumSTATSTG_Skip(p,a)             ICOM_CALL1(Skip,p,a)
164 #define IEnumSTATSTG_Reset(p)              ICOM_CALL(Reset,p)
165 #define IEnumSTATSTG_Clone(p,a)            ICOM_CALL1(Clone,p,a)
166 #endif
167
168
169 /*****************************************************************************
170  * IFillLockBytes interface
171  */
172 #define ICOM_INTERFACE IFillLockBytes
173 #define IFillLockBytes_METHODS \
174     ICOM_METHOD3(HRESULT,FillAppend,  const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
175     ICOM_METHOD4(HRESULT,FillAt,      ULARGE_INTEGER,ulOffset, const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
176     ICOM_METHOD1(HRESULT,SetFillSize, ULARGE_INTEGER,ulSize) \
177     ICOM_METHOD1(HRESULT,Terminate,   BOOL,bCanceled)
178 #define IFillLockBytes_IMETHODS \
179     IUnknown_IMETHODS \
180     IFillLockBytes_METHODS
181 ICOM_DEFINE(IFillLockBytes,IUnknown)
182 #undef ICOM_INTERFACE
183
184 #ifdef ICOM_CINTERFACE
185 /*** IUnknown methods ***/
186 #define IFillLockBytes_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
187 #define IFillLockBytes_AddRef(p)             ICOM_CALL (AddRef,p)
188 #define IFillLockBytes_Release(p)            ICOM_CALL (Release,p)
189 /*** IFillLockBytes methods ***/
190 #define IFillLockBytes_FillAppend(p,a,b,c) ICOM_CALL3(FillAppend,p,a,b,c)
191 #define IFillLockBytes_FillAt(p,a,b,c,d)   ICOM_CALL4(FillAt,p,a,b,c,d)
192 #define IFillLockBytes_SetFillSize(p,a)    ICOM_CALL1(SetFillSize,p,a)
193 #define IFillLockBytes_Terminate(p,a)      ICOM_CALL1(Terminate,p,a)
194 #endif
195
196
197 /*****************************************************************************
198  * ILayoutStorage interface
199  */
200 #define ICOM_INTERFACE ILayoutStorage
201 #define ILayoutStorage_METHODS \
202     ICOM_METHOD2(HRESULT,LayoutScript,                DWORD,nEntries, DWORD,glfInterleavedFlag) \
203     ICOM_METHOD (HRESULT,BeginMonitor) \
204     ICOM_METHOD (HRESULT,EndMonitor) \
205     ICOM_METHOD1(HRESULT,ReLayoutDocfile,             OLECHAR16*,pwcsNewDfName) \
206     ICOM_METHOD1(HRESULT,ReLayoutDocfileOnILockBytes, ILockBytes*,pILockBytes)
207 #define ILayoutStorage_IMETHODS \
208     IUnknown_IMETHODS \
209     ILayoutStorage_METHODS
210 ICOM_DEFINE(ILayoutStorage,IUnknown)
211 #undef ICOM_INTERFACE
212
213 #ifdef ICOM_CINTERFACE
214 /*** IUnknown methods ***/
215 #define ILayoutStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
216 #define ILayoutStorage_AddRef(p)             ICOM_CALL (AddRef,p)
217 #define ILayoutStorage_Release(p)            ICOM_CALL (Release,p)
218 /*** ILayoutStorage methods ***/
219 #define ILayoutStorage_LayoutScript(p,a,b)              ICOM_CALL2(LayoutScript,p,a,b)
220 #define ILayoutStorage_BeginMonitor(p)                  ICOM_CALL (BeginMonitor,p)
221 #define ILayoutStorage_EndMonitor(p)                    ICOM_CALL (EndMonitor,p)
222 #define ILayoutStorage_ReLayoutDocfile(p,a)             ICOM_CALL1(ReLayoutDocfile,p,a)
223 #define ILayoutStorage_ReLayoutDocfileOnILockBytes(p,a) ICOM_CALL1(ReLayoutDocfileOnILockBytes,p,a)
224 #endif
225
226
227 /*****************************************************************************
228  * ILockBytes interface
229  */
230 #define ICOM_INTERFACE ILockBytes
231 #define ILockBytes_METHODS \
232     ICOM_METHOD4(HRESULT,ReadAt,       ULARGE_INTEGER,ulOffset, void*,pv, ULONG,cb, ULONG*,pcbRead) \
233     ICOM_METHOD4(HRESULT,WriteAt,      ULARGE_INTEGER,ulOffset, const void*,pv, ULONG,cb, ULONG*,pcbWritten) \
234     ICOM_METHOD (HRESULT,Flush); \
235     ICOM_METHOD1(HRESULT,SetSize,      ULARGE_INTEGER,cb) \
236     ICOM_METHOD3(HRESULT,LockRegion,   ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
237     ICOM_METHOD3(HRESULT,UnlockRegion, ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
238     ICOM_METHOD2(HRESULT,Stat,         STATSTG*,pstatstg, DWORD,grfStatFlag)
239 #define ILockBytes_IMETHODS \
240     IUnknown_IMETHODS \
241     ILockBytes_METHODS
242 ICOM_DEFINE(ILockBytes,IUnknown)
243 #undef ICOM_INTERFACE
244
245 #ifdef ICOM_CINTERFACE
246 /*** IUnknown methods ***/
247 #define ILockBytes_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
248 #define ILockBytes_AddRef(p)             ICOM_CALL (AddRef,p)
249 #define ILockBytes_Release(p)            ICOM_CALL (Release,p)
250 /*** ILockBytes methods ***/
251 #define ILockBytes_ReadAt(p,a,b,c,d)     ICOM_CALL4(ReadAt,p,a,b,c,d)
252 #define ILockBytes_WriteAt(p,a,b,c,d)    ICOM_CALL4(WriteAt,p,a,b,c,d)
253 #define ILockBytes_Flush(p)              ICOM_CALL (Flush,p)
254 #define ILockBytes_SetSize(p,a)          ICOM_CALL1(SetSize,p,a)
255 #define ILockBytes_LockRegion(p,a,b,c)   ICOM_CALL3(LockRegion,p,a,b,c)
256 #define ILockBytes_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
257 #define ILockBytes_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
258 #endif
259
260
261 /*****************************************************************************
262  * IPersist interface
263  */
264 #define ICOM_INTERFACE IPersist
265 #define IPersist_METHODS \
266     ICOM_CMETHOD1(HRESULT,GetClassID, CLSID*,pClassID)
267 #define IPersist_IMETHODS \
268     IUnknown_IMETHODS \
269     IPersist_METHODS
270 ICOM_DEFINE(IPersist,IUnknown)
271 #undef ICOM_INTERFACE
272
273 #ifdef ICOM_CINTERFACE
274 /*** IUnknown methods ***/
275 #define IPersist_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
276 #define IPersist_AddRef(p)             ICOM_CALL (AddRef,p)
277 #define IPersist_Release(p)            ICOM_CALL (Release,p)
278 /*** IPersist methods ***/
279 #define IPersist_GetClassID(p,a) ICOM_CALL1(GetClassID,p,a)
280 #endif
281
282
283 /*****************************************************************************
284  * IPersistFile interface
285  */
286 #define ICOM_INTERFACE IPersistFile
287 #define IPersistFile_METHODS \
288     ICOM_CMETHOD (HRESULT,IsDirty) \
289     ICOM_METHOD2 (HRESULT,Load,          LPCOLESTR,pszFileName, DWORD,dwMode) \
290     ICOM_METHOD2 (HRESULT,Save,          LPCOLESTR,pszFileName, BOOL,fRemember) \
291     ICOM_METHOD1 (HRESULT,SaveCompleted, LPCOLESTR,pszFileName) \
292     ICOM_CMETHOD1(HRESULT,GetCurFile,    LPOLESTR*,ppszFileName)
293 #define IPersistFile_IMETHODS \
294     IPersist_IMETHODS \
295     IPersistFile_METHODS
296 ICOM_DEFINE(IPersistFile,IPersist)
297 #undef ICOM_INTERFACE
298
299 #ifdef ICOM_CINTERFACE
300 /*** IUnknown methods ***/
301 #define IPersistFile_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
302 #define IPersistFile_AddRef(p)             ICOM_CALL (AddRef,p)
303 #define IPersistFile_Release(p)            ICOM_CALL (Release,p)
304 /*** IPersist methods ***/
305 #define IPersistFile_GetClassID(p,a) ICOM_CALL1(GetClassID,p,a)
306 /*** IPersistFile methods ***/
307 #define IPersistFile_IsDirty(p)         ICOM_CALL(IsDirty,p)
308 #define IPersistFile_Load(p,a,b)        ICOM_CALL2(Load,p,a,b)
309 #define IPersistFile_Save(p,a,b)        ICOM_CALL2(Save,p,a,b)
310 #define IPersistFile_SaveCompleted(p,a) ICOM_CALL1(SaveCompleted,p,a)
311 #define IPersistFile_GetCurFile(p,a)    ICOM_CALL1(GetCurFile,p,a)
312 #endif
313
314
315 /*****************************************************************************
316  * IPersistStorage interface
317  */
318 #define ICOM_INTERFACE IPersistStorage
319 #define IPersistStorage_METHODS \
320     ICOM_METHOD (HRESULT,IsDirty) \
321     ICOM_METHOD1(HRESULT,InitNew,        IStorage*,pStg) \
322     ICOM_METHOD1(HRESULT,Load,           IStorage*,pStg) \
323     ICOM_METHOD2(HRESULT,Save,           IStorage*,pStg, BOOL,fSameAsLoad) \
324     ICOM_METHOD1(HRESULT,SaveCompleted,  IStorage*,pStgNew) \
325                 ICOM_METHOD (HRESULT,HandsOffStorage)
326 #define IPersistStorage_IMETHODS \
327     IPersist_IMETHODS \
328     IPersistStorage_METHODS
329 ICOM_DEFINE(IPersistStorage,IPersist)
330 #undef ICOM_INTERFACE
331
332 #ifdef ICOM_CINTERFACE
333 /*** IUnknown methods ***/
334 #define IPersistStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
335 #define IPersistStorage_AddRef(p)             ICOM_CALL (AddRef,p)
336 #define IPersistStorage_Release(p)            ICOM_CALL (Release,p)
337 /*** IPersist methods ***/
338 #define IPersistStorage_GetClassID(p,a) ICOM_CALL1(GetClassID,p,a)
339 /*** IPersistStorage methods ***/
340 #define IPersistStorage_IsDirty(p)         ICOM_CALL (IsDirty,p)
341 #define IPersistStorage_InitNew(p,a)                     ICOM_CALL1(InitNew,p,a)
342 #define IPersistStorage_Load(p,a)          ICOM_CALL1(Load,p,a)
343 #define IPersistStorage_Save(p,a,b)        ICOM_CALL2(Save,p,a,b)
344 #define IPersistStorage_SaveCompleted(p,a) ICOM_CALL1(SaveCompleted,p,a)
345 #define IPersistStorage_HandsOffStorage(p) ICOM_CALL (HandsOffStorage,p)
346 #endif
347
348
349 /*****************************************************************************
350  * IPersistStream interface
351  */
352 #define ICOM_INTERFACE IPersistStream
353 #define IPersistStream_METHODS \
354     ICOM_METHOD (HRESULT,IsDirty) \
355     ICOM_METHOD1(HRESULT,Load,       IStream*,pStm) \
356     ICOM_METHOD2(HRESULT,Save,       IStream*,pStm, BOOL,fClearDirty) \
357     ICOM_METHOD1(HRESULT,GetSizeMax, ULARGE_INTEGER*,pcbSize)
358 #define IPersistStream_IMETHODS \
359     IPersist_IMETHODS \
360     IPersistStream_METHODS
361 ICOM_DEFINE(IPersistStream,IPersist)
362 #undef ICOM_INTERFACE
363
364 #ifdef ICOM_CINTERFACE
365 /*** IUnknown methods ***/
366 #define IPersistStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
367 #define IPersistStream_AddRef(p)             ICOM_CALL (AddRef,p)
368 #define IPersistStream_Release(p)            ICOM_CALL (Release,p)
369 /*** IPersist methods ***/
370 #define IPersistStream_GetClassID(p,a) ICOM_CALL1(GetClassID,p,a)
371 /*** IPersistStream methods ***/
372 #define IPersistStream_IsDirty(p)      ICOM_CALL (IsDirty,p)
373 #define IPersistStream_Load(p,a)       ICOM_CALL1(Load,p,a)
374 #define IPersistStream_Save(p,a,b)     ICOM_CALL2(Save,p,a,b)
375 #define IPersistStream_GetSizeMax(p,a) ICOM_CALL1(GetSizeMax,p,a)
376 #endif
377
378
379 /*****************************************************************************
380  * IProgressNotify interface
381  */
382 #define ICOM_INTERFACE IProgressNotify
383 #define IProgressNotify_METHODS \
384     ICOM_METHOD4(HRESULT,OnProgress, DWORD,dwProgressCurrent, DWORD,dwProgressMaximum, BOOL,fAccurate, BOOL,fOwner)
385 #define IProgressNotify_IMETHODS \
386     IUnknown_IMETHODS \
387     IProgressNotify_METHODS
388 ICOM_DEFINE(IProgressNotify,IUnknown)
389 #undef ICOM_INTERFACE
390
391 #ifdef ICOM_CINTERFACE
392 /*** IUnknown methods ***/
393 #define IProgressNotify_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
394 #define IProgressNotify_AddRef(p)             ICOM_CALL (AddRef,p)
395 #define IProgressNotify_Release(p)            ICOM_CALL (Release,p)
396 /*** IProgressNotify methods ***/
397 #define IProgressNotify_OnProgress(p,a,b,c,d) ICOM_CALL4(OnProgress,p,a,b,c,d)
398 #endif
399
400
401 /*****************************************************************************
402  * IRootStorage interface
403  */
404 #define ICOM_INTERFACE IRootStorage
405 #define IRootStorage_METHODS \
406     ICOM_METHOD1(HRESULT,SwitchToFile, LPOLESTR,pszFile)
407 #define IRootStorage_IMETHODS \
408     IUnknown_IMETHODS \
409     IRootStorage_METHODS
410 ICOM_DEFINE(IRootStorage,IUnknown)
411 #undef ICOM_INTERFACE
412
413 #ifdef ICOM_CINTERFACE
414 /*** IUnknown methods ***/
415 #define IRootStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
416 #define IRootStorage_AddRef(p)             ICOM_CALL (AddRef,p)
417 #define IRootStorage_Release(p)            ICOM_CALL (Release,p)
418 /*** IRootStorage methods ***/
419 #define IRootStorage_SwitchToFile(p,a) ICOM_CALLSwitchToFile(,p,a)
420 #endif
421
422
423 /*****************************************************************************
424  * ISequentialStream interface
425  */
426 #define ICOM_INTERFACE ISequentialStream
427 #define ISequentialStream_METHODS \
428     ICOM_METHOD3(HRESULT,Read,  void*,pv, ULONG,cb, ULONG*,pcbRead) \
429     ICOM_METHOD3(HRESULT,Write, const void*,pv, ULONG,cb, ULONG*,pcbWritten)
430 #define ISequentialStream_IMETHODS \
431     IUnknown_IMETHODS \
432     ISequentialStream_METHODS
433 ICOM_DEFINE(ISequentialStream,IUnknown)
434 #undef ICOM_INTERFACE
435
436 #ifdef ICOM_CINTERFACE
437 /*** IUnknown methods ***/
438 #define ISequentialStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
439 #define ISequentialStream_AddRef(p)             ICOM_CALL (AddRef,p)
440 #define ISequentialStream_Release(p)            ICOM_CALL (Release,p)
441 /*** ISequentialStream methods ***/
442 #define ISequentialStream_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
443 #define ISequentialStream_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
444 #endif
445
446
447 /*****************************************************************************
448  * IStorage interface
449  */
450 #define ICOM_INTERFACE IStorage16
451 #define IStorage16_METHODS \
452     ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream16**,ppstm) \
453     ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR16,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream16**,ppstm) \
454     ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR16,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage16**,ppstg) \
455     ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR16,pwcsName, IStorage16*,pstgPriority, DWORD,grfMode, SNB16,snb16Exclude, DWORD,reserved, IStorage16**,ppstg) \
456     ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB16,snb16Exclude, IStorage16*,pstgDest) \
457     ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR16,pwcsName, IStorage16*,pstgDest, LPCOLESTR16,pwcsNewName, DWORD,grfFlags) \
458     ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags) \
459     ICOM_METHOD (HRESULT,Revert) \
460     ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum) \
461     ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR16,pwcsName) \
462     ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR16,pwcsOldName, LPOLESTR16,pwcsNewName) \
463     ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR16,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
464     ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid) \
465     ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask) \
466     ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
467 #define IStorage16_IMETHODS \
468     IUnknown_IMETHODS \
469     IStorage16_METHODS
470 ICOM_DEFINE(IStorage16,IUnknown)
471 #undef ICOM_INTERFACE
472
473 #ifdef ICOM_CINTERFACE
474 /*** IUnknown methods ***/
475 #define IStorage16_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
476 #define IStorage16_AddRef(p)             ICOM_CALL (AddRef,p)
477 #define IStorage16_Release(p)            ICOM_CALL (Release,p)
478 /*** IStorage16 methods ***/
479 #define IStorage16_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
480 #define IStorage16_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
481 #define IStorage16_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
482 #define IStorage16_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
483 #define IStorage16_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
484 #define IStorage16_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
485 #define IStorage16_Commit(p,a)                ICOM_CALL1(Commit,p,a)
486 #define IStorage16_Revert(p)                  ICOM_CALL (Revert,p)
487 #define IStorage16_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
488 #define IStorage16_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
489 #define IStorage16_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
490 #define IStorage16_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
491 #define IStorage16_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
492 #define IStorage16_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
493 #define IStorage16_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
494 #endif
495
496
497 #define ICOM_INTERFACE IStorage
498 #define IStorage_METHODS \
499     ICOM_METHOD5(HRESULT,CreateStream,   LPCOLESTR,pwcsName, DWORD,grfMode, DWORD,reserved1, DWORD,reserved2, IStream**,ppstm) \
500     ICOM_METHOD5(HRESULT,OpenStream,     LPCOLESTR,pwcsName, void*,reserved1, DWORD,grfMode, DWORD,reserved2, IStream**,ppstm) \
501     ICOM_METHOD5(HRESULT,CreateStorage,  LPCOLESTR,pwcsName, DWORD,grfMode, DWORD,dwStgFmt, DWORD,reserved2, IStorage**,ppstg) \
502     ICOM_METHOD6(HRESULT,OpenStorage,    LPCOLESTR,pwcsName, IStorage*,pstgPriority, DWORD,grfMode, SNB,snb16Exclude, DWORD,reserved, IStorage**,ppstg) \
503     ICOM_METHOD4(HRESULT,CopyTo,         DWORD,ciidExclude, const IID*,rgiidExclude, SNB,snb16Exclude, IStorage*,pstgDest) \
504     ICOM_METHOD4(HRESULT,MoveElementTo,  LPCOLESTR,pwcsName, IStorage*,pstgDest, LPCOLESTR,pwcsNewName, DWORD,grfFlags) \
505     ICOM_METHOD1(HRESULT,Commit,         DWORD,grfCommitFlags) \
506     ICOM_METHOD (HRESULT,Revert) \
507     ICOM_METHOD4(HRESULT,EnumElements,   DWORD,reserved1, void*,reserved2, DWORD,reserved3, IEnumSTATSTG**,ppenum) \
508     ICOM_METHOD1(HRESULT,DestroyElement, LPCOLESTR,pwcsName) \
509     ICOM_METHOD2(HRESULT,RenameElement,  LPCOLESTR,pwcsOldName, LPCOLESTR,pwcsNewName) \
510     ICOM_METHOD4(HRESULT,SetElementTimes,LPCOLESTR,pwcsName, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
511     ICOM_METHOD1(HRESULT,SetClass,       REFCLSID,clsid) \
512     ICOM_METHOD2(HRESULT,SetStateBits,   DWORD,grfStateBits, DWORD,grfMask) \
513     ICOM_METHOD2(HRESULT,Stat,           STATSTG*,pstatstg, DWORD,grfStatFlag)
514 #define IStorage_IMETHODS \
515     IUnknown_IMETHODS \
516     IStorage_METHODS
517 ICOM_DEFINE(IStorage,IUnknown)
518 #undef ICOM_INTERFACE
519
520 #ifdef ICOM_CINTERFACE
521 /*** IUnknown methods ***/
522 #define IStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
523 #define IStorage_AddRef(p)             ICOM_CALL (AddRef,p)
524 #define IStorage_Release(p)            ICOM_CALL (Release,p)
525 /*** IStorage32 methods ***/
526 #define IStorage_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
527 #define IStorage_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
528 #define IStorage_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
529 #define IStorage_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
530 #define IStorage_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
531 #define IStorage_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
532 #define IStorage_Commit(p,a)                ICOM_CALL1(Commit,p,a)
533 #define IStorage_Revert(p)                  ICOM_CALL (Revert,p)
534 #define IStorage_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
535 #define IStorage_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
536 #define IStorage_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
537 #define IStorage_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
538 #define IStorage_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
539 #define IStorage_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
540 #define IStorage_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
541
542 #ifndef __WINE__
543 /* Duplicated for WINELIB */
544 /*** IUnknown methods ***/
545 #define IStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
546 #define IStorage_AddRef(p)             ICOM_CALL (AddRef,p)
547 #define IStorage_Release(p)            ICOM_CALL (Release,p)
548 /*** IStorage methods ***/
549 #define IStorage_CreateStream(p,a,b,c,d,e)  ICOM_CALL5(CreateStream,p,a,b,c,d,e)
550 #define IStorage_OpenStream(p,a,b,c,d,e)    ICOM_CALL5(OpenStream,p,a,b,c,d,e)
551 #define IStorage_CreateStorage(p,a,b,c,d,e) ICOM_CALL5(CreateStorage,p,a,b,c,d,e)
552 #define IStorage_OpenStorage(p,a,b,c,d,e,f) ICOM_CALL6(OpenStorage,p,a,b,c,d,e,f)
553 #define IStorage_CopyTo(p,a,b,c,d)          ICOM_CALL4(CopyTo,p,a,b,c,d)
554 #define IStorage_MoveElementTo(p,a,b,c,d)   ICOM_CALL4(MoveElementTo,p,a,b,c,d)
555 #define IStorage_Commit(p,a)                ICOM_CALL1(Commit,p,a)
556 #define IStorage_Revert(p)                  ICOM_CALL (Revert,p)
557 #define IStorage_EnumElements(p,a,b,c,d)    ICOM_CALL4(EnumElements,p,a,b,c,d)
558 #define IStorage_DestroyElement(p,a)        ICOM_CALL1(DestroyElement,p,a)
559 #define IStorage_RenameElement(p,a,b)       ICOM_CALL2(RenameElement,p,a,b)
560 #define IStorage_SetElementTimes(p,a,b,c,d) ICOM_CALL4(SetElementTimes,p,a,b,c,d)
561 #define IStorage_SetClass(p,a)              ICOM_CALL1(SetClass,p,a)
562 #define IStorage_SetStateBits(p,a,b)        ICOM_CALL2(SetStateBits,p,a,b)
563 #define IStorage_Stat(p,a,b)                ICOM_CALL2(Stat,p,a,b)
564 #endif
565 #endif
566
567
568 /*****************************************************************************
569  * IStream interface
570  */
571 #define ICOM_INTERFACE IStream16
572 #define IStream16_METHODS \
573     ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition) \
574     ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize) \
575     ICOM_METHOD4(HRESULT,CopyTo,      IStream16*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten) \
576     ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags) \
577     ICOM_METHOD (HRESULT,Revert) \
578     ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
579     ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
580     ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag) \
581     ICOM_METHOD1(HRESULT,Clone,       IStream16**,ppstm)
582 #define IStream16_IMETHODS \
583     ISequentialStream_IMETHODS \
584     IStream16_METHODS
585 ICOM_DEFINE(IStream16,ISequentialStream)
586 #undef ICOM_INTERFACE
587
588 #ifdef ICOM_CINTERFACE
589 /*** IUnknown methods ***/
590 #define IStream16_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
591 #define IStream16_AddRef(p)             ICOM_CALL (AddRef,p)
592 #define IStream16_Release(p)            ICOM_CALL (Release,p)
593 /*** ISequentialStream methods ***/
594 #define IStream16_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
595 #define IStream16_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
596 /*** IStream16 methods ***/
597 #define IStream16_Seek(p)               ICOM_CALL3(Seek,p)
598 #define IStream16_SetSize(p,a,b)        ICOM_CALL1(SetSize,p,a,b)
599 #define IStream16_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
600 #define IStream16_Commit(p,a)           ICOM_CALL1(Commit,p,a)
601 #define IStream16_Revert(p)             ICOM_CALL (Revert,p)
602 #define IStream16_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
603 #define IStream16_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
604 #define IStream16_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
605 #define IStream16_Clone(p,a)            ICOM_CALL1(Clone,p,a)
606 #endif
607
608
609 #define ICOM_INTERFACE IStream
610 #define IStream_METHODS \
611     ICOM_METHOD3(HRESULT,Seek,        LARGE_INTEGER,dlibMove, DWORD,dwOrigin, ULARGE_INTEGER*,plibNewPosition) \
612     ICOM_METHOD1(HRESULT,SetSize,     ULARGE_INTEGER,libNewSize) \
613     ICOM_METHOD4(HRESULT,CopyTo,      IStream*,pstm, ULARGE_INTEGER,cb, ULARGE_INTEGER*,pcbRead, ULARGE_INTEGER*,pcbWritten) \
614     ICOM_METHOD1(HRESULT,Commit,      DWORD,grfCommitFlags) \
615     ICOM_METHOD (HRESULT,Revert) \
616     ICOM_METHOD3(HRESULT,LockRegion,  ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
617     ICOM_METHOD3(HRESULT,UnlockRegion,ULARGE_INTEGER,libOffset, ULARGE_INTEGER,cb, DWORD,dwLockType) \
618     ICOM_METHOD2(HRESULT,Stat,        STATSTG*,pstatstg, DWORD,grfStatFlag) \
619     ICOM_METHOD1(HRESULT,Clone,       IStream**,ppstm)
620 #define IStream_IMETHODS \
621     ISequentialStream_IMETHODS \
622     IStream_METHODS
623 ICOM_DEFINE(IStream,ISequentialStream)
624 #undef ICOM_INTERFACE
625
626 #ifdef ICOM_CINTERFACE
627 /*** IUnknown methods ***/
628 #define IStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
629 #define IStream_AddRef(p)             ICOM_CALL (AddRef,p)
630 #define IStream_Release(p)            ICOM_CALL (Release,p)
631 /*** ISequentialStream methods ***/
632 #define IStream_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
633 #define IStream_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
634 /*** IStream32 methods ***/
635 #define IStream_Seek(p,a,b,c)         ICOM_CALL3(Seek,p,a,b,c)
636 #define IStream_SetSize(p,a)          ICOM_CALL1(SetSize,p,a)
637 #define IStream_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
638 #define IStream_Commit(p,a)           ICOM_CALL1(Commit,p,a)
639 #define IStream_Revert(p)             ICOM_CALL (Revert,p)
640 #define IStream_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
641 #define IStream_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
642 #define IStream_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
643 #define IStream_Clone(p,a)            ICOM_CALL1(Clone,p,a)
644
645 #ifndef __WINE__
646 /* Duplicated for WINELIB */
647 /*** IUnknown methods ***/
648 #define IStream_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
649 #define IStream_AddRef(p)             ICOM_CALL (AddRef,p)
650 #define IStream_Release(p)            ICOM_CALL (Release,p)
651 /*** ISequentialStream methods ***/
652 #define IStream_Read(p,a,b,c)  ICOM_CALL3(Read,p,a,b,c)
653 #define IStream_Write(p,a,b,c) ICOM_CALL3(Write,p,a,b,c)
654 /*** IStream methods ***/
655 #define IStream_Seek(p,a,b,c)         ICOM_CALL3(Seek,p,a,b,c)
656 #define IStream_SetSize(p,a)          ICOM_CALL1(SetSize,p,a)
657 #define IStream_CopyTo(pa,b,c,d)      ICOM_CALL4(CopyTo,pa,b,c,d)
658 #define IStream_Commit(p,a)           ICOM_CALL1(Commit,p,a)
659 #define IStream_Revert(p)             ICOM_CALL (Revert,p)
660 #define IStream_LockRegion(pa,b,c)    ICOM_CALL3(LockRegion,pa,b,c)
661 #define IStream_UnlockRegion(p,a,b,c) ICOM_CALL3(UnlockRegion,p,a,b,c)
662 #define IStream_Stat(p,a,b)           ICOM_CALL2(Stat,p,a,b)
663 #define IStream_Clone(p,a)            ICOM_CALL1(Clone,p,a)
664 #endif
665 #endif
666
667
668 /*****************************************************************************
669  * StgXXX API
670  */
671 /* FIXME: many functions are missing */
672 HRESULT WINAPI StgCreateDocFile16(LPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen);
673 HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);
674
675 HRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn);
676 HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);
677
678 HRESULT WINAPI StgOpenStorage16(const OLECHAR16* pwcsName,IStorage16* pstgPriority,DWORD grfMode,SNB16 snbExclude,DWORD reserved,IStorage16**ppstgOpen);
679 HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);
680
681 HRESULT WINAPI WriteClassStg(IStorage* pStg, REFCLSID rclsid);
682
683 HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen);
684 HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen);
685
686 /*****************************************************************************
687  * Other storage API
688  */
689
690 /* FIXME: not implemented */
691 BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
692
693 /* FIXME: not implemented */
694 BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
695
696
697 #endif /* __WINE_WINE_OBJ_STORAGE_H */