windows-nt/Source/XPSP1/NT/base/fs/hsm/inc/wsbpstbl.h
2020-09-26 16:20:57 +08:00

221 lines
7.1 KiB
C++

/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
wsbpstbl.h
Abstract:
Abstract classes that provides persistence methods.
Author:
Chuck Bardeen [cbardeen] 29-Oct-1996
Revision History:
--*/
#ifndef _WSBPSTBL_
#define _WSBPSTBL_
#include "wsbpstrg.h"
// The name of the stream that is created when objects are persisted
// to structured storage files.
#define WSB_PERSIST_DEFAULT_STREAM_NAME OLESTR("WsbStuff")
// The size of the overhead associated with persisting an object.
#define WSB_PERSIST_BASE_SIZE sizeof(CLSID)
// Times used for autosave functionality
#define DEFAULT_AUTOSAVE_INTERVAL (5 * 60 * 1000) // 5 minutes
#define MAX_AUTOSAVE_INTERVAL (24 * 60 * 60 * 1000) // 24 hours
// Macros to help determine how much space is needed to persist an
// object or a portion of an object.
#define WsbPersistSize(a) (WSB_PERSIST_BASE_SIZE + a)
#define WsbPersistSizeOf(a) (WsbPersistSize(sizeof(a)))
/*++
Enumeration Name:
WSB_PERSIST_STATE
Description:
An enumeration that indicates the state of the persistance object. The
states actually used depend on the type of persistance which is used.
--*/
typedef enum {
WSB_PERSIST_STATE_UNINIT = 0, // Uninitialized
WSB_PERSIST_STATE_NORMAL = 1, // Normal state
WSB_PERSIST_STATE_NOSCRIBBLE = 2, // No scribble state
WSB_PERSIST_STATE_RELEASED = 3 // File was released
} WSB_PERSIST_STATE;
/*++
Class Name:
CWsbPersistStream
Class Description:
An object persistable to/from a stream.
This is really an abstract class, but is constructable so that
other class can delegate to it.
--*/
class WSB_EXPORT CWsbPersistStream :
public CComObjectRoot,
public IPersistStream,
public IWsbPersistStream
{
BEGIN_COM_MAP(CWsbPersistStream)
COM_INTERFACE_ENTRY(IPersist)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IWsbPersistStream)
END_COM_MAP()
// CComObjectRoot
public:
STDMETHOD(FinalConstruct)(void);
void FinalRelease(void);
#if defined(WSB_TRACK_MEMORY)
ULONG InternalAddRef( );
ULONG InternalRelease( );
#endif
// IPersistStream
public:
STDMETHOD(IsDirty)(void);
// IWsbPersistStream
public:
STDMETHOD(SetIsDirty)(BOOL bIsDirty);
protected:
BOOL m_isDirty;
};
/*++
Class Name:
CWsbPersistable
Class Description:
A object persistable to/from a stream, storage, or file.
This is really an abstract class, but is constructable so that
other class can delegate to it. CWsbPersistStream should be used
instead of this class unless storage and/or file persistence is
absolutely necessary! If the object is persisted as part of a parent
object, then only the parent object (or its parent) needs to support
persistence to storage and/or file.
--*/
class WSB_EXPORT CWsbPersistable :
public CWsbPersistStream,
public IPersistFile,
public IWsbPersistable
{
BEGIN_COM_MAP(CWsbPersistable)
COM_INTERFACE_ENTRY2(IPersist, CWsbPersistStream)
COM_INTERFACE_ENTRY2(IPersistStream, CWsbPersistStream)
COM_INTERFACE_ENTRY2(IWsbPersistStream, CWsbPersistStream)
COM_INTERFACE_ENTRY(IPersistFile)
COM_INTERFACE_ENTRY(IWsbPersistable)
END_COM_MAP()
// CComObjectRoot
public:
STDMETHOD(FinalConstruct)(void);
void FinalRelease(void);
// IPersistFile
public:
STDMETHOD(GetCurFile)(LPOLESTR* pszFileName);
STDMETHOD(Load)(LPCOLESTR pszFileName, DWORD dwMode);
STDMETHOD(Save)(LPCOLESTR pszFileName, BOOL bRemember);
STDMETHOD(SaveCompleted)(LPCOLESTR pszFileName);
// IWsbPersistStream
STDMETHOD(IsDirty)(void)
{ return(CWsbPersistStream::IsDirty()); }
STDMETHOD(SetIsDirty)(BOOL bIsDirty)
{ return(CWsbPersistStream::SetIsDirty(bIsDirty)); }
// IWsbPersistable
public:
STDMETHOD(GetDefaultFileName)(LPOLESTR* pszFileName, ULONG ulBufferSize);
STDMETHOD(ReleaseFile)(void);
STDMETHOD(SetDefaultFileName)(LPOLESTR pszFileName);
protected:
WSB_PERSIST_STATE m_persistState;
CWsbStringPtr m_persistFileName;
CWsbStringPtr m_persistDefaultName;
CComPtr<IStorage> m_persistStorage;
CComPtr<IStream> m_persistStream;
};
// Persistence Helper Functions
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BOOL* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, GUID* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONG* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, SHORT* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, BYTE* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, UCHAR* pValue, ULONG bufferSize);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, OLECHAR** pValue, ULONG bufferSize);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONG* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, USHORT* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, LONGLONG* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULONGLONG* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, DATE* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, FILETIME* pValue);
extern WSB_EXPORT HRESULT WsbLoadFromStream(IStream* pStream, ULARGE_INTEGER* pValue);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BOOL value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, GUID value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONG value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, SHORT value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, BYTE value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, UCHAR* value, ULONG bufferSize);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, OLECHAR* value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONG value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, USHORT value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, LONGLONG value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULONGLONG value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, DATE value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, FILETIME value);
extern WSB_EXPORT HRESULT WsbSaveToStream(IStream* pStream, ULARGE_INTEGER value);
extern WSB_EXPORT HRESULT WsbBstrFromStream(IStream* pStream, BSTR* pValue);
extern WSB_EXPORT HRESULT WsbBstrToStream(IStream* pStream, BSTR value);
extern WSB_EXPORT HRESULT WsbPrintfToStream(IStream* pStream, OLECHAR* fmtString, ...);
extern WSB_EXPORT HRESULT WsbStreamToFile(HANDLE hFile, IStream* pStream, BOOL AddCR);
extern WSB_EXPORT HRESULT WsbSafeCreate(OLECHAR *, IPersistFile* pIPFile);
extern WSB_EXPORT HRESULT WsbSafeLoad(OLECHAR *, IPersistFile* pIPFile, BOOL UseBackup);
extern WSB_EXPORT HRESULT WsbSafeSave(IPersistFile* pIPFile);
extern WSB_EXPORT HRESULT WsbMakeBackupName(OLECHAR* pSaveName, OLECHAR* pExtension,
OLECHAR** ppBackupName);
#endif // _WSBPSTBL_