propidl.idl 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. /*
  2. * Copyright 2002 Ove Kaaven
  3. * Copyright 2004 Francois Gouget
  4. *
  5. * This library is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation; either
  8. * version 2.1 of the License, or (at your option) any later version.
  9. *
  10. * This library is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public
  16. * License along with this library; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. import "objidl.idl";
  20. import "oaidl.idl";
  21. /******************** Property Storage ********************/
  22. interface IEnumSTATPROPSTG;
  23. interface IEnumSTATPROPSETSTG;
  24. [
  25. object,
  26. uuid(00000138-0000-0000-C000-000000000046),
  27. pointer_default(unique)
  28. ]
  29. interface IPropertyStorage : IUnknown
  30. {
  31. typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
  32. const DWORD PROPSETFLAG_DEFAULT = 0;
  33. const DWORD PROPSETFLAG_NONSIMPLE = 1;
  34. const DWORD PROPSETFLAG_ANSI = 2;
  35. const DWORD PROPSETFLAG_UNBUFFERED = 4;
  36. typedef struct tagPROPVARIANT PROPVARIANT;
  37. #define TYPEDEF_CA(type, name) \
  38. typedef struct tag##name { \
  39. ULONG cElems; \
  40. [size_is(cElems)] \
  41. type *pElems; \
  42. } name
  43. TYPEDEF_CA(unsigned char, CAUB);
  44. TYPEDEF_CA(short, CAI);
  45. TYPEDEF_CA(USHORT, CAUI);
  46. TYPEDEF_CA(long, CAL);
  47. TYPEDEF_CA(ULONG, CAUL);
  48. TYPEDEF_CA(float, CAFLT);
  49. TYPEDEF_CA(double, CADBL);
  50. TYPEDEF_CA(CY, CACY);
  51. TYPEDEF_CA(DATE, CADATE);
  52. TYPEDEF_CA(BSTR, CABSTR);
  53. TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
  54. TYPEDEF_CA(VARIANT_BOOL, CABOOL);
  55. TYPEDEF_CA(SCODE, CASCODE);
  56. TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
  57. TYPEDEF_CA(LARGE_INTEGER, CAH);
  58. TYPEDEF_CA(ULARGE_INTEGER, CAUH);
  59. TYPEDEF_CA(LPSTR, CALPSTR);
  60. TYPEDEF_CA(LPWSTR, CALPWSTR);
  61. TYPEDEF_CA(FILETIME, CAFILETIME);
  62. TYPEDEF_CA(CLIPDATA, CACLIPDATA);
  63. TYPEDEF_CA(CLSID, CACLSID);
  64. struct tagPROPVARIANT {
  65. VARTYPE vt;
  66. WORD wReserved1;
  67. WORD wReserved2;
  68. WORD wReserved3;
  69. [switch_is(vt & 0x1fff)] union {
  70. [case(VT_EMPTY, VT_NULL)] ;
  71. [case(VT_I1)] char cVal;
  72. [case(VT_UI1)] UCHAR bVal;
  73. [case(VT_I2)] short iVal;
  74. [case(VT_UI2)] USHORT uiVal;
  75. [case(VT_BOOL)] VARIANT_BOOL boolVal;
  76. #if 0 /* illegal in C++ */
  77. [case(VT_ILLEGAL)] _VARIANT_BOOL bool;
  78. #endif
  79. [case(VT_I4)] long lVal;
  80. [case(VT_UI4)] ULONG ulVal;
  81. [case(VT_R4)] float fltVal;
  82. [case(VT_ERROR)] SCODE scode;
  83. [case(VT_I8)] LARGE_INTEGER hVal;
  84. [case(VT_UI8)] ULARGE_INTEGER uhVal;
  85. [case(VT_R8)] double dblVal;
  86. [case(VT_CY)] CY cyVal;
  87. [case(VT_DATE)] DATE date;
  88. [case(VT_FILETIME)] FILETIME filetime;
  89. [case(VT_CLSID)] CLSID *puuid;
  90. [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob;
  91. [case(VT_CF)] CLIPDATA *pclipdata;
  92. [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;
  93. [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage;
  94. [case(VT_BSTR)] BSTR bstrVal;
  95. [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal;
  96. [case(VT_LPSTR)] LPSTR pszVal;
  97. [case(VT_LPWSTR)] LPWSTR pwszVal;
  98. [case(VT_UI1|VT_VECTOR)] CAUB caub;
  99. [case(VT_I2|VT_VECTOR)] CAI cai;
  100. [case(VT_UI2|VT_VECTOR)] CAUI caui;
  101. [case(VT_BOOL|VT_VECTOR)] CABOOL cabool;
  102. [case(VT_I4|VT_VECTOR)] CAL cal;
  103. [case(VT_UI4|VT_VECTOR)] CAUL caul;
  104. [case(VT_R4|VT_VECTOR)] CAFLT caflt;
  105. [case(VT_ERROR|VT_VECTOR)] CASCODE cascode;
  106. [case(VT_I8|VT_VECTOR)] CAH cah;
  107. [case(VT_UI8|VT_VECTOR)] CAUH cauh;
  108. [case(VT_R8|VT_VECTOR)] CADBL cadbl;
  109. [case(VT_CY|VT_VECTOR)] CACY cacy;
  110. [case(VT_DATE|VT_VECTOR)] CADATE cadate;
  111. [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime;
  112. [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid;
  113. [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata;
  114. [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr;
  115. [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob;
  116. [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr;
  117. [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr;
  118. [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar;
  119. };
  120. };
  121. typedef struct tagPROPVARIANT *LPPROPVARIANT;
  122. /* FIXME: bunches of property IDs */
  123. const ULONG PRSPEC_INVALID = 0xffffffff;
  124. const ULONG PRSPEC_LPWSTR = 0;
  125. const ULONG PRSPEC_PROPID = 1;
  126. typedef struct tagPROPSPEC {
  127. ULONG ulKind;
  128. [switch_is(ulKind)] union {
  129. [case(PRSPEC_PROPID)] PROPID propid;
  130. [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;
  131. [default] ;
  132. };
  133. } PROPSPEC;
  134. typedef struct tagSTATPROPSTG {
  135. LPOLESTR lpwstrName;
  136. PROPID propid;
  137. VARTYPE vt;
  138. } STATPROPSTG;
  139. /* FIXME: macros */
  140. typedef struct tagSTATPROPSETSTG {
  141. FMTID fmtid;
  142. CLSID clsid;
  143. DWORD grfFlags;
  144. FILETIME mtime;
  145. FILETIME ctime;
  146. FILETIME atime;
  147. DWORD dwOSVersion;
  148. } STATPROPSETSTG;
  149. HRESULT ReadMultiple(
  150. [in] ULONG cpspec,
  151. [in, size_is(cpspec)] const PROPSPEC rgpspec[],
  152. [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
  153. HRESULT WriteMultiple(
  154. [in] ULONG cpspec,
  155. [in, size_is(cpspec)] const PROPSPEC rgpspec[],
  156. [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
  157. [in] PROPID propidNameFirst);
  158. HRESULT DeleteMultiple(
  159. [in] ULONG cpspec,
  160. [in, size_is(cpspec)] const PROPSPEC rgpspec[]);
  161. HRESULT ReadPropertyNames(
  162. [in] ULONG cpropid,
  163. [in, size_is(cpropid)] const PROPID rgpropid[],
  164. [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);
  165. HRESULT WritePropertyNames(
  166. [in] ULONG cpropid,
  167. [in, size_is(cpropid)] const PROPID rgpropid[],
  168. [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);
  169. HRESULT DeletePropertyNames(
  170. [in] ULONG cpropid,
  171. [in, size_is(cpropid)] const PROPID rgpropid[]);
  172. HRESULT Commit(
  173. [in] DWORD grfCommitFlags);
  174. HRESULT Revert();
  175. HRESULT Enum(
  176. [out] IEnumSTATPROPSTG **ppenum);
  177. HRESULT SetTimes(
  178. [in] const FILETIME *pctime,
  179. [in] const FILETIME *patime,
  180. [in] const FILETIME *pmtime);
  181. HRESULT SetClass(
  182. [in] REFCLSID clsid);
  183. HRESULT Stat(
  184. [out] STATPROPSETSTG *statpsstg);
  185. }
  186. [
  187. object,
  188. uuid(0000013A-0000-0000-C000-000000000046),
  189. pointer_default(unique)
  190. ]
  191. interface IPropertySetStorage : IUnknown
  192. {
  193. typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;
  194. HRESULT Create(
  195. [in] REFFMTID rfmtid,
  196. [in, unique] const CLSID *pclsid,
  197. [in] DWORD grfFlags,
  198. [in] DWORD grfMode,
  199. [out] IPropertyStorage **ppprstg);
  200. HRESULT Open(
  201. [in] REFFMTID rfmtid,
  202. [in] DWORD grfMode,
  203. [out] IPropertyStorage **ppprstg);
  204. HRESULT Delete(
  205. [in] REFFMTID rfmtid);
  206. HRESULT Enum(
  207. [out] IEnumSTATPROPSETSTG **ppenum);
  208. }
  209. [
  210. object,
  211. uuid(00000139-0000-0000-C000-000000000046),
  212. pointer_default(unique)
  213. ]
  214. interface IEnumSTATPROPSTG : IUnknown
  215. {
  216. typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
  217. [local]
  218. HRESULT Next(
  219. [in] ULONG celt,
  220. [out, size_is(celt), length_is(*pceltFetched)]
  221. STATPROPSTG *rgelt,
  222. [out] ULONG *pceltFetched);
  223. [call_as(Next)]
  224. HRESULT RemoteNext(
  225. [in] ULONG celt,
  226. [out, size_is(celt), length_is(*pceltFetched)]
  227. STATPROPSTG *rgelt,
  228. [out] ULONG *pceltFetched);
  229. HRESULT Skip(
  230. [in] ULONG celt);
  231. HRESULT Reset();
  232. HRESULT Clone(
  233. [out] IEnumSTATPROPSTG **ppenum);
  234. }
  235. [
  236. object,
  237. uuid(0000013B-0000-0000-C000-000000000046),
  238. pointer_default(unique)
  239. ]
  240. interface IEnumSTATPROPSETSTG : IUnknown
  241. {
  242. typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
  243. [local]
  244. HRESULT Next(
  245. [in] ULONG celt,
  246. [out, size_is(celt), length_is(*pceltFetched)]
  247. STATPROPSETSTG *rgelt,
  248. [out] ULONG *pceltFetched);
  249. [call_as(Next)]
  250. HRESULT RemoteNext(
  251. [in] ULONG celt,
  252. [out, size_is(celt), length_is(*pceltFetched)]
  253. STATPROPSETSTG *rgelt,
  254. [out] ULONG *pceltFetched);
  255. HRESULT Skip(
  256. [in] ULONG celt);
  257. HRESULT Reset();
  258. HRESULT Clone(
  259. [out] IEnumSTATPROPSETSTG **ppenum);
  260. }
  261. cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);");
  262. cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);");
  263. cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);");