//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1996. // // File: ipropidl.idl // //-------------------------------------------------------------------------- cpp_quote("//+-------------------------------------------------------------------------") cpp_quote("//") cpp_quote("// Microsoft Windows") cpp_quote("// Copyright (C) Microsoft Corporation, 1992 - 1996.") cpp_quote("//") cpp_quote("//--------------------------------------------------------------------------") /**************************************************************************** * Property Storage Interfaces ****************************************************************************/ import "unknwn.idl"; import "wtypes.idl"; import "objidl.idl"; import "oaidl.idl"; interface IEnumSTATPROPSTG; interface IEnumSTATPROPSETSTG; [ object, uuid(00000138-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertyStorage : IUnknown { typedef struct tagBSTRBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pData; } BSTRBLOB, * LPBSTRBLOB; // Format ID are just a kind of GUID typedef GUID FMTID; typedef FMTID *LPFMTID; cpp_quote("#define FMTID_NULL GUID_NULL") cpp_quote("#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)") //The following typedefs are used internally by MIDL. cpp_quote("#if 0") #if defined(__midl) /* MIDL 2.0 definitions */ typedef FMTID *REFFMTID; #else /* MIDL 1.1 definitions */ typedef FMTID REFFMTID; #endif cpp_quote("#endif // 0") cpp_quote("#if defined(__cplusplus)") cpp_quote("#ifndef _REFFMTID_DEFINED") cpp_quote("#define _REFFMTID_DEFINED") cpp_quote("#define REFFMTID const FMTID &") cpp_quote("#endif // !_REFFMTID_DEFINED") cpp_quote("#else // !__cplusplus") cpp_quote("#ifndef _REFFMTID_DEFINED") cpp_quote("#define _REFFMTID_DEFINED") cpp_quote("#define REFFMTID const FMTID * const") cpp_quote("#endif // !_REFFMTID_DEFINED") cpp_quote("#endif // !__cplusplus") cpp_quote("") cpp_quote("// Well-known Property Set Format IDs") extern const FMTID FMTID_SummaryInformation; extern const FMTID FMTID_DocSummaryInformation; extern const FMTID FMTID_UserDefinedProperties; cpp_quote("") cpp_quote("// Flags for IPropertySetStorage::Create") const DWORD PROPSETFLAG_DEFAULT = 0; const DWORD PROPSETFLAG_NONSIMPLE = 1; const DWORD PROPSETFLAG_ANSI = 2; cpp_quote("// This flag is only supported on StgCreatePropStg & StgOpenPropStg") const DWORD PROPSETFLAG_UNBUFFERED = 4; typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE; typedef struct tagPROPVARIANT PROPVARIANT; #define TYPEDEF_CA(type, name) \ typedef struct tag##name\ {\ ULONG cElems;\ [size_is( cElems )]\ type * pElems;\ } name TYPEDEF_CA(unsigned char, CAUB); TYPEDEF_CA(short, CAI); TYPEDEF_CA(USHORT, CAUI); TYPEDEF_CA(long, CAL); TYPEDEF_CA(ULONG, CAUL); TYPEDEF_CA(float, CAFLT); TYPEDEF_CA(double, CADBL); TYPEDEF_CA(CY, CACY); TYPEDEF_CA(DATE, CADATE); TYPEDEF_CA(BSTR, CABSTR); TYPEDEF_CA(BSTRBLOB, CABSTRBLOB); TYPEDEF_CA(VARIANT_BOOL, CABOOL); TYPEDEF_CA(SCODE, CASCODE); TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT); TYPEDEF_CA(LARGE_INTEGER, CAH); TYPEDEF_CA(ULARGE_INTEGER, CAUH); TYPEDEF_CA(LPSTR, CALPSTR); TYPEDEF_CA(LPWSTR, CALPWSTR); TYPEDEF_CA(FILETIME, CAFILETIME); TYPEDEF_CA(CLIPDATA, CACLIPDATA); TYPEDEF_CA(CLSID, CACLSID); const DWORD VT_ILLEGAL = 0xffff; const DWORD VT_BSTR_BLOB = 0x0fff; const DWORD VT_ILLEGALMASKED = 0x0fff; const DWORD VT_TYPEMASK = 0x0fff; cpp_quote("// Macro to calculate the size of the above pClipData") cpp_quote("#define CBPCLIPDATA(clipdata) ( (clipdata).cbSize - sizeof((clipdata).ulClipFmt) )") cpp_quote("// Disable the warning about the obsolete member named 'bool'") cpp_quote("// 'bool', 'true', 'false', 'mutable', 'explicit', & 'typename'") cpp_quote("// are reserved keywords") cpp_quote("#pragma warning(disable:4237)") struct tagPROPVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; [switch_is((unsigned short) (vt & 0x1fff))] union { [case(VT_EMPTY, VT_NULL)] ; [case(VT_UI1)] UCHAR bVal; [case(VT_I2)] short iVal; [case(VT_UI2)] USHORT uiVal; [case(VT_BOOL)] VARIANT_BOOL boolVal; [case(VT_ILLEGAL)] // obsolete field name; use boolVal VARIANT_BOOL bool; [case(VT_I4)] long lVal; [case(VT_UI4)] ULONG ulVal; [case(VT_R4)] float fltVal; [case(VT_ERROR)] SCODE scode; [case(VT_I8)] LARGE_INTEGER hVal; [case(VT_UI8)] ULARGE_INTEGER uhVal; [case(VT_R8)] double dblVal; [case(VT_CY)] CY cyVal; [case(VT_DATE)] DATE date; [case(VT_FILETIME)] FILETIME filetime; [case(VT_CLSID)] CLSID * puuid; [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob; [case(VT_CF)] CLIPDATA *pclipdata; [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream * pStream; [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage * pStorage; [case(VT_BSTR)] BSTR bstrVal; [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal; [case(VT_LPSTR)] LPSTR pszVal; [case(VT_LPWSTR)] LPWSTR pwszVal; [case(VT_UI1|VT_VECTOR)] CAUB caub; [case(VT_I2|VT_VECTOR)] CAI cai; [case(VT_UI2|VT_VECTOR)] CAUI caui; [case(VT_BOOL|VT_VECTOR)] CABOOL cabool; [case(VT_I4|VT_VECTOR)] CAL cal; [case(VT_UI4|VT_VECTOR)] CAUL caul; [case(VT_R4|VT_VECTOR)] CAFLT caflt; [case(VT_ERROR|VT_VECTOR)] CASCODE cascode; [case(VT_I8|VT_VECTOR)] CAH cah; [case(VT_UI8|VT_VECTOR)] CAUH cauh; [case(VT_R8|VT_VECTOR)] CADBL cadbl; [case(VT_CY|VT_VECTOR)] CACY cacy; [case(VT_DATE|VT_VECTOR)] CADATE cadate; [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime; [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid; [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata; [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr; [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob; [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr; [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr; [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar; }; }; typedef struct tagPROPVARIANT * LPPROPVARIANT; cpp_quote("// Reserved global Property IDs") const PROPID PID_DICTIONARY = 0x00000000; const PROPID PID_CODEPAGE = 0x00000001; const PROPID PID_FIRST_USABLE = 0x00000002; const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff; const PROPID PID_LOCALE = 0x80000000; const PROPID PID_MODIFY_TIME = 0x80000001; const PROPID PID_SECURITY = 0x80000002; const PROPID PID_ILLEGAL = 0xffffffff; cpp_quote("// Property IDs for the SummaryInformation Property Set") cpp_quote("") cpp_quote("#define PIDSI_TITLE 0x00000002L // VT_LPSTR") cpp_quote("#define PIDSI_SUBJECT 0x00000003L // VT_LPSTR") cpp_quote("#define PIDSI_AUTHOR 0x00000004L // VT_LPSTR") cpp_quote("#define PIDSI_KEYWORDS 0x00000005L // VT_LPSTR") cpp_quote("#define PIDSI_COMMENTS 0x00000006L // VT_LPSTR") cpp_quote("#define PIDSI_TEMPLATE 0x00000007L // VT_LPSTR") cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L // VT_LPSTR") cpp_quote("#define PIDSI_REVNUMBER 0x00000009L // VT_LPSTR") cpp_quote("#define PIDSI_EDITTIME 0x0000000aL // VT_FILETIME (UTC)") cpp_quote("#define PIDSI_LASTPRINTED 0x0000000bL // VT_FILETIME (UTC)") cpp_quote("#define PIDSI_CREATE_DTM 0x0000000cL // VT_FILETIME (UTC)") cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000dL // VT_FILETIME (UTC)") cpp_quote("#define PIDSI_PAGECOUNT 0x0000000eL // VT_I4") cpp_quote("#define PIDSI_WORDCOUNT 0x0000000fL // VT_I4") cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L // VT_I4") cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L // VT_CF") cpp_quote("#define PIDSI_APPNAME 0x00000012L // VT_LPSTR") cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L // VT_I4") const ULONG PRSPEC_INVALID = 0xffffffff; const ULONG PRSPEC_LPWSTR = 0; const ULONG PRSPEC_PROPID = 1; typedef struct tagPROPSPEC { ULONG ulKind; [switch_is(ulKind)] union { [case(PRSPEC_PROPID)] PROPID propid; [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr; [default] ; } ; } PROPSPEC; typedef struct tagSTATPROPSTG { LPOLESTR lpwstrName; PROPID propid; VARTYPE vt; } STATPROPSTG; cpp_quote("// Macros for parsing the OS Version of the Property Set Header") cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD( (dwOSVer) )") cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD( (dwOSVer) ))") cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD( (dwOSVer) ))") cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF") typedef struct tagSTATPROPSETSTG { FMTID fmtid; CLSID clsid; DWORD grfFlags; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD dwOSVersion; } STATPROPSETSTG; // For the remotable routines, we must use pointer // parameters (e.g. "*rgspec" rather than "rgspec[]") // so that the MIDL 2.0 compiler will generate an // interpereted proxy/stub, rather than inline. [local] HRESULT ReadMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [out, size_is(cpspec)] PROPVARIANT rgpropvar[] ); [call_as(ReadMultiple)] HRESULT RemoteReadMultiple( [out] BOOL *pfBstrPresent, [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC *rgpspec, [out, size_is(cpspec)] PROPVARIANT *rgpropvar ); [local] HRESULT WriteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[], [in, size_is(cpspec)] const PROPVARIANT rgpropvar[], [in] PROPID propidNameFirst ); [call_as(WriteMultiple)] HRESULT RemoteWriteMultiple( [in] BOOL fBstrPresent, [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC *rgpspec, [in, size_is(cpspec)] const PROPVARIANT *rgpropvar, [in] PROPID propidNameFirst ); [local] HRESULT DeleteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC rgpspec[] ); [call_as(DeleteMultiple)] HRESULT RemoteDeleteMultiple( [in] ULONG cpspec, [in, size_is(cpspec)] const PROPSPEC *rgpspec ); HRESULT ReadPropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [out, size_is(cpropid)] LPOLESTR rglpwstrName[] ); HRESULT WritePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[], [in, size_is(cpropid)] const LPOLESTR rglpwstrName[] ); HRESULT DeletePropertyNames( [in] ULONG cpropid, [in, size_is(cpropid)] const PROPID rgpropid[] ); HRESULT Commit( [in] DWORD grfCommitFlags ); HRESULT Revert(); HRESULT Enum( [out] IEnumSTATPROPSTG ** ppenum ); HRESULT SetTimes( [in] FILETIME const * pctime, [in] FILETIME const * patime, [in] FILETIME const * pmtime ); HRESULT SetClass( [in] REFCLSID clsid ); HRESULT Stat( [out] STATPROPSETSTG * pstatpsstg ); } [ object, uuid(0000013A-0000-0000-C000-000000000046), pointer_default(unique) ] interface IPropertySetStorage : IUnknown { typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE; HRESULT Create( [in] REFFMTID rfmtid, [in, unique] const CLSID * pclsid, [in] DWORD grfFlags, [in] DWORD grfMode, [out] IPropertyStorage ** ppprstg ); HRESULT Open( [in] REFFMTID rfmtid, [in] DWORD grfMode, [out] IPropertyStorage ** ppprstg ); HRESULT Delete( [in] REFFMTID rfmtid ); HRESULT Enum( [out] IEnumSTATPROPSETSTG ** ppenum ); } [ object, uuid(00000139-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSTG : IUnknown { typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG; [local] HRESULT Next( [in] ULONG celt, [in] STATPROPSTG * rgelt, [out] ULONG * pceltFetched ); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSTG * rgelt, [out] ULONG * pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSTG ** ppenum ); } [ object, uuid(0000013B-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumSTATPROPSETSTG : IUnknown { typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG; [local] HRESULT Next( [in] ULONG celt, [in] STATPROPSETSTG * rgelt, [out] ULONG * pceltFetched ); [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG * rgelt, [out] ULONG * pceltFetched ); HRESULT Skip( [in] ULONG celt ); HRESULT Reset(); HRESULT Clone( [out] IEnumSTATPROPSETSTG ** ppenum ); } cpp_quote("") cpp_quote("#ifndef _IPropertyStorage_DEFINED") cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );") cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );") cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );") cpp_quote("") cpp_quote("#define _PROPVARIANTINIT_DEFINED_") cpp_quote("# ifdef __cplusplus") cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )") cpp_quote("{") cpp_quote(" memset ( pvar, 0, sizeof(PROPVARIANT) );") cpp_quote("}") cpp_quote("# else") cpp_quote("# define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )") cpp_quote("# endif") cpp_quote("#endif // #ifndef _IPropertyStorage_DEFINED") cpp_quote("") cpp_quote("") cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_") cpp_quote("WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );") cpp_quote("WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );") cpp_quote("WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);") cpp_quote("") cpp_quote("#define CCH_MAX_PROPSTG_NAME 31") cpp_quote("#define CCH_MAX_PROPSTG_NAMESZ (CCH_MAX_PROPSTG_NAME + 1) // Includes NULL terminator") cpp_quote("WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, LPOLESTR oszName );" ) cpp_quote("WINOLEAPI PropStgNameToFmtId( const LPOLESTR oszName, FMTID *pfmtid );" ) cpp_quote("#endif")