xref: /reactos/sdk/include/psdk/objidl.idl (revision c2c66aff)
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#ifndef DO_NO_IMPORTS
20import "unknwn.idl";
21#endif
22
23interface IStream;
24interface IEnumString;
25interface IRunningObjectTable;
26interface IMoniker;
27interface IAdviseSink;
28interface IAsyncManager;
29interface ISynchronize;
30
31typedef struct _COSERVERINFO {
32  DWORD dwReserved1;
33  LPWSTR pwszName;
34  COAUTHINFO *pAuthInfo;
35  DWORD dwReserved2;
36} COSERVERINFO;
37
38/******************** Fundamentals ********************/
39
40[
41  local,
42  object,
43  uuid(00000003-0000-0000-C000-000000000046)
44]
45interface IMarshal : IUnknown
46{
47  typedef [unique] IMarshal *LPMARSHAL;
48
49  HRESULT GetUnmarshalClass(
50    [in] REFIID riid,
51    [in, unique] void *pv,
52    [in] DWORD dwDestContext,
53    [in, unique] void *pvDestContext,
54    [in] DWORD mshlflags,
55    [out] CLSID *pCid);
56
57  HRESULT GetMarshalSizeMax(
58    [in] REFIID riid,
59    [in, unique] void *pv,
60    [in] DWORD dwDestContext,
61    [in, unique] void *pvDestContext,
62    [in] DWORD mshlflags,
63    [out] DWORD *pSize);
64
65  HRESULT MarshalInterface(
66    [in, unique] IStream *pStm,
67    [in] REFIID riid,
68    [in, unique] void *pv,
69    [in] DWORD dwDestContext,
70    [in, unique] void *pvDestContext,
71    [in] DWORD mshlflags);
72
73  HRESULT UnmarshalInterface(
74    [in, unique] IStream *pStm,
75    [in] REFIID riid,
76    [out] void **ppv);
77
78  HRESULT ReleaseMarshalData(
79    [in, unique] IStream *pStm);
80
81  HRESULT DisconnectObject(
82    [in] DWORD dwReserved);
83}
84
85[
86    local,
87    object,
88    uuid(000001cf-0000-0000-C000-000000000046)
89]
90interface IMarshal2 : IMarshal
91{
92    typedef [unique] IMarshal2 *LPMARSHAL2;
93}
94
95[
96  local,
97  object,
98  uuid(00000018-0000-0000-C000-000000000046)
99]
100interface IStdMarshalInfo : IUnknown
101{
102  typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;
103
104  HRESULT GetClassForHandler(
105    [in] DWORD dwDestContext,
106    [in, unique] void *pvDestContext,
107    [out] CLSID *pClsid);
108}
109
110[
111  local,
112  object,
113  uuid(00000019-0000-0000-C000-000000000046)
114]
115interface IExternalConnection : IUnknown
116{
117  typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;
118
119  typedef enum tagEXTCONN {
120    EXTCONN_STRONG   = 0x0001,
121    EXTCONN_WEAK     = 0x0002,
122    EXTCONN_CALLABLE = 0x0004
123  } EXTCONN;
124
125  DWORD AddConnection(
126    [in] DWORD extconn,
127    [in] DWORD reserved);
128
129  DWORD ReleaseConnection(
130    [in] DWORD extconn,
131    [in] DWORD reserved,
132    [in] BOOL fLastReleaseCloses);
133}
134
135[
136  local,
137  object,
138  uuid(00000020-0000-0000-C000-000000000046)
139]
140interface IMultiQI : IUnknown
141{
142  typedef [unique] IMultiQI *LPMULTIQI;
143
144  typedef struct tagMULTI_QI {
145    const IID *pIID;
146    IUnknown *pItf;
147    HRESULT hr;
148  } MULTI_QI;
149
150  HRESULT QueryMultipleInterfaces(
151    [in] ULONG cMQIs,
152    [in, out] MULTI_QI *pMQIs);
153}
154
155[
156  local,
157  object,
158  uuid(00000002-0000-0000-C000-000000000046)
159]
160interface IMalloc : IUnknown
161{
162  typedef [unique] IMalloc *LPMALLOC;
163
164  LPVOID Alloc(
165    [in] SIZE_T cb);
166
167  LPVOID Realloc(
168    [in] LPVOID pv,
169    [in] SIZE_T cb);
170
171  void Free(
172    [in] LPVOID pv);
173
174  SIZE_T GetSize(
175    [in] LPVOID pv);
176
177  int DidAlloc(LPVOID pv);
178
179  void HeapMinimize();
180}
181
182[
183  local,
184  object,
185  uuid(0000001d-0000-0000-C000-000000000046)
186]
187interface IMallocSpy : IUnknown
188{
189  typedef [unique] IMallocSpy *LPMALLOCSPY;
190
191  SIZE_T PreAlloc(
192    [in] SIZE_T cbRequest);
193
194  LPVOID PostAlloc(
195    [in] LPVOID pActual);
196
197  LPVOID PreFree(
198    [in] LPVOID pRequest,
199    [in] BOOL fSpyed);
200
201  void PostFree(
202    [in] BOOL fSpyed);
203
204  SIZE_T PreRealloc(
205    [in] LPVOID pRequest,
206    [in] SIZE_T cbRequest,
207    [out] LPVOID *ppNewRequest,
208    [in] BOOL fSpyed);
209
210  LPVOID PostRealloc(
211    [in] LPVOID pActual,
212    [in] BOOL fSpyed);
213
214  LPVOID PreGetSize(
215    [in] LPVOID pRequest,
216    [in] BOOL fSpyed);
217
218  SIZE_T PostGetSize(
219    [in] SIZE_T cbActual,
220    [in] BOOL fSpyed);
221
222  LPVOID PreDidAlloc(
223    [in] LPVOID pRequest,
224    [in] BOOL fSpyed);
225
226  int PostDidAlloc(
227    [in] LPVOID pRequest,
228    [in] BOOL fSpyed,
229    [in] int fActual);
230
231  void PreHeapMinimize();
232
233  void PostHeapMinimize();
234}
235
236[
237  local,
238  object,
239  uuid(00000021-0000-0000-C000-000000000046)
240]
241interface IInternalUnknown : IUnknown
242{
243  HRESULT QueryInternalInterface(
244    [in] REFIID riid,
245    [out] void **ppv);
246}
247
248[
249  object,
250  uuid(00000100-0000-0000-C000-000000000046),
251  pointer_default(unique)
252]
253interface IEnumUnknown : IUnknown
254{
255  typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
256
257  [local]
258  HRESULT Next(
259    [in] ULONG celt,
260    [out] IUnknown **rgelt,
261    [out] ULONG *pceltFetched);
262
263  [call_as(Next)]
264  HRESULT RemoteNext(
265    [in] ULONG celt,
266    [out, size_is(celt), length_is(*pceltFetched)]
267    IUnknown **rgelt,
268    [out] ULONG *pceltFetched);
269
270  HRESULT Skip(
271    [in] ULONG celt);
272
273  HRESULT Reset();
274
275  HRESULT Clone(
276    [out] IEnumUnknown **ppenum);
277}
278
279[
280  object,
281  uuid(00000022-0000-0000-C000-000000000046),
282  version(1.0),
283  pointer_default(unique)
284]
285interface ISurrogate : IUnknown
286{
287  typedef [unique] ISurrogate *LPSURROGATE;
288
289  HRESULT LoadDllServer(
290    [in] REFCLSID Clsid);
291  HRESULT FreeSurrogate();
292}
293
294[
295  local,
296  object,
297  uuid(00000146-0000-0000-C000-000000000046)
298]
299interface IGlobalInterfaceTable : IUnknown
300{
301  typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
302
303  HRESULT RegisterInterfaceInGlobal(
304    [in] IUnknown *pUnk,
305    [in] REFIID riid,
306    [out] DWORD *pdwCookie);
307
308  HRESULT RevokeInterfaceFromGlobal(
309    [in] DWORD dwCookie);
310
311  HRESULT GetInterfaceFromGlobal(
312    [in] DWORD dwCookie,
313    [in] REFIID riid,
314    [out, iid_is(riid)] void **ppv);
315}
316
317/******************** Monikers ********************/
318
319[
320  object,
321  uuid(0000000e-0000-0000-C000-000000000046),
322  pointer_default(unique)
323]
324interface IBindCtx : IUnknown
325{
326  typedef [unique] IBindCtx *LPBINDCTX;
327  typedef [unique] IBindCtx *LPBC;
328
329  typedef struct tagBIND_OPTS {
330    DWORD cbStruct;
331    DWORD grfFlags;
332    DWORD grfMode;
333    DWORD dwTickCountDeadline;
334  } BIND_OPTS, *LPBIND_OPTS;
335
336  /* FIXME: C++ crap */
337  typedef struct tagBIND_OPTS2 {
338    DWORD cbStruct;
339    DWORD grfFlags;
340    DWORD grfMode;
341    DWORD dwTickCountDeadline;
342    DWORD dwTrackFlags;
343    DWORD dwClassContext;
344    LCID  locale;
345    COSERVERINFO *pServerInfo;
346  } BIND_OPTS2, *LPBIND_OPTS2;
347
348  typedef struct tagBIND_OPTS3 {
349    DWORD cbStruct;
350    DWORD grfFlags;
351    DWORD grfMode;
352    DWORD dwTickCountDeadline;
353    DWORD dwTrackFlags;
354    DWORD dwClassContext;
355    LCID  locale;
356    COSERVERINFO *pServerInfo;
357    HWND hwnd;
358  } BIND_OPTS3, *LPBIND_OPTS3;
359
360  typedef enum tagBIND_FLAGS {
361    BIND_MAYBOTHERUSER   = 1,
362    BIND_JUSTTESTEXISTENCE = 2
363  } BIND_FLAGS;
364
365  HRESULT RegisterObjectBound(
366    [in, unique] IUnknown *punk);
367
368  HRESULT RevokeObjectBound(
369    [in, unique] IUnknown *punk);
370
371  HRESULT ReleaseBoundObjects();
372
373  [local]
374  HRESULT SetBindOptions(
375    [in] BIND_OPTS *pbindopts);
376
377  [call_as(SetBindOptions)]
378  HRESULT RemoteSetBindOptions(
379    [in] BIND_OPTS2 *pbindopts);
380
381  [local]
382  HRESULT GetBindOptions(
383    [in, out] BIND_OPTS *pbindopts);
384
385  [call_as(GetBindOptions)]
386  HRESULT RemoteGetBindOptions(
387    [in, out] BIND_OPTS2 *pbindopts);
388
389  HRESULT GetRunningObjectTable(
390    [out] IRunningObjectTable **pprot);
391
392  HRESULT RegisterObjectParam(
393    [in] LPOLESTR pszKey,
394    [in, unique] IUnknown *punk);
395
396  HRESULT GetObjectParam(
397    [in] LPOLESTR pszKey,
398    [out] IUnknown **ppunk);
399
400  HRESULT EnumObjectParam(
401    [out] IEnumString **ppenum);
402
403  HRESULT RevokeObjectParam(
404    [in] LPOLESTR pszKey);
405}
406
407[
408  object,
409  uuid(00000102-0000-0000-C000-000000000046),
410  pointer_default(unique)
411]
412interface IEnumMoniker : IUnknown
413{
414  typedef [unique] IEnumMoniker *LPENUMMONIKER;
415
416  [local]
417  HRESULT Next(
418    [in] ULONG celt,
419    [out, size_is(celt), length_is(*pceltFetched)]
420    IMoniker **rgelt,
421    [out] ULONG *pceltFetched);
422
423  [call_as(Next)]
424  HRESULT RemoteNext(
425    [in] ULONG celt,
426    [out, size_is(celt), length_is(*pceltFetched)]
427    IMoniker **rgelt,
428    [out] ULONG *pceltFetched);
429
430  HRESULT Skip(
431    [in] ULONG celt);
432
433  HRESULT Reset();
434
435  HRESULT Clone(
436    [out] IEnumMoniker **ppenum);
437}
438
439[
440  object,
441  uuid(00000126-0000-0000-C000-000000000046)
442]
443interface IRunnableObject : IUnknown
444{
445  typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
446
447  HRESULT GetRunningClass(
448    [out] LPCLSID lpClsid);
449
450  HRESULT Run(
451    [in] LPBINDCTX pbc);
452
453  [local]
454  BOOL IsRunning();
455
456  [call_as(IsRunning)]
457  HRESULT RemoteIsRunning();
458
459  HRESULT LockRunning(
460    [in] BOOL fLock,
461    [in] BOOL fLastUnlockCloses);
462
463  HRESULT SetContainedObject(
464    [in] BOOL fContained);
465}
466
467/* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),
468 * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined,
469 * but GetObject is used as a valid method name below, so we have
470 * to undefine it in that case */
471cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
472cpp_quote("#undef GetObject")
473cpp_quote("#endif")
474
475[
476  object,
477  uuid(00000010-0000-0000-C000-000000000046)
478]
479interface IRunningObjectTable : IUnknown
480{
481  typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
482
483  HRESULT Register(
484    [in] DWORD grfFlags,
485    [in, unique] IUnknown *punkObject,
486    [in, unique] IMoniker *pmkObjectName,
487    [out] DWORD *pdwRegister);
488
489  HRESULT Revoke(
490    [in] DWORD dwRegister);
491
492  HRESULT IsRunning(
493    [in, unique] IMoniker *pmkObjectName);
494
495  HRESULT GetObject(
496    [in, unique] IMoniker *pmkObjectName,
497    [out] IUnknown **ppunkObject);
498
499  HRESULT NoteChangeTime(
500    [in] DWORD dwRegister,
501    [in] FILETIME *pfiletime);
502
503  HRESULT GetTimeOfLastChange(
504    [in, unique] IMoniker *pmkObjectName,
505    [out] FILETIME *pfiletime);
506
507  HRESULT EnumRunning(
508    [out] IEnumMoniker **ppenumMoniker);
509}
510
511[
512  object,
513  uuid(0000010c-0000-0000-C000-000000000046)
514]
515interface IPersist : IUnknown
516{
517  typedef [unique] IPersist *LPPERSIST;
518
519  HRESULT GetClassID(
520    [out] CLSID *pClassID);
521}
522
523[
524  object,
525  uuid(00000109-0000-0000-C000-000000000046),
526  pointer_default(unique)
527]
528interface IPersistStream : IPersist
529{
530  typedef [unique] IPersistStream *LPPERSISTSTREAM;
531
532  HRESULT IsDirty();
533
534  HRESULT Load(
535    [in, unique] IStream *pStm);
536
537  HRESULT Save(
538    [in, unique] IStream *pStm,
539    [in] BOOL fClearDirty);
540
541  HRESULT GetSizeMax(
542    [out] ULARGE_INTEGER *pcbSize);
543}
544
545[
546  object,
547  uuid(0000000f-0000-0000-C000-000000000046),
548  pointer_default(unique)
549]
550interface IMoniker : IPersistStream
551{
552  typedef [unique] IMoniker *LPMONIKER;
553
554  typedef enum tagMKSYS {
555    MKSYS_NONE             = 0,
556    MKSYS_GENERICCOMPOSITE = 1,
557    MKSYS_FILEMONIKER      = 2,
558    MKSYS_ANTIMONIKER      = 3,
559    MKSYS_ITEMMONIKER      = 4,
560    MKSYS_POINTERMONIKER   = 5,
561    /* MKSYS_URLMONIKER       = 6, */ /* defined in urlmon.idl */
562    MKSYS_CLASSMONIKER     = 7
563  } MKSYS;
564
565  typedef [v1_enum] enum tagMKREDUCE {
566    MKRREDUCE_ONE         = 3 << 16,
567    MKRREDUCE_TOUSER      = 2 << 16,
568    MKRREDUCE_THROUGHUSER = 1 << 16,
569    MKRREDUCE_ALL         = 0
570  } MKRREDUCE;
571
572  [local]
573  HRESULT BindToObject(
574    [in, unique] IBindCtx *pbc,
575    [in, unique] IMoniker *pmkToLeft,
576    [in] REFIID riidResult,
577    [out, iid_is(riidResult)] void **ppvResult);
578
579  [call_as(BindToObject)]
580  HRESULT RemoteBindToObject(
581    [in, unique] IBindCtx *pbc,
582    [in, unique] IMoniker *pmkToLeft,
583    [in] REFIID riidResult,
584    [out, iid_is(riidResult)] IUnknown **ppvResult);
585
586  [local]
587  HRESULT BindToStorage(
588    [in, unique] IBindCtx *pbc,
589    [in, unique] IMoniker *pmkToLeft,
590    [in] REFIID riid,
591    [out, iid_is(riid)] void **ppvObj);
592
593  [call_as(BindToStorage)]
594  HRESULT RemoteBindToStorage(
595    [in, unique] IBindCtx *pbc,
596    [in, unique] IMoniker *pmkToLeft,
597    [in] REFIID riid,
598    [out, iid_is(riid)] IUnknown **ppvObj);
599
600  HRESULT Reduce(
601    [in, unique] IBindCtx *pbc,
602    [in] DWORD dwReduceHowFar,
603    [in, out, unique] IMoniker **ppmkToLeft,
604    [out] IMoniker **ppmkReduced);
605
606  HRESULT ComposeWith(
607    [in, unique] IMoniker *pmkRight,
608    [in] BOOL fOnlyIfNotGeneric,
609    [out] IMoniker **ppmkComposite);
610
611  HRESULT Enum(
612    [in] BOOL fForward,
613    [out] IEnumMoniker **ppenumMoniker);
614
615  HRESULT IsEqual(
616    [in, unique] IMoniker *pmkOtherMoniker);
617
618  HRESULT Hash(
619    [out] DWORD *pdwHash);
620
621  HRESULT IsRunning(
622    [in, unique] IBindCtx *pbc,
623    [in, unique] IMoniker *pmkToLeft,
624    [in, unique] IMoniker *pmkNewlyRunning);
625
626  HRESULT GetTimeOfLastChange(
627    [in, unique] IBindCtx *pbc,
628    [in, unique] IMoniker *pmkToLeft,
629    [out] FILETIME *pFileTime);
630
631  HRESULT Inverse(
632    [out] IMoniker **ppmk);
633
634  HRESULT CommonPrefixWith(
635    [in, unique] IMoniker *pmkOther,
636    [out] IMoniker **ppmkPrefix);
637
638  HRESULT RelativePathTo(
639    [in, unique] IMoniker *pmkOther,
640    [out] IMoniker **ppmkRelPath);
641
642  HRESULT GetDisplayName(
643    [in, unique] IBindCtx *pbc,
644    [in, unique] IMoniker *pmkToLeft,
645    [out] LPOLESTR *ppszDisplayName);
646
647  HRESULT ParseDisplayName(
648    [in, unique] IBindCtx *pbc,
649    [in, unique] IMoniker *pmkToLeft,
650    [in] LPOLESTR pszDisplayName,
651    [out] ULONG *pchEaten,
652    [out] IMoniker **ppmkOut);
653
654  HRESULT IsSystemMoniker(
655    [out] DWORD *pdwMksys);
656}
657
658[
659  object,
660  uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
661  pointer_default(unique)
662]
663interface IROTData : IUnknown
664{
665  HRESULT GetComparisonData(
666    [out, size_is(cbMax)] byte *pbData,
667    [in] ULONG cbMax,
668    [out] ULONG *pcbData);
669}
670
671[
672  object,
673  uuid(00000101-0000-0000-C000-000000000046),
674  pointer_default(unique)
675]
676interface IEnumString : IUnknown
677{
678  typedef [unique] IEnumString *LPENUMSTRING;
679
680  [local]
681  HRESULT Next(
682    [in] ULONG celt,
683    [out, size_is(celt), length_is(*pceltFetched)]
684    LPOLESTR *rgelt,
685    [out] ULONG *pceltFetched);
686
687  [call_as(Next)]
688  HRESULT RemoteNext(
689    [in] ULONG celt,
690    [out, size_is(celt), length_is(*pceltFetched)]
691    LPOLESTR *rgelt,
692    [out] ULONG *pceltFetched);
693
694  HRESULT Skip(
695    [in] ULONG celt);
696
697  HRESULT Reset();
698
699  HRESULT Clone(
700    [out] IEnumString **ppenum);
701}
702
703[
704  object,
705  uuid(00000140-0000-0000-C000-000000000046)
706]
707interface IClassActivator : IUnknown
708{
709  HRESULT GetClassObject(
710    [in] REFCLSID rclsid,
711    [in] DWORD dwClassContext,
712    [in] LCID locale,
713    [in] REFIID riid,
714    [out, iid_is(riid)] void **ppv);
715}
716
717/******************** Storage ********************/
718
719[
720  object,
721  uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
722  pointer_default(unique)
723]
724interface ISequentialStream : IUnknown
725{
726  [local]
727  HRESULT Read(
728    [out, size_is(cb), length_is(*pcbRead)]
729    void *pv,
730    [in] ULONG cb,
731    [out] ULONG *pcbRead);
732
733  [call_as(Read)]
734  HRESULT RemoteRead(
735    [out, size_is(cb), length_is(*pcbRead)]
736    byte *pv,
737    [in] ULONG cb,
738    [out] ULONG *pcbRead);
739
740  [local]
741  HRESULT Write(
742    [in, size_is(cb)] const void *pv,
743    [in] ULONG cb,
744    [out] ULONG *pcbWritten);
745
746  [call_as(Write)]
747  HRESULT RemoteWrite(
748    [in, size_is(cb)] const byte *pv,
749    [in] ULONG cb,
750    [out] ULONG *pcbWritten);
751}
752
753[
754  object,
755  uuid(0000000c-0000-0000-C000-000000000046),
756  pointer_default(unique)
757]
758interface IStream : ISequentialStream
759{
760  typedef [unique] IStream *LPSTREAM;
761
762  typedef struct tagSTATSTG {
763    LPOLESTR pwcsName;
764    DWORD type;
765    ULARGE_INTEGER cbSize;
766    FILETIME mtime;
767    FILETIME ctime;
768    FILETIME atime;
769    DWORD grfMode;
770    DWORD grfLocksSupported;
771    CLSID clsid;
772    DWORD grfStateBits;
773    DWORD reserved;
774  } STATSTG;
775
776  typedef enum tagSTGTY {
777    STGTY_STORAGE   = 1,
778    STGTY_STREAM    = 2,
779    STGTY_LOCKBYTES = 3,
780    STGTY_PROPERTY  = 4
781  } STGTY;
782
783  typedef enum tagSTREAM_SEEK {
784    STREAM_SEEK_SET = 0,
785    STREAM_SEEK_CUR = 1,
786    STREAM_SEEK_END = 2
787  } STREAM_SEEK;
788
789  /* these are defined in Linux's fcntl.h,
790   * undefine them to avoid conflicts */
791  cpp_quote("#undef LOCK_MAND")
792  cpp_quote("#undef LOCK_READ")
793  cpp_quote("#undef LOCK_WRITE")
794  cpp_quote("#undef LOCK_RW")
795
796  typedef enum tagLOCKTYPE {
797    LOCK_WRITE      = 1,
798    LOCK_EXCLUSIVE  = 2,
799    LOCK_ONLYONCE   = 4
800  } LOCKTYPE;
801
802  [local]
803  HRESULT Seek(
804    [in] LARGE_INTEGER dlibMove,
805    [in] DWORD dwOrigin,
806    [out] ULARGE_INTEGER *plibNewPosition);
807
808  [call_as(Seek)]
809  HRESULT RemoteSeek(
810    [in] LARGE_INTEGER dlibMove,
811    [in] DWORD dwOrigin,
812    [out] ULARGE_INTEGER *plibNewPosition);
813
814  HRESULT SetSize(
815    [in] ULARGE_INTEGER libNewSize);
816
817  [local]
818  HRESULT CopyTo(
819    [in, unique] IStream *pstm,
820    [in] ULARGE_INTEGER cb,
821    [out] ULARGE_INTEGER *pcbRead,
822    [out] ULARGE_INTEGER *pcbWritten);
823
824  [call_as(CopyTo)]
825  HRESULT RemoteCopyTo(
826    [in, unique] IStream *pstm,
827    [in] ULARGE_INTEGER cb,
828    [out] ULARGE_INTEGER *pcbRead,
829    [out] ULARGE_INTEGER *pcbWritten);
830
831  HRESULT Commit(
832    [in] DWORD grfCommitFlags);
833
834  HRESULT Revert();
835
836  HRESULT LockRegion(
837    [in] ULARGE_INTEGER libOffset,
838    [in] ULARGE_INTEGER cb,
839    [in] DWORD dwLockType);
840
841  HRESULT UnlockRegion(
842    [in] ULARGE_INTEGER libOffset,
843    [in] ULARGE_INTEGER cb,
844    [in] DWORD dwLockType);
845
846  HRESULT Stat(
847    [out] STATSTG *pstatstg,
848    [in] DWORD grfStatFlag);
849
850  HRESULT Clone(
851    [out] IStream **ppstm);
852}
853
854[
855  object,
856  uuid(0000000d-0000-0000-C000-000000000046),
857  pointer_default(unique)
858]
859interface IEnumSTATSTG : IUnknown
860{
861  typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
862
863  [local]
864  HRESULT Next(
865    [in] ULONG celt,
866    [out, size_is(celt), length_is(*pceltFetched)]
867    STATSTG *rgelt,
868    [out] ULONG *pceltFetched);
869
870  [call_as(Next)]
871  HRESULT RemoteNext(
872    [in] ULONG celt,
873    [out, size_is(celt), length_is(*pceltFetched)]
874    STATSTG *rgelt,
875    [out] ULONG *pceltFetched);
876
877  HRESULT Skip(
878    [in] ULONG celt);
879
880  HRESULT Reset();
881
882  HRESULT Clone(
883    [out] IEnumSTATSTG **ppenum);
884}
885
886[
887  object,
888  uuid(0000000b-0000-0000-C000-000000000046),
889  pointer_default(unique)
890]
891interface IStorage : IUnknown
892{
893  typedef [unique] IStorage *LPSTORAGE;
894
895  typedef struct tagRemSNB {
896    unsigned long ulCntStr;
897    unsigned long ulCntChar;
898    [size_is(ulCntChar)] OLECHAR rgString[];
899  } RemSNB;
900
901  typedef [unique] RemSNB *wireSNB;
902  typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
903
904  HRESULT CreateStream(
905    [in] LPCOLESTR pwcsName,
906    [in] DWORD grfMode,
907    [in] DWORD reserved1,
908    [in] DWORD reserved2,
909    [out] IStream **ppstm);
910
911  [local]
912  HRESULT OpenStream(
913    [in] LPCOLESTR pwcsName,
914    [in, unique] void *reserved1,
915    [in] DWORD grfMode,
916    [in] DWORD reserved2,
917    [out] IStream **ppstm);
918
919  [call_as(OpenStream)]
920  HRESULT RemoteOpenStream(
921    [in] LPCOLESTR pwcsName,
922    [in] unsigned long cbReserved1,
923    [in, unique, size_is(cbReserved1)] byte *reserved1,
924    [in] DWORD grfMode,
925    [in] DWORD reserved2,
926    [out] IStream **ppstm);
927
928  HRESULT CreateStorage(
929    [in] LPCOLESTR pwcsName,
930    [in] DWORD grfMode,
931    [in] DWORD dwStgFmt,
932    [in] DWORD reserved2,
933    [out] IStorage **ppstg);
934
935  HRESULT OpenStorage(
936    [in, unique] LPCOLESTR pwcsName,
937    [in, unique] IStorage *pstgPriority,
938    [in] DWORD grfMode,
939    [in, unique] SNB snbExclude,
940    [in] DWORD reserved,
941    [out] IStorage **ppstg);
942
943  HRESULT CopyTo(
944    [in] DWORD ciidExclude,
945    [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,
946    [in, unique] SNB snbExclude,
947    [in, unique] IStorage *pstgDest);
948
949  HRESULT MoveElementTo(
950    [in] LPCOLESTR pwcsName,
951    [in, unique] IStorage *pstgDest,
952    [in] LPCOLESTR pwcsNewName,
953    [in] DWORD grfFlags);
954
955  HRESULT Commit(
956    [in] DWORD grfCommitFlags);
957
958  HRESULT Revert();
959
960  [local]
961  HRESULT EnumElements(
962    [in] DWORD reserved1,
963    [in, unique, size_is(1)] void *reserved2,
964    [in] DWORD reserved3,
965    [out] IEnumSTATSTG **ppenum);
966
967  [call_as(EnumElements)]
968  HRESULT RemoteEnumElements(
969    [in] DWORD reserved1,
970    [in] unsigned long cbReserved2,
971    [in, unique, size_is(cbReserved2)] byte *reserved2,
972    [in] DWORD reserved3,
973    [out] IEnumSTATSTG **ppenum);
974
975  HRESULT DestroyElement(
976    [in] LPCOLESTR pwcsName);
977
978  HRESULT RenameElement(
979    [in] LPCOLESTR pwcsOldName,
980    [in] LPCOLESTR pwcsNewName);
981
982  HRESULT SetElementTimes(
983    [in, unique] LPCOLESTR pwcsName,
984    [in, unique] const FILETIME *pctime,
985    [in, unique] const FILETIME *patime,
986    [in, unique] const FILETIME *pmtime);
987
988  HRESULT SetClass(
989    [in] REFCLSID clsid);
990
991  HRESULT SetStateBits(
992    [in] DWORD grfStateBits,
993    [in] DWORD grfMask);
994
995  HRESULT Stat(
996    [out] STATSTG *pstatstg,
997    [in] DWORD grfStatFlag);
998}
999
1000[
1001  object,
1002  uuid(0000010b-0000-0000-C000-000000000046),
1003  pointer_default(unique)
1004]
1005interface IPersistFile : IPersist
1006{
1007  typedef [unique] IPersistFile *LPPERSISTFILE;
1008
1009  HRESULT IsDirty();
1010
1011  HRESULT Load(
1012    [in] LPCOLESTR pszFileName,
1013    [in] DWORD dwMode);
1014
1015  HRESULT Save(
1016    [in, unique] LPCOLESTR pszFileName,
1017    [in] BOOL fRemember);
1018
1019  HRESULT SaveCompleted(
1020    [in, unique] LPCOLESTR pszFileName);
1021
1022  HRESULT GetCurFile(
1023    [out] LPOLESTR *ppszFileName);
1024}
1025
1026[
1027  object,
1028  uuid(0000010a-0000-0000-C000-000000000046),
1029  pointer_default(unique)
1030]
1031interface IPersistStorage : IPersist
1032{
1033  typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
1034
1035  HRESULT IsDirty();
1036
1037  HRESULT InitNew(
1038    [in, unique] IStorage *pStg);
1039
1040  HRESULT Load(
1041    [in, unique] IStorage *pStg);
1042
1043  HRESULT Save(
1044    [in, unique] IStorage *pStgSave,
1045    [in] BOOL fSameAsLoad);
1046
1047  HRESULT SaveCompleted(
1048    [in, unique] IStorage *pStgNew);
1049
1050  HRESULT HandsOffStorage();
1051}
1052
1053[
1054  object,
1055  uuid(00000012-0000-0000-C000-000000000046),
1056  pointer_default(unique)
1057]
1058interface IRootStorage : IUnknown
1059{
1060  typedef [unique] IRootStorage *LPROOTSTORAGE;
1061
1062  HRESULT SwitchToFile(
1063    [in] LPOLESTR pszFile);
1064}
1065
1066[
1067  object,
1068  uuid(0000000a-0000-0000-C000-000000000046),
1069  pointer_default(unique)
1070]
1071interface ILockBytes : IUnknown
1072{
1073  typedef [unique] ILockBytes *LPLOCKBYTES;
1074
1075  [local]
1076  HRESULT ReadAt(
1077    [in] ULARGE_INTEGER ulOffset,
1078    [out, size_is(cb), length_is(*pcbRead)]
1079    void *pv,
1080    [in] ULONG cb,
1081    [out] ULONG *pcbRead);
1082
1083  [call_as(ReadAt)]
1084  HRESULT RemoteReadAt(
1085    [in] ULARGE_INTEGER ulOffset,
1086    [out, size_is(cb), length_is(*pcbRead)]
1087    byte *pv,
1088    [in] ULONG cb,
1089    [out] ULONG *pcbRead);
1090
1091  [local]
1092  HRESULT WriteAt(
1093    [in] ULARGE_INTEGER ulOffset,
1094    [in, size_is(cb)] const void *pv,
1095    [in] ULONG cb,
1096    [out] ULONG *pcbWritten);
1097
1098  [call_as(WriteAt)]
1099  HRESULT RemoteWriteAt(
1100    [in] ULARGE_INTEGER ulOffset,
1101    [in, size_is(cb)] const byte *pv,
1102    [in] ULONG cb,
1103    [out] ULONG *pcbWritten);
1104
1105  HRESULT Flush();
1106
1107  HRESULT SetSize(
1108    [in] ULARGE_INTEGER cb);
1109
1110  HRESULT LockRegion(
1111    [in] ULARGE_INTEGER libOffset,
1112    [in] ULARGE_INTEGER cb,
1113    [in] DWORD dwLockType);
1114
1115  HRESULT UnlockRegion(
1116    [in] ULARGE_INTEGER libOffset,
1117    [in] ULARGE_INTEGER cb,
1118    [in] DWORD dwLockType);
1119
1120  HRESULT Stat(
1121    [out] STATSTG *pstatstg,
1122    [in] DWORD grfStatFlag);
1123}
1124
1125[
1126  object,
1127  uuid(99caf010-415e-11cf-8814-00aa00b569f5),
1128  pointer_default(unique)
1129]
1130interface IFillLockBytes : IUnknown
1131{
1132  [local]
1133  HRESULT FillAppend(
1134    [in, size_is(cb)] const void *pv,
1135    [in] ULONG cb,
1136    [out] ULONG *pcbWritten);
1137
1138  [call_as(FillAppend)]
1139  HRESULT RemoteFillAppend(
1140    [in, size_is(cb)] const byte *pv,
1141    [in] ULONG cb,
1142    [out] ULONG *pcbWritten);
1143
1144  [local]
1145  HRESULT FillAt(
1146    [in] ULARGE_INTEGER ulOffset,
1147    [in, size_is(cb)] const void *pv,
1148    [in] ULONG cb,
1149    [out] ULONG *pcbWritten);
1150
1151  [call_as(FillAt)]
1152  HRESULT RemoteFillAt(
1153    [in] ULARGE_INTEGER ulOffset,
1154    [in, size_is(cb)] const byte *pv,
1155    [in] ULONG cb,
1156    [out] ULONG *pcbWritten);
1157
1158  HRESULT SetFillSize(
1159    [in] ULARGE_INTEGER ulSize);
1160
1161  HRESULT Terminate(
1162    [in] BOOL bCanceled);
1163}
1164
1165[
1166  object,
1167  uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
1168  pointer_default(unique)
1169]
1170interface IProgressNotify : IUnknown
1171{
1172  HRESULT OnProgress(
1173    [in] DWORD dwProgressCurrent,
1174    [in] DWORD dwProgressMaximum,
1175    [in] BOOL fAccurate,
1176    [in] BOOL fOwner);
1177}
1178
1179[
1180  local,
1181  object,
1182  uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
1183  pointer_default(unique)
1184]
1185interface ILayoutStorage : IUnknown
1186{
1187  typedef struct tagStorageLayout {
1188    DWORD LayoutType;
1189    OLECHAR *pwcsElementName;
1190    LARGE_INTEGER cOffset;
1191    LARGE_INTEGER cBytes;
1192  } StorageLayout;
1193
1194  HRESULT LayoutScript(
1195    [in] StorageLayout *pStorageLayout,
1196    [in] DWORD nEntries,
1197    [in] DWORD glfInterleavedFlag);
1198
1199  HRESULT BeginMonitor();
1200
1201  HRESULT EndMonitor();
1202
1203  HRESULT ReLayoutDocfile(
1204    [in] OLECHAR *pwcsNewDfName);
1205
1206  HRESULT ReLayoutDocfileOnILockBytes(
1207    [in] ILockBytes *pILockBytes);
1208}
1209
1210[
1211    object,
1212    uuid(30f3d47a-6447-11d1-8e3c-00c04fb9386d)
1213]
1214interface IBlockingLock : IUnknown
1215{
1216    HRESULT Lock(
1217        [in] DWORD dwTimeout);
1218
1219    HRESULT Unlock();
1220}
1221
1222
1223[
1224    object,
1225    uuid(bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4)
1226]
1227interface ITimeAndNoticeControl : IUnknown
1228{
1229    HRESULT SuppressChanges(
1230        [in] DWORD res1,
1231        [in] DWORD res2);
1232
1233}
1234
1235
1236
1237[
1238    object,
1239    uuid(8d19c834-8879-11d1-83e9-00c04fc2c6d4)
1240]
1241interface IOplockStorage: IUnknown
1242{
1243    HRESULT CreateStorageEx(
1244        [in] LPCWSTR pwcsName,
1245        [in] DWORD grfMode,
1246        [in] DWORD stgfmt,
1247        [in] DWORD grfAttrs,
1248        [in] REFIID riid,
1249        [out, iid_is(riid)] void **ppstgOpen);
1250
1251    HRESULT OpenStorageEx(
1252        [in] LPCWSTR pwcsName,
1253        [in] DWORD grfMode,
1254        [in] DWORD stgfmt,
1255        [in] DWORD grfAttrs,
1256        [in] REFIID riid,
1257        [out, iid_is(riid)] void **ppstgOpen);
1258}
1259
1260/******************** Data Object ********************/
1261
1262[
1263  object,
1264  uuid(00000103-0000-0000-C000-000000000046),
1265  pointer_default(unique)
1266]
1267interface IEnumFORMATETC : IUnknown
1268{
1269  typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
1270
1271  typedef struct tagDVTARGETDEVICE {
1272    DWORD tdSize;
1273    WORD tdDriverNameOffset;
1274    WORD tdDeviceNameOffset;
1275    WORD tdPortNameOffset;
1276    WORD tdExtDevmodeOffset;
1277    [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
1278    BYTE tdData[];
1279  } DVTARGETDEVICE;
1280
1281  typedef CLIPFORMAT *LPCLIPFORMAT;
1282
1283  typedef struct tagFORMATETC {
1284    CLIPFORMAT cfFormat;
1285    [unique] DVTARGETDEVICE *ptd;
1286    DWORD dwAspect;
1287    LONG lindex;
1288    DWORD tymed;
1289  } FORMATETC, *LPFORMATETC;
1290
1291  [local]
1292  HRESULT Next(
1293    [in] ULONG celt,
1294    [out, size_is(celt), length_is(*pceltFetched)]
1295    FORMATETC *rgelt,
1296    [out] ULONG *pceltFetched);
1297
1298  [call_as(Next)]
1299  HRESULT RemoteNext(
1300    [in] ULONG celt,
1301    [out, size_is(celt), length_is(*pceltFetched)]
1302    FORMATETC *rgelt,
1303    [out] ULONG *pceltFetched);
1304
1305  HRESULT Skip(
1306    [in] ULONG celt);
1307
1308  HRESULT Reset();
1309
1310  HRESULT Clone(
1311    [out] IEnumFORMATETC **ppenum);
1312}
1313
1314[
1315  object,
1316  uuid(00000105-0000-0000-C000-000000000046),
1317  pointer_default(unique)
1318]
1319interface IEnumSTATDATA : IUnknown
1320{
1321  typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
1322
1323  typedef enum tagADVF {
1324    ADVF_NODATA            = 1,
1325    ADVF_PRIMEFIRST        = 2,
1326    ADVF_ONLYONCE          = 4,
1327    ADVF_DATAONSTOP        = 64,
1328    ADVFCACHE_NOHANDLER    = 8,
1329    ADVFCACHE_FORCEBUILTIN = 16,
1330    ADVFCACHE_ONSAVE       = 32
1331  } ADVF;
1332
1333  typedef struct tagSTATDATA
1334  {
1335    FORMATETC formatetc;
1336    DWORD advf;
1337    [unique] IAdviseSink *pAdvSink;
1338    DWORD dwConnection;
1339  } STATDATA, *LPSTATDATA;
1340
1341  [local]
1342  HRESULT Next(
1343    [in] ULONG celt,
1344    [out, size_is(celt), length_is(*pceltFetched)]
1345    STATDATA *rgelt,
1346    [out] ULONG *pceltFetched);
1347
1348  [call_as(Next)]
1349  HRESULT RemoteNext(
1350    [in] ULONG celt,
1351    [out, size_is(celt), length_is(*pceltFetched)]
1352    STATDATA *rgelt,
1353    [out] ULONG *pceltFetched);
1354
1355  HRESULT Skip(
1356    [in] ULONG celt);
1357
1358  HRESULT Reset();
1359
1360  HRESULT Clone(
1361    [out] IEnumSTATDATA **ppenum);
1362}
1363
1364[
1365  object,
1366  uuid(0000010f-0000-0000-C000-000000000046),
1367  pointer_default(unique)
1368]
1369interface IAdviseSink : IUnknown
1370{
1371  typedef IAdviseSink *LPADVISESINK;
1372
1373  typedef [v1_enum] enum tagTYMED {
1374    TYMED_HGLOBAL  = 1,
1375    TYMED_FILE     = 2,
1376    TYMED_ISTREAM  = 4,
1377    TYMED_ISTORAGE = 8,
1378    TYMED_GDI      = 16,
1379    TYMED_MFPICT   = 32,
1380    TYMED_ENHMF    = 64,
1381    TYMED_NULL     = 0
1382  } TYMED;
1383
1384  typedef struct tagRemSTGMEDIUM {
1385    DWORD tymed;
1386    DWORD dwHandleType;
1387    unsigned long pData;
1388    unsigned long pUnkForRelease;
1389    unsigned long cbData;
1390    [size_is(cbData)] byte data[];
1391  } RemSTGMEDIUM;
1392
1393  typedef struct tagSTGMEDIUM {
1394    DWORD tymed;
1395    [switch_is(tymed)] union {
1396    [case(TYMED_GDI)]      HBITMAP hBitmap;
1397    [case(TYMED_MFPICT)]   HMETAFILEPICT hMetaFilePict;
1398    [case(TYMED_ENHMF)]    HENHMETAFILE hEnhMetaFile;
1399    [case(TYMED_HGLOBAL)]  HGLOBAL hGlobal;
1400    [case(TYMED_FILE)]     LPOLESTR lpszFileName;
1401    [case(TYMED_ISTREAM)]  IStream *pstm;
1402    [case(TYMED_ISTORAGE)] IStorage *pstg;
1403    [default]              ;
1404    } DUMMYUNIONNAME;
1405    [unique] IUnknown *pUnkForRelease;
1406  } uSTGMEDIUM;
1407
1408/* copied from wingdi.h */
1409#define OBJ_PEN             1
1410#define OBJ_BRUSH           2
1411#define OBJ_DC              3
1412#define OBJ_METADC          4
1413#define OBJ_PAL             5
1414#define OBJ_FONT            6
1415#define OBJ_BITMAP          7
1416#define OBJ_REGION          8
1417#define OBJ_METAFILE        9
1418#define OBJ_MEMDC           10
1419#define OBJ_EXTPEN          11
1420#define OBJ_ENHMETADC       12
1421#define OBJ_ENHMETAFILE     13
1422
1423  typedef union _GDI_OBJECT switch(DWORD ObjectType) u {
1424    case OBJ_BITMAP: wireHBITMAP hBitmap;
1425    case OBJ_PAL:    wireHPALETTE hPalette;
1426    default:         wireHGLOBAL hGeneric;
1427  } GDI_OBJECT;
1428
1429  typedef struct _userSTGMEDIUM {
1430    union switch(DWORD tymed) u {
1431    case TYMED_NULL:     ;
1432    case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;
1433    case TYMED_ENHMF:    wireHENHMETAFILE hHEnhMetaFile;
1434    case TYMED_GDI:      GDI_OBJECT *hGdiHandle;
1435    case TYMED_HGLOBAL:  wireHGLOBAL hGlobal;
1436    case TYMED_FILE:     LPOLESTR lpszFileName;
1437    case TYMED_ISTREAM:  BYTE_BLOB *pstm;
1438    case TYMED_ISTORAGE: BYTE_BLOB *pstg;
1439    } DUMMYUNIONNAME;
1440    IUnknown *pUnkForRelease;
1441  } userSTGMEDIUM;
1442
1443  typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;
1444  typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;
1445
1446  typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;
1447  typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;
1448
1449  typedef STGMEDIUM *LPSTGMEDIUM;
1450
1451  typedef struct _userFLAG_STGMEDIUM {
1452    long ContextFlags;
1453    long fPassOwnership;
1454    userSTGMEDIUM Stgmed;
1455  } userFLAG_STGMEDIUM;
1456
1457  typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
1458
1459  typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {
1460    long ContextFlags;
1461    long fPassOwnership;
1462    STGMEDIUM Stgmed;
1463  } FLAG_STGMEDIUM;
1464
1465  [local]
1466  void OnDataChange(
1467    [in, unique] FORMATETC *pFormatetc,
1468    [in, unique] STGMEDIUM *pStgmed);
1469
1470  [call_as(OnDataChange)]
1471  HRESULT  RemoteOnDataChange(
1472    [in, unique] FORMATETC *pFormatetc,
1473    [in, unique] ASYNC_STGMEDIUM *pStgmed);
1474
1475  [local]
1476  void OnViewChange(
1477    [in] DWORD dwAspect,
1478    [in] LONG lindex);
1479
1480  [call_as(OnViewChange)]
1481  HRESULT RemoteOnViewChange(
1482    [in] DWORD dwAspect,
1483    [in] LONG lindex);
1484
1485  [local]
1486  void OnRename(
1487    [in] IMoniker *pmk);
1488
1489  [call_as(OnRename)]
1490  HRESULT RemoteOnRename(
1491    [in] IMoniker *pmk);
1492
1493  [local]
1494  void OnSave();
1495
1496  [call_as(OnSave)]
1497  HRESULT RemoteOnSave();
1498
1499  [local]
1500  void OnClose();
1501
1502  [call_as(OnClose)]
1503  HRESULT RemoteOnClose();
1504}
1505
1506[
1507  object,
1508  uuid(00000125-0000-0000-C000-000000000046),
1509  pointer_default(unique)
1510]
1511interface IAdviseSink2 : IAdviseSink
1512{
1513  typedef [unique] IAdviseSink2 *LPADVISESINK2;
1514
1515  [local]
1516  void OnLinkSrcChange(
1517    [in, unique] IMoniker *pmk);
1518
1519  [call_as(OnLinkSrcChange)]
1520  HRESULT RemoteOnLinkSrcChange(
1521    [in, unique] IMoniker *pmk);
1522}
1523
1524[
1525  object,
1526  uuid(0000010e-0000-0000-C000-000000000046),
1527  pointer_default(unique)
1528]
1529interface IDataObject : IUnknown
1530{
1531  typedef [unique] IDataObject *LPDATAOBJECT;
1532
1533  typedef enum tagDATADIR {
1534    DATADIR_GET = 1,
1535    DATADIR_SET = 2
1536  } DATADIR;
1537
1538  [local]
1539  HRESULT GetData(
1540    [in, unique] FORMATETC *pformatetcIn,
1541    [out] STGMEDIUM *pmedium);
1542
1543  [call_as(GetData)]
1544  HRESULT RemoteGetData(
1545    [in, unique] FORMATETC *pformatetcIn,
1546    [out] STGMEDIUM *pRemoteMedium);
1547
1548  [local]
1549  HRESULT GetDataHere(
1550    [in, unique] FORMATETC *pformatetc,
1551    [in, out] STGMEDIUM *pmedium);
1552
1553  [call_as(GetDataHere)]
1554  HRESULT RemoteGetDataHere(
1555    [in, unique] FORMATETC *pformatetc,
1556    [in, out] STGMEDIUM *pRemoteMedium);
1557
1558  HRESULT QueryGetData(
1559    [in, unique] FORMATETC *pformatetc);
1560
1561  HRESULT GetCanonicalFormatEtc(
1562    [in, unique] FORMATETC *pformatectIn,
1563    [out] FORMATETC *pformatetcOut);
1564
1565  [local]
1566  HRESULT SetData(
1567    [in, unique] FORMATETC *pformatetc,
1568    [in, unique] STGMEDIUM *pmedium,
1569    [in] BOOL fRelease);
1570
1571  [call_as(SetData)]
1572  HRESULT RemoteSetData(
1573    [in, unique] FORMATETC *pformatetc,
1574    [in, unique] FLAG_STGMEDIUM *pmedium,
1575    [in] BOOL fRelease);
1576
1577  HRESULT EnumFormatEtc(
1578    [in] DWORD dwDirection,
1579    [out] IEnumFORMATETC **ppenumFormatEtc);
1580
1581  HRESULT DAdvise(
1582    [in] FORMATETC *pformatetc,
1583    [in] DWORD advf,
1584    [in, unique] IAdviseSink *pAdvSink,
1585    [out] DWORD *pdwConnection);
1586
1587  HRESULT DUnadvise(
1588    [in] DWORD dwConnection);
1589
1590  HRESULT EnumDAdvise(
1591    [out] IEnumSTATDATA **ppenumAdvise);
1592}
1593
1594[
1595  local,
1596  object,
1597  uuid(00000110-0000-0000-C000-000000000046)
1598]
1599interface IDataAdviseHolder : IUnknown
1600{
1601  typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
1602
1603  HRESULT Advise(
1604    [in, unique] IDataObject *pDataObject,
1605    [in, unique] FORMATETC *pFetc,
1606    [in] DWORD advf,
1607    [in, unique] IAdviseSink *pAdvise,
1608    [out] DWORD *pdwConnection);
1609
1610  HRESULT Unadvise(
1611    [in] DWORD dwConnection);
1612
1613  HRESULT EnumAdvise(
1614    [out] IEnumSTATDATA **ppenumAdvise);
1615
1616  HRESULT SendOnDataChange(
1617    [in, unique] IDataObject *pDataObject,
1618    [in] DWORD dwReserved,
1619    [in] DWORD advf);
1620}
1621
1622/******************** Remoting ********************/
1623
1624[
1625  local,
1626  object,
1627  uuid(00000016-0000-0000-C000-000000000046)
1628]
1629interface IMessageFilter : IUnknown
1630{
1631  typedef [unique] IMessageFilter *LPMESSAGEFILTER;
1632
1633  typedef enum tagCALLTYPE {
1634    CALLTYPE_TOPLEVEL = 1,
1635    CALLTYPE_NESTED   = 2,
1636    CALLTYPE_ASYNC    = 3,
1637    CALLTYPE_TOPLEVEL_CALLPENDING = 4,
1638    CALLTYPE_ASYNC_CALLPENDING    = 5
1639  } CALLTYPE;
1640
1641  typedef enum tagSERVERCALL {
1642    SERVERCALL_ISHANDLED  = 0,
1643    SERVERCALL_REJECTED   = 1,
1644    SERVERCALL_RETRYLATER = 2
1645  } SERVERCALL;
1646
1647  typedef enum tagPENDINGTYPE {
1648    PENDINGTYPE_TOPLEVEL = 1,
1649    PENDINGTYPE_NESTED   = 2
1650  } PENDINGTYPE;
1651
1652  typedef enum tagPENDINGMSG {
1653    PENDINGMSG_CANCELCALL     = 0,
1654    PENDINGMSG_WAITNOPROCESS  = 1,
1655    PENDINGMSG_WAITDEFPROCESS = 2
1656  } PENDINGMSG;
1657
1658  typedef struct tagINTERFACEINFO {
1659    IUnknown *pUnk;
1660    IID iid;
1661    WORD wMethod;
1662  } INTERFACEINFO, *LPINTERFACEINFO;
1663
1664  DWORD HandleInComingCall(
1665    [in] DWORD dwCallType,
1666    [in] HTASK htaskCaller,
1667    [in] DWORD dwTickCount,
1668    [in] LPINTERFACEINFO lpInterfaceInfo);
1669
1670  DWORD RetryRejectedCall(
1671    [in] HTASK htaskCallee,
1672    [in] DWORD dwTickCount,
1673    [in] DWORD dwRejectType);
1674
1675  DWORD MessagePending(
1676    [in] HTASK htaskCallee,
1677    [in] DWORD dwTickCount,
1678    [in] DWORD dwPendingType);
1679}
1680
1681[
1682  local,
1683  object,
1684  uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
1685]
1686interface IRpcChannelBuffer : IUnknown
1687{
1688  typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER;
1689
1690  typedef unsigned long RPCOLEDATAREP;
1691
1692  typedef struct tagRPCOLEMESSAGE {
1693    void *reserved1;
1694    RPCOLEDATAREP dataRepresentation;
1695    void *Buffer;
1696    ULONG cbBuffer;
1697    ULONG iMethod;
1698    void *reserved2[5];
1699    ULONG rpcFlags;
1700  } RPCOLEMESSAGE;
1701
1702  typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
1703
1704  HRESULT GetBuffer(
1705    [in] RPCOLEMESSAGE *pMessage,
1706    [in] REFIID riid);
1707
1708  HRESULT SendReceive(
1709    [in,out] RPCOLEMESSAGE *pMessage,
1710    [out] ULONG *pStatus);
1711
1712  HRESULT FreeBuffer(
1713    [in] RPCOLEMESSAGE *pMessage);
1714
1715  HRESULT GetDestCtx(
1716    [out] DWORD *pdwDestContext,
1717    [out] void **ppvDestContext);
1718
1719  HRESULT IsConnected();
1720}
1721
1722[
1723  local,
1724  object,
1725  uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)
1726]
1727interface IRpcChannelBuffer2 : IRpcChannelBuffer
1728{
1729  typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
1730
1731  HRESULT GetProtocolVersion(
1732    [in,out] DWORD *pdwVersion);
1733}
1734
1735[
1736  local,
1737  object,
1738  uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)
1739]
1740interface IRpcChannelBuffer3 : IRpcChannelBuffer2
1741{
1742  typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
1743
1744  HRESULT Send(
1745    [in,out] RPCOLEMESSAGE *pMsg,
1746    [out] ULONG *pulStatus);
1747
1748  HRESULT Receive(
1749    [in,out] RPCOLEMESSAGE *pMsg,
1750    [in] ULONG ulSize,
1751    [out] ULONG *pulStatus);
1752
1753  HRESULT Cancel(
1754    [in] RPCOLEMESSAGE *pMsg);
1755
1756  HRESULT GetCallContext(
1757    [in] RPCOLEMESSAGE *pMsg,
1758    [in] REFIID riid,
1759    [out] void **pInterface);
1760
1761  HRESULT GetDestCtxEx(
1762    [in] RPCOLEMESSAGE *pMsg,
1763    [out] DWORD *pdwDestContext,
1764    [out] void **ppvDestContext);
1765
1766  HRESULT GetState(
1767    [in] RPCOLEMESSAGE *pMsg,
1768    [out] DWORD *pState);
1769
1770  HRESULT RegisterAsync(
1771    [in] RPCOLEMESSAGE *pMsg,
1772    [in] IAsyncManager *pAsyncMgr);
1773}
1774
1775[
1776    local,
1777    object,
1778    uuid(a5029fb6-3c34-11d1-9c99-00c04fb998aa),
1779    pointer_default(unique)
1780]
1781interface IAsyncRpcChannelBuffer : IRpcChannelBuffer2
1782{
1783    HRESULT Send(
1784        [in, out] RPCOLEMESSAGE *pMsg,
1785        [in] ISynchronize *pSync,
1786        [out] ULONG *pulStatus);
1787
1788    HRESULT Receive(
1789        [in, out] RPCOLEMESSAGE *pMsg,
1790        [out] ULONG *pulStatus);
1791
1792    HRESULT GetDestCtxEx(
1793        [in] RPCOLEMESSAGE *pMsg,
1794        [out] DWORD *pdwDestContext,
1795        [out] void **ppvDestContext);
1796}
1797
1798[
1799    local,
1800    object,
1801    uuid(58a08519-24c8-4935-b482-3fd823333a4f)
1802]
1803interface IRpcSyntaxNegotiate : IUnknown
1804{
1805    HRESULT NegotiateSyntax(
1806        [in, out] RPCOLEMESSAGE *pMsg);
1807}
1808
1809[
1810  local,
1811  object,
1812  uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
1813]
1814interface IRpcProxyBuffer : IUnknown
1815{
1816  typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER;
1817
1818  HRESULT Connect(
1819    [in, unique] IRpcChannelBuffer *pRpcChannelBuffer);
1820
1821  void Disconnect();
1822}
1823
1824[
1825  local,
1826  object,
1827  uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
1828]
1829interface IRpcStubBuffer : IUnknown
1830{
1831  typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER;
1832
1833  HRESULT Connect(
1834    [in] IUnknown *pUnkServer);
1835
1836  void Disconnect();
1837
1838  HRESULT Invoke(
1839    [in] RPCOLEMESSAGE *_prpcmsg,
1840    [in] IRpcChannelBuffer *_pRpcChannelBuffer);
1841
1842  IRpcStubBuffer *IsIIDSupported(
1843    [in] REFIID riid);
1844
1845  ULONG CountRefs();
1846
1847  HRESULT DebugServerQueryInterface(
1848    void **ppv);
1849
1850  void DebugServerRelease(
1851    void *pv);
1852}
1853
1854[
1855  local,
1856  object,
1857  uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
1858]
1859interface IPSFactoryBuffer : IUnknown
1860{
1861  typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER;
1862
1863  HRESULT CreateProxy(
1864    [in] IUnknown *pUnkOuter,
1865    [in] REFIID riid,
1866    [out] IRpcProxyBuffer **ppProxy,
1867    [out] void **ppv);
1868
1869  HRESULT CreateStub(
1870    [in] REFIID riid,
1871    [in, unique] IUnknown *pUnkServer,
1872    [out] IRpcStubBuffer **ppStub);
1873}
1874
1875[
1876  local,
1877  object,
1878  uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
1879]
1880interface IChannelHook : IUnknown
1881{
1882  typedef [unique] IChannelHook *LPCHANNELHOOK;
1883
1884  typedef struct SChannelHookCallInfo {
1885    IID iid;
1886    DWORD cbSize;
1887    GUID uCausality;
1888    DWORD dwServerPid;
1889    DWORD iMethod;
1890    void *pObject;
1891  } SChannelHookCallInfo;
1892
1893  void ClientGetSize(
1894    [in] REFGUID uExtent,
1895    [in] REFIID riid,
1896    [out] ULONG *pDataSize);
1897
1898  void ClientFillBuffer(
1899    [in] REFGUID uExtent,
1900    [in] REFIID riid,
1901    [in, out] ULONG *pDataSize,
1902    [in] void *pDataBuffer);
1903
1904  void ClientNotify(
1905    [in] REFGUID uExtent,
1906    [in] REFIID riid,
1907    [in] ULONG cbDataSize,
1908    [in] void *pDataBuffer,
1909    [in] DWORD lDataRep,
1910    [in] HRESULT hrFault);
1911
1912  void ServerNotify(
1913    [in] REFGUID uExtent,
1914    [in] REFIID riid,
1915    [in] ULONG cbDataSize,
1916    [in] void *pDataBuffer,
1917    [in] DWORD lDataRep);
1918
1919  void ServerGetSize(
1920    [in] REFGUID uExtent,
1921    [in] REFIID riid,
1922    [in] HRESULT hrFault,
1923    [out] ULONG *pDataSize);
1924
1925  void ServerFillBuffer(
1926    [in] REFGUID uExtent,
1927    [in] REFIID riid,
1928    [in, out] ULONG *pDataSize,
1929    [in] void *pDataBuffer,
1930    [in] HRESULT hrFault );
1931}
1932
1933extern const FMTID FMTID_SummaryInformation;
1934extern const FMTID FMTID_DocSummaryInformation;
1935extern const FMTID FMTID_UserDefinedProperties;
1936
1937
1938/******************** Connection Points ********************/
1939/* FIXME */
1940
1941/******************** DCOM ********************/
1942
1943[
1944  local,
1945  object,
1946  uuid(0000013D-0000-0000-C000-000000000046)
1947]
1948interface IClientSecurity : IUnknown
1949{
1950  typedef struct tagSOLE_AUTHENTICATION_SERVICE {
1951    DWORD dwAuthnSvc;
1952    DWORD dwAuthzSvc;
1953    OLECHAR *pPrincipalName;
1954    HRESULT hr;
1955  } SOLE_AUTHENTICATION_SERVICE;
1956
1957  typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
1958
1959  typedef struct tagSOLE_AUTHENTICATION_INFO {
1960    DWORD dwAuthnSvc;
1961    DWORD dwAuthzSvc;
1962    void *pAuthInfo;
1963  } SOLE_AUTHENTICATION_INFO;
1964
1965  const OLECHAR *COLE_DEFAULT_PRINCIPAL = (OLECHAR*) -1;
1966  const void *COLE_DEFAULT_AUTHINFO = (void*) -1;
1967
1968  typedef struct tagSOLE_AUTHENTICATION_LIST {
1969    DWORD cAuthInfo;
1970    SOLE_AUTHENTICATION_INFO *aAuthInfo;
1971  } SOLE_AUTHENTICATION_LIST;
1972
1973  typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
1974    EOAC_NONE               = 0x0,
1975    EOAC_MUTUAL_AUTH        = 0x1,
1976    EOAC_SECURE_REFS        = 0x2, /* CoInitializeSecurity only */
1977    EOAC_ACCESS_CONTROL     = 0x4, /* CoInitializeSecurity only */
1978    EOAC_APPID              = 0x8, /* CoInitializeSecurity only */
1979    EOAC_DYNAMIC            = 0x10, /* CoInitializeSecurity only */
1980    EOAC_STATIC_CLOAKING    = 0x20,
1981    EOAC_DYNAMIC_CLOAKING   = 0x40,
1982    EOAC_ANY_AUTHORITY      = 0x80,
1983    EOAC_MAKE_FULLSIC       = 0x100,
1984    EOAC_REQUIRE_FULLSIC    = 0x200, /* CoInitializeSecurity only */
1985    EOAC_AUTO_IMPERSONATE   = 0x400, /* CoInitializeSecurity only */
1986    EOAC_DEFAULT            = 0x800,
1987    EOAC_DISABLE_AAA        = 0x1000, /* CoInitializeSecurity only */
1988    EOAC_NO_CUSTOM_MARSHAL  = 0x2000, /* CoInitializeSecurity only */
1989  } EOLE_AUTHENTICATION_CAPABILITIES;
1990
1991  HRESULT QueryBlanket(
1992    [in] IUnknown *pProxy,
1993    [out] DWORD *pAuthnSvc,
1994    [out] DWORD *pAuthzSvc,
1995    [out] OLECHAR **pServerPrincName,
1996    [out] DWORD *pAuthnLevel,
1997    [out] DWORD *pImpLevel,
1998    [out] void **pAuthInfo,
1999    [out] DWORD *pCapabilities);
2000
2001  HRESULT SetBlanket(
2002    [in] IUnknown *pProxy,
2003    [in] DWORD AuthnSvc,
2004    [in] DWORD AuthzSvc,
2005    [in] OLECHAR *pServerPrincName,
2006    [in] DWORD AuthnLevel,
2007    [in] DWORD ImpLevel,
2008    [in] void *pAuthInfo,
2009    [in] DWORD Capabilities);
2010
2011  HRESULT CopyProxy(
2012    [in] IUnknown *pProxy,
2013    [out] IUnknown **ppCopy);
2014}
2015
2016[
2017  local,
2018  object,
2019  uuid(0000013E-0000-0000-C000-000000000046)
2020]
2021interface IServerSecurity : IUnknown
2022{
2023  HRESULT QueryBlanket(
2024    [out] DWORD *pAuthnSvc,
2025    [out] DWORD *pAuthzSvc,
2026    [out] OLECHAR **pServerPrincName,
2027    [out] DWORD *pAuthnLevel,
2028    [out] DWORD *pImpLevel,
2029    [out] void **pPrivs,
2030    [out] DWORD *pCapabilities);
2031
2032  HRESULT ImpersonateClient();
2033
2034  HRESULT RevertToSelf();
2035
2036  BOOL IsImpersonating();
2037}
2038
2039[
2040  local,
2041  object,
2042  uuid(00000024-0000-0000-C000-000000000046)
2043]
2044interface IAsyncSetup : IUnknown
2045{
2046  HRESULT GetAsyncManager(
2047    [in] REFIID riid,
2048    [in] IUnknown *pOuter,
2049    [in] DWORD dwFlags,
2050    [out] IUnknown **ppInner,
2051    [out] IAsyncManager **ppAsyncMgr);
2052}
2053
2054[
2055    object,
2056    uuid(0e6d4d92-6738-11cf-9608-00aa00680db4)
2057]
2058interface IDirectWriterLock : IUnknown
2059{
2060    HRESULT WaitForWriteAccess(
2061        [in] DWORD dwTimeout);
2062
2063    HRESULT ReleaseWriteAccess();
2064
2065    HRESULT HaveWriteAccess();
2066}
2067
2068[
2069    object,
2070    uuid(00000030-0000-0000-C000-000000000046)
2071]
2072
2073interface ISynchronize : IUnknown
2074{
2075    HRESULT Wait(
2076        [in] DWORD dwFlags,
2077        [in] DWORD dwMilliseconds);
2078
2079    HRESULT Signal();
2080
2081    HRESULT Reset();
2082}
2083
2084
2085[
2086    local,
2087    object,
2088    uuid(00000031-0000-0000-C000-000000000046)
2089]
2090interface ISynchronizeHandle : IUnknown
2091{
2092    HRESULT GetHandle(
2093        [out] HANDLE *ph);
2094}
2095
2096
2097[
2098    local,
2099    object,
2100    uuid(00000032-0000-0000-C000-000000000046)
2101]
2102interface ISynchronizeEvent : ISynchronizeHandle
2103{
2104    HRESULT SetEventHandle(
2105        [in] HANDLE *ph);
2106}
2107
2108
2109[
2110    local,
2111    object,
2112    uuid(00000033-0000-0000-C000-000000000046)
2113]
2114interface ISynchronizeContainer : IUnknown
2115{
2116    HRESULT AddSynchronize(
2117        [in] ISynchronize *pSync);
2118
2119    HRESULT WaitMultiple(
2120        [in] DWORD dwFlags,
2121        [in] DWORD dwTimeOut,
2122        [out] ISynchronize **ppSync);
2123}
2124
2125[
2126    local,
2127    object,
2128    uuid(00000025-0000-0000-C000-000000000046)
2129]
2130interface ISynchronizeMutex : ISynchronize
2131{
2132    HRESULT ReleaseMutex();
2133}
2134
2135[
2136    local,
2137    object,
2138    uuid(00000029-0000-0000-C000-000000000046)
2139]
2140
2141interface ICancelMethodCalls : IUnknown
2142{
2143    typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS;
2144
2145    HRESULT Cancel(
2146        [in] ULONG ulSeconds);
2147
2148    HRESULT TestCancel();
2149}
2150
2151[
2152  local,
2153  object,
2154  uuid(0000002A-0000-0000-C000-000000000046)
2155]
2156interface IAsyncManager : IUnknown
2157{
2158  typedef enum tagDCOM_CALL_STATE {
2159    DCOM_NONE          = 0,
2160    DCOM_CALL_COMPLETE = 1,
2161    DCOM_CALL_CANCELED = 2
2162  } DCOM_CALL_STATE;
2163
2164  HRESULT CompleteCall(
2165    [in] HRESULT Result);
2166
2167  HRESULT GetCallContext(
2168    [in] REFIID riid,
2169    [out] void **pInterface);
2170
2171  HRESULT GetState(
2172    [out] ULONG *pulStateFlags);
2173}
2174
2175[
2176    local,
2177    object,
2178    uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
2179    pointer_default(unique)
2180]
2181interface ICallFactory : IUnknown
2182{
2183    HRESULT CreateCall(
2184        [in] REFIID riid,
2185        [in] IUnknown *pCtrlUnk,
2186        [in] REFIID riid2,
2187        [out, iid_is(riid2)] IUnknown **ppv);
2188}
2189
2190[
2191    local,
2192    object,
2193    uuid(00000144-0000-0000-C000-000000000046)
2194]
2195interface IRpcOptions : IUnknown
2196{
2197    HRESULT Set(
2198        [in] IUnknown *pPrx,
2199        [in] DWORD dwProperty,
2200        [in] ULONG_PTR dwValue);
2201
2202    HRESULT Query(
2203        [in] IUnknown *pPrx,
2204        [in] DWORD dwProperty,
2205        [out] ULONG_PTR *pdwValue);
2206}
2207
2208enum {
2209   COMBND_RPCTIMEOUT = 1,
2210   COMBND_SERVER_LOCALITY = 2
2211};
2212
2213enum {
2214   SERVER_LOCALITY_PROCESS_LOCAL = 0,
2215   SERVER_LOCALITY_MACHINE_LOCAL = 1,
2216   SERVER_LOCALITY_REMOTE = 2
2217};
2218
2219[
2220    local,
2221    object,
2222    uuid(00000149-0000-0000-C000-000000000046),
2223    pointer_default(unique)
2224]
2225interface IRpcHelper : IUnknown
2226{
2227    HRESULT GetDCOMProtocolVersion(
2228        [out] DWORD *pComVersion);
2229
2230    HRESULT GetIIDFromOBJREF(
2231        [in] void *pObjRef,
2232        [out] IID **piid);
2233}
2234
2235[
2236    local,
2237    object,
2238    uuid(eb0cb9e8-7996-11d2-872e-0000f8080859)
2239]
2240interface IReleaseMarshalBuffers : IUnknown
2241{
2242    HRESULT ReleaseMarshalBuffer(
2243        [in] RPCOLEMESSAGE *pMsg,
2244        [in] DWORD dwFlags,
2245        [in, unique] IUnknown *pChnl);
2246}
2247
2248[
2249    local,
2250    object,
2251    uuid(0000002B-0000-0000-C000-000000000046)
2252]
2253interface IWaitMultiple : IUnknown
2254{
2255    HRESULT WaitMultiple(
2256        [in] DWORD timeout,
2257        [out] ISynchronize **pSync);
2258    HRESULT AddSynchronize(
2259        [in] ISynchronize *pSync);
2260}
2261
2262
2263[
2264    object,
2265    uuid(00000026-0000-0000-C000-000000000046)
2266]
2267interface IUrlMon : IUnknown
2268{
2269    HRESULT AsyncGetClassBits(
2270        [in] REFCLSID rclsid,
2271        [in, unique] LPCWSTR pszTYPE,
2272        [in, unique] LPCWSTR pszExt,
2273        [in] DWORD dwFileVersionMS,
2274        [in] DWORD dwFileVersionLS,
2275        [in, unique] LPCWSTR pszCodeBase,
2276        [in] IBindCtx *pbc,
2277        [in] DWORD dwClassContext,
2278        [in] REFIID riid,
2279        [in] DWORD flags);
2280}
2281
2282[
2283    local,
2284    object,
2285    uuid(00000145-0000-0000-C000-000000000046)
2286]
2287interface IForegroundTransfer : IUnknown
2288{
2289    HRESULT AllowForegroundTransfer(
2290        [in] void *lpvReserved);
2291}
2292
2293[
2294    local,
2295    object,
2296    uuid(00000147-0000-0000-C000-000000000046)
2297]
2298interface IAddrTrackingControl : IUnknown
2299{
2300    typedef [unique] IAddrTrackingControl *LPADDRTRACKINGCONTROL;
2301
2302    HRESULT EnableCOMDynamicAddrTracking();
2303    HRESULT DisableCOMDynamicAddrTracking();
2304}
2305
2306[
2307    local,
2308    object,
2309    uuid(00000148-0000-0000-C000-000000000046)
2310]
2311interface IAddrExclusionControl : IUnknown
2312{
2313    typedef [unique] IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
2314
2315    HRESULT GetCurrentAddrExclusionList(
2316        [in] REFIID riid,
2317        [out, iid_is(riid)] void **ppEnumerator);
2318    HRESULT UpdateAddrExclusionList(
2319        [in] IUnknown *pEnumerator);
2320}
2321
2322typedef enum _APTTYPE {
2323    APTTYPE_CURRENT = -1,
2324    APTTYPE_STA     = 0,
2325    APTTYPE_MTA     = 1,
2326    APTTYPE_NA      = 2,
2327    APTTYPE_MAINSTA = 3
2328} APTTYPE;
2329
2330typedef enum _APTTYPEQUALIFIER {
2331    APTTYPEQUALIFIER_NONE                = 0,
2332    APTTYPEQUALIFIER_IMPLICIT_MTA        = 1,
2333    APTTYPEQUALIFIER_NA_ON_MTA           = 2,
2334    APTTYPEQUALIFIER_NA_ON_STA           = 3,
2335    APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA  = 4,
2336    APTTYPEQUALIFIER_NA_ON_MAINSTA       = 5
2337} APTTYPEQUALIFIER;
2338
2339typedef enum _THDTYPE {
2340    THDTYPE_BLOCKMESSAGES   = 0,
2341    THDTYPE_PROCESSMESSAGES = 1
2342} THDTYPE;
2343
2344[
2345    local,
2346    object,
2347    uuid(000001ce-0000-0000-C000-000000000046),
2348    pointer_default(unique)
2349]
2350interface IComThreadingInfo : IUnknown
2351{
2352    HRESULT GetCurrentApartmentType(
2353        [out] APTTYPE *pAptType);
2354    HRESULT GetCurrentThreadType(
2355        [out] THDTYPE *pThreadType);
2356    HRESULT GetCurrentLogicalThreadId(
2357        [out] GUID *pguidLogicalThreadId);
2358    HRESULT SetCurrentLogicalThreadId(
2359        [in] REFGUID rguid);
2360}
2361
2362
2363[
2364    object,
2365    pointer_default(unique),
2366    uuid(72380d55-8d2b-43a3-8513-2b6ef31434e9)
2367]
2368interface IProcessInitControl : IUnknown
2369{
2370    HRESULT ResetInitializerTimeout(
2371        [in] DWORD dwSecondsRemaining);
2372}
2373
2374[
2375    local,
2376    object,
2377    uuid(00000034-0000-0000-C000-000000000046),
2378    pointer_default(unique)
2379]
2380interface IInitializeSpy : IUnknown
2381{
2382    typedef [unique] IInitializeSpy *LPINITIALIZESPY;
2383
2384    HRESULT PreInitialize(
2385        [in] DWORD dwCoInit,
2386        [in] DWORD dwCurThreadAptRefs);
2387
2388    HRESULT PostInitialize(
2389        [in] HRESULT hrCoInit,
2390        [in] DWORD dwCoInit,
2391        [in] DWORD dwNewThreadAptRefs);
2392
2393    HRESULT PreUninitialize(
2394        [in] DWORD dwCurThreadAptRefs);
2395
2396    HRESULT PostUninitialize(
2397        [in] DWORD dwNewThreadAptRefs);
2398}
2399
2400[
2401    object,
2402    uuid(969dc708-5c76-11d1-8d86-0000f804b057)
2403]
2404interface IThumbnailExtractor : IUnknown
2405{
2406    HRESULT ExtractThumbnail(
2407        [in] IStorage *pStg,
2408        [in] ULONG ulLength,
2409        [in] ULONG ulHeight,
2410        [out] ULONG *pulOutputLength,
2411        [out] ULONG *pulOutputHeight,
2412        [out] HBITMAP *phOutputBitmap);
2413
2414
2415    HRESULT OnFileUpdated(
2416        [in] IStorage *pStg);
2417}
2418
2419typedef enum tagGLOBALOPT_PROPERTIES
2420{
2421    COMGLB_EXCEPTION_HANDLING     = 1,
2422    COMGLB_APPID                  = 2,
2423    COMGLB_RPC_THREADPOOL_SETTING = 3
2424} GLOBALOPT_PROPERTIES;
2425
2426typedef enum tagGLOBALOPT_EH_VALUES
2427{
2428    COMGLB_EXCEPTION_HANDLE               = 0,
2429    COMGLB_EXCEPTION_DONOT_HANDLE_FATAL   = 1,
2430    COMGLB_EXCEPTION_DONOT_HANDLE         = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL,
2431    COMGLB_EXCEPTION_DONOT_HANDLE_ANY     = 2
2432} GLOBALOPT_EH_VALUES;
2433
2434typedef enum tagGLOBALOPT_RPCTP_VALUES
2435{
2436    COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0,
2437    COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1
2438} GLOBALOPT_RPCTP_VALUES;
2439
2440
2441[
2442    object,
2443    local,
2444    pointer_default(unique),
2445    uuid(0000015B-0000-0000-C000-000000000046)
2446]
2447interface IGlobalOptions : IUnknown
2448{
2449    HRESULT Set([in] GLOBALOPT_PROPERTIES property, [in] ULONG_PTR value);
2450    HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);
2451}
2452
2453[
2454    object,
2455    pointer_default(unique),
2456    uuid(947990de-cc28-11d2-a0f7-00805f858fb1)
2457]
2458interface IDummyHICONIncluder : IUnknown
2459{
2460    HRESULT Dummy([in] HICON hIcon, [in] HDC hdc);
2461}
2462
2463[
2464    object,
2465    local,
2466    pointer_default(unique),
2467    uuid(a2f05a09-27a2-42b5-bc0e-ac163ef49d9b)
2468]
2469interface IApartmentShutdown : IUnknown
2470{
2471    void OnUninitialize([in] UINT64 identifier);
2472}
2473
2474cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
2475
2476typedef DWORD CPFLAGS;
2477
2478typedef struct tagContextProperty
2479{
2480    GUID policyId;
2481    CPFLAGS flags;
2482    [unique] IUnknown *pUnk;
2483} ContextProperty;
2484
2485[
2486    local,
2487    object,
2488    uuid(000001c1-0000-0000-C000-000000000046)
2489]
2490interface IEnumContextProps : IUnknown
2491{
2492    typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS;
2493
2494    HRESULT Next(
2495        [in] ULONG celt,
2496        [out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties,
2497        [out] ULONG *pceltFetched);
2498
2499    HRESULT Skip(
2500        [in] ULONG celt);
2501
2502    HRESULT Reset();
2503
2504    HRESULT Clone(
2505        [out] IEnumContextProps **ppEnumContextProps);
2506
2507    HRESULT Count(
2508        [out] ULONG *pcelt);
2509}
2510
2511[
2512    local,
2513    object,
2514    uuid(000001c0-0000-0000-C000-000000000046)
2515]
2516interface IContext : IUnknown
2517{
2518    HRESULT SetProperty(
2519        [in] REFGUID policyId,
2520        [in] CPFLAGS flags,
2521        [in] IUnknown *pUnk);
2522
2523    HRESULT RemoveProperty(
2524        [in] REFGUID policyId);
2525
2526    HRESULT GetProperty(
2527        [in] REFGUID guid,
2528        [out] CPFLAGS *pFlags,
2529        [out] IUnknown **ppUnk);
2530
2531    HRESULT EnumContextProps(
2532        [out] IEnumContextProps **ppEnumContextProps);
2533}
2534
2535[
2536    local,
2537    object,
2538    uuid(000001c6-0000-0000-c000-000000000046),
2539    pointer_default(unique)
2540]
2541interface IObjContext : IContext
2542{
2543    void Reserved1();
2544    void Reserved2();
2545    void Reserved3();
2546    void Reserved4();
2547    void Reserved5();
2548    void Reserved6();
2549    void Reserved7();
2550}
2551
2552cpp_quote("#endif /* defined USE_COM_CONTEXT_DEF */")
2553