312 lines
8.9 KiB
Plaintext
312 lines
8.9 KiB
Plaintext
|
/*
|
||
|
* Copyright 2002 Ove Kaaven
|
||
|
* Copyright 2004 Francois Gouget
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 2.1 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public
|
||
|
* License along with this library; if not, write to the Free Software
|
||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
*/
|
||
|
|
||
|
import "objidl.idl";
|
||
|
import "oaidl.idl";
|
||
|
|
||
|
|
||
|
/******************** Property Storage ********************/
|
||
|
|
||
|
interface IEnumSTATPROPSTG;
|
||
|
interface IEnumSTATPROPSETSTG;
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(00000138-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IPropertyStorage : IUnknown
|
||
|
{
|
||
|
typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
|
||
|
|
||
|
const DWORD PROPSETFLAG_DEFAULT = 0;
|
||
|
const DWORD PROPSETFLAG_NONSIMPLE = 1;
|
||
|
const DWORD PROPSETFLAG_ANSI = 2;
|
||
|
const DWORD PROPSETFLAG_UNBUFFERED = 4;
|
||
|
|
||
|
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);
|
||
|
|
||
|
struct tagPROPVARIANT {
|
||
|
VARTYPE vt;
|
||
|
WORD wReserved1;
|
||
|
WORD wReserved2;
|
||
|
WORD wReserved3;
|
||
|
[switch_is(vt & 0x1fff)] union {
|
||
|
[case(VT_EMPTY, VT_NULL)] ;
|
||
|
[case(VT_I1)] char cVal;
|
||
|
[case(VT_UI1)] UCHAR bVal;
|
||
|
[case(VT_I2)] short iVal;
|
||
|
[case(VT_UI2)] USHORT uiVal;
|
||
|
[case(VT_BOOL)] VARIANT_BOOL boolVal;
|
||
|
#if 0 /* illegal in C++ */
|
||
|
[case(VT_ILLEGAL)] _VARIANT_BOOL bool;
|
||
|
#endif
|
||
|
[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;
|
||
|
|
||
|
/* FIXME: bunches of property IDs */
|
||
|
|
||
|
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;
|
||
|
|
||
|
/* FIXME: macros */
|
||
|
|
||
|
typedef struct tagSTATPROPSETSTG {
|
||
|
FMTID fmtid;
|
||
|
CLSID clsid;
|
||
|
DWORD grfFlags;
|
||
|
FILETIME mtime;
|
||
|
FILETIME ctime;
|
||
|
FILETIME atime;
|
||
|
DWORD dwOSVersion;
|
||
|
} STATPROPSETSTG;
|
||
|
|
||
|
HRESULT ReadMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)] const PROPSPEC rgpspec[],
|
||
|
[out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
|
||
|
|
||
|
HRESULT WriteMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)] const PROPSPEC rgpspec[],
|
||
|
[in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
|
||
|
[in] PROPID propidNameFirst);
|
||
|
|
||
|
HRESULT DeleteMultiple(
|
||
|
[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] const FILETIME *pctime,
|
||
|
[in] const FILETIME *patime,
|
||
|
[in] const FILETIME *pmtime);
|
||
|
|
||
|
HRESULT SetClass(
|
||
|
[in] REFCLSID clsid);
|
||
|
|
||
|
HRESULT Stat(
|
||
|
[out] STATPROPSETSTG *statpsstg);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
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,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
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,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
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("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);");
|
||
|
cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);");
|
||
|
cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);");
|