/* * 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 */