home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / MSINC.PAK / STORAGE.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  14KB  |  469 lines

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