|
|
1.1 root 1: // storage.h -
2:
3: #if !defined( _STORAGE_H_ )
4: #define _STORAGE_H_
5:
6:
7: #include <compobj.h>
8:
9:
10: /****** Storage Error Codes *************************************************/
11:
12: /* DOS-based error codes */
13: #define STG_E_INVALIDFUNCTION \
14: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x01)
15:
16: #define STG_E_FILENOTFOUND \
17: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x02)
18:
19: #define STG_E_PATHNOTFOUND \
20: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x03)
21:
22: #define STG_E_TOOMANYOPENFILES \
23: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x04)
24:
25: #define STG_E_ACCESSDENIED \
26: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x05)
27:
28: #define STG_E_INVALIDHANDLE \
29: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x06)
30:
31: #define STG_E_INSUFFICIENTMEMORY \
32: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x08)
33:
34: #define STG_E_INVALIDPOINTER \
35: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x09)
36:
37: #define STG_E_NOMOREFILES \
38: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x12)
39:
40: #define STG_E_DISKISWRITEPROTECTED \
41: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x13)
42:
43: #define STG_E_SEEKERROR \
44: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x19)
45:
46: #define STG_E_WRITEFAULT \
47: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1d)
48:
49: #define STG_E_READFAULT \
50: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1e)
51:
52: #define STG_E_SHAREVIOLATION \
53: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x20)
54:
55: #define STG_E_LOCKVIOLATION \
56: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x21)
57:
58: #define STG_E_FILEALREADYEXISTS \
59: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x50)
60:
61: #define STG_E_INVALIDPARAMETER \
62: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x57)
63:
64: #define STG_E_MEDIUMFULL \
65: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x70)
66:
67: #define STG_E_ABNORMALAPIEXIT \
68: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfa)
69:
70: #define STG_E_INVALIDHEADER \
71: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfb)
72:
73: #define STG_E_INVALIDNAME \
74: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfc)
75:
76: #define STG_E_UNKNOWN \
77: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfd)
78:
79: #define STG_E_UNIMPLEMENTEDFUNCTION\
80: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfe)
81:
82: #define STG_E_INVALIDFLAG \
83: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xff)
84:
85: /* Standard storage error codes */
86: #define STG_E_INUSE \
87: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x100)
88:
89: #define STG_E_NOTCURRENT \
90: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x101)
91:
92: #define STG_E_REVERTED \
93: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x102)
94:
95: #define STG_E_CANTSAVE \
96: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x103)
97:
98: #define STG_E_OLDFORMAT \
99: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x104)
100:
101: #define STG_E_OLDDLL \
102: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x105)
103:
104: #define STG_E_SHAREREQUIRED \
105: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x106)
106:
107: #define STG_E_NOTFILEBASEDSTORAGE \
108: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x107)
109:
110: #define STG_E_EXTANTMARSHALLINGS \
111: MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x108)
112:
113: /* Information returns */
114: #define STG_S_CONVERTED \
115: MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_STORAGE, 0x200)
116:
117: /****** Storage types *******************************************************/
118:
119: #ifdef UNICODE
120: typedef WCHAR TCHAR;
121: #else
122: typedef char TCHAR;
123: #endif
124:
125: #if defined(_M_I286)
126: #ifndef HUGEP
127: #define HUGEP _huge
128: #endif
129: #else
130: #ifndef HUGEP
131: #define HUGEP
132: #endif
133: #endif
134:
135: #define CWCSTORAGENAME 32
136:
137: /* Storage instantiation modes */
138: #define STGM_DIRECT 0x00000000L
139: #define STGM_TRANSACTED 0x00010000L
140:
141: #define STGM_READ 0x00000000L
142: #define STGM_WRITE 0x00000001L
143: #define STGM_READWRITE 0x00000002L
144:
145: #define STGM_SHARE_DENY_NONE 0x00000040L
146: #define STGM_SHARE_DENY_READ 0x00000030L
147: #define STGM_SHARE_DENY_WRITE 0x00000020L
148: #define STGM_SHARE_EXCLUSIVE 0x00000010L
149:
150: #define STGM_PRIORITY 0x00040000L
151: #define STGM_DELETEONRELEASE 0x04000000L
152:
153: #define STGM_CREATE 0x00001000L
154: #define STGM_CONVERT 0x00020000L
155: #define STGM_FAILIFTHERE 0x00000000L
156:
157: /* Storage commit types */
158: typedef enum tagSTGC
159: {
160: STGC_DEFAULT = 0,
161: STGC_OVERWRITE = 1,
162: STGC_ONLYIFCURRENT = 2,
163: STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4
164: } STGC;
165:
166: /* Stream name block definitions */
167: typedef TCHAR FAR * FAR *SNB;
168:
169:
170: #ifndef _WINDOWS_
171: #ifndef _FILETIME_
172: #define _FILETIME_
173: typedef struct FARSTRUCT tagFILETIME
174: {
175: DWORD dwLowDateTime;
176: DWORD dwHighDateTime;
177: } FILETIME;
178: #endif
179: #endif
180:
181:
182: /* Storage stat buffer */
183:
184: typedef struct FARSTRUCT tagSTATSTG
185: {
186: TCHAR FAR* pwcsName;
187: DWORD type;
188: ULARGE_INTEGER cbSize;
189: FILETIME mtime;
190: FILETIME ctime;
191: FILETIME atime;
192: DWORD grfMode;
193: DWORD grfLocksSupported;
194: CLSID clsid;
195: DWORD grfStateBits;
196: DWORD reserved;
197: } STATSTG;
198:
199:
200: /* Storage element types */
201: typedef enum tagSTGTY
202: {
203: STGTY_STORAGE = 1,
204: STGTY_STREAM = 2,
205: STGTY_LOCKBYTES = 3,
206: STGTY_PROPERTY = 4
207: } STGTY;
208:
209: typedef enum tagSTREAM_SEEK
210: {
211: STREAM_SEEK_SET = 0,
212: STREAM_SEEK_CUR = 1,
213: STREAM_SEEK_END = 2
214: } STREAM_SEEK;
215:
216: typedef enum tagLOCKTYPE
217: {
218: LOCK_WRITE = 1,
219: LOCK_EXCLUSIVE = 2,
220: LOCK_ONLYONCE = 4
221: } LOCKTYPE;
222:
223: typedef enum tagSTGMOVE
224: {
225: STGMOVE_MOVE = 0,
226: STGMOVE_COPY = 1
227: } STGMOVE;
228:
229: typedef enum tagSTATFLAG
230: {
231: STATFLAG_DEFAULT = 0,
232: STATFLAG_NONAME = 1
233: } STATFLAG;
234:
235:
236: /****** Storage Enumerators *************************************************/
237:
238: #define LPENUMSTATSTG IEnumSTATSTG FAR*
239:
240: #undef INTERFACE
241: #define INTERFACE IEnumSTATSTG
242:
243: DECLARE_INTERFACE_(IEnumSTATSTG, IUnknown)
244: {
245: // *** IUnknown methods ***
246: STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
247: STDMETHOD_(ULONG,AddRef) (THIS) PURE;
248: STDMETHOD_(ULONG,Release) (THIS) PURE;
249:
250: // *** IENUMSTATSTG methods ***
251: STDMETHOD(Next) (THIS_ ULONG celt, STATSTG FAR * rgelt, ULONG FAR *pceltFetched) PURE;
252: STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
253: STDMETHOD(Reset) (THIS) PURE;
254: STDMETHOD(Clone) (THIS_ IEnumSTATSTG FAR *FAR *ppenm) PURE;
255: };
256:
257:
258: /****** ILockBytes Interface ************************************************/
259:
260: #define LPLOCKBYTES ILockBytes FAR*
261:
262: #undef INTERFACE
263: #define INTERFACE ILockBytes
264:
265: DECLARE_INTERFACE_(ILockBytes, IUnknown)
266: {
267: // *** IUnknown methods ***
268: STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
269: STDMETHOD_(ULONG,AddRef) (THIS) PURE;
270: STDMETHOD_(ULONG,Release) (THIS) PURE;
271:
272: // *** ILockBytes methods ***
273: STDMETHOD(ReadAt) (THIS_ ULARGE_INTEGER ulOffset,
274: VOID HUGEP *pv,
275: ULONG cb,
276: ULONG FAR *pcbRead) PURE;
277: STDMETHOD(WriteAt) (THIS_ ULARGE_INTEGER ulOffset,
278: VOID const HUGEP *pv,
279: ULONG cb,
280: ULONG FAR *pcbWritten) PURE;
281: STDMETHOD(Flush) (THIS) PURE;
282: STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER cb) PURE;
283: STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
284: ULARGE_INTEGER cb,
285: DWORD dwLockType) PURE;
286: STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
287: ULARGE_INTEGER cb,
288: DWORD dwLockType) PURE;
289: STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
290: };
291:
292:
293: /****** IStream Interface ***************************************************/
294:
295:
296: #define LPSTREAM IStream FAR*
297:
298: #undef INTERFACE
299: #define INTERFACE IStream
300:
301: DECLARE_INTERFACE_(IStream, IUnknown)
302: {
303: // *** IUnknown methods ***
304: STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
305: STDMETHOD_(ULONG,AddRef) (THIS) PURE;
306: STDMETHOD_(ULONG,Release) (THIS) PURE;
307:
308: // *** IStream methods ***
309: STDMETHOD(Read) (THIS_ VOID HUGEP *pv,
310: ULONG cb, ULONG FAR *pcbRead) PURE;
311: STDMETHOD(Write) (THIS_ VOID const HUGEP *pv,
312: ULONG cb,
313: ULONG FAR *pcbWritten) PURE;
314: STDMETHOD(Seek) (THIS_ LARGE_INTEGER dlibMove,
315: DWORD dwOrigin,
316: ULARGE_INTEGER FAR *plibNewPosition) PURE;
317: STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER libNewSize) PURE;
318: STDMETHOD(CopyTo) (THIS_ IStream FAR *pstm,
319: ULARGE_INTEGER cb,
320: ULARGE_INTEGER FAR *pcbRead,
321: ULARGE_INTEGER FAR *pcbWritten) PURE;
322: STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
323: STDMETHOD(Revert) (THIS) PURE;
324: STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
325: ULARGE_INTEGER cb,
326: DWORD dwLockType) PURE;
327: STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
328: ULARGE_INTEGER cb,
329: DWORD dwLockType) PURE;
330: STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
331: STDMETHOD(Clone)(THIS_ IStream FAR * FAR *ppstm) PURE;
332: };
333:
334:
335: /****** IStorage Interface **************************************************/
336:
337: #define LPSTORAGE IStorage FAR*
338:
339: #undef INTERFACE
340: #define INTERFACE IStorage
341:
342: DECLARE_INTERFACE_(IStorage, IUnknown)
343: {
344: // *** IUnknown methods ***
345: STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
346: STDMETHOD_(ULONG,AddRef) (THIS) PURE;
347: STDMETHOD_(ULONG,Release) (THIS) PURE;
348:
349: // *** IStorage methods ***
350: STDMETHOD(CreateStream) (THIS_ const TCHAR FAR* pwcsName,
351: DWORD grfMode,
352: DWORD reserved1,
353: DWORD reserved2,
354: IStream FAR *FAR *ppstm) PURE;
355: STDMETHOD(OpenStream) (THIS_ const TCHAR FAR* pwcsName,
356: void FAR *reserved1,
357: DWORD grfMode,
358: DWORD reserved2,
359: IStream FAR *FAR *ppstm) PURE;
360: STDMETHOD(CreateStorage) (THIS_ const TCHAR FAR* pwcsName,
361: DWORD grfMode,
362: DWORD reserved1,
363: DWORD reserved2,
364: IStorage FAR *FAR *ppstg) PURE;
365: STDMETHOD(OpenStorage) (THIS_ const TCHAR FAR* pwcsName,
366: IStorage FAR *pstgPriority,
367: DWORD grfMode,
368: SNB snbExclude,
369: DWORD reserved,
370: IStorage FAR *FAR *ppstg) PURE;
371: STDMETHOD(CopyTo) (THIS_ DWORD ciidExclude,
372: IID const FAR *rgiidExclude,
373: SNB snbExclude,
374: IStorage FAR *pstgDest) PURE;
375: STDMETHOD(MoveElementTo) (THIS_ TCHAR const FAR* lpszName,
376: IStorage FAR *pstgDest,
377: TCHAR const FAR* lpszNewName,
378: DWORD grfFlags) PURE;
379: STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
380: STDMETHOD(Revert) (THIS) PURE;
381: STDMETHOD(EnumElements) (THIS_ DWORD reserved1,
382: void FAR *reserved2,
383: DWORD reserved3,
384: IEnumSTATSTG FAR *FAR *ppenm) PURE;
385: STDMETHOD(DestroyElement) (THIS_ const char FAR* pwcsName) PURE;
386: STDMETHOD(RenameElement) (THIS_ const char FAR* pwcsOldName,
387: const char FAR* pwcsNewName) PURE;
388: STDMETHOD(SetElementTimes) (THIS_ const char FAR *lpszName,
389: FILETIME const FAR *pctime,
390: FILETIME const FAR *patime,
391: FILETIME const FAR *pmtime) PURE;
392: STDMETHOD(SetClass) (THIS_ REFCLSID clsid) PURE;
393: STDMETHOD(SetStateBits) (THIS_ DWORD grfStateBits, DWORD grfMask) PURE;
394: STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
395: };
396:
397:
398: /****** IRootStorage Interface **********************************************/
399:
400: #define LPROOTSTORAGE IRootStorage FAR*
401:
402: #undef INTERFACE
403: #define INTERFACE IRootStorage
404:
405: DECLARE_INTERFACE_(IRootStorage, IUnknown)
406: {
407: // *** IUnknown methods ***
408: STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
409: STDMETHOD_(ULONG,AddRef) (THIS) PURE;
410: STDMETHOD_(ULONG,Release) (THIS) PURE;
411:
412: // *** IRootStorage methods ***
413: STDMETHOD(SwitchToFile) (THIS_ LPSTR lpstrFile) PURE;
414: };
415:
416:
417: /****** Storage API Prototypes ********************************************/
418:
419: STDAPI StgCreateDocfile(const TCHAR FAR* pwcsName,
420: DWORD grfMode,
421: DWORD reserved,
422: IStorage FAR * FAR *ppstgOpen);
423: STDAPI StgCreateDocfileOnILockBytes(ILockBytes FAR *plkbyt,
424: DWORD grfMode,
425: DWORD reserved,
426: IStorage FAR * FAR *ppstgOpen);
427: STDAPI StgOpenStorage(const TCHAR FAR* pwcsName,
428: IStorage FAR *pstgPriority,
429: DWORD grfMode,
430: SNB snbExclude,
431: DWORD reserved,
432: IStorage FAR * FAR *ppstgOpen);
433: STDAPI StgOpenStorageOnILockBytes(ILockBytes FAR *plkbyt,
434: IStorage FAR *pstgPriority,
435: DWORD grfMode,
436: SNB snbExclude,
437: DWORD reserved,
438: IStorage FAR * FAR *ppstgOpen);
439: STDAPI StgIsStorageFile(const TCHAR FAR* pwcsName);
440: STDAPI StgIsStorageILockBytes(ILockBytes FAR* plkbyt);
441:
442: STDAPI StgSetTimes(TCHAR const FAR* lpszName,
443: FILETIME const FAR* pctime,
444: FILETIME const FAR* patime,
445: FILETIME const FAR* pmtime);
446:
447: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.