blob: 5236ff9ae3c121fe0b64cba4ce6d203c7c4715d0 [file] [log] [blame]
/*
* Defines the COM interfaces and APIs related to saving properties to file.
*/
#ifndef __WINE_WINE_OBJ_PROPERTYSTORAGE_H
#define __WINE_WINE_OBJ_PROPERTYSTORAGE_H
#ifdef __cplusplus
extern "C" {
#endif /* defined(__cplusplus) */
/*****************************************************************************
* Predeclare the interfaces
*/
DEFINE_OLEGUID(IID_IEnumSTATPROPSETSTG, 0x0000013bL, 0, 0);
typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG,*LPENUMSTATPROPSETSTG;
DEFINE_OLEGUID(IID_IEnumSTATPROPSTG, 0x00000139L, 0, 0);
typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG,*LPENUMSTATPROPSTG;
DEFINE_OLEGUID(IID_IPropertySetStorage, 0x0000013aL, 0, 0);
typedef struct IPropertySetStorage IPropertySetStorage,*LPPROPERTYSETSTORAGE;
DEFINE_OLEGUID(IID_IPropertyStorage, 0x00000138L, 0, 0);
typedef struct IPropertyStorage IPropertyStorage,*LPPROPERTYSTORAGE;
/*****************************************************************************
* Predeclare the structures
*/
typedef struct tagSTATPROPSETSTG STATPROPSETSTG;
typedef struct tagSTATPROPSTG STATPROPSTG;
extern const FMTID FMTID_SummaryInformation;
extern const FMTID FMTID_DocSummaryInformation;
extern const FMTID FMTID_UserDefinedProperties;
/*****************************************************************************
* PROPSPEC structure
*/
/* Reserved global Property IDs */
#define PID_DICTIONARY ( 0 )
#define PID_CODEPAGE ( 0x1 )
#define PID_FIRST_USABLE ( 0x2 )
#define PID_FIRST_NAME_DEFAULT ( 0xfff )
#define PID_LOCALE ( 0x80000000 )
#define PID_MODIFY_TIME ( 0x80000001 )
#define PID_SECURITY ( 0x80000002 )
#define PID_ILLEGAL ( 0xffffffff )
/* Property IDs for the SummaryInformation Property Set */
#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */
#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */
#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */
#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */
#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */
#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */
#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */
#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */
#define PIDSI_EDITTIME 0x0000000aL /* VT_FILETIME (UTC) */
#define PIDSI_LASTPRINTED 0x0000000bL /* VT_FILETIME (UTC) */
#define PIDSI_CREATE_DTM 0x0000000cL /* VT_FILETIME (UTC) */
#define PIDSI_LASTSAVE_DTM 0x0000000dL /* VT_FILETIME (UTC) */
#define PIDSI_PAGECOUNT 0x0000000eL /* VT_I4 */
#define PIDSI_WORDCOUNT 0x0000000fL /* VT_I4 */
#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */
#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */
#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */
#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */
#define PRSPEC_INVALID ( 0xffffffff )
#define PRSPEC_LPWSTR ( 0 )
#define PRSPEC_PROPID ( 1 )
typedef struct tagPROPSPEC
{
ULONG ulKind;
union
{
PROPID propid;
LPOLESTR lpwstr;
} u;
} PROPSPEC;
/*****************************************************************************
* STATPROPSETSTG structure
*/
/* Macros for parsing the OS Version of the Property Set Header */
#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD( (dwOSVer) )
#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD( (dwOSVer) ))
#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD( (dwOSVer) ))
#define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF
struct tagSTATPROPSETSTG
{
FMTID fmtid;
CLSID clsid;
DWORD grfFlags;
FILETIME mtime;
FILETIME ctime;
FILETIME atime;
DWORD dwOSVersion;
};
/*****************************************************************************
* STATPROPSTG structure
*/
struct tagSTATPROPSTG
{
LPOLESTR lpwstrName;
PROPID propid;
VARTYPE vt;
};
/*****************************************************************************
* IEnumSTATPROPSETSTG interface
*/
#define ICOM_INTERFACE IEnumSTATPROPSETSTG
#define IEnumSTATPROPSETSTG_METHODS \
ICOM_METHOD3(HRESULT,Next, ULONG,celt, STATPROPSETSTG*,rgelt, ULONG*,pceltFethed) \
ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
ICOM_METHOD (HRESULT,Reset) \
ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSETSTG**,ppenum)
#define IEnumSTATPROPSETSTG_IMETHODS \
IUnknown_IMETHODS \
IEnumSTATPROPSETSTG_METHODS
ICOM_DEFINE(IEnumSTATPROPSETSTG,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IEnumSTATPROPSETSTG_AddRef(p) ICOM_CALL (AddRef,p)
#define IEnumSTATPROPSETSTG_Release(p) ICOM_CALL (Release,p)
/*** IEnumSTATPROPSETSTG methods ***/
#define IEnumSTATPROPSETSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
#define IEnumSTATPROPSETSTG_Skip(p,a) ICOM_CALL1(Skip,p,a)
#define IEnumSTATPROPSETSTG_Reset(p) ICOM_CALL (Reset,p)
#define IEnumSTATPROPSETSTG_Clone(p,a) ICOM_CALL1(Clone,p,a)
/*****************************************************************************
* IEnumSTATPROPSTG interface
*/
#define ICOM_INTERFACE IEnumSTATPROPSTG
#define IEnumSTATPROPSTG_METHODS \
ICOM_METHOD3(HRESULT,Next, ULONG,celt, STATPROPSTG*,rgelt, ULONG*,pceltFethed) \
ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
ICOM_METHOD (HRESULT,Reset) \
ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSTG**,ppenum)
#define IEnumSTATPROPSTG_IMETHODS \
IUnknown_IMETHODS \
IEnumSTATPROPSTG_METHODS
ICOM_DEFINE(IEnumSTATPROPSTG,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IEnumSTATPROPSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IEnumSTATPROPSTG_AddRef(p) ICOM_CALL (AddRef,p)
#define IEnumSTATPROPSTG_Release(p) ICOM_CALL (Release,p)
/*** IEnumSTATPROPSTG methods ***/
#define IEnumSTATPROPSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
#define IEnumSTATPROPSTG_Skip(p,a) ICOM_CALL1(Skip,p,a)
#define IEnumSTATPROPSTG_Reset(p) ICOM_CALL (Reset,p)
#define IEnumSTATPROPSTG_Clone(p,a) ICOM_CALL1(Clone,p,a)
/*****************************************************************************
* IPropertySetStorage interface
*/
#define ICOM_INTERFACE IPropertySetStorage
#define IPropertySetStorage_METHODS \
ICOM_METHOD5(HRESULT,Create, REFFMTID,rfmtid, const CLSID*,pclsid, DWORD,grfFlags, DWORD,grfMode, IPropertyStorage**,ppprstg) \
ICOM_METHOD3(HRESULT,Open, REFFMTID,rfmtid, DWORD,grfMode, IPropertyStorage**,ppprstg) \
ICOM_METHOD1(HRESULT,Delete, REFFMTID,rfmtid) \
ICOM_METHOD1(HRESULT,Enum, IEnumSTATPROPSETSTG**,ppenum)
#define IPropertySetStorage_IMETHODS \
IUnknown_IMETHODS \
IPropertySetStorage_METHODS
ICOM_DEFINE(IPropertySetStorage,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IPropertySetStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IPropertySetStorage_AddRef(p) ICOM_CALL (AddRef,p)
#define IPropertySetStorage_Release(p) ICOM_CALL (Release,p)
/*** IPropertySetStorage methods ***/
#define IPropertySetStorage_Create(p,a,b,c,d,e) ICOM_CALL5(Create,p,a,b,c,d,e)
#define IPropertySetStorage_Open(p,a,b,c) ICOM_CALL3(Open,p,a,b,c)
#define IPropertySetStorage_Delete(p,a) ICOM_CALL1(Delete,p,a)
#define IPropertySetStorage_Enum(p,a) ICOM_CALL1(Enum,p,a)
/*****************************************************************************
* IPropertyStorage interface
*/
typedef struct tagPROPVARIANT PROPVARIANT,*LPPROPVARIANT;
/* Flags for IPropertySetStorage::Create */
#define PROPSETFLAG_DEFAULT ( 0 )
#define PROPSETFLAG_NONSIMPLE ( 1 )
#define PROPSETFLAG_ANSI ( 2 )
typedef struct tagCAUB
{
ULONG cElems;
unsigned char *pElems;
} CAUB;
typedef struct tagCAI
{
ULONG cElems;
short *pElems;
} CAI;
typedef struct tagCAUI
{
ULONG cElems;
USHORT *pElems;
} CAUI;
typedef struct tagCAL
{
ULONG cElems;
long *pElems;
} CAL;
typedef struct tagCAUL
{
ULONG cElems;
ULONG *pElems;
} CAUL;
typedef struct tagCAFLT
{
ULONG cElems;
float *pElems;
} CAFLT;
typedef struct tagCADBL
{
ULONG cElems;
double *pElems;
} CADBL;
typedef struct tagCACY
{
ULONG cElems;
CY *pElems;
} CACY;
typedef struct tagCADATE
{
ULONG cElems;
DATE *pElems;
} CADATE;
typedef struct tagCABSTR
{
ULONG cElems;
BSTR *pElems;
} CABSTR;
typedef struct tagCABOOL
{
ULONG cElems;
VARIANT_BOOL *pElems;
} CABOOL;
typedef struct tagCASCODE
{
ULONG cElems;
SCODE *pElems;
} CASCODE;
typedef struct tagCAPROPVARIANT
{
ULONG cElems;
PROPVARIANT *pElems;
} CAPROPVARIANT;
typedef struct tagCAH
{
ULONG cElems;
LARGE_INTEGER *pElems;
} CAH;
typedef struct tagCAUH
{
ULONG cElems;
ULARGE_INTEGER *pElems;
} CAUH;
typedef struct tagCALPSTR
{
ULONG cElems;
LPSTR *pElems;
} CALPSTR;
typedef struct tagCALPWSTR
{
ULONG cElems;
LPWSTR *pElems;
} CALPWSTR;
typedef struct tagCAFILETIME
{
ULONG cElems;
FILETIME *pElems;
} CAFILETIME;
typedef struct tagCACLIPDATA
{
ULONG cElems;
CLIPDATA *pElems;
} CACLIPDATA;
typedef struct tagCACLSID
{
ULONG cElems;
CLSID *pElems;
} CACLSID;
struct tagPROPVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
/* Empty union arm */
UCHAR bVal;
short iVal;
USHORT uiVal;
VARIANT_BOOL boolVal;
#ifndef __cplusplus
/* FIXME: bool is reserved in C++, how can we deal with that ? */
_VARIANT_BOOL bool;
#endif
long lVal;
ULONG ulVal;
float fltVal;
SCODE scode;
LARGE_INTEGER hVal;
ULARGE_INTEGER uhVal;
double dblVal;
CY cyVal;
DATE date;
FILETIME filetime;
CLSID *puuid;
BLOB blob;
CLIPDATA *pclipdata;
IStream *pStream;
IStorage *pStorage;
BSTR bstrVal;
LPSTR pszVal;
LPWSTR pwszVal;
CAUB caub;
CAI cai;
CAUI caui;
CABOOL cabool;
CAL cal;
CAUL caul;
CAFLT caflt;
CASCODE cascode;
CAH cah;
CAUH cauh;
CADBL cadbl;
CACY cacy;
CADATE cadate;
CAFILETIME cafiletime;
CACLSID cauuid;
CACLIPDATA caclipdata;
CABSTR cabstr;
CALPSTR calpstr;
CALPWSTR calpwstr;
CAPROPVARIANT capropvar;
} u;
};
#define ICOM_INTERFACE IPropertyStorage
#define IPropertyStorage_METHODS \
ICOM_METHOD3(HRESULT,ReadMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec, PROPVARIANT*,rgpropvar) \
ICOM_METHOD4(HRESULT,WriteMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec, const PROPVARIANT*,rgpropvar, PROPID,propidNameFirst) \
ICOM_METHOD2(HRESULT,DeleteMultiple, ULONG,cpspec, const PROPSPEC*,rgpspec) \
ICOM_METHOD2(HRESULT,ReadPropertyNames, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
ICOM_METHOD3(HRESULT,WritePropertyNames, ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
ICOM_METHOD2(HRESULT,DeletePropertyNames, ULONG,cpropid, const PROPID*,rgpropid) \
ICOM_METHOD1(HRESULT,Commit, DWORD,grfCommitFlags) \
ICOM_METHOD (HRESULT,Revert) \
ICOM_METHOD1(HRESULT,Enum, IEnumSTATPROPSTG**,ppenum) \
ICOM_METHOD3(HRESULT,SetTimes, const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
ICOM_METHOD1(HRESULT,SetClass, REFCLSID,clsid) \
ICOM_METHOD1(HRESULT,Stat, STATPROPSETSTG*,pstatpsstg)
#define IPropertyStorage_IMETHODS \
IUnknown_IMETHODS \
IPropertyStorage_METHODS
ICOM_DEFINE(IPropertyStorage,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IPropertyStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IPropertyStorage_AddRef(p) ICOM_CALL (AddRef,p)
#define IPropertyStorage_Release(p) ICOM_CALL (Release,p)
/*** IPropertyStorage methods ***/
#define IPropertyStorage_ReadMultiple(p,a,b,c) ICOM_CALL3(ReadMultiple,p,a,b,c)
#define IPropertyStorage_WriteMultiple(p,a,b,c,d) ICOM_CALL4(WriteMultiple,p,a,b,c,d)
#define IPropertyStorage_DeleteMultiple(p,a,b) ICOM_CALL2(DeleteMultiple,p,a,b)
#define IPropertyStorage_ReadPropertyNames(p,a,b) ICOM_CALL2(ReadPropertyNames,p,a,b)
#define IPropertyStorage_WritePropertyNames(p,a,b,c) ICOM_CALL3(WritePropertyNames,p,a,b,c)
#define IPropertyStorage_DeletePropertyNames(p,a,b) ICOM_CALL2(DeletePropertyNames,p,a,b)
#define IPropertyStorage_Commit(p,a) ICOM_CALL1(Commit,p,a)
#define IPropertyStorage_Revert(p) ICOM_CALL (Revert,p)
#define IPropertyStorage_Enum(p,a) ICOM_CALL1(Enum,p,a)
#define IPropertyStorage_SetTimes(p,a,b,c) ICOM_CALL3(SetTimes,p,a,b,c)
#define IPropertyStorage_SetClass(p,a) ICOM_CALL1(SetClass,p,a)
#define IPropertyStorage_Stat(p,a) ICOM_CALL1(Stat,p,a)
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */
#endif /* __WINE_WINE_OBJ_PROPERTYSTORAGE_H */