//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995. // // File: stgwrap.hxx // // Contents: IStorage and IStream wrappers for async docfile // // Classes: CAsyncStorage // CAsyncRootStorage // CAsyncStream // CConnectionPoint // // Functions: // // History: 27-Dec-95 SusiA Created // //---------------------------------------------------------------------------- #ifndef __ASYNCEXPDF_HXX__ #define __ASYNCEXPDF_HXX__ #include "sinklist.hxx" #include "filllkb.hxx" //BUGBUG: defined in dfmsp.hxx. typedef DWORD LPSTGSECURITY; //+--------------------------------------------------------------------------- // // Class: CAsyncStorage // // Purpose: Wrap storage objects for Async Docfiles // // Interface: // // History: 28-Dec-95 SusiA Created // // Notes: // //---------------------------------------------------------------------------- class CAsyncStorage: public IStorage, public IConnectionPointContainer { public: inline CAsyncStorage(IStorage *pstg, CFillLockBytes *pflb); inline ~CAsyncStorage(void); // IUnknown STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj); STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void); // IStorage STDMETHOD(CreateStream)(OLECHAR const *pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream **ppstm); STDMETHOD(OpenStream)(OLECHAR const *pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream **ppstm); STDMETHOD(CreateStorage)(OLECHAR const *pwcsName, DWORD grfMode, DWORD reserved1, LPSTGSECURITY reserved2, IStorage **ppstg); STDMETHOD(OpenStorage)(OLECHAR const *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstg); STDMETHOD(CopyTo)(DWORD ciidExclude, IID const *rgiidExclude, SNB snbExclude, IStorage *pstgDest); STDMETHOD(MoveElementTo)(OLECHAR const *lpszName, IStorage *pstgDest, OLECHAR const *lpszNewName, DWORD grfFlags); STDMETHOD(Commit)(DWORD grfCommitFlags); STDMETHOD(Revert)(void); STDMETHOD(EnumElements)(DWORD reserved1, void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenm); STDMETHOD(DestroyElement)(OLECHAR const *pwcsName); STDMETHOD(RenameElement)(OLECHAR const *pwcsOldName, OLECHAR const *pwcsNewName); STDMETHOD(SetElementTimes)(const OLECHAR *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime); STDMETHOD(SetClass)(REFCLSID clsid); STDMETHOD(SetStateBits)(DWORD grfStateBits, DWORD grfMask); STDMETHOD(Stat)(STATSTG *pstatstg, DWORD grfStatFlag); //From IConnectionPointContainer STDMETHOD(EnumConnectionPoints)(IEnumConnectionPoints **ppEnum); STDMETHOD(FindConnectionPoint)(REFIID iid, IConnectionPoint **ppCP); SCODE Notify(void); protected: LONG _cReferences; IStorage *_pRealStg; CFillLockBytes *_pflb; CConnectionPoint _cpoint; }; inline CAsyncStorage::CAsyncStorage(IStorage *pstg, CFillLockBytes *pflb) { _cReferences = 1; _pRealStg = pstg; _pflb = pflb; } inline CAsyncStorage::~CAsyncStorage(void) { if (_pRealStg != NULL) _pRealStg->Release; } //+--------------------------------------------------------------------------- // // Class: CAsyncRootStorage // // Purpose: Wrap Root Storage objects for Async Docfiles // // Interface: // // History: 28-Dec-95 SusiA Created // // Notes: // //---------------------------------------------------------------------------- class CAsyncRootStorage: public IRootStorage, public CAsyncStorage { public: inline CAsyncRootStorage(IStorage *pstg, CFillLockBytes *pflb); // IUnknown STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj); STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void); // IRootStorage STDMETHOD(SwitchToFile)(OLECHAR *ptcsFile); }; inline CAsyncRootStorage::CAsyncRootStorage(IStorage *pstg, CFillLockBytes *pflb) :CAsyncStorage(pstg, pflb) { } //+--------------------------------------------------------------------------- // // Class: CAsyncStream // // Purpose: Wrap Stream objects for Async Docfiles // // Interface: // // History: 28-Dec-95 SusiA Created // // Notes: // //---------------------------------------------------------------------------- class CAsyncStream: public IStream, public IConnectionPointContainer { public: inline CAsyncStream(IStream *pstm, CFillLockBytes *pflb); inline ~CAsyncStream(void); // From IUnknown STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); // From IStream STDMETHOD(Read)(VOID HUGEP *pv, ULONG cb, ULONG *pcbRead); STDMETHOD(Write)(VOID const HUGEP *pv, ULONG cb, ULONG *pcbWritten); STDMETHOD(Seek)(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition); STDMETHOD(SetSize)(ULARGE_INTEGER cb); STDMETHOD(CopyTo)(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten); STDMETHOD(Commit)(DWORD grfCommitFlags); STDMETHOD(Revert)(void); STDMETHOD(LockRegion)(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); STDMETHOD(UnlockRegion)(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); STDMETHOD(Stat)(STATSTG *pstatstg, DWORD grfStatFlag); STDMETHOD(Clone)(IStream **ppstm); //From IConnectionPointContainer STDMETHOD(EnumConnectionPoints)(IEnumConnectionPoints **ppEnum); STDMETHOD(FindConnectionPoint)(REFIID iid, IConnectionPoint **ppCP); SCODE Notify(void); private: LONG _cReferences; IStream *_pRealStm; CFillLockBytes *_pflb; CConnectionPoint _cpoint; }; inline CAsyncStream::CAsyncStream(IStream *pstm, CFillLockBytes *pflb) { _cReferences = 1; _pRealStm = pstm; _pflb = pflb; } inline CAsyncStream::~CAsyncStream(void) { if (_pRealStm != NULL) _pRealStm->Release; } //+--------------------------------------------------------------------------- // // Class: CAsyncEnumSTATSTG // // Purpose: Wrap EnumSTATSTG objects for Async Docfiles // // Interface: // // History: 28-Dec-95 SusiA Created // // Notes: // //---------------------------------------------------------------------------- class CAsyncEnum : public IEnumSTATSTG, public IConnectionPointContainer { public: inline CAsyncEnum(IEnumSTATSTG *penum, CFillLockBytes *pflb); inline ~CAsyncEnum(void); // From IUnknown STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); // IEnumSTATSTG STDMETHOD(Next)(ULONG celt, STATSTG FAR *rgelt, ULONG *pceltFetched); STDMETHOD(Skip)(ULONG celt); STDMETHOD(Reset)(void); STDMETHOD(Clone)(IEnumSTATSTG **ppenm); //From IConnectionPointContainer STDMETHOD(EnumConnectionPoints)(IEnumConnectionPoints **ppEnum); STDMETHOD(FindConnectionPoint)(REFIID iid, IConnectionPoint **ppCP); SCODE Notify(void); private: LONG _cReferences; IEnumSTATSTG *_pRealEnum; CFillLockBytes *_pflb; CConnectionPoint _cpoint; }; inline CAsyncEnum::CAsyncEnum(IEnumSTATSTG *penum, CFillLockBytes *pflb) { _cReferences = 1; _pRealEnum = penum; _pflb = pflb; } inline CAsyncEnum::~CAsyncEnum(void) { if (_pRealEnum != NULL) _pRealEnum->Release; } #endif // #ifndef __ASYNCEXPDF_HXX__