204 lines
4.5 KiB
C
204 lines
4.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (C) 1997-2001 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
CPROPSET.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Purpose: Used by the compound file property set provider. This code was
|
||
|
largly taken from some MSVC sample code which was modified
|
||
|
somewhat in order to support VARIANT type arrays. In general,
|
||
|
a CPropSet object contains a list of CPropSection objects
|
||
|
which each contain a list of CProp objects.
|
||
|
|
||
|
History:
|
||
|
|
||
|
a-davj 04-Mar-97 Created.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
typedef struct tagSECTIONHEADER
|
||
|
{
|
||
|
DWORD cbSection ;
|
||
|
DWORD cProperties ; // Number of props.
|
||
|
} SECTIONHEADER, *LPSECTIONHEADER ;
|
||
|
|
||
|
typedef struct tagPROPERTYIDOFFSET
|
||
|
{
|
||
|
DWORD propertyID;
|
||
|
DWORD dwOffset;
|
||
|
} PROPERTYIDOFFSET, *LPPROPERTYIDOFFSET;
|
||
|
|
||
|
typedef struct tagPROPHEADER
|
||
|
{
|
||
|
WORD wByteOrder ; // Always 0xFFFE
|
||
|
WORD wFormat ; // Always 0
|
||
|
DWORD dwOSVer ; // System version
|
||
|
CLSID clsID ; // Application CLSID
|
||
|
DWORD cSections ; // Number of sections (must be at least 1)
|
||
|
} PROPHEADER, *LPPROPHEADER ;
|
||
|
|
||
|
typedef struct tagFORMATIDOFFSET
|
||
|
{
|
||
|
GUID formatID;
|
||
|
DWORD dwOffset;
|
||
|
} FORMATIDOFFSET, *LPFORMATIDOFFSET;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CProp
|
||
|
|
||
|
class CProp : public CObject
|
||
|
{
|
||
|
friend class CPropSet ;
|
||
|
friend class CPropSection ;
|
||
|
|
||
|
public:
|
||
|
// Construction
|
||
|
CProp( void ) ;
|
||
|
|
||
|
// Qualifiers
|
||
|
BOOL Set( DWORD dwID, const LPVOID pValue, DWORD dwType, DWORD dwSize ) ;
|
||
|
LPVOID Get( void ) ; // Returns pointer to actual value
|
||
|
DWORD GetType( void ) ; // Returns property type
|
||
|
DWORD GetID( void ) ;
|
||
|
|
||
|
// Operations
|
||
|
BOOL WriteToStream( IStream* pIStream ) ;
|
||
|
BOOL ReadFromStream( IStream* pIStream, DWORD dwSize ) ;
|
||
|
|
||
|
private:
|
||
|
DWORD m_dwPropID ;
|
||
|
DWORD m_dwType ;
|
||
|
LPVOID m_pValue ;
|
||
|
DWORD m_dwSize;
|
||
|
|
||
|
LPVOID AllocValue(ULONG cb);
|
||
|
void FreeValue();
|
||
|
|
||
|
public:
|
||
|
~CProp() ;
|
||
|
} ;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CPropSection
|
||
|
|
||
|
class CPropSection : public CObject
|
||
|
{
|
||
|
friend class CPropSet ;
|
||
|
friend class CProp ;
|
||
|
|
||
|
public:
|
||
|
// Construction
|
||
|
CPropSection( void ) ;
|
||
|
CPropSection( CLSID FormatID ) ;
|
||
|
// Qualifiers
|
||
|
|
||
|
void SetFormatID( CLSID FormatID ) ;
|
||
|
|
||
|
void RemoveAll() ;
|
||
|
|
||
|
CProp* GetProperty( DWORD dwPropID ) ;
|
||
|
void AddProperty( CProp* pProp ) ;
|
||
|
|
||
|
DWORD GetSize( void ) ;
|
||
|
DWORD GetCount( void ) ;
|
||
|
CObList* GetList( void ) ;
|
||
|
|
||
|
BOOL SetSectionName( LPCTSTR pszName );
|
||
|
LPCTSTR GetSectionName( void );
|
||
|
|
||
|
// Operations
|
||
|
BOOL WriteToStream( IStream* pIStream ) ;
|
||
|
BOOL ReadFromStream( IStream* pIStream, LARGE_INTEGER liPropSet ) ;
|
||
|
|
||
|
private:
|
||
|
// Implementation
|
||
|
CLSID m_FormatID ;
|
||
|
SECTIONHEADER m_SH ;
|
||
|
// List of properties (CProp)
|
||
|
CObList m_PropList ;
|
||
|
// Dictionary of property names
|
||
|
CMapStringToPtr m_NameDict ;
|
||
|
CString m_strSectionName;
|
||
|
|
||
|
public:
|
||
|
~CPropSection();
|
||
|
} ;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CPropSet
|
||
|
|
||
|
class CPropSet : public CObject
|
||
|
{
|
||
|
friend class CPropSection ;
|
||
|
friend class CProp ;
|
||
|
|
||
|
public:
|
||
|
// Construction
|
||
|
CPropSet( void ) ;
|
||
|
|
||
|
// Qualifiers
|
||
|
void RemoveAll( ) ;
|
||
|
|
||
|
CProp* GetProperty( CLSID FormatID, DWORD dwPropID ) ;
|
||
|
void AddProperty( CLSID FormatID, CProp* pProp ) ;
|
||
|
CPropSection* GetSection( CLSID FormatID ) ;
|
||
|
CPropSection* AddSection( CLSID FormatID ) ;
|
||
|
void AddSection( CPropSection* psect ) ;
|
||
|
|
||
|
WORD GetByteOrder( void ) ;
|
||
|
WORD GetFormatVersion( void ) ;
|
||
|
void SetFormatVersion( WORD wFmtVersion ) ;
|
||
|
DWORD GetOSVersion( void ) ;
|
||
|
void SetOSVersion( DWORD dwOSVer ) ;
|
||
|
CLSID GetClassID( void ) ;
|
||
|
void SetClassID( CLSID clsid ) ;
|
||
|
DWORD GetCount( void ) ;
|
||
|
CObList* GetList( void ) ;
|
||
|
|
||
|
// Operations
|
||
|
BOOL WriteToStream( IStream* pIStream ) ;
|
||
|
BOOL ReadFromStream( IStream* pIStream ) ;
|
||
|
|
||
|
// Implementation
|
||
|
private:
|
||
|
PROPHEADER m_PH ;
|
||
|
CObList m_SectionList ;
|
||
|
|
||
|
public:
|
||
|
~CPropSet();
|
||
|
} ;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CBuff
|
||
|
|
||
|
class CBuff : public CObject
|
||
|
{
|
||
|
public:
|
||
|
// Construction
|
||
|
CBuff( void ) ;
|
||
|
~CBuff() ;
|
||
|
|
||
|
// Qualifiers
|
||
|
void Add(void *, DWORD dwAddSize);
|
||
|
void * Get(void){return pBuff;};
|
||
|
DWORD GetSize(void){return dwSize;};
|
||
|
DWORD bOK(void){return !bAllocError;};
|
||
|
void RoundOff(void);
|
||
|
private:
|
||
|
|
||
|
void * pBuff;
|
||
|
DWORD dwSize;
|
||
|
BOOL bAllocError;
|
||
|
public:
|
||
|
} ;
|
||
|
|
||
|
|