//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1995.
//
//  File:       CSTORAGE.HXX
//
//  Contents:
//
//  Classes:    Declaration for IStorage class
//
//  Functions:
//
//  History:    12-20-95    JoeS (Joe Souza)    Created
//
//----------------------------------------------------------------------------

class FAR CStorage : public IStorage
{
public:

        CStorage(IStorage *pStorage);

        // *** IUnknown methods ***
        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj);
        STDMETHOD_(ULONG,AddRef) (THIS);
        STDMETHOD_(ULONG,Release) (THIS);

        // *** IStorage methods ***
        STDMETHOD(CreateStream) (THIS_ const OLECHAR *pwcsName, DWORD grfMode,
            DWORD dwReserved1, DWORD dwReserved2, LPSTREAM FAR *ppStm);
        STDMETHOD(OpenStream) (THIS_ const OLECHAR *pwcsName,
            void FAR *pReserved1, DWORD grfMode, DWORD dwReserved2,
            LPSTREAM FAR *ppStm);
        STDMETHOD(CreateStorage) (THIS_ const OLECHAR *pwcsName, DWORD grfMode,
            DWORD dwReserved1, DWORD dwReserved2, LPSTORAGE FAR *ppStg);
        STDMETHOD(OpenStorage) (THIS_ const OLECHAR *pwcsName,
            LPSTORAGE pstgPriority, DWORD grfMode, SNB snbExclude,
            DWORD dwReserved, LPSTORAGE FAR *ppStg);
        STDMETHOD(CopyTo) (THIS_ DWORD dwCiidExclude,
            IID const FAR *rgiidExclude, SNB snbExclude, LPSTORAGE pStgDest);
        STDMETHOD(MoveElementTo) (THIS_ const OLECHAR *lpszName,
            LPSTORAGE pStgDest, const OLECHAR *lpszNewName, DWORD grfFlags);
        STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags);
        STDMETHOD(Revert) (THIS);
        STDMETHOD(EnumElements) (THIS_ DWORD dwReserved1, void FAR *pReserved2,
            DWORD dwReserved3, LPENUMSTATSTG FAR *ppenumStatStg);
        STDMETHOD(DestroyElement) (THIS_ const OLECHAR *pwcsName);
        STDMETHOD(RenameElement) (THIS_ const OLECHAR *pwcsOldName,
            const OLECHAR *pwcsNewName);
        STDMETHOD(SetElementTimes) (THIS_ const OLECHAR *lpszName,
            FILETIME const FAR *pctime, FILETIME const FAR *patime,
            FILETIME const FAR *pmtime);
        STDMETHOD(SetClass) (THIS_ REFCLSID rclsid);
        STDMETHOD(SetStateBits) (THIS_ DWORD grfStateBits, DWORD grfMask);
        STDMETHOD(Stat) (THIS_ STATSTG FAR *pStatStg, DWORD grfStatFlag);

private:
        CRefCount   _CRefs;
        IStorage    *_pStg;
};