objidl.idl 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944
  1. /*
  2. * Copyright 2002 Ove Kaaven
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. */
  18. import "unknwn.idl";
  19. interface IStream;
  20. interface IEnumString;
  21. interface IRunningObjectTable;
  22. interface IMoniker;
  23. interface IAdviseSink;
  24. interface IAsyncManager;
  25. /* FIXME: COSERVERINFO should be moved here from wtypes.idl */
  26. /******************** Fundamentals ********************/
  27. [
  28. local,
  29. object,
  30. uuid(00000003-0000-0000-C000-000000000046)
  31. ]
  32. interface IMarshal : IUnknown
  33. {
  34. typedef [unique] IMarshal *LPMARSHAL;
  35. HRESULT GetUnmarshalClass(
  36. [in] REFIID riid,
  37. [in, unique] void *pv,
  38. [in] DWORD dwDestContext,
  39. [in, unique] void *pvDestContext,
  40. [in] DWORD mshlflags,
  41. [out] CLSID *pCid);
  42. HRESULT GetMarshalSizeMax(
  43. [in] REFIID riid,
  44. [in, unique] void *pv,
  45. [in] DWORD dwDestContext,
  46. [in, unique] void *pvDestContext,
  47. [in] DWORD mshlflags,
  48. [out] DWORD *pSize);
  49. HRESULT MarshalInterface(
  50. [in, unique] IStream *pStm,
  51. [in] REFIID riid,
  52. [in, unique] void *pv,
  53. [in] DWORD dwDestContext,
  54. [in, unique] void *pvDestContext,
  55. [in] DWORD mshlflags);
  56. HRESULT UnmarshalInterface(
  57. [in, unique] IStream *pStm,
  58. [in] REFIID riid,
  59. [out] void **ppv);
  60. HRESULT ReleaseMarshalData(
  61. [in, unique] IStream *pStm);
  62. HRESULT DisconnectObject(
  63. [in] DWORD dwReserved);
  64. }
  65. [
  66. local,
  67. object,
  68. uuid(00000018-0000-0000-C000-000000000046)
  69. ]
  70. interface IStdMarshalInfo : IUnknown
  71. {
  72. typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;
  73. HRESULT GetClassForHandler(
  74. [in] DWORD dwDestContext,
  75. [in, unique] void *pvDestContext,
  76. [out] CLSID *pClsid);
  77. }
  78. [
  79. local,
  80. object,
  81. uuid(00000019-0000-0000-C000-000000000046)
  82. ]
  83. interface IExternalConnection : IUnknown
  84. {
  85. typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;
  86. typedef enum tagEXTCONN {
  87. EXTCONN_STRONG = 0x0001,
  88. EXTCONN_WEAK = 0x0002,
  89. EXTCONN_CALLABLE = 0x0004
  90. } EXTCONN;
  91. DWORD AddConnection(
  92. [in] DWORD extconn,
  93. [in] DWORD reserved);
  94. DWORD ReleaseConnection(
  95. [in] DWORD extconn,
  96. [in] DWORD reserved,
  97. [in] BOOL fLastReleaseCloses);
  98. }
  99. [
  100. local,
  101. object,
  102. uuid(00000020-0000-0000-C000-000000000046)
  103. ]
  104. interface IMultiQI : IUnknown
  105. {
  106. typedef [unique] IMultiQI *LPMULTIQI;
  107. typedef struct tagMULTI_QI {
  108. const IID *pIID;
  109. IUnknown *pItf;
  110. HRESULT hr;
  111. } MULTI_QI;
  112. HRESULT QueryMultipleInterfaces(
  113. [in] ULONG cMQIs,
  114. [in, out] MULTI_QI *pMQIs);
  115. }
  116. [
  117. local,
  118. object,
  119. uuid(00000002-0000-0000-C000-000000000046)
  120. ]
  121. interface IMalloc : IUnknown
  122. {
  123. typedef [unique] IMalloc *LPMALLOC;
  124. LPVOID Alloc(
  125. [in] ULONG cb);
  126. LPVOID Realloc(
  127. [in] LPVOID pv,
  128. [in] ULONG cb);
  129. void Free(
  130. [in] LPVOID pv);
  131. ULONG GetSize(
  132. [in] LPVOID pv);
  133. int DidAlloc(LPVOID pv);
  134. void HeapMinimize();
  135. }
  136. [
  137. local,
  138. object,
  139. uuid(0000001d-0000-0000-C000-000000000046)
  140. ]
  141. interface IMallocSpy : IUnknown
  142. {
  143. typedef [unique] IMallocSpy *LPMALLOCSPY;
  144. ULONG PreAlloc(
  145. [in] ULONG cbRequest);
  146. LPVOID PostAlloc(
  147. [in] LPVOID pActual);
  148. LPVOID PreFree(
  149. [in] LPVOID pRequest,
  150. [in] BOOL fSpyed);
  151. void PostFree(
  152. [in] BOOL fSpyed);
  153. ULONG PreRealloc(
  154. [in] LPVOID pRequest,
  155. [in] ULONG cbRequest,
  156. [out] LPVOID *ppNewRequest,
  157. [in] BOOL fSpyed);
  158. LPVOID PostRealloc(
  159. [in] LPVOID pActual,
  160. [in] BOOL fSpyed);
  161. LPVOID PreGetSize(
  162. [in] LPVOID pRequest,
  163. [in] BOOL fSpyed);
  164. ULONG PostGetSize(
  165. [in] ULONG cbActual,
  166. [in] BOOL fSpyed);
  167. LPVOID PreDidAlloc(
  168. [in] LPVOID pRequest,
  169. [in] BOOL fSpyed);
  170. int PostDidAlloc(
  171. [in] LPVOID pRequest,
  172. [in] BOOL fSpyed,
  173. [in] int fActual);
  174. void PreHeapMinimize();
  175. void PostHeapMinimize();
  176. }
  177. [
  178. local,
  179. object,
  180. uuid(00000021-0000-0000-C000-000000000046)
  181. ]
  182. interface IInternalUnknown : IUnknown
  183. {
  184. HRESULT QueryInternalInterface(
  185. [in] REFIID riid,
  186. [out] void **ppv);
  187. }
  188. [
  189. object,
  190. uuid(00000100-0000-0000-C000-000000000046),
  191. pointer_default(unique)
  192. ]
  193. interface IEnumUnknown : IUnknown
  194. {
  195. typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  196. [local]
  197. HRESULT Next(
  198. [in] ULONG celt,
  199. [out] IUnknown **rgelt,
  200. [out] ULONG *pceltFetched);
  201. [call_as(Next)]
  202. HRESULT RemoteNext(
  203. [in] ULONG celt,
  204. [out, size_is(celt), length_is(*pceltFetched)]
  205. IUnknown **rgelt,
  206. [out] ULONG *pceltFetched);
  207. HRESULT Skip(
  208. [in] ULONG celt);
  209. HRESULT Reset();
  210. HRESULT Clone(
  211. [out] IEnumUnknown **ppenum);
  212. }
  213. [
  214. object,
  215. uuid(00000022-0000-0000-C000-000000000046),
  216. version(1.0),
  217. pointer_default(unique)
  218. ]
  219. interface ISurrogate : IUnknown
  220. {
  221. typedef [unique] ISurrogate *LPSURROGATE;
  222. HRESULT LoadDllServer(
  223. [in] REFCLSID Clsid);
  224. HRESULT FreeSurrogate();
  225. }
  226. [
  227. local,
  228. object,
  229. uuid(00000146-0000-0000-C000-000000000046)
  230. ]
  231. interface IGlobalInterfaceTable : IUnknown
  232. {
  233. typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
  234. HRESULT RegisterInterfaceInGlobal(
  235. [in] IUnknown *pUnk,
  236. [in] REFIID riid,
  237. [out] DWORD *pdwCookie);
  238. HRESULT RevokeInterfaceFromGlobal(
  239. [in] DWORD dwCookie);
  240. HRESULT GetInterfaceFromGlobal(
  241. [in] DWORD dwCookie,
  242. [in] REFIID riid,
  243. [out, iid_is(riid)] void **ppv);
  244. }
  245. /******************** Monikers ********************/
  246. [
  247. object,
  248. uuid(0000000e-0000-0000-C000-000000000046),
  249. pointer_default(unique)
  250. ]
  251. interface IBindCtx : IUnknown
  252. {
  253. typedef [unique] IBindCtx *LPBINDCTX;
  254. typedef [unique] IBindCtx *LPBC;
  255. typedef struct tagBIND_OPTS {
  256. DWORD cbStruct;
  257. DWORD grfFlags;
  258. DWORD grfMode;
  259. DWORD dwTickCountDeadline;
  260. } BIND_OPTS, *LPBIND_OPTS;
  261. /* FIXME: C++ crap */
  262. typedef struct tagBIND_OPTS2 {
  263. DWORD cbStruct;
  264. DWORD grfFlags;
  265. DWORD grfMode;
  266. DWORD dwTickCountDeadline;
  267. DWORD dwTrackFlags;
  268. DWORD dwClassContext;
  269. LCID locale;
  270. COSERVERINFO *pServerInfo;
  271. } BIND_OPTS2, *LPBIND_OPTS2;
  272. typedef enum tagBIND_FLAGS {
  273. BIND_MAYBOTHERUSER = 1,
  274. BIND_JUSTTESTEXISTENCE = 2
  275. } BIND_FLAGS;
  276. HRESULT RegisterObjectBound(
  277. [in, unique] IUnknown *punk);
  278. HRESULT RevokeObjectBound(
  279. [in, unique] IUnknown *punk);
  280. HRESULT ReleaseBoundObjects();
  281. [local]
  282. HRESULT SetBindOptions(
  283. [in] BIND_OPTS *pbindopts);
  284. [call_as(SetBindOptions)]
  285. HRESULT RemoteSetBindOptions(
  286. [in] BIND_OPTS2 *pbindopts);
  287. [local]
  288. HRESULT GetBindOptions(
  289. [in, out] BIND_OPTS *pbindopts);
  290. [call_as(GetBindOptions)]
  291. HRESULT RemoteGetBindOptions(
  292. [in, out] BIND_OPTS2 *pbindopts);
  293. HRESULT GetRunningObjectTable(
  294. [out] IRunningObjectTable **pprot);
  295. HRESULT RegisterObjectParam(
  296. [in] LPOLESTR pszKey,
  297. [in, unique] IUnknown *punk);
  298. HRESULT GetObjectParam(
  299. [in] LPOLESTR pszKey,
  300. [out] IUnknown **ppunk);
  301. HRESULT EnumObjectParam(
  302. [out] IEnumString **ppenum);
  303. HRESULT RevokeObjectParam(
  304. [in] LPOLESTR pszKey);
  305. }
  306. [
  307. object,
  308. uuid(00000102-0000-0000-C000-000000000046),
  309. pointer_default(unique)
  310. ]
  311. interface IEnumMoniker : IUnknown
  312. {
  313. typedef [unique] IEnumMoniker *LPENUMMONIKER;
  314. [local]
  315. HRESULT Next(
  316. [in] ULONG celt,
  317. [out, size_is(celt), length_is(*pceltFetched)]
  318. IMoniker **rgelt,
  319. [out] ULONG *pceltFetched);
  320. [call_as(Next)]
  321. HRESULT RemoteNext(
  322. [in] ULONG celt,
  323. [out, size_is(celt), length_is(*pceltFetched)]
  324. IMoniker **rgelt,
  325. [out] ULONG *pceltFetched);
  326. HRESULT Skip(
  327. [in] ULONG celt);
  328. HRESULT Reset();
  329. HRESULT Clone(
  330. [out] IEnumMoniker **ppenum);
  331. }
  332. [
  333. object,
  334. uuid(00000126-0000-0000-C000-000000000046)
  335. ]
  336. interface IRunnableObject : IUnknown
  337. {
  338. typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  339. HRESULT GetRunningClass(
  340. [out] LPCLSID lpClsid);
  341. HRESULT Run(
  342. [in] LPBINDCTX pbc);
  343. [local]
  344. BOOL IsRunning();
  345. [call_as(IsRunning)]
  346. HRESULT RemoteIsRunning();
  347. HRESULT LockRunning(
  348. [in] BOOL fLock,
  349. [in] BOOL fLastUnlockCloses);
  350. HRESULT SetContainedObject(
  351. [in] BOOL fContained);
  352. }
  353. /* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),
  354. * which resolves to a compilation failure if __WINESRC__ is defined,
  355. * but GetObject is used as a valid method name below, so we have
  356. * to undefine it if __WINESRC__ is defined */
  357. cpp_quote("#ifdef __WINESRC__")
  358. cpp_quote("#undef GetObject")
  359. cpp_quote("#endif")
  360. [
  361. object,
  362. uuid(00000010-0000-0000-C000-000000000046)
  363. ]
  364. interface IRunningObjectTable : IUnknown
  365. {
  366. typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  367. HRESULT Register(
  368. [in] DWORD grfFlags,
  369. [in, unique] IUnknown *punkObject,
  370. [in, unique] IMoniker *pmkObjectName,
  371. [out] DWORD *pdwRegister);
  372. HRESULT Revoke(
  373. [in] DWORD dwRegister);
  374. HRESULT IsRunning(
  375. [in, unique] IMoniker *pmkObjectName);
  376. HRESULT GetObject(
  377. [in, unique] IMoniker *pmkObjectName,
  378. [out] IUnknown **ppunkObject);
  379. HRESULT NoteChangeTime(
  380. [in] DWORD dwRegister,
  381. [in] FILETIME *pfiletime);
  382. HRESULT GetTimeOfLastChange(
  383. [in, unique] IMoniker *pmkObjectName,
  384. [out] FILETIME *pfiletime);
  385. HRESULT EnumRunning(
  386. [out] IEnumMoniker **ppenumMoniker);
  387. }
  388. [
  389. object,
  390. uuid(0000010c-0000-0000-C000-000000000046)
  391. ]
  392. interface IPersist : IUnknown
  393. {
  394. typedef [unique] IPersist *LPPERSIST;
  395. HRESULT GetClassID(
  396. [out] CLSID *pClassID);
  397. }
  398. [
  399. object,
  400. uuid(00000109-0000-0000-C000-000000000046),
  401. pointer_default(unique)
  402. ]
  403. interface IPersistStream : IPersist
  404. {
  405. typedef [unique] IPersistStream *LPPERSISTSTREAM;
  406. HRESULT IsDirty();
  407. HRESULT Load(
  408. [in, unique] IStream *pStm);
  409. HRESULT Save(
  410. [in, unique] IStream *pStm,
  411. [in] BOOL fClearDirty);
  412. HRESULT GetSizeMax(
  413. [out] ULARGE_INTEGER *pcbSize);
  414. }
  415. [
  416. object,
  417. uuid(0000000f-0000-0000-C000-000000000046),
  418. pointer_default(unique)
  419. ]
  420. interface IMoniker : IPersistStream
  421. {
  422. typedef [unique] IMoniker *LPMONIKER;
  423. typedef enum tagMKSYS {
  424. MKSYS_NONE = 0,
  425. MKSYS_GENERICCOMPOSITE = 1,
  426. MKSYS_FILEMONIKER = 2,
  427. MKSYS_ANTIMONIKER = 3,
  428. MKSYS_ITEMMONIKER = 4,
  429. MKSYS_POINTERMONIKER = 5,
  430. /* MKSYS_URLMONIKER = 6, */ /* defined in urlmon.idl */
  431. MKSYS_CLASSMONIKER = 7
  432. } MKSYS;
  433. typedef [v1_enum] enum tagMKREDUCE {
  434. MKRREDUCE_ONE = 3 << 16,
  435. MKRREDUCE_TOUSER = 2 << 16,
  436. MKRREDUCE_THROUGHUSER = 1 << 16,
  437. MKRREDUCE_ALL = 0
  438. } MKRREDUCE;
  439. [local]
  440. HRESULT BindToObject(
  441. [in, unique] IBindCtx *pbc,
  442. [in, unique] IMoniker *pmkToLeft,
  443. [in] REFIID riidResult,
  444. [out, iid_is(riidResult)] void **ppvResult);
  445. [call_as(BindToObject)]
  446. HRESULT RemoteBindToObject(
  447. [in, unique] IBindCtx *pbc,
  448. [in, unique] IMoniker *pmkToLeft,
  449. [in] REFIID riidResult,
  450. [out, iid_is(riidResult)] IUnknown **ppvResult);
  451. [local]
  452. HRESULT BindToStorage(
  453. [in, unique] IBindCtx *pbc,
  454. [in, unique] IMoniker *pmkToLeft,
  455. [in] REFIID riid,
  456. [out, iid_is(riid)] void **ppvObj);
  457. [call_as(BindToStorage)]
  458. HRESULT RemoteBindToStorage(
  459. [in, unique] IBindCtx *pbc,
  460. [in, unique] IMoniker *pmkToLeft,
  461. [in] REFIID riid,
  462. [out, iid_is(riid)] IUnknown **ppvObj);
  463. HRESULT Reduce(
  464. [in, unique] IBindCtx *pbc,
  465. [in] DWORD dwReduceHowFar,
  466. [in, out, unique] IMoniker **ppmkToLeft,
  467. [out] IMoniker **ppmkReduced);
  468. HRESULT ComposeWith(
  469. [in, unique] IMoniker *pmkRight,
  470. [in] BOOL fOnlyIfNotGeneric,
  471. [out] IMoniker **ppmkComposite);
  472. HRESULT Enum(
  473. [in] BOOL fForward,
  474. [out] IEnumMoniker **ppenumMoniker);
  475. HRESULT IsEqual(
  476. [in, unique] IMoniker *pmkOtherMoniker);
  477. HRESULT Hash(
  478. [out] DWORD *pdwHash);
  479. HRESULT IsRunning(
  480. [in, unique] IBindCtx *pbc,
  481. [in, unique] IMoniker *pmkToLeft,
  482. [in, unique] IMoniker *pmkNewlyRunning);
  483. HRESULT GetTimeOfLastChange(
  484. [in, unique] IBindCtx *pbc,
  485. [in, unique] IMoniker *pmkToLeft,
  486. [out] FILETIME *pFileTime);
  487. HRESULT Inverse(
  488. [out] IMoniker **ppmk);
  489. HRESULT CommonPrefixWith(
  490. [in, unique] IMoniker *pmkOther,
  491. [out] IMoniker **ppmkPrefix);
  492. HRESULT RelativePathTo(
  493. [in, unique] IMoniker *pmkOther,
  494. [out] IMoniker **ppmkRelPath);
  495. HRESULT GetDisplayName(
  496. [in, unique] IBindCtx *pbc,
  497. [in, unique] IMoniker *pmkToLeft,
  498. [out] LPOLESTR *ppszDisplayName);
  499. HRESULT ParseDisplayName(
  500. [in, unique] IBindCtx *pbc,
  501. [in, unique] IMoniker *pmkToLeft,
  502. [in] LPOLESTR pszDisplayName,
  503. [out] ULONG *pchEaten,
  504. [out] IMoniker **ppmkOut);
  505. HRESULT IsSystemMoniker(
  506. [out] DWORD *pdwMksys);
  507. }
  508. [
  509. object,
  510. uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  511. pointer_default(unique)
  512. ]
  513. interface IROTData : IUnknown
  514. {
  515. HRESULT GetComparisonData(
  516. [out, size_is(cbMax)] byte *pbData,
  517. [in] ULONG cbMax,
  518. [out] ULONG *pcbData);
  519. }
  520. [
  521. object,
  522. uuid(00000101-0000-0000-C000-000000000046),
  523. pointer_default(unique)
  524. ]
  525. interface IEnumString : IUnknown
  526. {
  527. typedef [unique] IEnumString *LPENUMSTRING;
  528. [local]
  529. HRESULT Next(
  530. [in] ULONG celt,
  531. [out, size_is(celt), length_is(*pceltFetched)]
  532. LPOLESTR *rgelt,
  533. [out] ULONG *pceltFetched);
  534. [call_as(Next)]
  535. HRESULT RemoteNext(
  536. [in] ULONG celt,
  537. [out, size_is(celt), length_is(*pceltFetched)]
  538. LPOLESTR *rgelt,
  539. [out] ULONG *pceltFetched);
  540. HRESULT Skip(
  541. [in] ULONG celt);
  542. HRESULT Reset();
  543. HRESULT Clone(
  544. [out] IEnumString **ppenum);
  545. }
  546. [
  547. object,
  548. uuid(00000140-0000-0000-C000-000000000046)
  549. ]
  550. interface IClassActivator : IUnknown
  551. {
  552. HRESULT GetClassObject(
  553. [in] REFCLSID rclsid,
  554. [in] DWORD dwClassContext,
  555. [in] LCID locale,
  556. [in] REFIID riid,
  557. [out, iid_is(riid)] void **ppv);
  558. }
  559. /******************** Storage ********************/
  560. [
  561. object,
  562. uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
  563. pointer_default(unique)
  564. ]
  565. interface ISequentialStream : IUnknown
  566. {
  567. [local]
  568. HRESULT Read(
  569. [out, size_is(cb), length_is(*pcbRead)]
  570. void *pv,
  571. [in] ULONG cb,
  572. [out] ULONG *pcbRead);
  573. [call_as(Read)]
  574. HRESULT RemoteRead(
  575. [out, size_is(cb), length_is(*pcbRead)]
  576. byte *pv,
  577. [in] ULONG cb,
  578. [out] ULONG *pcbRead);
  579. [local]
  580. HRESULT Write(
  581. [in, size_is(cb)] const void *pv,
  582. [in] ULONG cb,
  583. [out] ULONG *pcbWritten);
  584. [call_as(Write)]
  585. HRESULT RemoteWrite(
  586. [in, size_is(cb)] const byte *pv,
  587. [in] ULONG cb,
  588. [out] ULONG *pcbWritten);
  589. }
  590. [
  591. object,
  592. uuid(0000000c-0000-0000-C000-000000000046),
  593. pointer_default(unique)
  594. ]
  595. interface IStream : ISequentialStream
  596. {
  597. typedef [unique] IStream *LPSTREAM;
  598. typedef struct tagSTATSTG {
  599. LPOLESTR pwcsName;
  600. DWORD type;
  601. ULARGE_INTEGER cbSize;
  602. FILETIME mtime;
  603. FILETIME ctime;
  604. FILETIME atime;
  605. DWORD grfMode;
  606. DWORD grfLocksSupported;
  607. CLSID clsid;
  608. DWORD grfStateBits;
  609. DWORD reserved;
  610. } STATSTG;
  611. typedef enum tagSTGTY {
  612. STGTY_STORAGE = 1,
  613. STGTY_STREAM = 2,
  614. STGTY_LOCKBYTES = 3,
  615. STGTY_PROPERTY = 4
  616. } STGTY;
  617. typedef enum tagSTREAM_SEEK {
  618. STREAM_SEEK_SET = 0,
  619. STREAM_SEEK_CUR = 1,
  620. STREAM_SEEK_END = 2
  621. } STREAM_SEEK;
  622. /* these are defined in Linux's fcntl.h,
  623. * undefine them to avoid conflicts */
  624. cpp_quote("#undef LOCK_MAND")
  625. cpp_quote("#undef LOCK_READ")
  626. cpp_quote("#undef LOCK_WRITE")
  627. cpp_quote("#undef LOCK_RW")
  628. typedef enum tagLOCKTYPE {
  629. LOCK_WRITE = 1,
  630. LOCK_EXCLUSIVE = 2,
  631. LOCK_ONLYONCE = 4
  632. } LOCKTYPE;
  633. [local]
  634. HRESULT Seek(
  635. [in] LARGE_INTEGER dlibMove,
  636. [in] DWORD dwOrigin,
  637. [out] ULARGE_INTEGER *plibNewPosition);
  638. [call_as(Seek)]
  639. HRESULT RemoteSeek(
  640. [in] LARGE_INTEGER dlibMove,
  641. [in] DWORD dwOrigin,
  642. [out] ULARGE_INTEGER *plibNewPosition);
  643. HRESULT SetSize(
  644. [in] ULARGE_INTEGER libNewSize);
  645. [local]
  646. HRESULT CopyTo(
  647. [in, unique] IStream *pstm,
  648. [in] ULARGE_INTEGER cb,
  649. [out] ULARGE_INTEGER *pcbRead,
  650. [out] ULARGE_INTEGER *pcbWritten);
  651. [call_as(CopyTo)]
  652. HRESULT RemoteCopyTo(
  653. [in, unique] IStream *pstm,
  654. [in] ULARGE_INTEGER cb,
  655. [out] ULARGE_INTEGER *pcbRead,
  656. [out] ULARGE_INTEGER *pcbWritten);
  657. HRESULT Commit(
  658. [in] DWORD grfCommitFlags);
  659. HRESULT Revert();
  660. HRESULT LockRegion(
  661. [in] ULARGE_INTEGER libOffset,
  662. [in] ULARGE_INTEGER cb,
  663. [in] DWORD dwLockType);
  664. HRESULT UnlockRegion(
  665. [in] ULARGE_INTEGER libOffset,
  666. [in] ULARGE_INTEGER cb,
  667. [in] DWORD dwLockType);
  668. HRESULT Stat(
  669. [out] STATSTG *pstatstg,
  670. [in] DWORD grfStatFlag);
  671. HRESULT Clone(
  672. [out] IStream **ppstm);
  673. }
  674. [
  675. object,
  676. uuid(0000000d-0000-0000-C000-000000000046),
  677. pointer_default(unique)
  678. ]
  679. interface IEnumSTATSTG : IUnknown
  680. {
  681. typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  682. [local]
  683. HRESULT Next(
  684. [in] ULONG celt,
  685. [out, size_is(celt), length_is(*pceltFetched)]
  686. STATSTG *rgelt,
  687. [out] ULONG *pceltFetched);
  688. [call_as(Next)]
  689. HRESULT RemoteNext(
  690. [in] ULONG celt,
  691. [out, size_is(celt), length_is(*pceltFetched)]
  692. STATSTG *rgelt,
  693. [out] ULONG *pceltFetched);
  694. HRESULT Skip(
  695. [in] ULONG celt);
  696. HRESULT Reset();
  697. HRESULT Clone(
  698. [out] IEnumSTATSTG **ppenum);
  699. }
  700. [
  701. object,
  702. uuid(0000000b-0000-0000-C000-000000000046),
  703. pointer_default(unique)
  704. ]
  705. interface IStorage : IUnknown
  706. {
  707. typedef [unique] IStorage *LPSTORAGE;
  708. typedef struct tagRemSNB {
  709. unsigned long ulCntStr;
  710. unsigned long ulCntChar;
  711. [size_is(ulCntChar)] OLECHAR rgString[];
  712. } RemSNB;
  713. typedef [unique] RemSNB *wireSNB;
  714. typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
  715. HRESULT CreateStream(
  716. [in] LPCOLESTR pwcsName,
  717. [in] DWORD grfMode,
  718. [in] DWORD reserved1,
  719. [in] DWORD reserved2,
  720. [out] IStream **ppstm);
  721. [local]
  722. HRESULT OpenStream(
  723. [in] LPCOLESTR pwcsName,
  724. [in, unique] void *reserved1,
  725. [in] DWORD grfMode,
  726. [in] DWORD reserved2,
  727. [out] IStream **ppstm);
  728. [call_as(OpenStream)]
  729. HRESULT RemoteOpenStream(
  730. [in] LPCOLESTR pwcsName,
  731. [in] unsigned long cbReserved1,
  732. [in, unique, size_is(cbReserved1)] byte *reserved1,
  733. [in] DWORD grfMode,
  734. [in] DWORD reserved2,
  735. [out] IStream **ppstm);
  736. HRESULT CreateStorage(
  737. [in] LPCOLESTR pwcsName,
  738. [in] DWORD grfMode,
  739. [in] DWORD dwStgFmt,
  740. [in] DWORD reserved2,
  741. [out] IStorage **ppstg);
  742. HRESULT OpenStorage(
  743. [in, unique] LPCOLESTR pwcsName,
  744. [in, unique] IStorage *pstgPriority,
  745. [in] DWORD grfMode,
  746. [in, unique] SNB snbExclude,
  747. [in] DWORD reserved,
  748. [out] IStorage **ppstg);
  749. HRESULT CopyTo(
  750. [in] DWORD ciidExclude,
  751. [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,
  752. [in, unique] SNB snbExclude,
  753. [in, unique] IStorage *pstgDest);
  754. HRESULT MoveElementTo(
  755. [in] LPCOLESTR pwcsName,
  756. [in, unique] IStorage *pstgDest,
  757. [in] LPCOLESTR pwcsNewName,
  758. [in] DWORD grfFlags);
  759. HRESULT Commit(
  760. [in] DWORD grfCommitFlags);
  761. HRESULT Revert();
  762. [local]
  763. HRESULT EnumElements(
  764. [in] DWORD reserved1,
  765. [in, unique, size_is(1)] void *reserved2,
  766. [in] DWORD reserved3,
  767. [out] IEnumSTATSTG **ppenum);
  768. [call_as(EnumElements)]
  769. HRESULT RemoteEnumElements(
  770. [in] DWORD reserved1,
  771. [in] unsigned long cbReserved2,
  772. [in, unique, size_is(cbReserved2)] byte *reserved2,
  773. [in] DWORD reserved3,
  774. [out] IEnumSTATSTG **ppenum);
  775. HRESULT DestroyElement(
  776. [in] LPCOLESTR pwcsName);
  777. HRESULT RenameElement(
  778. [in] LPCOLESTR pwcsOldName,
  779. [in] LPCOLESTR pwcsNewName);
  780. HRESULT SetElementTimes(
  781. [in, unique] LPCOLESTR pwcsName,
  782. [in, unique] const FILETIME *pctime,
  783. [in, unique] const FILETIME *patime,
  784. [in, unique] const FILETIME *pmtime);
  785. HRESULT SetClass(
  786. [in] REFCLSID clsid);
  787. HRESULT SetStateBits(
  788. [in] DWORD grfStateBits,
  789. [in] DWORD grfMask);
  790. HRESULT Stat(
  791. [out] STATSTG *pstatstg,
  792. [in] DWORD grfStatFlag);
  793. }
  794. [
  795. object,
  796. uuid(0000010b-0000-0000-C000-000000000046),
  797. pointer_default(unique)
  798. ]
  799. interface IPersistFile : IPersist
  800. {
  801. typedef [unique] IPersistFile *LPPERSISTFILE;
  802. HRESULT IsDirty();
  803. HRESULT Load(
  804. [in] LPCOLESTR pszFileName,
  805. [in] DWORD dwMode);
  806. HRESULT Save(
  807. [in, unique] LPCOLESTR pszFileName,
  808. [in] BOOL fRemember);
  809. HRESULT SaveCompleted(
  810. [in, unique] LPCOLESTR pszFileName);
  811. HRESULT GetCurFile(
  812. [out] LPOLESTR *ppszFileName);
  813. }
  814. [
  815. object,
  816. uuid(0000010a-0000-0000-C000-000000000046),
  817. pointer_default(unique)
  818. ]
  819. interface IPersistStorage : IPersist
  820. {
  821. typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  822. HRESULT IsDirty();
  823. HRESULT InitNew(
  824. [in, unique] IStorage *pStg);
  825. HRESULT Load(
  826. [in, unique] IStorage *pStg);
  827. HRESULT Save(
  828. [in, unique] IStorage *pStgSave,
  829. [in] BOOL fSameAsLoad);
  830. HRESULT SaveCompleted(
  831. [in, unique] IStorage *pStgNew);
  832. HRESULT HandsOffStorage();
  833. }
  834. [
  835. object,
  836. uuid(00000012-0000-0000-C000-000000000046),
  837. pointer_default(unique)
  838. ]
  839. interface IRootStorage : IUnknown
  840. {
  841. typedef [unique] IRootStorage *LPROOTSTORAGE;
  842. HRESULT SwitchToFile(
  843. [in] LPOLESTR pszFile);
  844. }
  845. [
  846. object,
  847. uuid(0000000a-0000-0000-C000-000000000046),
  848. pointer_default(unique)
  849. ]
  850. interface ILockBytes : IUnknown
  851. {
  852. typedef [unique] ILockBytes *LPLOCKBYTES;
  853. [local]
  854. HRESULT ReadAt(
  855. [in] ULARGE_INTEGER ulOffset,
  856. [out, size_is(cb), length_is(*pcbRead)]
  857. void *pv,
  858. [in] ULONG cb,
  859. [out] ULONG *pcbRead);
  860. [call_as(ReadAt)]
  861. HRESULT RemoteReadAt(
  862. [in] ULARGE_INTEGER ulOffset,
  863. [out, size_is(cb), length_is(*pcbRead)]
  864. byte *pv,
  865. [in] ULONG cb,
  866. [out] ULONG *pcbRead);
  867. [local]
  868. HRESULT WriteAt(
  869. [in] ULARGE_INTEGER ulOffset,
  870. [in, size_is(cb)] const void *pv,
  871. [in] ULONG cb,
  872. [out] ULONG *pcbWritten);
  873. [call_as(WriteAt)]
  874. HRESULT RemoteWriteAt(
  875. [in] ULARGE_INTEGER ulOffset,
  876. [in, size_is(cb)] const byte *pv,
  877. [in] ULONG cb,
  878. [out] ULONG *pcbWritten);
  879. HRESULT Flush();
  880. HRESULT SetSize(
  881. [in] ULARGE_INTEGER cb);
  882. HRESULT LockRegion(
  883. [in] ULARGE_INTEGER libOffset,
  884. [in] ULARGE_INTEGER cb,
  885. [in] DWORD dwLockType);
  886. HRESULT UnlockRegion(
  887. [in] ULARGE_INTEGER libOffset,
  888. [in] ULARGE_INTEGER cb,
  889. [in] DWORD dwLockType);
  890. HRESULT Stat(
  891. [out] STATSTG *pstatstg,
  892. [in] DWORD grfStatFlag);
  893. }
  894. [
  895. object,
  896. uuid(99caf010-415e-11cf-8814-00aa00b569f5),
  897. pointer_default(unique)
  898. ]
  899. interface IFillLockBytes : IUnknown
  900. {
  901. [local]
  902. HRESULT FillAppend(
  903. [in, size_is(cb)] const void *pv,
  904. [in] ULONG cb,
  905. [out] ULONG *pcbWritten);
  906. [call_as(FillAppend)]
  907. HRESULT RemoteFillAppend(
  908. [in, size_is(cb)] const byte *pv,
  909. [in] ULONG cb,
  910. [out] ULONG *pcbWritten);
  911. [local]
  912. HRESULT FillAt(
  913. [in] ULARGE_INTEGER ulOffset,
  914. [in, size_is(cb)] const void *pv,
  915. [in] ULONG cb,
  916. [out] ULONG *pcbWritten);
  917. [call_as(FillAt)]
  918. HRESULT RemoteFillAt(
  919. [in] ULARGE_INTEGER ulOffset,
  920. [in, size_is(cb)] const byte *pv,
  921. [in] ULONG cb,
  922. [out] ULONG *pcbWritten);
  923. HRESULT SetFillSize(
  924. [in] ULARGE_INTEGER ulSize);
  925. HRESULT Terminate(
  926. [in] BOOL bCanceled);
  927. }
  928. [
  929. object,
  930. uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
  931. pointer_default(unique)
  932. ]
  933. interface IProgressNotify : IUnknown
  934. {
  935. HRESULT OnProgress(
  936. [in] DWORD dwProgressCurrent,
  937. [in] DWORD dwProgressMaximum,
  938. [in] BOOL fAccurate,
  939. [in] BOOL fOwner);
  940. }
  941. [
  942. local,
  943. object,
  944. uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
  945. pointer_default(unique)
  946. ]
  947. interface ILayoutStorage : IUnknown
  948. {
  949. typedef struct tagStorageLayout {
  950. DWORD LayoutType;
  951. OLECHAR *pwcsElementName;
  952. LARGE_INTEGER cOffset;
  953. LARGE_INTEGER cBytes;
  954. } StorageLayout;
  955. HRESULT LayoutScript(
  956. [in] StorageLayout *pStorageLayout,
  957. [in] DWORD nEntries,
  958. [in] DWORD glfInterleavedFlag);
  959. HRESULT BeginMonitor();
  960. HRESULT EndMonitor();
  961. HRESULT ReLayoutDocfile(
  962. [in] OLECHAR *pwcsNewDfName);
  963. HRESULT ReLayoutDocfileOnILockBytes(
  964. [in] ILockBytes *pILockBytes);
  965. }
  966. /******************** Data Object ********************/
  967. [
  968. object,
  969. uuid(00000103-0000-0000-C000-000000000046),
  970. pointer_default(unique)
  971. ]
  972. interface IEnumFORMATETC : IUnknown
  973. {
  974. typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  975. typedef struct tagDVTARGETDEVICE {
  976. DWORD tdSize;
  977. WORD tdDriverNameOffset;
  978. WORD tdDeviceNameOffset;
  979. WORD tdPortNameOffset;
  980. WORD tdExtDevmodeOffset;
  981. [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  982. BYTE tdData[];
  983. } DVTARGETDEVICE;
  984. typedef CLIPFORMAT *LPCLIPFORMAT;
  985. typedef struct tagFORMATETC {
  986. CLIPFORMAT cfFormat;
  987. [unique] DVTARGETDEVICE *ptd;
  988. DWORD dwAspect;
  989. LONG lindex;
  990. DWORD tymed;
  991. } FORMATETC, *LPFORMATETC;
  992. [local]
  993. HRESULT Next(
  994. [in] ULONG celt,
  995. [out, size_is(celt), length_is(*pceltFetched)]
  996. FORMATETC *rgelt,
  997. [out] ULONG *pceltFetched);
  998. [call_as(Next)]
  999. HRESULT RemoteNext(
  1000. [in] ULONG celt,
  1001. [out, size_is(celt), length_is(*pceltFetched)]
  1002. FORMATETC *rgelt,
  1003. [out] ULONG *pceltFetched);
  1004. HRESULT Skip(
  1005. [in] ULONG celt);
  1006. HRESULT Reset();
  1007. HRESULT Clone(
  1008. [out] IEnumFORMATETC **ppenum);
  1009. }
  1010. [
  1011. object,
  1012. uuid(00000105-0000-0000-C000-000000000046),
  1013. pointer_default(unique)
  1014. ]
  1015. interface IEnumSTATDATA : IUnknown
  1016. {
  1017. typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1018. typedef enum tagADVF {
  1019. ADVF_NODATA = 1,
  1020. ADVF_PRIMEFIRST = 2,
  1021. ADVF_ONLYONCE = 4,
  1022. ADVF_DATAONSTOP = 64,
  1023. ADVFCACHE_NOHANDLER = 8,
  1024. ADVFCACHE_FORCEBUILTIN = 16,
  1025. ADVFCACHE_ONSAVE = 32
  1026. } ADVF;
  1027. typedef struct tagSTATDATA
  1028. {
  1029. FORMATETC formatetc;
  1030. DWORD advf;
  1031. [unique] IAdviseSink *pAdvSink;
  1032. DWORD dwConnection;
  1033. } STATDATA, *LPSTATDATA;
  1034. [local]
  1035. HRESULT Next(
  1036. [in] ULONG celt,
  1037. [out, size_is(celt), length_is(*pceltFetched)]
  1038. STATDATA *rgelt,
  1039. [out] ULONG *pceltFetched);
  1040. [call_as(Next)]
  1041. HRESULT RemoteNext(
  1042. [in] ULONG celt,
  1043. [out, size_is(celt), length_is(*pceltFetched)]
  1044. STATDATA *rgelt,
  1045. [out] ULONG *pceltFetched);
  1046. HRESULT Skip(
  1047. [in] ULONG celt);
  1048. HRESULT Reset();
  1049. HRESULT Clone(
  1050. [out] IEnumSTATDATA **ppenum);
  1051. }
  1052. [
  1053. object,
  1054. uuid(0000010f-0000-0000-C000-000000000046),
  1055. pointer_default(unique)
  1056. ]
  1057. interface IAdviseSink : IUnknown
  1058. {
  1059. typedef IAdviseSink *LPADVISESINK;
  1060. typedef [v1_enum] enum tagTYMED {
  1061. TYMED_HGLOBAL = 1,
  1062. TYMED_FILE = 2,
  1063. TYMED_ISTREAM = 4,
  1064. TYMED_ISTORAGE = 8,
  1065. TYMED_GDI = 16,
  1066. TYMED_MFPICT = 32,
  1067. TYMED_ENHMF = 64,
  1068. TYMED_NULL = 0
  1069. } TYMED;
  1070. typedef struct tagRemSTGMEDIUM {
  1071. DWORD tymed;
  1072. DWORD dwHandleType;
  1073. unsigned long pData;
  1074. unsigned long pUnkForRelease;
  1075. unsigned long cbData;
  1076. [size_is(cbData)] byte data[];
  1077. } RemSTGMEDIUM;
  1078. /* FIXME: C/C++ nameless union version */
  1079. typedef struct tagSTGMEDIUM {
  1080. DWORD tymed;
  1081. [switch_is(tymed)] union {
  1082. [case(TYMED_GDI)] HBITMAP hBitmap;
  1083. [case(TYMED_MFPICT)] HMETAFILEPICT hMetaFilePict;
  1084. [case(TYMED_ENHMF)] HENHMETAFILE hEnhMetaFile;
  1085. [case(TYMED_HGLOBAL)] HGLOBAL hGlobal;
  1086. [case(TYMED_FILE)] LPOLESTR lpszFileName;
  1087. [case(TYMED_ISTREAM)] IStream *pstm;
  1088. [case(TYMED_ISTORAGE)] IStorage *pstg;
  1089. [default] ;
  1090. };
  1091. [unique] IUnknown *pUnkForRelease;
  1092. } uSTGMEDIUM;
  1093. /* copied from wingdi.h */
  1094. #define OBJ_PEN 1
  1095. #define OBJ_BRUSH 2
  1096. #define OBJ_DC 3
  1097. #define OBJ_METADC 4
  1098. #define OBJ_PAL 5
  1099. #define OBJ_FONT 6
  1100. #define OBJ_BITMAP 7
  1101. #define OBJ_REGION 8
  1102. #define OBJ_METAFILE 9
  1103. #define OBJ_MEMDC 10
  1104. #define OBJ_EXTPEN 11
  1105. #define OBJ_ENHMETADC 12
  1106. #define OBJ_ENHMETAFILE 13
  1107. typedef union _GDI_OBJECT switch(DWORD ObjectType) u {
  1108. case OBJ_BITMAP: wireHBITMAP hBitmap;
  1109. case OBJ_PAL: wireHPALETTE hPalette;
  1110. default: wireHGLOBAL hGeneric;
  1111. } GDI_OBJECT;
  1112. typedef struct _userSTGMEDIUM {
  1113. union switch(DWORD tymed) u {
  1114. case TYMED_NULL: ;
  1115. case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
  1116. case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
  1117. case TYMED_GDI: GDI_OBJECT *hGdiHandle;
  1118. case TYMED_HGLOBAL: wireHGLOBAL hGlobal;
  1119. case TYMED_FILE: LPOLESTR lpszFileName;
  1120. case TYMED_ISTREAM: BYTE_BLOB *pstm;
  1121. case TYMED_ISTORAGE: BYTE_BLOB *pstg;
  1122. };
  1123. IUnknown *pUnkForRelease;
  1124. } userSTGMEDIUM;
  1125. typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;
  1126. typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;
  1127. typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;
  1128. typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;
  1129. typedef STGMEDIUM *LPSTGMEDIUM;
  1130. typedef struct _userFLAG_STGMEDIUM {
  1131. long ContextFlags;
  1132. long fPassOwnership;
  1133. userSTGMEDIUM Stgmed;
  1134. } userFLAG_STGMEDIUM;
  1135. typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
  1136. typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {
  1137. long ContextFlags;
  1138. long fPassOwnership;
  1139. STGMEDIUM Stgmed;
  1140. } FLAG_STGMEDIUM;
  1141. [local]
  1142. void OnDataChange(
  1143. [in, unique] FORMATETC *pFormatetc,
  1144. [in, unique] STGMEDIUM *pStgmed);
  1145. [call_as(OnDataChange), async]
  1146. HRESULT RemoteOnDataChange(
  1147. [in] IAsyncManager **ppIAM,
  1148. [in, unique] FORMATETC *pFormatetc,
  1149. [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1150. [local]
  1151. void OnViewChange(
  1152. [in] DWORD dwAspect,
  1153. [in] LONG lindex);
  1154. [call_as(OnViewChange), async]
  1155. HRESULT RemoteOnViewChange(
  1156. [in] IAsyncManager **ppIAM,
  1157. [in] DWORD dwAspect,
  1158. [in] LONG lindex);
  1159. [local]
  1160. void OnRename(
  1161. [in] IMoniker *pmk);
  1162. [call_as(OnRename), async]
  1163. HRESULT RemoteOnRename(
  1164. [in] IAsyncManager **ppIAM,
  1165. [in] IMoniker *pmk);
  1166. [local]
  1167. void OnSave();
  1168. [call_as(OnSave), async]
  1169. HRESULT RemoteOnSave(
  1170. [in] IAsyncManager **ppIAM);
  1171. [local]
  1172. void OnClose();
  1173. [call_as(OnClose)]
  1174. HRESULT RemoteOnClose();
  1175. }
  1176. [
  1177. object,
  1178. uuid(00000125-0000-0000-C000-000000000046),
  1179. pointer_default(unique)
  1180. ]
  1181. interface IAdviseSink2 : IAdviseSink
  1182. {
  1183. typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1184. [local]
  1185. void OnLinkSrcChange(
  1186. [in, unique] IMoniker *pmk);
  1187. [call_as(OnLinkSrcChange), async]
  1188. HRESULT RemoteOnLinkSrcChange(
  1189. [in] IAsyncManager **ppIAM,
  1190. [in, unique] IMoniker *pmk);
  1191. }
  1192. [
  1193. object,
  1194. uuid(0000010e-0000-0000-C000-000000000046),
  1195. pointer_default(unique)
  1196. ]
  1197. interface IDataObject : IUnknown
  1198. {
  1199. typedef [unique] IDataObject *LPDATAOBJECT;
  1200. typedef enum tagDATADIR {
  1201. DATADIR_GET = 1,
  1202. DATADIR_SET = 2
  1203. } DATADIR;
  1204. [local]
  1205. HRESULT GetData(
  1206. [in, unique] FORMATETC *pformatetcIn,
  1207. [out] STGMEDIUM *pmedium);
  1208. [call_as(GetData)]
  1209. HRESULT RemoteGetData(
  1210. [in, unique] FORMATETC *pformatetcIn,
  1211. [out] STGMEDIUM *pRemoteMedium);
  1212. [local]
  1213. HRESULT GetDataHere(
  1214. [in, unique] FORMATETC *pformatetc,
  1215. [in, out] STGMEDIUM *pmedium);
  1216. [call_as(GetDataHere)]
  1217. HRESULT RemoteGetDataHere(
  1218. [in, unique] FORMATETC *pformatetc,
  1219. [in, out] STGMEDIUM *pRemoteMedium);
  1220. HRESULT QueryGetData(
  1221. [in, unique] FORMATETC *pformatetc);
  1222. HRESULT GetCanonicalFormatEtc(
  1223. [in, unique] FORMATETC *pformatectIn,
  1224. [out] FORMATETC *pformatetcOut);
  1225. [local]
  1226. HRESULT SetData(
  1227. [in, unique] FORMATETC *pformatetc,
  1228. [in, unique] STGMEDIUM *pmedium,
  1229. [in] BOOL fRelease);
  1230. [call_as(SetData)]
  1231. HRESULT RemoteSetData(
  1232. [in, unique] FORMATETC *pformatetc,
  1233. [in, unique] FLAG_STGMEDIUM *pmedium,
  1234. [in] BOOL fRelease);
  1235. HRESULT EnumFormatEtc(
  1236. [in] DWORD dwDirection,
  1237. [out] IEnumFORMATETC **ppenumFormatEtc);
  1238. HRESULT DAdvise(
  1239. [in] FORMATETC *pformatetc,
  1240. [in] DWORD advf,
  1241. [in, unique] IAdviseSink *pAdvSink,
  1242. [out] DWORD *pdwConnection);
  1243. HRESULT DUnadvise(
  1244. [in] DWORD dwConnection);
  1245. HRESULT EnumDAdvise(
  1246. [out] IEnumSTATDATA **ppenumAdvise);
  1247. }
  1248. [
  1249. local,
  1250. object,
  1251. uuid(00000110-0000-0000-C000-000000000046)
  1252. ]
  1253. interface IDataAdviseHolder : IUnknown
  1254. {
  1255. typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1256. HRESULT Advise(
  1257. [in, unique] IDataObject *pDataObject,
  1258. [in, unique] FORMATETC *pFetc,
  1259. [in] DWORD advf,
  1260. [in, unique] IAdviseSink *pAdvise,
  1261. [out] DWORD *pdwConnection);
  1262. HRESULT Unadvise(
  1263. [in] DWORD dwConnection);
  1264. HRESULT EnumAdvise(
  1265. [out] IEnumSTATDATA **ppenumAdvise);
  1266. HRESULT SendOnDataChange(
  1267. [in, unique] IDataObject *pDataObject,
  1268. [in] DWORD dwReserved,
  1269. [in] DWORD advf);
  1270. }
  1271. /******************** Remoting ********************/
  1272. [
  1273. local,
  1274. object,
  1275. uuid(00000016-0000-0000-C000-000000000046)
  1276. ]
  1277. interface IMessageFilter : IUnknown
  1278. {
  1279. typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1280. typedef enum tagCALLTYPE {
  1281. CALLTYPE_TOPLEVEL = 1,
  1282. CALLTYPE_NESTED = 2,
  1283. CALLTYPE_ASYNC = 3,
  1284. CALLTYPE_TOPLEVEL_CALLPENDING = 4,
  1285. CALLTYPE_ASYNC_CALLPENDING = 5
  1286. } CALLTYPE;
  1287. typedef enum tagSERVERCALL {
  1288. SERVERCALL_ISHANDLED = 0,
  1289. SERVERCALL_REJECTED = 1,
  1290. SERVERCALL_RETRYLATER = 2
  1291. } SERVERCALL;
  1292. typedef enum tagPENDINGTYPE {
  1293. PENDINGTYPE_TOPLEVEL = 1,
  1294. PENDINGTYPE_NESTED = 2
  1295. } PENDINGTYPE;
  1296. typedef enum tagPENDINGMSG {
  1297. PENDINGMSG_CANCELCALL = 0,
  1298. PENDINGMSG_WAITNOPROCESS = 1,
  1299. PENDINGMSG_WAITDEFPROCESS = 2
  1300. } PENDINGMSG;
  1301. typedef struct tagINTERFACEINFO {
  1302. IUnknown *pUnk;
  1303. IID iid;
  1304. WORD wMethod;
  1305. } INTERFACEINFO, *LPINTERFACEINFO;
  1306. DWORD HandleInComingCall(
  1307. [in] DWORD dwCallType,
  1308. [in] HTASK htaskCaller,
  1309. [in] DWORD dwTickCount,
  1310. [in] LPINTERFACEINFO lpInterfaceInfo);
  1311. DWORD RetryRejectedCall(
  1312. [in] HTASK htaskCallee,
  1313. [in] DWORD dwTickCount,
  1314. [in] DWORD dwRejectType);
  1315. DWORD MessagePending(
  1316. [in] HTASK htaskCallee,
  1317. [in] DWORD dwTickCount,
  1318. [in] DWORD dwPendingType);
  1319. }
  1320. [
  1321. local,
  1322. object,
  1323. uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1324. ]
  1325. interface IRpcChannelBuffer : IUnknown
  1326. {
  1327. typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER;
  1328. typedef unsigned long RPCOLEDATAREP;
  1329. typedef struct tagRPCOLEMESSAGE {
  1330. void *reserved1;
  1331. RPCOLEDATAREP dataRepresentation;
  1332. void *Buffer;
  1333. ULONG cbBuffer;
  1334. ULONG iMethod;
  1335. void *reserved2[5];
  1336. ULONG rpcFlags;
  1337. } RPCOLEMESSAGE;
  1338. typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1339. HRESULT GetBuffer(
  1340. [in] RPCOLEMESSAGE *pMessage,
  1341. [in] REFIID riid);
  1342. HRESULT SendReceive(
  1343. [in,out] RPCOLEMESSAGE *pMessage,
  1344. [out] ULONG *pStatus);
  1345. HRESULT FreeBuffer(
  1346. [in] RPCOLEMESSAGE *pMessage);
  1347. HRESULT GetDestCtx(
  1348. [out] DWORD *pdwDestContext,
  1349. [out] void **ppvDestContext);
  1350. HRESULT IsConnected();
  1351. }
  1352. [
  1353. local,
  1354. object,
  1355. uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)
  1356. ]
  1357. interface IRpcChannelBuffer2 : IRpcChannelBuffer
  1358. {
  1359. typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
  1360. HRESULT GetProtocolVersion(
  1361. [in,out] DWORD *pdwVersion);
  1362. }
  1363. [
  1364. local,
  1365. object,
  1366. uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)
  1367. ]
  1368. interface IRpcChannelBuffer3 : IRpcChannelBuffer2
  1369. {
  1370. typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
  1371. HRESULT Send(
  1372. [in,out] RPCOLEMESSAGE *pMsg,
  1373. [out] ULONG *pulStatus);
  1374. HRESULT Receive(
  1375. [in,out] RPCOLEMESSAGE *pMsg,
  1376. [in] ULONG ulSize,
  1377. [out] ULONG *pulStatus);
  1378. HRESULT Cancel(
  1379. [in] RPCOLEMESSAGE *pMsg);
  1380. HRESULT GetCallContext(
  1381. [in] RPCOLEMESSAGE *pMsg,
  1382. [in] REFIID riid,
  1383. [out] void **pInterface);
  1384. HRESULT GetDestCtxEx(
  1385. [in] RPCOLEMESSAGE *pMsg,
  1386. [out] DWORD *pdwDestContext,
  1387. [out] void **ppvDestContext);
  1388. HRESULT GetState(
  1389. [in] RPCOLEMESSAGE *pMsg,
  1390. [out] DWORD *pState);
  1391. HRESULT RegisterAsync(
  1392. [in] RPCOLEMESSAGE *pMsg,
  1393. [in] IAsyncManager *pAsyncMgr);
  1394. }
  1395. [
  1396. local,
  1397. object,
  1398. uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1399. ]
  1400. interface IRpcProxyBuffer : IUnknown
  1401. {
  1402. typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER;
  1403. HRESULT Connect(
  1404. [in, unique] IRpcChannelBuffer *pRpcChannelBuffer);
  1405. void Disconnect();
  1406. }
  1407. [
  1408. local,
  1409. object,
  1410. uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1411. ]
  1412. interface IRpcStubBuffer : IUnknown
  1413. {
  1414. typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER;
  1415. HRESULT Connect(
  1416. [in] IUnknown *pUnkServer);
  1417. void Disconnect();
  1418. HRESULT Invoke(
  1419. [in] RPCOLEMESSAGE *_prpcmsg,
  1420. [in] IRpcChannelBuffer *_pRpcChannelBuffer);
  1421. IRpcStubBuffer *IsIIDSupported(
  1422. [in] REFIID riid);
  1423. ULONG CountRefs();
  1424. HRESULT DebugServerQueryInterface(
  1425. void **ppv);
  1426. void DebugServerRelease(
  1427. void *pv);
  1428. }
  1429. [
  1430. local,
  1431. object,
  1432. uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  1433. ]
  1434. interface IPSFactoryBuffer : IUnknown
  1435. {
  1436. typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER;
  1437. HRESULT CreateProxy(
  1438. [in] IUnknown *pUnkOuter,
  1439. [in] REFIID riid,
  1440. [out] IRpcProxyBuffer **ppProxy,
  1441. [out] void **ppv);
  1442. HRESULT CreateStub(
  1443. [in] REFIID riid,
  1444. [in, unique] IUnknown *pUnkServer,
  1445. [out] IRpcStubBuffer **ppStub);
  1446. }
  1447. [
  1448. local,
  1449. object,
  1450. uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
  1451. ]
  1452. interface IChannelHook : IUnknown
  1453. {
  1454. typedef [unique] IChannelHook *LPCHANNELHOOK;
  1455. typedef struct SChannelHookCallInfo {
  1456. IID iid;
  1457. DWORD cbSize;
  1458. GUID uCausality;
  1459. DWORD dwServerPid;
  1460. DWORD iMethod;
  1461. void *pObject;
  1462. } SChannelHookCallInfo;
  1463. void ClientGetSize(
  1464. [in] REFGUID uExtent,
  1465. [in] REFIID riid,
  1466. [out] ULONG *pDataSize);
  1467. void ClientFillBuffer(
  1468. [in] REFGUID uExtent,
  1469. [in] REFIID riid,
  1470. [in, out] ULONG *pDataSize,
  1471. [in] void *pDataBuffer);
  1472. void ClientNotify(
  1473. [in] REFGUID uExtent,
  1474. [in] REFIID riid,
  1475. [in] ULONG cbDataSize,
  1476. [in] void *pDataBuffer,
  1477. [in] DWORD lDataRep,
  1478. [in] HRESULT hrFault);
  1479. void ServerNotify(
  1480. [in] REFGUID uExtent,
  1481. [in] REFIID riid,
  1482. [in] ULONG cbDataSize,
  1483. [in] void *pDataBuffer,
  1484. [in] DWORD lDataRep);
  1485. void ServerGetSize(
  1486. [in] REFGUID uExtent,
  1487. [in] REFIID riid,
  1488. [in] HRESULT hrFault,
  1489. [out] ULONG *pDataSize);
  1490. void ServerFillBuffer(
  1491. [in] REFGUID uExtent,
  1492. [in] REFIID riid,
  1493. [in, out] ULONG *pDataSize,
  1494. [in] void *pDataBuffer,
  1495. [in] HRESULT hrFault );
  1496. }
  1497. extern const FMTID FMTID_SummaryInformation;
  1498. extern const FMTID FMTID_DocSummaryInformation;
  1499. extern const FMTID FMTID_UserDefinedProperties;
  1500. /******************** Connection Points ********************/
  1501. /* FIXME */
  1502. /******************** DCOM ********************/
  1503. [
  1504. local,
  1505. object,
  1506. uuid(0000013D-0000-0000-C000-000000000046)
  1507. ]
  1508. interface IClientSecurity : IUnknown
  1509. {
  1510. typedef struct tagSOLE_AUTHENTICATION_SERVICE {
  1511. DWORD dwAuthnSvc;
  1512. DWORD dwAuthzSvc;
  1513. OLECHAR *pPrincipalName;
  1514. HRESULT hr;
  1515. } SOLE_AUTHENTICATION_SERVICE;
  1516. typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
  1517. typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
  1518. EOAC_NONE = 0x0,
  1519. EOAC_MUTUAL_AUTH = 0x1,
  1520. EOAC_CLOAKING = 0x10,
  1521. EOAC_SECURE_REFS = 0x2,
  1522. EOAC_ACCESS_CONTROL = 0x4,
  1523. EOAC_APPID = 0x8
  1524. } EOLE_AUTHENTICATION_CAPABILITIES;
  1525. HRESULT QueryBlanket(
  1526. [in] IUnknown *pProxy,
  1527. [out] DWORD *pAuthnSvc,
  1528. [out] DWORD *pAuthzSvc,
  1529. [out] OLECHAR **pServerPrincName,
  1530. [out] DWORD *pAuthnLevel,
  1531. [out] DWORD *pImpLevel,
  1532. [out] void **pAuthInfo,
  1533. [out] DWORD *pCapabilites);
  1534. HRESULT SetBlanket(
  1535. [in] IUnknown *pProxy,
  1536. [in] DWORD AuthnSvc,
  1537. [in] DWORD AuthzSvc,
  1538. [in] OLECHAR *pServerPrincName,
  1539. [in] DWORD AuthnLevel,
  1540. [in] DWORD ImpLevel,
  1541. [in] void *pAuthInfo,
  1542. [in] DWORD Capabilities);
  1543. HRESULT CopyProxy(
  1544. [in] IUnknown *pProxy,
  1545. [out] IUnknown **ppCopy);
  1546. }
  1547. [
  1548. local,
  1549. object,
  1550. uuid(0000013E-0000-0000-C000-000000000046)
  1551. ]
  1552. interface IServerSecurity : IUnknown
  1553. {
  1554. HRESULT QueryBlanket(
  1555. [out] DWORD *pAuthnSvc,
  1556. [out] DWORD *pAuthzSvc,
  1557. [out] OLECHAR **pServerPrincName,
  1558. [out] DWORD *pAuthnLevel,
  1559. [out] DWORD *pImpLevel,
  1560. [out] void **pPrivs,
  1561. [out] DWORD *pCapabilities);
  1562. HRESULT ImpersonateClient();
  1563. HRESULT RevertToSelf();
  1564. BOOL IsImpersonating();
  1565. }
  1566. [
  1567. local,
  1568. object,
  1569. uuid(00000024-0000-0000-C000-000000000046)
  1570. ]
  1571. interface IAsyncSetup : IUnknown
  1572. {
  1573. HRESULT GetAsyncManager(
  1574. [in] REFIID riid,
  1575. [in] IUnknown *pOuter,
  1576. [in] DWORD dwFlags,
  1577. [out] IUnknown **ppInner,
  1578. [out] IAsyncManager **ppAsyncMgr);
  1579. }
  1580. [
  1581. local,
  1582. object,
  1583. uuid(0000002A-0000-0000-C000-000000000046)
  1584. ]
  1585. interface IAsyncManager : IUnknown
  1586. {
  1587. typedef enum tagDCOM_CALL_STATE {
  1588. DCOM_NONE = 0,
  1589. DCOM_CALL_COMPLETE = 1,
  1590. DCOM_CALL_CANCELED = 2
  1591. } DCOM_CALL_STATE;
  1592. HRESULT CompleteCall(
  1593. [in] HRESULT Result);
  1594. HRESULT GetCallContext(
  1595. [in] REFIID riid,
  1596. [out] void **pInterface);
  1597. HRESULT GetState(
  1598. [out] ULONG *pulStateFlags);
  1599. }