194 lines
5.5 KiB
C++
194 lines
5.5 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: psetstg.hxx
|
|
//
|
|
// Contents: Header for class which provides common implementation of
|
|
// IPropertySetStorage.
|
|
//
|
|
// Classes: CPropertySetStorage
|
|
//
|
|
// History: 17-Mar-93 BillMo Created.
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef _PSETSTG_HXX_
|
|
#define _PSETSTG_HXX_
|
|
|
|
#include "h/stgprops.hxx"
|
|
|
|
#define PROPERTYSETSTORAGE_SIG LONGSIG('P','S','S','T')
|
|
#define PROPERTYSETSTORAGE_SIGDEL LONGSIG('P','S','S','t')
|
|
|
|
#define ENUMSTATPROPSETSTG_SIG LONGSIG('S','P','S','S')
|
|
#define ENUMSTATPROPSETSTG_SIGDEL LONGSIG('S','P','S','s')
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CPropertySetStorage
|
|
//
|
|
// Purpose: Implementation of IPropertySetStorage for native and docfile
|
|
// IStorage objects.
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CPropertySetStorage : public IPropertySetStorage
|
|
{
|
|
public:
|
|
inline CPropertySetStorage(IPrivateStorage *pprivstg);
|
|
inline ~CPropertySetStorage();
|
|
|
|
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject);
|
|
|
|
STDMETHOD_(ULONG, AddRef)(void);
|
|
|
|
STDMETHOD_(ULONG, Release)(void);
|
|
|
|
STDMETHOD(Create)( REFFMTID rfmtid,
|
|
const CLSID * pclsid,
|
|
DWORD grfFlags,
|
|
DWORD grfMode,
|
|
IPropertyStorage ** ppprstg);
|
|
|
|
STDMETHOD(Open)( REFFMTID rfmtid,
|
|
DWORD grfMode,
|
|
IPropertyStorage ** ppprstg);
|
|
|
|
STDMETHOD(Delete)( REFFMTID rfmtid);
|
|
|
|
STDMETHOD(Enum)( IEnumSTATPROPSETSTG ** ppenum);
|
|
|
|
private:
|
|
inline HRESULT Validate();
|
|
|
|
private:
|
|
ULONG _ulSig;
|
|
IPrivateStorage * _pprivstg;
|
|
};
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: CPropertySetStorage::CPropertySetStorage
|
|
//
|
|
// Synopsis: Initialize the generic property storage object.
|
|
//
|
|
// Arguments: [pstg]
|
|
//
|
|
// Notes: The passed [pstg] is saved and then passed into
|
|
// the CPropertySet object when it is created on
|
|
// Open or Create. Open and Create use it to get a
|
|
// matching implementation of mapped stream.
|
|
//
|
|
// The lifetime of pstg is provided by the fact that
|
|
// CPropertySetStorage is a base class of the IStorage.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
|
|
CPropertySetStorage::CPropertySetStorage(IPrivateStorage *pprivstg) :
|
|
_pprivstg(pprivstg),
|
|
_ulSig(PROPERTYSETSTORAGE_SIG)
|
|
{
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: CPropertySetStorage::~CPropertySetStorage
|
|
//
|
|
// Synopsis: Delete the object and set the deletion signature.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
|
|
CPropertySetStorage::~CPropertySetStorage()
|
|
{
|
|
_ulSig = PROPERTYSETSTORAGE_SIGDEL;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: CPropertySetStorage::Validate
|
|
//
|
|
// Synopsis: Validate signature.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
|
|
inline HRESULT CPropertySetStorage::Validate()
|
|
{
|
|
return _ulSig == PROPERTYSETSTORAGE_SIG ? S_OK : STG_E_INVALIDHANDLE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CEnumSTATPROPSETSTG
|
|
//
|
|
// Purpose: Implementation of IEnumSTATPROPSETSTG for native and docfile
|
|
// IStorage objects.
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CEnumSTATPROPSETSTG : public IEnumSTATPROPSETSTG
|
|
{
|
|
public:
|
|
// for IPropertySetStorage::Enum
|
|
CEnumSTATPROPSETSTG(IStorage *pstg, HRESULT *phr);
|
|
|
|
// for IEnumSTATPROPSETSTG::Clone
|
|
CEnumSTATPROPSETSTG(CEnumSTATPROPSETSTG &Other, HRESULT *phr);
|
|
|
|
~CEnumSTATPROPSETSTG();
|
|
|
|
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject);
|
|
|
|
STDMETHOD_(ULONG, AddRef)(void);
|
|
|
|
STDMETHOD_(ULONG, Release)(void);
|
|
|
|
STDMETHOD(Next)(ULONG celt,
|
|
STATPROPSETSTG * rgelt,
|
|
ULONG * pceltFetched);
|
|
|
|
// We don't need RemoteNext.
|
|
|
|
STDMETHOD(Skip)(ULONG celt);
|
|
|
|
STDMETHOD(Reset)();
|
|
|
|
STDMETHOD(Clone)(IEnumSTATPROPSETSTG ** ppenum);
|
|
|
|
private:
|
|
|
|
inline HRESULT Validate();
|
|
VOID CleanupStatArray();
|
|
|
|
private:
|
|
ULONG _ulSig;
|
|
LONG _cRefs;
|
|
IEnumSTATSTG * _penumSTATSTG;
|
|
STATSTG _statarray[8];
|
|
ULONG _cstatTotalInArray;
|
|
ULONG _istatNextToRead;
|
|
};
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Member: CEnumSTATPROPSETSTG::Validate
|
|
//
|
|
// Synopsis: Validate signature.
|
|
//
|
|
//--------------------------------------------------------------------
|
|
|
|
inline HRESULT CEnumSTATPROPSETSTG::Validate()
|
|
{
|
|
return _ulSig == ENUMSTATPROPSETSTG_SIG ? S_OK : STG_E_INVALIDHANDLE;
|
|
}
|
|
|
|
#endif
|
|
|