NT4/private/ole32/stg/props/iprop/ipropidl.idl
2020-09-30 17:12:29 +02:00

580 lines
18 KiB
Plaintext

//+-------------------------------------------------------------------------
//
// 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")