|
|
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.