Use a more compatible technique to declare COM interfaces methods,
[wine] / include / objidl.h
1 /*** Autogenerated by WIDL 0.1 from objidl.idl - Do not edit ***/
2 #include "rpc.h"
3 #include "rpcndr.h"
4
5 #ifndef __WIDL_OBJIDL_H
6 #define __WIDL_OBJIDL_H
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 #include "unknwn.h"
11 typedef struct IStream IStream;
12 typedef struct IStream16 IStream16;
13 typedef struct IEnumString IEnumString;
14 typedef struct IRunningObjectTable IRunningObjectTable;
15 typedef struct IMoniker IMoniker;
16 typedef struct IAdviseSink IAdviseSink;
17 typedef struct IAsyncManager IAsyncManager;
18 typedef struct IMarshal IMarshal;
19 typedef IMarshal *LPMARSHAL;
20
21 /*****************************************************************************
22  * IMarshal interface
23  */
24 DEFINE_GUID(IID_IMarshal, 0x00000003, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
25 #if defined(__cplusplus) && !defined(CINTERFACE)
26 struct IMarshal: IUnknown {
27
28     virtual HRESULT STDMETHODCALLTYPE GetUnmarshalClass(
29         REFIID riid,
30         void* pv,
31         DWORD dwDestContext,
32         void* pvDestContext,
33         DWORD mshlflags,
34         CLSID* pCid) = 0;
35
36     virtual HRESULT STDMETHODCALLTYPE GetMarshalSizeMax(
37         REFIID riid,
38         void* pv,
39         DWORD dwDestContext,
40         void* pvDestContext,
41         DWORD mshlflags,
42         DWORD* pSize) = 0;
43
44     virtual HRESULT STDMETHODCALLTYPE MarshalInterface(
45         IStream* pStm,
46         REFIID riid,
47         void* pv,
48         DWORD dwDestContext,
49         void* pvDestContext,
50         DWORD mshlflags) = 0;
51
52     virtual HRESULT STDMETHODCALLTYPE UnmarshalInterface(
53         IStream* pStm,
54         REFIID riid,
55         void** ppv) = 0;
56
57     virtual HRESULT STDMETHODCALLTYPE ReleaseMarshalData(
58         IStream* pStm) = 0;
59
60     virtual HRESULT STDMETHODCALLTYPE DisconnectObject(
61         DWORD dwReserved) = 0;
62
63 } ICOM_COM_INTERFACE_ATTRIBUTE;
64 #else
65 typedef struct IMarshalVtbl IMarshalVtbl;
66 struct IMarshal {
67     const IMarshalVtbl* lpVtbl;
68 };
69 struct IMarshalVtbl {
70     ICOM_MSVTABLE_COMPAT_FIELDS
71
72     /*** IUnknown methods ***/
73     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
74         IMarshal* This,
75         REFIID riid,
76         void** ppvObject);
77
78     ULONG (STDMETHODCALLTYPE *AddRef)(
79         IMarshal* This);
80
81     ULONG (STDMETHODCALLTYPE *Release)(
82         IMarshal* This);
83
84     /*** IMarshal methods ***/
85     HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
86         IMarshal* This,
87         REFIID riid,
88         void* pv,
89         DWORD dwDestContext,
90         void* pvDestContext,
91         DWORD mshlflags,
92         CLSID* pCid);
93
94     HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
95         IMarshal* This,
96         REFIID riid,
97         void* pv,
98         DWORD dwDestContext,
99         void* pvDestContext,
100         DWORD mshlflags,
101         DWORD* pSize);
102
103     HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
104         IMarshal* This,
105         IStream* pStm,
106         REFIID riid,
107         void* pv,
108         DWORD dwDestContext,
109         void* pvDestContext,
110         DWORD mshlflags);
111
112     HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
113         IMarshal* This,
114         IStream* pStm,
115         REFIID riid,
116         void** ppv);
117
118     HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
119         IMarshal* This,
120         IStream* pStm);
121
122     HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
123         IMarshal* This,
124         DWORD dwReserved);
125
126 };
127
128 #define IMarshal_IMETHODS \
129     /*** IUnknown methods ***/ \
130     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
131     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
132     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
133     /*** IMarshal methods ***/ \
134     HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(INTERFACE *This, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, CLSID* pCid); \
135     HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(INTERFACE *This, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, DWORD* pSize); \
136     HRESULT (STDMETHODCALLTYPE *MarshalInterface)(INTERFACE *This, IStream* pStm, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags); \
137     HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(INTERFACE *This, IStream* pStm, REFIID riid, void** ppv); \
138     HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(INTERFACE *This, IStream* pStm); \
139     HRESULT (STDMETHODCALLTYPE *DisconnectObject)(INTERFACE *This, DWORD dwReserved);
140
141 /*** IUnknown methods ***/
142 #define IMarshal_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
143 #define IMarshal_AddRef(p) (p)->lpVtbl->AddRef(p)
144 #define IMarshal_Release(p) (p)->lpVtbl->Release(p)
145 /*** IMarshal methods ***/
146 #define IMarshal_GetUnmarshalClass(p,a,b,c,d,e,f) (p)->lpVtbl->GetUnmarshalClass(p,a,b,c,d,e,f)
147 #define IMarshal_GetMarshalSizeMax(p,a,b,c,d,e,f) (p)->lpVtbl->GetMarshalSizeMax(p,a,b,c,d,e,f)
148 #define IMarshal_MarshalInterface(p,a,b,c,d,e,f) (p)->lpVtbl->MarshalInterface(p,a,b,c,d,e,f)
149 #define IMarshal_UnmarshalInterface(p,a,b,c) (p)->lpVtbl->UnmarshalInterface(p,a,b,c)
150 #define IMarshal_ReleaseMarshalData(p,a) (p)->lpVtbl->ReleaseMarshalData(p,a)
151 #define IMarshal_DisconnectObject(p,a) (p)->lpVtbl->DisconnectObject(p,a)
152
153 #endif
154
155 HRESULT CALLBACK IMarshal_GetUnmarshalClass_Proxy(
156     IMarshal* This,
157     REFIID riid,
158     void* pv,
159     DWORD dwDestContext,
160     void* pvDestContext,
161     DWORD mshlflags,
162     CLSID* pCid);
163 void __RPC_STUB IMarshal_GetUnmarshalClass_Stub(
164     struct IRpcStubBuffer* This,
165     struct IRpcChannelBuffer* pRpcChannelBuffer,
166     PRPC_MESSAGE pRpcMessage,
167     DWORD* pdwStubPhase);
168 HRESULT CALLBACK IMarshal_GetMarshalSizeMax_Proxy(
169     IMarshal* This,
170     REFIID riid,
171     void* pv,
172     DWORD dwDestContext,
173     void* pvDestContext,
174     DWORD mshlflags,
175     DWORD* pSize);
176 void __RPC_STUB IMarshal_GetMarshalSizeMax_Stub(
177     struct IRpcStubBuffer* This,
178     struct IRpcChannelBuffer* pRpcChannelBuffer,
179     PRPC_MESSAGE pRpcMessage,
180     DWORD* pdwStubPhase);
181 HRESULT CALLBACK IMarshal_MarshalInterface_Proxy(
182     IMarshal* This,
183     IStream* pStm,
184     REFIID riid,
185     void* pv,
186     DWORD dwDestContext,
187     void* pvDestContext,
188     DWORD mshlflags);
189 void __RPC_STUB IMarshal_MarshalInterface_Stub(
190     struct IRpcStubBuffer* This,
191     struct IRpcChannelBuffer* pRpcChannelBuffer,
192     PRPC_MESSAGE pRpcMessage,
193     DWORD* pdwStubPhase);
194 HRESULT CALLBACK IMarshal_UnmarshalInterface_Proxy(
195     IMarshal* This,
196     IStream* pStm,
197     REFIID riid,
198     void** ppv);
199 void __RPC_STUB IMarshal_UnmarshalInterface_Stub(
200     struct IRpcStubBuffer* This,
201     struct IRpcChannelBuffer* pRpcChannelBuffer,
202     PRPC_MESSAGE pRpcMessage,
203     DWORD* pdwStubPhase);
204 HRESULT CALLBACK IMarshal_ReleaseMarshalData_Proxy(
205     IMarshal* This,
206     IStream* pStm);
207 void __RPC_STUB IMarshal_ReleaseMarshalData_Stub(
208     struct IRpcStubBuffer* This,
209     struct IRpcChannelBuffer* pRpcChannelBuffer,
210     PRPC_MESSAGE pRpcMessage,
211     DWORD* pdwStubPhase);
212 HRESULT CALLBACK IMarshal_DisconnectObject_Proxy(
213     IMarshal* This,
214     DWORD dwReserved);
215 void __RPC_STUB IMarshal_DisconnectObject_Stub(
216     struct IRpcStubBuffer* This,
217     struct IRpcChannelBuffer* pRpcChannelBuffer,
218     PRPC_MESSAGE pRpcMessage,
219     DWORD* pdwStubPhase);
220
221 typedef struct IStdMarshalInfo IStdMarshalInfo;
222 typedef IStdMarshalInfo *LPSTDMARSHALINFO;
223
224 /*****************************************************************************
225  * IStdMarshalInfo interface
226  */
227 DEFINE_GUID(IID_IStdMarshalInfo, 0x00000018, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
228 #if defined(__cplusplus) && !defined(CINTERFACE)
229 struct IStdMarshalInfo: IUnknown {
230
231     virtual HRESULT STDMETHODCALLTYPE GetClassForHandler(
232         DWORD dwDestContext,
233         void* pvDestContext,
234         CLSID* pClsid) = 0;
235
236 } ICOM_COM_INTERFACE_ATTRIBUTE;
237 #else
238 typedef struct IStdMarshalInfoVtbl IStdMarshalInfoVtbl;
239 struct IStdMarshalInfo {
240     const IStdMarshalInfoVtbl* lpVtbl;
241 };
242 struct IStdMarshalInfoVtbl {
243     ICOM_MSVTABLE_COMPAT_FIELDS
244
245     /*** IUnknown methods ***/
246     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
247         IStdMarshalInfo* This,
248         REFIID riid,
249         void** ppvObject);
250
251     ULONG (STDMETHODCALLTYPE *AddRef)(
252         IStdMarshalInfo* This);
253
254     ULONG (STDMETHODCALLTYPE *Release)(
255         IStdMarshalInfo* This);
256
257     /*** IStdMarshalInfo methods ***/
258     HRESULT (STDMETHODCALLTYPE *GetClassForHandler)(
259         IStdMarshalInfo* This,
260         DWORD dwDestContext,
261         void* pvDestContext,
262         CLSID* pClsid);
263
264 };
265
266 #define IStdMarshalInfo_IMETHODS \
267     /*** IUnknown methods ***/ \
268     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
269     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
270     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
271     /*** IStdMarshalInfo methods ***/ \
272     HRESULT (STDMETHODCALLTYPE *GetClassForHandler)(INTERFACE *This, DWORD dwDestContext, void* pvDestContext, CLSID* pClsid);
273
274 /*** IUnknown methods ***/
275 #define IStdMarshalInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
276 #define IStdMarshalInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
277 #define IStdMarshalInfo_Release(p) (p)->lpVtbl->Release(p)
278 /*** IStdMarshalInfo methods ***/
279 #define IStdMarshalInfo_GetClassForHandler(p,a,b,c) (p)->lpVtbl->GetClassForHandler(p,a,b,c)
280
281 #endif
282
283 HRESULT CALLBACK IStdMarshalInfo_GetClassForHandler_Proxy(
284     IStdMarshalInfo* This,
285     DWORD dwDestContext,
286     void* pvDestContext,
287     CLSID* pClsid);
288 void __RPC_STUB IStdMarshalInfo_GetClassForHandler_Stub(
289     struct IRpcStubBuffer* This,
290     struct IRpcChannelBuffer* pRpcChannelBuffer,
291     PRPC_MESSAGE pRpcMessage,
292     DWORD* pdwStubPhase);
293
294 typedef struct IExternalConnection IExternalConnection;
295 typedef IExternalConnection *LPEXTERNALCONNECTION;
296
297 typedef enum tagEXTCONN {
298     EXTCONN_STRONG = 0x1,
299     EXTCONN_WEAK = 0x2,
300     EXTCONN_CALLABLE = 0x4
301 } EXTCONN;
302
303 /*****************************************************************************
304  * IExternalConnection interface
305  */
306 DEFINE_GUID(IID_IExternalConnection, 0x00000019, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
307 #if defined(__cplusplus) && !defined(CINTERFACE)
308 struct IExternalConnection: IUnknown {
309
310     virtual DWORD STDMETHODCALLTYPE AddConnection(
311         DWORD extconn,
312         DWORD reserved) = 0;
313
314     virtual DWORD STDMETHODCALLTYPE ReleaseConnection(
315         DWORD extconn,
316         DWORD reserved,
317         BOOL fLastReleaseCloses) = 0;
318
319 } ICOM_COM_INTERFACE_ATTRIBUTE;
320 #else
321 typedef struct IExternalConnectionVtbl IExternalConnectionVtbl;
322 struct IExternalConnection {
323     const IExternalConnectionVtbl* lpVtbl;
324 };
325 struct IExternalConnectionVtbl {
326     ICOM_MSVTABLE_COMPAT_FIELDS
327
328     /*** IUnknown methods ***/
329     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
330         IExternalConnection* This,
331         REFIID riid,
332         void** ppvObject);
333
334     ULONG (STDMETHODCALLTYPE *AddRef)(
335         IExternalConnection* This);
336
337     ULONG (STDMETHODCALLTYPE *Release)(
338         IExternalConnection* This);
339
340     /*** IExternalConnection methods ***/
341     DWORD (STDMETHODCALLTYPE *AddConnection)(
342         IExternalConnection* This,
343         DWORD extconn,
344         DWORD reserved);
345
346     DWORD (STDMETHODCALLTYPE *ReleaseConnection)(
347         IExternalConnection* This,
348         DWORD extconn,
349         DWORD reserved,
350         BOOL fLastReleaseCloses);
351
352 };
353
354 #define IExternalConnection_IMETHODS \
355     /*** IUnknown methods ***/ \
356     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
357     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
358     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
359     /*** IExternalConnection methods ***/ \
360     DWORD (STDMETHODCALLTYPE *AddConnection)(INTERFACE *This, DWORD extconn, DWORD reserved); \
361     DWORD (STDMETHODCALLTYPE *ReleaseConnection)(INTERFACE *This, DWORD extconn, DWORD reserved, BOOL fLastReleaseCloses);
362
363 /*** IUnknown methods ***/
364 #define IExternalConnection_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
365 #define IExternalConnection_AddRef(p) (p)->lpVtbl->AddRef(p)
366 #define IExternalConnection_Release(p) (p)->lpVtbl->Release(p)
367 /*** IExternalConnection methods ***/
368 #define IExternalConnection_AddConnection(p,a,b) (p)->lpVtbl->AddConnection(p,a,b)
369 #define IExternalConnection_ReleaseConnection(p,a,b,c) (p)->lpVtbl->ReleaseConnection(p,a,b,c)
370
371 #endif
372
373 DWORD CALLBACK IExternalConnection_AddConnection_Proxy(
374     IExternalConnection* This,
375     DWORD extconn,
376     DWORD reserved);
377 void __RPC_STUB IExternalConnection_AddConnection_Stub(
378     struct IRpcStubBuffer* This,
379     struct IRpcChannelBuffer* pRpcChannelBuffer,
380     PRPC_MESSAGE pRpcMessage,
381     DWORD* pdwStubPhase);
382 DWORD CALLBACK IExternalConnection_ReleaseConnection_Proxy(
383     IExternalConnection* This,
384     DWORD extconn,
385     DWORD reserved,
386     BOOL fLastReleaseCloses);
387 void __RPC_STUB IExternalConnection_ReleaseConnection_Stub(
388     struct IRpcStubBuffer* This,
389     struct IRpcChannelBuffer* pRpcChannelBuffer,
390     PRPC_MESSAGE pRpcMessage,
391     DWORD* pdwStubPhase);
392
393 typedef struct IMultiQI IMultiQI;
394 typedef IMultiQI *LPMULTIQI;
395
396 typedef struct tagMULTI_QI {
397     const IID *pIID;
398     IUnknown *pItf;
399     HRESULT hr;
400 } MULTI_QI;
401
402 /*****************************************************************************
403  * IMultiQI interface
404  */
405 DEFINE_GUID(IID_IMultiQI, 0x00000020, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
406 #if defined(__cplusplus) && !defined(CINTERFACE)
407 struct IMultiQI: IUnknown {
408
409     virtual HRESULT STDMETHODCALLTYPE QueryMultipleInterfaces(
410         ULONG cMQIs,
411         MULTI_QI* pMQIs) = 0;
412
413 } ICOM_COM_INTERFACE_ATTRIBUTE;
414 #else
415 typedef struct IMultiQIVtbl IMultiQIVtbl;
416 struct IMultiQI {
417     const IMultiQIVtbl* lpVtbl;
418 };
419 struct IMultiQIVtbl {
420     ICOM_MSVTABLE_COMPAT_FIELDS
421
422     /*** IUnknown methods ***/
423     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
424         IMultiQI* This,
425         REFIID riid,
426         void** ppvObject);
427
428     ULONG (STDMETHODCALLTYPE *AddRef)(
429         IMultiQI* This);
430
431     ULONG (STDMETHODCALLTYPE *Release)(
432         IMultiQI* This);
433
434     /*** IMultiQI methods ***/
435     HRESULT (STDMETHODCALLTYPE *QueryMultipleInterfaces)(
436         IMultiQI* This,
437         ULONG cMQIs,
438         MULTI_QI* pMQIs);
439
440 };
441
442 #define IMultiQI_IMETHODS \
443     /*** IUnknown methods ***/ \
444     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
445     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
446     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
447     /*** IMultiQI methods ***/ \
448     HRESULT (STDMETHODCALLTYPE *QueryMultipleInterfaces)(INTERFACE *This, ULONG cMQIs, MULTI_QI* pMQIs);
449
450 /*** IUnknown methods ***/
451 #define IMultiQI_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
452 #define IMultiQI_AddRef(p) (p)->lpVtbl->AddRef(p)
453 #define IMultiQI_Release(p) (p)->lpVtbl->Release(p)
454 /*** IMultiQI methods ***/
455 #define IMultiQI_QueryMultipleInterfaces(p,a,b) (p)->lpVtbl->QueryMultipleInterfaces(p,a,b)
456
457 #endif
458
459 HRESULT CALLBACK IMultiQI_QueryMultipleInterfaces_Proxy(
460     IMultiQI* This,
461     ULONG cMQIs,
462     MULTI_QI* pMQIs);
463 void __RPC_STUB IMultiQI_QueryMultipleInterfaces_Stub(
464     struct IRpcStubBuffer* This,
465     struct IRpcChannelBuffer* pRpcChannelBuffer,
466     PRPC_MESSAGE pRpcMessage,
467     DWORD* pdwStubPhase);
468
469 typedef struct IMalloc IMalloc;
470 typedef IMalloc *LPMALLOC;
471
472 /*****************************************************************************
473  * IMalloc interface
474  */
475 DEFINE_GUID(IID_IMalloc, 0x00000002, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
476 #if defined(__cplusplus) && !defined(CINTERFACE)
477 struct IMalloc: IUnknown {
478
479     virtual LPVOID STDMETHODCALLTYPE Alloc(
480         ULONG cb) = 0;
481
482     virtual LPVOID STDMETHODCALLTYPE Realloc(
483         LPVOID pv,
484         ULONG cb) = 0;
485
486     virtual void STDMETHODCALLTYPE Free(
487         LPVOID pv) = 0;
488
489     virtual ULONG STDMETHODCALLTYPE GetSize(
490         LPVOID pv) = 0;
491
492     virtual int STDMETHODCALLTYPE DidAlloc(
493         LPVOID pv) = 0;
494
495     virtual void STDMETHODCALLTYPE HeapMinimize(
496         ) = 0;
497
498 } ICOM_COM_INTERFACE_ATTRIBUTE;
499 #else
500 typedef struct IMallocVtbl IMallocVtbl;
501 struct IMalloc {
502     const IMallocVtbl* lpVtbl;
503 };
504 struct IMallocVtbl {
505     ICOM_MSVTABLE_COMPAT_FIELDS
506
507     /*** IUnknown methods ***/
508     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
509         IMalloc* This,
510         REFIID riid,
511         void** ppvObject);
512
513     ULONG (STDMETHODCALLTYPE *AddRef)(
514         IMalloc* This);
515
516     ULONG (STDMETHODCALLTYPE *Release)(
517         IMalloc* This);
518
519     /*** IMalloc methods ***/
520     LPVOID (STDMETHODCALLTYPE *Alloc)(
521         IMalloc* This,
522         ULONG cb);
523
524     LPVOID (STDMETHODCALLTYPE *Realloc)(
525         IMalloc* This,
526         LPVOID pv,
527         ULONG cb);
528
529     void (STDMETHODCALLTYPE *Free)(
530         IMalloc* This,
531         LPVOID pv);
532
533     ULONG (STDMETHODCALLTYPE *GetSize)(
534         IMalloc* This,
535         LPVOID pv);
536
537     int (STDMETHODCALLTYPE *DidAlloc)(
538         IMalloc* This,
539         LPVOID pv);
540
541     void (STDMETHODCALLTYPE *HeapMinimize)(
542         IMalloc* This);
543
544 };
545
546 #define IMalloc_IMETHODS \
547     /*** IUnknown methods ***/ \
548     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
549     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
550     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
551     /*** IMalloc methods ***/ \
552     LPVOID (STDMETHODCALLTYPE *Alloc)(INTERFACE *This, ULONG cb); \
553     LPVOID (STDMETHODCALLTYPE *Realloc)(INTERFACE *This, LPVOID pv, ULONG cb); \
554     void (STDMETHODCALLTYPE *Free)(INTERFACE *This, LPVOID pv); \
555     ULONG (STDMETHODCALLTYPE *GetSize)(INTERFACE *This, LPVOID pv); \
556     int (STDMETHODCALLTYPE *DidAlloc)(INTERFACE *This, LPVOID pv); \
557     void (STDMETHODCALLTYPE *HeapMinimize)(INTERFACE *This);
558
559 /*** IUnknown methods ***/
560 #define IMalloc_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
561 #define IMalloc_AddRef(p) (p)->lpVtbl->AddRef(p)
562 #define IMalloc_Release(p) (p)->lpVtbl->Release(p)
563 /*** IMalloc methods ***/
564 #define IMalloc_Alloc(p,a) (p)->lpVtbl->Alloc(p,a)
565 #define IMalloc_Realloc(p,a,b) (p)->lpVtbl->Realloc(p,a,b)
566 #define IMalloc_Free(p,a) (p)->lpVtbl->Free(p,a)
567 #define IMalloc_GetSize(p,a) (p)->lpVtbl->GetSize(p,a)
568 #define IMalloc_DidAlloc(p,a) (p)->lpVtbl->DidAlloc(p,a)
569 #define IMalloc_HeapMinimize(p) (p)->lpVtbl->HeapMinimize(p)
570
571 #endif
572
573 LPVOID CALLBACK IMalloc_Alloc_Proxy(
574     IMalloc* This,
575     ULONG cb);
576 void __RPC_STUB IMalloc_Alloc_Stub(
577     struct IRpcStubBuffer* This,
578     struct IRpcChannelBuffer* pRpcChannelBuffer,
579     PRPC_MESSAGE pRpcMessage,
580     DWORD* pdwStubPhase);
581 LPVOID CALLBACK IMalloc_Realloc_Proxy(
582     IMalloc* This,
583     LPVOID pv,
584     ULONG cb);
585 void __RPC_STUB IMalloc_Realloc_Stub(
586     struct IRpcStubBuffer* This,
587     struct IRpcChannelBuffer* pRpcChannelBuffer,
588     PRPC_MESSAGE pRpcMessage,
589     DWORD* pdwStubPhase);
590 void CALLBACK IMalloc_Free_Proxy(
591     IMalloc* This,
592     LPVOID pv);
593 void __RPC_STUB IMalloc_Free_Stub(
594     struct IRpcStubBuffer* This,
595     struct IRpcChannelBuffer* pRpcChannelBuffer,
596     PRPC_MESSAGE pRpcMessage,
597     DWORD* pdwStubPhase);
598 ULONG CALLBACK IMalloc_GetSize_Proxy(
599     IMalloc* This,
600     LPVOID pv);
601 void __RPC_STUB IMalloc_GetSize_Stub(
602     struct IRpcStubBuffer* This,
603     struct IRpcChannelBuffer* pRpcChannelBuffer,
604     PRPC_MESSAGE pRpcMessage,
605     DWORD* pdwStubPhase);
606 int CALLBACK IMalloc_DidAlloc_Proxy(
607     IMalloc* This,
608     LPVOID pv);
609 void __RPC_STUB IMalloc_DidAlloc_Stub(
610     struct IRpcStubBuffer* This,
611     struct IRpcChannelBuffer* pRpcChannelBuffer,
612     PRPC_MESSAGE pRpcMessage,
613     DWORD* pdwStubPhase);
614 void CALLBACK IMalloc_HeapMinimize_Proxy(
615     IMalloc* This);
616 void __RPC_STUB IMalloc_HeapMinimize_Stub(
617     struct IRpcStubBuffer* This,
618     struct IRpcChannelBuffer* pRpcChannelBuffer,
619     PRPC_MESSAGE pRpcMessage,
620     DWORD* pdwStubPhase);
621
622 typedef struct IMallocSpy IMallocSpy;
623 typedef IMallocSpy *LPMALLOCSPY;
624
625 /*****************************************************************************
626  * IMallocSpy interface
627  */
628 DEFINE_GUID(IID_IMallocSpy, 0x0000001d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
629 #if defined(__cplusplus) && !defined(CINTERFACE)
630 struct IMallocSpy: IUnknown {
631
632     virtual ULONG STDMETHODCALLTYPE PreAlloc(
633         ULONG cbRequest) = 0;
634
635     virtual LPVOID STDMETHODCALLTYPE PostAlloc(
636         LPVOID pActual) = 0;
637
638     virtual LPVOID STDMETHODCALLTYPE PreFree(
639         LPVOID pRequest,
640         BOOL fSpyed) = 0;
641
642     virtual void STDMETHODCALLTYPE PostFree(
643         BOOL fSpyed) = 0;
644
645     virtual ULONG STDMETHODCALLTYPE PreRealloc(
646         LPVOID pRequest,
647         ULONG cbRequest,
648         LPVOID* ppNewRequest,
649         BOOL fSpyed) = 0;
650
651     virtual LPVOID STDMETHODCALLTYPE PostRealloc(
652         LPVOID pActual,
653         BOOL fSpyed) = 0;
654
655     virtual LPVOID STDMETHODCALLTYPE PreGetSize(
656         LPVOID pRequest,
657         BOOL fSpyed) = 0;
658
659     virtual ULONG STDMETHODCALLTYPE PostGetSize(
660         ULONG cbActual,
661         BOOL fSpyed) = 0;
662
663     virtual LPVOID STDMETHODCALLTYPE PreDidAlloc(
664         LPVOID pRequest,
665         BOOL fSpyed) = 0;
666
667     virtual int STDMETHODCALLTYPE PostDidAlloc(
668         LPVOID pRequest,
669         BOOL fSpyed,
670         int fActual) = 0;
671
672     virtual void STDMETHODCALLTYPE PreHeapMinimize(
673         ) = 0;
674
675     virtual void STDMETHODCALLTYPE PostHeapMinimize(
676         ) = 0;
677
678 } ICOM_COM_INTERFACE_ATTRIBUTE;
679 #else
680 typedef struct IMallocSpyVtbl IMallocSpyVtbl;
681 struct IMallocSpy {
682     const IMallocSpyVtbl* lpVtbl;
683 };
684 struct IMallocSpyVtbl {
685     ICOM_MSVTABLE_COMPAT_FIELDS
686
687     /*** IUnknown methods ***/
688     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
689         IMallocSpy* This,
690         REFIID riid,
691         void** ppvObject);
692
693     ULONG (STDMETHODCALLTYPE *AddRef)(
694         IMallocSpy* This);
695
696     ULONG (STDMETHODCALLTYPE *Release)(
697         IMallocSpy* This);
698
699     /*** IMallocSpy methods ***/
700     ULONG (STDMETHODCALLTYPE *PreAlloc)(
701         IMallocSpy* This,
702         ULONG cbRequest);
703
704     LPVOID (STDMETHODCALLTYPE *PostAlloc)(
705         IMallocSpy* This,
706         LPVOID pActual);
707
708     LPVOID (STDMETHODCALLTYPE *PreFree)(
709         IMallocSpy* This,
710         LPVOID pRequest,
711         BOOL fSpyed);
712
713     void (STDMETHODCALLTYPE *PostFree)(
714         IMallocSpy* This,
715         BOOL fSpyed);
716
717     ULONG (STDMETHODCALLTYPE *PreRealloc)(
718         IMallocSpy* This,
719         LPVOID pRequest,
720         ULONG cbRequest,
721         LPVOID* ppNewRequest,
722         BOOL fSpyed);
723
724     LPVOID (STDMETHODCALLTYPE *PostRealloc)(
725         IMallocSpy* This,
726         LPVOID pActual,
727         BOOL fSpyed);
728
729     LPVOID (STDMETHODCALLTYPE *PreGetSize)(
730         IMallocSpy* This,
731         LPVOID pRequest,
732         BOOL fSpyed);
733
734     ULONG (STDMETHODCALLTYPE *PostGetSize)(
735         IMallocSpy* This,
736         ULONG cbActual,
737         BOOL fSpyed);
738
739     LPVOID (STDMETHODCALLTYPE *PreDidAlloc)(
740         IMallocSpy* This,
741         LPVOID pRequest,
742         BOOL fSpyed);
743
744     int (STDMETHODCALLTYPE *PostDidAlloc)(
745         IMallocSpy* This,
746         LPVOID pRequest,
747         BOOL fSpyed,
748         int fActual);
749
750     void (STDMETHODCALLTYPE *PreHeapMinimize)(
751         IMallocSpy* This);
752
753     void (STDMETHODCALLTYPE *PostHeapMinimize)(
754         IMallocSpy* This);
755
756 };
757
758 #define IMallocSpy_IMETHODS \
759     /*** IUnknown methods ***/ \
760     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
761     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
762     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
763     /*** IMallocSpy methods ***/ \
764     ULONG (STDMETHODCALLTYPE *PreAlloc)(INTERFACE *This, ULONG cbRequest); \
765     LPVOID (STDMETHODCALLTYPE *PostAlloc)(INTERFACE *This, LPVOID pActual); \
766     LPVOID (STDMETHODCALLTYPE *PreFree)(INTERFACE *This, LPVOID pRequest, BOOL fSpyed); \
767     void (STDMETHODCALLTYPE *PostFree)(INTERFACE *This, BOOL fSpyed); \
768     ULONG (STDMETHODCALLTYPE *PreRealloc)(INTERFACE *This, LPVOID pRequest, ULONG cbRequest, LPVOID* ppNewRequest, BOOL fSpyed); \
769     LPVOID (STDMETHODCALLTYPE *PostRealloc)(INTERFACE *This, LPVOID pActual, BOOL fSpyed); \
770     LPVOID (STDMETHODCALLTYPE *PreGetSize)(INTERFACE *This, LPVOID pRequest, BOOL fSpyed); \
771     ULONG (STDMETHODCALLTYPE *PostGetSize)(INTERFACE *This, ULONG cbActual, BOOL fSpyed); \
772     LPVOID (STDMETHODCALLTYPE *PreDidAlloc)(INTERFACE *This, LPVOID pRequest, BOOL fSpyed); \
773     int (STDMETHODCALLTYPE *PostDidAlloc)(INTERFACE *This, LPVOID pRequest, BOOL fSpyed, int fActual); \
774     void (STDMETHODCALLTYPE *PreHeapMinimize)(INTERFACE *This); \
775     void (STDMETHODCALLTYPE *PostHeapMinimize)(INTERFACE *This);
776
777 /*** IUnknown methods ***/
778 #define IMallocSpy_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
779 #define IMallocSpy_AddRef(p) (p)->lpVtbl->AddRef(p)
780 #define IMallocSpy_Release(p) (p)->lpVtbl->Release(p)
781 /*** IMallocSpy methods ***/
782 #define IMallocSpy_PreAlloc(p,a) (p)->lpVtbl->PreAlloc(p,a)
783 #define IMallocSpy_PostAlloc(p,a) (p)->lpVtbl->PostAlloc(p,a)
784 #define IMallocSpy_PreFree(p,a,b) (p)->lpVtbl->PreFree(p,a,b)
785 #define IMallocSpy_PostFree(p,a) (p)->lpVtbl->PostFree(p,a)
786 #define IMallocSpy_PreRealloc(p,a,b,c,d) (p)->lpVtbl->PreRealloc(p,a,b,c,d)
787 #define IMallocSpy_PostRealloc(p,a,b) (p)->lpVtbl->PostRealloc(p,a,b)
788 #define IMallocSpy_PreGetSize(p,a,b) (p)->lpVtbl->PreGetSize(p,a,b)
789 #define IMallocSpy_PostGetSize(p,a,b) (p)->lpVtbl->PostGetSize(p,a,b)
790 #define IMallocSpy_PreDidAlloc(p,a,b) (p)->lpVtbl->PreDidAlloc(p,a,b)
791 #define IMallocSpy_PostDidAlloc(p,a,b,c) (p)->lpVtbl->PostDidAlloc(p,a,b,c)
792 #define IMallocSpy_PreHeapMinimize(p) (p)->lpVtbl->PreHeapMinimize(p)
793 #define IMallocSpy_PostHeapMinimize(p) (p)->lpVtbl->PostHeapMinimize(p)
794
795 #endif
796
797 ULONG CALLBACK IMallocSpy_PreAlloc_Proxy(
798     IMallocSpy* This,
799     ULONG cbRequest);
800 void __RPC_STUB IMallocSpy_PreAlloc_Stub(
801     struct IRpcStubBuffer* This,
802     struct IRpcChannelBuffer* pRpcChannelBuffer,
803     PRPC_MESSAGE pRpcMessage,
804     DWORD* pdwStubPhase);
805 LPVOID CALLBACK IMallocSpy_PostAlloc_Proxy(
806     IMallocSpy* This,
807     LPVOID pActual);
808 void __RPC_STUB IMallocSpy_PostAlloc_Stub(
809     struct IRpcStubBuffer* This,
810     struct IRpcChannelBuffer* pRpcChannelBuffer,
811     PRPC_MESSAGE pRpcMessage,
812     DWORD* pdwStubPhase);
813 LPVOID CALLBACK IMallocSpy_PreFree_Proxy(
814     IMallocSpy* This,
815     LPVOID pRequest,
816     BOOL fSpyed);
817 void __RPC_STUB IMallocSpy_PreFree_Stub(
818     struct IRpcStubBuffer* This,
819     struct IRpcChannelBuffer* pRpcChannelBuffer,
820     PRPC_MESSAGE pRpcMessage,
821     DWORD* pdwStubPhase);
822 void CALLBACK IMallocSpy_PostFree_Proxy(
823     IMallocSpy* This,
824     BOOL fSpyed);
825 void __RPC_STUB IMallocSpy_PostFree_Stub(
826     struct IRpcStubBuffer* This,
827     struct IRpcChannelBuffer* pRpcChannelBuffer,
828     PRPC_MESSAGE pRpcMessage,
829     DWORD* pdwStubPhase);
830 ULONG CALLBACK IMallocSpy_PreRealloc_Proxy(
831     IMallocSpy* This,
832     LPVOID pRequest,
833     ULONG cbRequest,
834     LPVOID* ppNewRequest,
835     BOOL fSpyed);
836 void __RPC_STUB IMallocSpy_PreRealloc_Stub(
837     struct IRpcStubBuffer* This,
838     struct IRpcChannelBuffer* pRpcChannelBuffer,
839     PRPC_MESSAGE pRpcMessage,
840     DWORD* pdwStubPhase);
841 LPVOID CALLBACK IMallocSpy_PostRealloc_Proxy(
842     IMallocSpy* This,
843     LPVOID pActual,
844     BOOL fSpyed);
845 void __RPC_STUB IMallocSpy_PostRealloc_Stub(
846     struct IRpcStubBuffer* This,
847     struct IRpcChannelBuffer* pRpcChannelBuffer,
848     PRPC_MESSAGE pRpcMessage,
849     DWORD* pdwStubPhase);
850 LPVOID CALLBACK IMallocSpy_PreGetSize_Proxy(
851     IMallocSpy* This,
852     LPVOID pRequest,
853     BOOL fSpyed);
854 void __RPC_STUB IMallocSpy_PreGetSize_Stub(
855     struct IRpcStubBuffer* This,
856     struct IRpcChannelBuffer* pRpcChannelBuffer,
857     PRPC_MESSAGE pRpcMessage,
858     DWORD* pdwStubPhase);
859 ULONG CALLBACK IMallocSpy_PostGetSize_Proxy(
860     IMallocSpy* This,
861     ULONG cbActual,
862     BOOL fSpyed);
863 void __RPC_STUB IMallocSpy_PostGetSize_Stub(
864     struct IRpcStubBuffer* This,
865     struct IRpcChannelBuffer* pRpcChannelBuffer,
866     PRPC_MESSAGE pRpcMessage,
867     DWORD* pdwStubPhase);
868 LPVOID CALLBACK IMallocSpy_PreDidAlloc_Proxy(
869     IMallocSpy* This,
870     LPVOID pRequest,
871     BOOL fSpyed);
872 void __RPC_STUB IMallocSpy_PreDidAlloc_Stub(
873     struct IRpcStubBuffer* This,
874     struct IRpcChannelBuffer* pRpcChannelBuffer,
875     PRPC_MESSAGE pRpcMessage,
876     DWORD* pdwStubPhase);
877 int CALLBACK IMallocSpy_PostDidAlloc_Proxy(
878     IMallocSpy* This,
879     LPVOID pRequest,
880     BOOL fSpyed,
881     int fActual);
882 void __RPC_STUB IMallocSpy_PostDidAlloc_Stub(
883     struct IRpcStubBuffer* This,
884     struct IRpcChannelBuffer* pRpcChannelBuffer,
885     PRPC_MESSAGE pRpcMessage,
886     DWORD* pdwStubPhase);
887 void CALLBACK IMallocSpy_PreHeapMinimize_Proxy(
888     IMallocSpy* This);
889 void __RPC_STUB IMallocSpy_PreHeapMinimize_Stub(
890     struct IRpcStubBuffer* This,
891     struct IRpcChannelBuffer* pRpcChannelBuffer,
892     PRPC_MESSAGE pRpcMessage,
893     DWORD* pdwStubPhase);
894 void CALLBACK IMallocSpy_PostHeapMinimize_Proxy(
895     IMallocSpy* This);
896 void __RPC_STUB IMallocSpy_PostHeapMinimize_Stub(
897     struct IRpcStubBuffer* This,
898     struct IRpcChannelBuffer* pRpcChannelBuffer,
899     PRPC_MESSAGE pRpcMessage,
900     DWORD* pdwStubPhase);
901
902 typedef struct IEnumUnknown IEnumUnknown;
903 typedef IEnumUnknown *LPENUMUNKNOWN;
904
905 /*****************************************************************************
906  * IEnumUnknown interface
907  */
908 DEFINE_GUID(IID_IEnumUnknown, 0x00000100, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
909 #if defined(__cplusplus) && !defined(CINTERFACE)
910 struct IEnumUnknown: IUnknown {
911
912     virtual HRESULT STDMETHODCALLTYPE Next(
913         ULONG celt,
914         IUnknown** rgelt,
915         ULONG* pceltFetched) = 0;
916
917     virtual HRESULT STDMETHODCALLTYPE Skip(
918         ULONG celt) = 0;
919
920     virtual HRESULT STDMETHODCALLTYPE Reset(
921         ) = 0;
922
923     virtual HRESULT STDMETHODCALLTYPE Clone(
924         IEnumUnknown** ppenum) = 0;
925
926 } ICOM_COM_INTERFACE_ATTRIBUTE;
927 #else
928 typedef struct IEnumUnknownVtbl IEnumUnknownVtbl;
929 struct IEnumUnknown {
930     const IEnumUnknownVtbl* lpVtbl;
931 };
932 struct IEnumUnknownVtbl {
933     ICOM_MSVTABLE_COMPAT_FIELDS
934
935     /*** IUnknown methods ***/
936     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
937         IEnumUnknown* This,
938         REFIID riid,
939         void** ppvObject);
940
941     ULONG (STDMETHODCALLTYPE *AddRef)(
942         IEnumUnknown* This);
943
944     ULONG (STDMETHODCALLTYPE *Release)(
945         IEnumUnknown* This);
946
947     /*** IEnumUnknown methods ***/
948     HRESULT (STDMETHODCALLTYPE *Next)(
949         IEnumUnknown* This,
950         ULONG celt,
951         IUnknown** rgelt,
952         ULONG* pceltFetched);
953
954     HRESULT (STDMETHODCALLTYPE *Skip)(
955         IEnumUnknown* This,
956         ULONG celt);
957
958     HRESULT (STDMETHODCALLTYPE *Reset)(
959         IEnumUnknown* This);
960
961     HRESULT (STDMETHODCALLTYPE *Clone)(
962         IEnumUnknown* This,
963         IEnumUnknown** ppenum);
964
965 };
966
967 #define IEnumUnknown_IMETHODS \
968     /*** IUnknown methods ***/ \
969     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
970     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
971     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
972     /*** IEnumUnknown methods ***/ \
973     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, IUnknown** rgelt, ULONG* pceltFetched); \
974     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
975     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
976     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumUnknown** ppenum);
977
978 /*** IUnknown methods ***/
979 #define IEnumUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
980 #define IEnumUnknown_AddRef(p) (p)->lpVtbl->AddRef(p)
981 #define IEnumUnknown_Release(p) (p)->lpVtbl->Release(p)
982 /*** IEnumUnknown methods ***/
983 #define IEnumUnknown_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
984 #define IEnumUnknown_Skip(p,a) (p)->lpVtbl->Skip(p,a)
985 #define IEnumUnknown_Reset(p) (p)->lpVtbl->Reset(p)
986 #define IEnumUnknown_Clone(p,a) (p)->lpVtbl->Clone(p,a)
987
988 #endif
989
990 HRESULT CALLBACK IEnumUnknown_RemoteNext_Proxy(
991     IEnumUnknown* This,
992     ULONG celt,
993     IUnknown** rgelt,
994     ULONG* pceltFetched);
995 void __RPC_STUB IEnumUnknown_RemoteNext_Stub(
996     struct IRpcStubBuffer* This,
997     struct IRpcChannelBuffer* pRpcChannelBuffer,
998     PRPC_MESSAGE pRpcMessage,
999     DWORD* pdwStubPhase);
1000 HRESULT CALLBACK IEnumUnknown_Next_Proxy(
1001     IEnumUnknown* This,
1002     ULONG celt,
1003     IUnknown** rgelt,
1004     ULONG* pceltFetched);
1005 HRESULT __RPC_STUB IEnumUnknown_Next_Stub(
1006     IEnumUnknown* This,
1007     ULONG celt,
1008     IUnknown** rgelt,
1009     ULONG* pceltFetched);
1010 HRESULT CALLBACK IEnumUnknown_Skip_Proxy(
1011     IEnumUnknown* This,
1012     ULONG celt);
1013 void __RPC_STUB IEnumUnknown_Skip_Stub(
1014     struct IRpcStubBuffer* This,
1015     struct IRpcChannelBuffer* pRpcChannelBuffer,
1016     PRPC_MESSAGE pRpcMessage,
1017     DWORD* pdwStubPhase);
1018 HRESULT CALLBACK IEnumUnknown_Reset_Proxy(
1019     IEnumUnknown* This);
1020 void __RPC_STUB IEnumUnknown_Reset_Stub(
1021     struct IRpcStubBuffer* This,
1022     struct IRpcChannelBuffer* pRpcChannelBuffer,
1023     PRPC_MESSAGE pRpcMessage,
1024     DWORD* pdwStubPhase);
1025 HRESULT CALLBACK IEnumUnknown_Clone_Proxy(
1026     IEnumUnknown* This,
1027     IEnumUnknown** ppenum);
1028 void __RPC_STUB IEnumUnknown_Clone_Stub(
1029     struct IRpcStubBuffer* This,
1030     struct IRpcChannelBuffer* pRpcChannelBuffer,
1031     PRPC_MESSAGE pRpcMessage,
1032     DWORD* pdwStubPhase);
1033
1034 typedef struct ISurrogate ISurrogate;
1035 typedef ISurrogate *LPSURROGATE;
1036
1037 /*****************************************************************************
1038  * ISurrogate interface
1039  */
1040 DEFINE_GUID(IID_ISurrogate, 0x00000022, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1041 #if defined(__cplusplus) && !defined(CINTERFACE)
1042 struct ISurrogate: IUnknown {
1043
1044     virtual HRESULT STDMETHODCALLTYPE LoadDllServer(
1045         REFCLSID Clsid) = 0;
1046
1047     virtual HRESULT STDMETHODCALLTYPE FreeSurrogate(
1048         ) = 0;
1049
1050 } ICOM_COM_INTERFACE_ATTRIBUTE;
1051 #else
1052 typedef struct ISurrogateVtbl ISurrogateVtbl;
1053 struct ISurrogate {
1054     const ISurrogateVtbl* lpVtbl;
1055 };
1056 struct ISurrogateVtbl {
1057     ICOM_MSVTABLE_COMPAT_FIELDS
1058
1059     /*** IUnknown methods ***/
1060     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1061         ISurrogate* This,
1062         REFIID riid,
1063         void** ppvObject);
1064
1065     ULONG (STDMETHODCALLTYPE *AddRef)(
1066         ISurrogate* This);
1067
1068     ULONG (STDMETHODCALLTYPE *Release)(
1069         ISurrogate* This);
1070
1071     /*** ISurrogate methods ***/
1072     HRESULT (STDMETHODCALLTYPE *LoadDllServer)(
1073         ISurrogate* This,
1074         REFCLSID Clsid);
1075
1076     HRESULT (STDMETHODCALLTYPE *FreeSurrogate)(
1077         ISurrogate* This);
1078
1079 };
1080
1081 #define ISurrogate_IMETHODS \
1082     /*** IUnknown methods ***/ \
1083     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1084     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1085     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1086     /*** ISurrogate methods ***/ \
1087     HRESULT (STDMETHODCALLTYPE *LoadDllServer)(INTERFACE *This, REFCLSID Clsid); \
1088     HRESULT (STDMETHODCALLTYPE *FreeSurrogate)(INTERFACE *This);
1089
1090 /*** IUnknown methods ***/
1091 #define ISurrogate_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1092 #define ISurrogate_AddRef(p) (p)->lpVtbl->AddRef(p)
1093 #define ISurrogate_Release(p) (p)->lpVtbl->Release(p)
1094 /*** ISurrogate methods ***/
1095 #define ISurrogate_LoadDllServer(p,a) (p)->lpVtbl->LoadDllServer(p,a)
1096 #define ISurrogate_FreeSurrogate(p) (p)->lpVtbl->FreeSurrogate(p)
1097
1098 #endif
1099
1100 HRESULT CALLBACK ISurrogate_LoadDllServer_Proxy(
1101     ISurrogate* This,
1102     REFCLSID Clsid);
1103 void __RPC_STUB ISurrogate_LoadDllServer_Stub(
1104     struct IRpcStubBuffer* This,
1105     struct IRpcChannelBuffer* pRpcChannelBuffer,
1106     PRPC_MESSAGE pRpcMessage,
1107     DWORD* pdwStubPhase);
1108 HRESULT CALLBACK ISurrogate_FreeSurrogate_Proxy(
1109     ISurrogate* This);
1110 void __RPC_STUB ISurrogate_FreeSurrogate_Stub(
1111     struct IRpcStubBuffer* This,
1112     struct IRpcChannelBuffer* pRpcChannelBuffer,
1113     PRPC_MESSAGE pRpcMessage,
1114     DWORD* pdwStubPhase);
1115
1116 typedef struct IGlobalInterfaceTable IGlobalInterfaceTable;
1117 typedef IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
1118
1119 /*****************************************************************************
1120  * IGlobalInterfaceTable interface
1121  */
1122 DEFINE_GUID(IID_IGlobalInterfaceTable, 0x00000146, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1123 #if defined(__cplusplus) && !defined(CINTERFACE)
1124 struct IGlobalInterfaceTable: IUnknown {
1125
1126     virtual HRESULT STDMETHODCALLTYPE RegisterInterfaceInGlobal(
1127         IUnknown* pUnk,
1128         REFIID riid,
1129         DWORD* pdwCookie) = 0;
1130
1131     virtual HRESULT STDMETHODCALLTYPE RevokeInterfaceFromGlobal(
1132         DWORD dwCookie) = 0;
1133
1134     virtual HRESULT STDMETHODCALLTYPE GetInterfaceFromGlobal(
1135         DWORD dwCookie,
1136         REFIID riid,
1137         void** ppv) = 0;
1138
1139 } ICOM_COM_INTERFACE_ATTRIBUTE;
1140 #else
1141 typedef struct IGlobalInterfaceTableVtbl IGlobalInterfaceTableVtbl;
1142 struct IGlobalInterfaceTable {
1143     const IGlobalInterfaceTableVtbl* lpVtbl;
1144 };
1145 struct IGlobalInterfaceTableVtbl {
1146     ICOM_MSVTABLE_COMPAT_FIELDS
1147
1148     /*** IUnknown methods ***/
1149     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1150         IGlobalInterfaceTable* This,
1151         REFIID riid,
1152         void** ppvObject);
1153
1154     ULONG (STDMETHODCALLTYPE *AddRef)(
1155         IGlobalInterfaceTable* This);
1156
1157     ULONG (STDMETHODCALLTYPE *Release)(
1158         IGlobalInterfaceTable* This);
1159
1160     /*** IGlobalInterfaceTable methods ***/
1161     HRESULT (STDMETHODCALLTYPE *RegisterInterfaceInGlobal)(
1162         IGlobalInterfaceTable* This,
1163         IUnknown* pUnk,
1164         REFIID riid,
1165         DWORD* pdwCookie);
1166
1167     HRESULT (STDMETHODCALLTYPE *RevokeInterfaceFromGlobal)(
1168         IGlobalInterfaceTable* This,
1169         DWORD dwCookie);
1170
1171     HRESULT (STDMETHODCALLTYPE *GetInterfaceFromGlobal)(
1172         IGlobalInterfaceTable* This,
1173         DWORD dwCookie,
1174         REFIID riid,
1175         void** ppv);
1176
1177 };
1178
1179 #define IGlobalInterfaceTable_IMETHODS \
1180     /*** IUnknown methods ***/ \
1181     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1182     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1183     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1184     /*** IGlobalInterfaceTable methods ***/ \
1185     HRESULT (STDMETHODCALLTYPE *RegisterInterfaceInGlobal)(INTERFACE *This, IUnknown* pUnk, REFIID riid, DWORD* pdwCookie); \
1186     HRESULT (STDMETHODCALLTYPE *RevokeInterfaceFromGlobal)(INTERFACE *This, DWORD dwCookie); \
1187     HRESULT (STDMETHODCALLTYPE *GetInterfaceFromGlobal)(INTERFACE *This, DWORD dwCookie, REFIID riid, void** ppv);
1188
1189 /*** IUnknown methods ***/
1190 #define IGlobalInterfaceTable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1191 #define IGlobalInterfaceTable_AddRef(p) (p)->lpVtbl->AddRef(p)
1192 #define IGlobalInterfaceTable_Release(p) (p)->lpVtbl->Release(p)
1193 /*** IGlobalInterfaceTable methods ***/
1194 #define IGlobalInterfaceTable_RegisterInterfaceInGlobal(p,a,b,c) (p)->lpVtbl->RegisterInterfaceInGlobal(p,a,b,c)
1195 #define IGlobalInterfaceTable_RevokeInterfaceFromGlobal(p,a) (p)->lpVtbl->RevokeInterfaceFromGlobal(p,a)
1196 #define IGlobalInterfaceTable_GetInterfaceFromGlobal(p,a,b,c) (p)->lpVtbl->GetInterfaceFromGlobal(p,a,b,c)
1197
1198 #endif
1199
1200 HRESULT CALLBACK IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy(
1201     IGlobalInterfaceTable* This,
1202     IUnknown* pUnk,
1203     REFIID riid,
1204     DWORD* pdwCookie);
1205 void __RPC_STUB IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub(
1206     struct IRpcStubBuffer* This,
1207     struct IRpcChannelBuffer* pRpcChannelBuffer,
1208     PRPC_MESSAGE pRpcMessage,
1209     DWORD* pdwStubPhase);
1210 HRESULT CALLBACK IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy(
1211     IGlobalInterfaceTable* This,
1212     DWORD dwCookie);
1213 void __RPC_STUB IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub(
1214     struct IRpcStubBuffer* This,
1215     struct IRpcChannelBuffer* pRpcChannelBuffer,
1216     PRPC_MESSAGE pRpcMessage,
1217     DWORD* pdwStubPhase);
1218 HRESULT CALLBACK IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy(
1219     IGlobalInterfaceTable* This,
1220     DWORD dwCookie,
1221     REFIID riid,
1222     void** ppv);
1223 void __RPC_STUB IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub(
1224     struct IRpcStubBuffer* This,
1225     struct IRpcChannelBuffer* pRpcChannelBuffer,
1226     PRPC_MESSAGE pRpcMessage,
1227     DWORD* pdwStubPhase);
1228
1229 typedef struct IBindCtx IBindCtx;
1230 typedef IBindCtx *LPBINDCTX;
1231
1232 typedef IBindCtx *LPBC;
1233
1234 typedef struct tagBIND_OPTS {
1235     DWORD cbStruct;
1236     DWORD grfFlags;
1237     DWORD grfMode;
1238     DWORD dwTickCountDeadline;
1239 } BIND_OPTS, *LPBIND_OPTS;
1240
1241 typedef struct tagBIND_OPTS2 {
1242     DWORD cbStruct;
1243     DWORD grfFlags;
1244     DWORD grfMode;
1245     DWORD dwTickCountDeadline;
1246     DWORD dwTrackFlags;
1247     DWORD dwClassContext;
1248     LCID locale;
1249     COSERVERINFO *pServerInfo;
1250 } BIND_OPTS2, *LPBIND_OPTS2;
1251
1252 typedef enum tagBIND_FLAGS {
1253     BIND_MAYBOTHERUSER = 1,
1254     BIND_JUSTTESTEXISTENCE = 2
1255 } BIND_FLAGS;
1256
1257 /*****************************************************************************
1258  * IBindCtx interface
1259  */
1260 DEFINE_GUID(IID_IBindCtx, 0x0000000e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1261 #if defined(__cplusplus) && !defined(CINTERFACE)
1262 struct IBindCtx: IUnknown {
1263
1264     virtual HRESULT STDMETHODCALLTYPE RegisterObjectBound(
1265         IUnknown* punk) = 0;
1266
1267     virtual HRESULT STDMETHODCALLTYPE RevokeObjectBound(
1268         IUnknown* punk) = 0;
1269
1270     virtual HRESULT STDMETHODCALLTYPE ReleaseBoundObjects(
1271         ) = 0;
1272
1273     virtual HRESULT STDMETHODCALLTYPE SetBindOptions(
1274         BIND_OPTS* pbindopts) = 0;
1275
1276     virtual HRESULT STDMETHODCALLTYPE GetBindOptions(
1277         BIND_OPTS* pbindopts) = 0;
1278
1279     virtual HRESULT STDMETHODCALLTYPE GetRunningObjectTable(
1280         IRunningObjectTable** pprot) = 0;
1281
1282     virtual HRESULT STDMETHODCALLTYPE RegisterObjectParam(
1283         LPOLESTR pszKey,
1284         IUnknown* punk) = 0;
1285
1286     virtual HRESULT STDMETHODCALLTYPE GetObjectParam(
1287         LPOLESTR pszKey,
1288         IUnknown** ppunk) = 0;
1289
1290     virtual HRESULT STDMETHODCALLTYPE EnumObjectParam(
1291         IEnumString** ppenum) = 0;
1292
1293     virtual HRESULT STDMETHODCALLTYPE RevokeObjectParam(
1294         LPOLESTR pszKey) = 0;
1295
1296 } ICOM_COM_INTERFACE_ATTRIBUTE;
1297 #else
1298 typedef struct IBindCtxVtbl IBindCtxVtbl;
1299 struct IBindCtx {
1300     const IBindCtxVtbl* lpVtbl;
1301 };
1302 struct IBindCtxVtbl {
1303     ICOM_MSVTABLE_COMPAT_FIELDS
1304
1305     /*** IUnknown methods ***/
1306     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1307         IBindCtx* This,
1308         REFIID riid,
1309         void** ppvObject);
1310
1311     ULONG (STDMETHODCALLTYPE *AddRef)(
1312         IBindCtx* This);
1313
1314     ULONG (STDMETHODCALLTYPE *Release)(
1315         IBindCtx* This);
1316
1317     /*** IBindCtx methods ***/
1318     HRESULT (STDMETHODCALLTYPE *RegisterObjectBound)(
1319         IBindCtx* This,
1320         IUnknown* punk);
1321
1322     HRESULT (STDMETHODCALLTYPE *RevokeObjectBound)(
1323         IBindCtx* This,
1324         IUnknown* punk);
1325
1326     HRESULT (STDMETHODCALLTYPE *ReleaseBoundObjects)(
1327         IBindCtx* This);
1328
1329     HRESULT (STDMETHODCALLTYPE *SetBindOptions)(
1330         IBindCtx* This,
1331         BIND_OPTS* pbindopts);
1332
1333     HRESULT (STDMETHODCALLTYPE *GetBindOptions)(
1334         IBindCtx* This,
1335         BIND_OPTS* pbindopts);
1336
1337     HRESULT (STDMETHODCALLTYPE *GetRunningObjectTable)(
1338         IBindCtx* This,
1339         IRunningObjectTable** pprot);
1340
1341     HRESULT (STDMETHODCALLTYPE *RegisterObjectParam)(
1342         IBindCtx* This,
1343         LPOLESTR pszKey,
1344         IUnknown* punk);
1345
1346     HRESULT (STDMETHODCALLTYPE *GetObjectParam)(
1347         IBindCtx* This,
1348         LPOLESTR pszKey,
1349         IUnknown** ppunk);
1350
1351     HRESULT (STDMETHODCALLTYPE *EnumObjectParam)(
1352         IBindCtx* This,
1353         IEnumString** ppenum);
1354
1355     HRESULT (STDMETHODCALLTYPE *RevokeObjectParam)(
1356         IBindCtx* This,
1357         LPOLESTR pszKey);
1358
1359 };
1360
1361 #define IBindCtx_IMETHODS \
1362     /*** IUnknown methods ***/ \
1363     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1364     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1365     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1366     /*** IBindCtx methods ***/ \
1367     HRESULT (STDMETHODCALLTYPE *RegisterObjectBound)(INTERFACE *This, IUnknown* punk); \
1368     HRESULT (STDMETHODCALLTYPE *RevokeObjectBound)(INTERFACE *This, IUnknown* punk); \
1369     HRESULT (STDMETHODCALLTYPE *ReleaseBoundObjects)(INTERFACE *This); \
1370     HRESULT (STDMETHODCALLTYPE *SetBindOptions)(INTERFACE *This, BIND_OPTS* pbindopts); \
1371     HRESULT (STDMETHODCALLTYPE *GetBindOptions)(INTERFACE *This, BIND_OPTS* pbindopts); \
1372     HRESULT (STDMETHODCALLTYPE *GetRunningObjectTable)(INTERFACE *This, IRunningObjectTable** pprot); \
1373     HRESULT (STDMETHODCALLTYPE *RegisterObjectParam)(INTERFACE *This, LPOLESTR pszKey, IUnknown* punk); \
1374     HRESULT (STDMETHODCALLTYPE *GetObjectParam)(INTERFACE *This, LPOLESTR pszKey, IUnknown** ppunk); \
1375     HRESULT (STDMETHODCALLTYPE *EnumObjectParam)(INTERFACE *This, IEnumString** ppenum); \
1376     HRESULT (STDMETHODCALLTYPE *RevokeObjectParam)(INTERFACE *This, LPOLESTR pszKey);
1377
1378 /*** IUnknown methods ***/
1379 #define IBindCtx_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1380 #define IBindCtx_AddRef(p) (p)->lpVtbl->AddRef(p)
1381 #define IBindCtx_Release(p) (p)->lpVtbl->Release(p)
1382 /*** IBindCtx methods ***/
1383 #define IBindCtx_RegisterObjectBound(p,a) (p)->lpVtbl->RegisterObjectBound(p,a)
1384 #define IBindCtx_RevokeObjectBound(p,a) (p)->lpVtbl->RevokeObjectBound(p,a)
1385 #define IBindCtx_ReleaseBoundObjects(p) (p)->lpVtbl->ReleaseBoundObjects(p)
1386 #define IBindCtx_SetBindOptions(p,a) (p)->lpVtbl->SetBindOptions(p,a)
1387 #define IBindCtx_GetBindOptions(p,a) (p)->lpVtbl->GetBindOptions(p,a)
1388 #define IBindCtx_GetRunningObjectTable(p,a) (p)->lpVtbl->GetRunningObjectTable(p,a)
1389 #define IBindCtx_RegisterObjectParam(p,a,b) (p)->lpVtbl->RegisterObjectParam(p,a,b)
1390 #define IBindCtx_GetObjectParam(p,a,b) (p)->lpVtbl->GetObjectParam(p,a,b)
1391 #define IBindCtx_EnumObjectParam(p,a) (p)->lpVtbl->EnumObjectParam(p,a)
1392 #define IBindCtx_RevokeObjectParam(p,a) (p)->lpVtbl->RevokeObjectParam(p,a)
1393
1394 #endif
1395
1396 HRESULT CALLBACK IBindCtx_RegisterObjectBound_Proxy(
1397     IBindCtx* This,
1398     IUnknown* punk);
1399 void __RPC_STUB IBindCtx_RegisterObjectBound_Stub(
1400     struct IRpcStubBuffer* This,
1401     struct IRpcChannelBuffer* pRpcChannelBuffer,
1402     PRPC_MESSAGE pRpcMessage,
1403     DWORD* pdwStubPhase);
1404 HRESULT CALLBACK IBindCtx_RevokeObjectBound_Proxy(
1405     IBindCtx* This,
1406     IUnknown* punk);
1407 void __RPC_STUB IBindCtx_RevokeObjectBound_Stub(
1408     struct IRpcStubBuffer* This,
1409     struct IRpcChannelBuffer* pRpcChannelBuffer,
1410     PRPC_MESSAGE pRpcMessage,
1411     DWORD* pdwStubPhase);
1412 HRESULT CALLBACK IBindCtx_ReleaseBoundObjects_Proxy(
1413     IBindCtx* This);
1414 void __RPC_STUB IBindCtx_ReleaseBoundObjects_Stub(
1415     struct IRpcStubBuffer* This,
1416     struct IRpcChannelBuffer* pRpcChannelBuffer,
1417     PRPC_MESSAGE pRpcMessage,
1418     DWORD* pdwStubPhase);
1419 HRESULT CALLBACK IBindCtx_RemoteSetBindOptions_Proxy(
1420     IBindCtx* This,
1421     BIND_OPTS2* pbindopts);
1422 void __RPC_STUB IBindCtx_RemoteSetBindOptions_Stub(
1423     struct IRpcStubBuffer* This,
1424     struct IRpcChannelBuffer* pRpcChannelBuffer,
1425     PRPC_MESSAGE pRpcMessage,
1426     DWORD* pdwStubPhase);
1427 HRESULT CALLBACK IBindCtx_SetBindOptions_Proxy(
1428     IBindCtx* This,
1429     BIND_OPTS* pbindopts);
1430 HRESULT __RPC_STUB IBindCtx_SetBindOptions_Stub(
1431     IBindCtx* This,
1432     BIND_OPTS2* pbindopts);
1433 HRESULT CALLBACK IBindCtx_RemoteGetBindOptions_Proxy(
1434     IBindCtx* This,
1435     BIND_OPTS2* pbindopts);
1436 void __RPC_STUB IBindCtx_RemoteGetBindOptions_Stub(
1437     struct IRpcStubBuffer* This,
1438     struct IRpcChannelBuffer* pRpcChannelBuffer,
1439     PRPC_MESSAGE pRpcMessage,
1440     DWORD* pdwStubPhase);
1441 HRESULT CALLBACK IBindCtx_GetBindOptions_Proxy(
1442     IBindCtx* This,
1443     BIND_OPTS* pbindopts);
1444 HRESULT __RPC_STUB IBindCtx_GetBindOptions_Stub(
1445     IBindCtx* This,
1446     BIND_OPTS2* pbindopts);
1447 HRESULT CALLBACK IBindCtx_GetRunningObjectTable_Proxy(
1448     IBindCtx* This,
1449     IRunningObjectTable** pprot);
1450 void __RPC_STUB IBindCtx_GetRunningObjectTable_Stub(
1451     struct IRpcStubBuffer* This,
1452     struct IRpcChannelBuffer* pRpcChannelBuffer,
1453     PRPC_MESSAGE pRpcMessage,
1454     DWORD* pdwStubPhase);
1455 HRESULT CALLBACK IBindCtx_RegisterObjectParam_Proxy(
1456     IBindCtx* This,
1457     LPOLESTR pszKey,
1458     IUnknown* punk);
1459 void __RPC_STUB IBindCtx_RegisterObjectParam_Stub(
1460     struct IRpcStubBuffer* This,
1461     struct IRpcChannelBuffer* pRpcChannelBuffer,
1462     PRPC_MESSAGE pRpcMessage,
1463     DWORD* pdwStubPhase);
1464 HRESULT CALLBACK IBindCtx_GetObjectParam_Proxy(
1465     IBindCtx* This,
1466     LPOLESTR pszKey,
1467     IUnknown** ppunk);
1468 void __RPC_STUB IBindCtx_GetObjectParam_Stub(
1469     struct IRpcStubBuffer* This,
1470     struct IRpcChannelBuffer* pRpcChannelBuffer,
1471     PRPC_MESSAGE pRpcMessage,
1472     DWORD* pdwStubPhase);
1473 HRESULT CALLBACK IBindCtx_EnumObjectParam_Proxy(
1474     IBindCtx* This,
1475     IEnumString** ppenum);
1476 void __RPC_STUB IBindCtx_EnumObjectParam_Stub(
1477     struct IRpcStubBuffer* This,
1478     struct IRpcChannelBuffer* pRpcChannelBuffer,
1479     PRPC_MESSAGE pRpcMessage,
1480     DWORD* pdwStubPhase);
1481 HRESULT CALLBACK IBindCtx_RevokeObjectParam_Proxy(
1482     IBindCtx* This,
1483     LPOLESTR pszKey);
1484 void __RPC_STUB IBindCtx_RevokeObjectParam_Stub(
1485     struct IRpcStubBuffer* This,
1486     struct IRpcChannelBuffer* pRpcChannelBuffer,
1487     PRPC_MESSAGE pRpcMessage,
1488     DWORD* pdwStubPhase);
1489
1490 typedef struct IEnumMoniker IEnumMoniker;
1491 typedef IEnumMoniker *LPENUMMONIKER;
1492
1493 /*****************************************************************************
1494  * IEnumMoniker interface
1495  */
1496 DEFINE_GUID(IID_IEnumMoniker, 0x00000102, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1497 #if defined(__cplusplus) && !defined(CINTERFACE)
1498 struct IEnumMoniker: IUnknown {
1499
1500     virtual HRESULT STDMETHODCALLTYPE Next(
1501         ULONG celt,
1502         IMoniker** rgelt,
1503         ULONG* pceltFetched) = 0;
1504
1505     virtual HRESULT STDMETHODCALLTYPE Skip(
1506         ULONG celt) = 0;
1507
1508     virtual HRESULT STDMETHODCALLTYPE Reset(
1509         ) = 0;
1510
1511     virtual HRESULT STDMETHODCALLTYPE Clone(
1512         IEnumMoniker** ppenum) = 0;
1513
1514 } ICOM_COM_INTERFACE_ATTRIBUTE;
1515 #else
1516 typedef struct IEnumMonikerVtbl IEnumMonikerVtbl;
1517 struct IEnumMoniker {
1518     const IEnumMonikerVtbl* lpVtbl;
1519 };
1520 struct IEnumMonikerVtbl {
1521     ICOM_MSVTABLE_COMPAT_FIELDS
1522
1523     /*** IUnknown methods ***/
1524     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1525         IEnumMoniker* This,
1526         REFIID riid,
1527         void** ppvObject);
1528
1529     ULONG (STDMETHODCALLTYPE *AddRef)(
1530         IEnumMoniker* This);
1531
1532     ULONG (STDMETHODCALLTYPE *Release)(
1533         IEnumMoniker* This);
1534
1535     /*** IEnumMoniker methods ***/
1536     HRESULT (STDMETHODCALLTYPE *Next)(
1537         IEnumMoniker* This,
1538         ULONG celt,
1539         IMoniker** rgelt,
1540         ULONG* pceltFetched);
1541
1542     HRESULT (STDMETHODCALLTYPE *Skip)(
1543         IEnumMoniker* This,
1544         ULONG celt);
1545
1546     HRESULT (STDMETHODCALLTYPE *Reset)(
1547         IEnumMoniker* This);
1548
1549     HRESULT (STDMETHODCALLTYPE *Clone)(
1550         IEnumMoniker* This,
1551         IEnumMoniker** ppenum);
1552
1553 };
1554
1555 #define IEnumMoniker_IMETHODS \
1556     /*** IUnknown methods ***/ \
1557     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1558     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1559     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1560     /*** IEnumMoniker methods ***/ \
1561     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, IMoniker** rgelt, ULONG* pceltFetched); \
1562     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
1563     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
1564     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumMoniker** ppenum);
1565
1566 /*** IUnknown methods ***/
1567 #define IEnumMoniker_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1568 #define IEnumMoniker_AddRef(p) (p)->lpVtbl->AddRef(p)
1569 #define IEnumMoniker_Release(p) (p)->lpVtbl->Release(p)
1570 /*** IEnumMoniker methods ***/
1571 #define IEnumMoniker_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
1572 #define IEnumMoniker_Skip(p,a) (p)->lpVtbl->Skip(p,a)
1573 #define IEnumMoniker_Reset(p) (p)->lpVtbl->Reset(p)
1574 #define IEnumMoniker_Clone(p,a) (p)->lpVtbl->Clone(p,a)
1575
1576 #endif
1577
1578 HRESULT CALLBACK IEnumMoniker_RemoteNext_Proxy(
1579     IEnumMoniker* This,
1580     ULONG celt,
1581     IMoniker** rgelt,
1582     ULONG* pceltFetched);
1583 void __RPC_STUB IEnumMoniker_RemoteNext_Stub(
1584     struct IRpcStubBuffer* This,
1585     struct IRpcChannelBuffer* pRpcChannelBuffer,
1586     PRPC_MESSAGE pRpcMessage,
1587     DWORD* pdwStubPhase);
1588 HRESULT CALLBACK IEnumMoniker_Next_Proxy(
1589     IEnumMoniker* This,
1590     ULONG celt,
1591     IMoniker** rgelt,
1592     ULONG* pceltFetched);
1593 HRESULT __RPC_STUB IEnumMoniker_Next_Stub(
1594     IEnumMoniker* This,
1595     ULONG celt,
1596     IMoniker** rgelt,
1597     ULONG* pceltFetched);
1598 HRESULT CALLBACK IEnumMoniker_Skip_Proxy(
1599     IEnumMoniker* This,
1600     ULONG celt);
1601 void __RPC_STUB IEnumMoniker_Skip_Stub(
1602     struct IRpcStubBuffer* This,
1603     struct IRpcChannelBuffer* pRpcChannelBuffer,
1604     PRPC_MESSAGE pRpcMessage,
1605     DWORD* pdwStubPhase);
1606 HRESULT CALLBACK IEnumMoniker_Reset_Proxy(
1607     IEnumMoniker* This);
1608 void __RPC_STUB IEnumMoniker_Reset_Stub(
1609     struct IRpcStubBuffer* This,
1610     struct IRpcChannelBuffer* pRpcChannelBuffer,
1611     PRPC_MESSAGE pRpcMessage,
1612     DWORD* pdwStubPhase);
1613 HRESULT CALLBACK IEnumMoniker_Clone_Proxy(
1614     IEnumMoniker* This,
1615     IEnumMoniker** ppenum);
1616 void __RPC_STUB IEnumMoniker_Clone_Stub(
1617     struct IRpcStubBuffer* This,
1618     struct IRpcChannelBuffer* pRpcChannelBuffer,
1619     PRPC_MESSAGE pRpcMessage,
1620     DWORD* pdwStubPhase);
1621
1622 typedef struct IRunnableObject IRunnableObject;
1623 typedef IRunnableObject *LPRUNNABLEOBJECT;
1624
1625 /*****************************************************************************
1626  * IRunnableObject interface
1627  */
1628 DEFINE_GUID(IID_IRunnableObject, 0x00000126, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1629 #if defined(__cplusplus) && !defined(CINTERFACE)
1630 struct IRunnableObject: IUnknown {
1631
1632     virtual HRESULT STDMETHODCALLTYPE GetRunningClass(
1633         LPCLSID lpClsid) = 0;
1634
1635     virtual HRESULT STDMETHODCALLTYPE Run(
1636         LPBINDCTX pbc) = 0;
1637
1638     virtual BOOL STDMETHODCALLTYPE IsRunning(
1639         ) = 0;
1640
1641     virtual HRESULT STDMETHODCALLTYPE LockRunning(
1642         BOOL fLock,
1643         BOOL fLastUnlockCloses) = 0;
1644
1645     virtual HRESULT STDMETHODCALLTYPE SetContainedObject(
1646         BOOL fContained) = 0;
1647
1648 } ICOM_COM_INTERFACE_ATTRIBUTE;
1649 #else
1650 typedef struct IRunnableObjectVtbl IRunnableObjectVtbl;
1651 struct IRunnableObject {
1652     const IRunnableObjectVtbl* lpVtbl;
1653 };
1654 struct IRunnableObjectVtbl {
1655     ICOM_MSVTABLE_COMPAT_FIELDS
1656
1657     /*** IUnknown methods ***/
1658     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1659         IRunnableObject* This,
1660         REFIID riid,
1661         void** ppvObject);
1662
1663     ULONG (STDMETHODCALLTYPE *AddRef)(
1664         IRunnableObject* This);
1665
1666     ULONG (STDMETHODCALLTYPE *Release)(
1667         IRunnableObject* This);
1668
1669     /*** IRunnableObject methods ***/
1670     HRESULT (STDMETHODCALLTYPE *GetRunningClass)(
1671         IRunnableObject* This,
1672         LPCLSID lpClsid);
1673
1674     HRESULT (STDMETHODCALLTYPE *Run)(
1675         IRunnableObject* This,
1676         LPBINDCTX pbc);
1677
1678     BOOL (STDMETHODCALLTYPE *IsRunning)(
1679         IRunnableObject* This);
1680
1681     HRESULT (STDMETHODCALLTYPE *LockRunning)(
1682         IRunnableObject* This,
1683         BOOL fLock,
1684         BOOL fLastUnlockCloses);
1685
1686     HRESULT (STDMETHODCALLTYPE *SetContainedObject)(
1687         IRunnableObject* This,
1688         BOOL fContained);
1689
1690 };
1691
1692 #define IRunnableObject_IMETHODS \
1693     /*** IUnknown methods ***/ \
1694     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1695     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1696     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1697     /*** IRunnableObject methods ***/ \
1698     HRESULT (STDMETHODCALLTYPE *GetRunningClass)(INTERFACE *This, LPCLSID lpClsid); \
1699     HRESULT (STDMETHODCALLTYPE *Run)(INTERFACE *This, LPBINDCTX pbc); \
1700     BOOL (STDMETHODCALLTYPE *IsRunning)(INTERFACE *This); \
1701     HRESULT (STDMETHODCALLTYPE *LockRunning)(INTERFACE *This, BOOL fLock, BOOL fLastUnlockCloses); \
1702     HRESULT (STDMETHODCALLTYPE *SetContainedObject)(INTERFACE *This, BOOL fContained);
1703
1704 /*** IUnknown methods ***/
1705 #define IRunnableObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1706 #define IRunnableObject_AddRef(p) (p)->lpVtbl->AddRef(p)
1707 #define IRunnableObject_Release(p) (p)->lpVtbl->Release(p)
1708 /*** IRunnableObject methods ***/
1709 #define IRunnableObject_GetRunningClass(p,a) (p)->lpVtbl->GetRunningClass(p,a)
1710 #define IRunnableObject_Run(p,a) (p)->lpVtbl->Run(p,a)
1711 #define IRunnableObject_IsRunning(p) (p)->lpVtbl->IsRunning(p)
1712 #define IRunnableObject_LockRunning(p,a,b) (p)->lpVtbl->LockRunning(p,a,b)
1713 #define IRunnableObject_SetContainedObject(p,a) (p)->lpVtbl->SetContainedObject(p,a)
1714
1715 #endif
1716
1717 HRESULT CALLBACK IRunnableObject_GetRunningClass_Proxy(
1718     IRunnableObject* This,
1719     LPCLSID lpClsid);
1720 void __RPC_STUB IRunnableObject_GetRunningClass_Stub(
1721     struct IRpcStubBuffer* This,
1722     struct IRpcChannelBuffer* pRpcChannelBuffer,
1723     PRPC_MESSAGE pRpcMessage,
1724     DWORD* pdwStubPhase);
1725 HRESULT CALLBACK IRunnableObject_Run_Proxy(
1726     IRunnableObject* This,
1727     LPBINDCTX pbc);
1728 void __RPC_STUB IRunnableObject_Run_Stub(
1729     struct IRpcStubBuffer* This,
1730     struct IRpcChannelBuffer* pRpcChannelBuffer,
1731     PRPC_MESSAGE pRpcMessage,
1732     DWORD* pdwStubPhase);
1733 HRESULT CALLBACK IRunnableObject_RemoteIsRunning_Proxy(
1734     IRunnableObject* This);
1735 void __RPC_STUB IRunnableObject_RemoteIsRunning_Stub(
1736     struct IRpcStubBuffer* This,
1737     struct IRpcChannelBuffer* pRpcChannelBuffer,
1738     PRPC_MESSAGE pRpcMessage,
1739     DWORD* pdwStubPhase);
1740 BOOL CALLBACK IRunnableObject_IsRunning_Proxy(
1741     IRunnableObject* This);
1742 HRESULT __RPC_STUB IRunnableObject_IsRunning_Stub(
1743     IRunnableObject* This);
1744 HRESULT CALLBACK IRunnableObject_LockRunning_Proxy(
1745     IRunnableObject* This,
1746     BOOL fLock,
1747     BOOL fLastUnlockCloses);
1748 void __RPC_STUB IRunnableObject_LockRunning_Stub(
1749     struct IRpcStubBuffer* This,
1750     struct IRpcChannelBuffer* pRpcChannelBuffer,
1751     PRPC_MESSAGE pRpcMessage,
1752     DWORD* pdwStubPhase);
1753 HRESULT CALLBACK IRunnableObject_SetContainedObject_Proxy(
1754     IRunnableObject* This,
1755     BOOL fContained);
1756 void __RPC_STUB IRunnableObject_SetContainedObject_Stub(
1757     struct IRpcStubBuffer* This,
1758     struct IRpcChannelBuffer* pRpcChannelBuffer,
1759     PRPC_MESSAGE pRpcMessage,
1760     DWORD* pdwStubPhase);
1761
1762 #ifdef __WINESRC__
1763 #undef GetObject
1764 #endif
1765 typedef IRunningObjectTable *LPRUNNINGOBJECTTABLE;
1766
1767 /*****************************************************************************
1768  * IRunningObjectTable interface
1769  */
1770 DEFINE_GUID(IID_IRunningObjectTable, 0x00000010, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1771 #if defined(__cplusplus) && !defined(CINTERFACE)
1772 struct IRunningObjectTable: IUnknown {
1773
1774     virtual HRESULT STDMETHODCALLTYPE Register(
1775         DWORD grfFlags,
1776         IUnknown* punkObject,
1777         IMoniker* pmkObjectName,
1778         DWORD* pdwRegister) = 0;
1779
1780     virtual HRESULT STDMETHODCALLTYPE Revoke(
1781         DWORD dwRegister) = 0;
1782
1783     virtual HRESULT STDMETHODCALLTYPE IsRunning(
1784         IMoniker* pmkObjectName) = 0;
1785
1786     virtual HRESULT STDMETHODCALLTYPE GetObject(
1787         IMoniker* pmkObjectName,
1788         IUnknown** ppunkObject) = 0;
1789
1790     virtual HRESULT STDMETHODCALLTYPE NoteChangeTime(
1791         DWORD dwRegister,
1792         FILETIME* pfiletime) = 0;
1793
1794     virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
1795         IMoniker* pmkObjectName,
1796         FILETIME* pfiletime) = 0;
1797
1798     virtual HRESULT STDMETHODCALLTYPE EnumRunning(
1799         IEnumMoniker** ppenumMoniker) = 0;
1800
1801 } ICOM_COM_INTERFACE_ATTRIBUTE;
1802 #else
1803 typedef struct IRunningObjectTableVtbl IRunningObjectTableVtbl;
1804 struct IRunningObjectTable {
1805     const IRunningObjectTableVtbl* lpVtbl;
1806 };
1807 struct IRunningObjectTableVtbl {
1808     ICOM_MSVTABLE_COMPAT_FIELDS
1809
1810     /*** IUnknown methods ***/
1811     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1812         IRunningObjectTable* This,
1813         REFIID riid,
1814         void** ppvObject);
1815
1816     ULONG (STDMETHODCALLTYPE *AddRef)(
1817         IRunningObjectTable* This);
1818
1819     ULONG (STDMETHODCALLTYPE *Release)(
1820         IRunningObjectTable* This);
1821
1822     /*** IRunningObjectTable methods ***/
1823     HRESULT (STDMETHODCALLTYPE *Register)(
1824         IRunningObjectTable* This,
1825         DWORD grfFlags,
1826         IUnknown* punkObject,
1827         IMoniker* pmkObjectName,
1828         DWORD* pdwRegister);
1829
1830     HRESULT (STDMETHODCALLTYPE *Revoke)(
1831         IRunningObjectTable* This,
1832         DWORD dwRegister);
1833
1834     HRESULT (STDMETHODCALLTYPE *IsRunning)(
1835         IRunningObjectTable* This,
1836         IMoniker* pmkObjectName);
1837
1838     HRESULT (STDMETHODCALLTYPE *GetObject)(
1839         IRunningObjectTable* This,
1840         IMoniker* pmkObjectName,
1841         IUnknown** ppunkObject);
1842
1843     HRESULT (STDMETHODCALLTYPE *NoteChangeTime)(
1844         IRunningObjectTable* This,
1845         DWORD dwRegister,
1846         FILETIME* pfiletime);
1847
1848     HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
1849         IRunningObjectTable* This,
1850         IMoniker* pmkObjectName,
1851         FILETIME* pfiletime);
1852
1853     HRESULT (STDMETHODCALLTYPE *EnumRunning)(
1854         IRunningObjectTable* This,
1855         IEnumMoniker** ppenumMoniker);
1856
1857 };
1858
1859 #define IRunningObjectTable_IMETHODS \
1860     /*** IUnknown methods ***/ \
1861     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1862     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1863     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1864     /*** IRunningObjectTable methods ***/ \
1865     HRESULT (STDMETHODCALLTYPE *Register)(INTERFACE *This, DWORD grfFlags, IUnknown* punkObject, IMoniker* pmkObjectName, DWORD* pdwRegister); \
1866     HRESULT (STDMETHODCALLTYPE *Revoke)(INTERFACE *This, DWORD dwRegister); \
1867     HRESULT (STDMETHODCALLTYPE *IsRunning)(INTERFACE *This, IMoniker* pmkObjectName); \
1868     HRESULT (STDMETHODCALLTYPE *GetObject)(INTERFACE *This, IMoniker* pmkObjectName, IUnknown** ppunkObject); \
1869     HRESULT (STDMETHODCALLTYPE *NoteChangeTime)(INTERFACE *This, DWORD dwRegister, FILETIME* pfiletime); \
1870     HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(INTERFACE *This, IMoniker* pmkObjectName, FILETIME* pfiletime); \
1871     HRESULT (STDMETHODCALLTYPE *EnumRunning)(INTERFACE *This, IEnumMoniker** ppenumMoniker);
1872
1873 /*** IUnknown methods ***/
1874 #define IRunningObjectTable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1875 #define IRunningObjectTable_AddRef(p) (p)->lpVtbl->AddRef(p)
1876 #define IRunningObjectTable_Release(p) (p)->lpVtbl->Release(p)
1877 /*** IRunningObjectTable methods ***/
1878 #define IRunningObjectTable_Register(p,a,b,c,d) (p)->lpVtbl->Register(p,a,b,c,d)
1879 #define IRunningObjectTable_Revoke(p,a) (p)->lpVtbl->Revoke(p,a)
1880 #define IRunningObjectTable_IsRunning(p,a) (p)->lpVtbl->IsRunning(p,a)
1881 #define IRunningObjectTable_GetObject(p,a,b) (p)->lpVtbl->GetObject(p,a,b)
1882 #define IRunningObjectTable_NoteChangeTime(p,a,b) (p)->lpVtbl->NoteChangeTime(p,a,b)
1883 #define IRunningObjectTable_GetTimeOfLastChange(p,a,b) (p)->lpVtbl->GetTimeOfLastChange(p,a,b)
1884 #define IRunningObjectTable_EnumRunning(p,a) (p)->lpVtbl->EnumRunning(p,a)
1885
1886 #endif
1887
1888 HRESULT CALLBACK IRunningObjectTable_Register_Proxy(
1889     IRunningObjectTable* This,
1890     DWORD grfFlags,
1891     IUnknown* punkObject,
1892     IMoniker* pmkObjectName,
1893     DWORD* pdwRegister);
1894 void __RPC_STUB IRunningObjectTable_Register_Stub(
1895     struct IRpcStubBuffer* This,
1896     struct IRpcChannelBuffer* pRpcChannelBuffer,
1897     PRPC_MESSAGE pRpcMessage,
1898     DWORD* pdwStubPhase);
1899 HRESULT CALLBACK IRunningObjectTable_Revoke_Proxy(
1900     IRunningObjectTable* This,
1901     DWORD dwRegister);
1902 void __RPC_STUB IRunningObjectTable_Revoke_Stub(
1903     struct IRpcStubBuffer* This,
1904     struct IRpcChannelBuffer* pRpcChannelBuffer,
1905     PRPC_MESSAGE pRpcMessage,
1906     DWORD* pdwStubPhase);
1907 HRESULT CALLBACK IRunningObjectTable_IsRunning_Proxy(
1908     IRunningObjectTable* This,
1909     IMoniker* pmkObjectName);
1910 void __RPC_STUB IRunningObjectTable_IsRunning_Stub(
1911     struct IRpcStubBuffer* This,
1912     struct IRpcChannelBuffer* pRpcChannelBuffer,
1913     PRPC_MESSAGE pRpcMessage,
1914     DWORD* pdwStubPhase);
1915 HRESULT CALLBACK IRunningObjectTable_GetObject_Proxy(
1916     IRunningObjectTable* This,
1917     IMoniker* pmkObjectName,
1918     IUnknown** ppunkObject);
1919 void __RPC_STUB IRunningObjectTable_GetObject_Stub(
1920     struct IRpcStubBuffer* This,
1921     struct IRpcChannelBuffer* pRpcChannelBuffer,
1922     PRPC_MESSAGE pRpcMessage,
1923     DWORD* pdwStubPhase);
1924 HRESULT CALLBACK IRunningObjectTable_NoteChangeTime_Proxy(
1925     IRunningObjectTable* This,
1926     DWORD dwRegister,
1927     FILETIME* pfiletime);
1928 void __RPC_STUB IRunningObjectTable_NoteChangeTime_Stub(
1929     struct IRpcStubBuffer* This,
1930     struct IRpcChannelBuffer* pRpcChannelBuffer,
1931     PRPC_MESSAGE pRpcMessage,
1932     DWORD* pdwStubPhase);
1933 HRESULT CALLBACK IRunningObjectTable_GetTimeOfLastChange_Proxy(
1934     IRunningObjectTable* This,
1935     IMoniker* pmkObjectName,
1936     FILETIME* pfiletime);
1937 void __RPC_STUB IRunningObjectTable_GetTimeOfLastChange_Stub(
1938     struct IRpcStubBuffer* This,
1939     struct IRpcChannelBuffer* pRpcChannelBuffer,
1940     PRPC_MESSAGE pRpcMessage,
1941     DWORD* pdwStubPhase);
1942 HRESULT CALLBACK IRunningObjectTable_EnumRunning_Proxy(
1943     IRunningObjectTable* This,
1944     IEnumMoniker** ppenumMoniker);
1945 void __RPC_STUB IRunningObjectTable_EnumRunning_Stub(
1946     struct IRpcStubBuffer* This,
1947     struct IRpcChannelBuffer* pRpcChannelBuffer,
1948     PRPC_MESSAGE pRpcMessage,
1949     DWORD* pdwStubPhase);
1950
1951 typedef struct IPersist IPersist;
1952 typedef IPersist *LPPERSIST;
1953
1954 /*****************************************************************************
1955  * IPersist interface
1956  */
1957 DEFINE_GUID(IID_IPersist, 0x0000010c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1958 #if defined(__cplusplus) && !defined(CINTERFACE)
1959 struct IPersist: IUnknown {
1960
1961     virtual HRESULT STDMETHODCALLTYPE GetClassID(
1962         CLSID* pClassID) = 0;
1963
1964 } ICOM_COM_INTERFACE_ATTRIBUTE;
1965 #else
1966 typedef struct IPersistVtbl IPersistVtbl;
1967 struct IPersist {
1968     const IPersistVtbl* lpVtbl;
1969 };
1970 struct IPersistVtbl {
1971     ICOM_MSVTABLE_COMPAT_FIELDS
1972
1973     /*** IUnknown methods ***/
1974     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1975         IPersist* This,
1976         REFIID riid,
1977         void** ppvObject);
1978
1979     ULONG (STDMETHODCALLTYPE *AddRef)(
1980         IPersist* This);
1981
1982     ULONG (STDMETHODCALLTYPE *Release)(
1983         IPersist* This);
1984
1985     /*** IPersist methods ***/
1986     HRESULT (STDMETHODCALLTYPE *GetClassID)(
1987         IPersist* This,
1988         CLSID* pClassID);
1989
1990 };
1991
1992 #define IPersist_IMETHODS \
1993     /*** IUnknown methods ***/ \
1994     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
1995     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
1996     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
1997     /*** IPersist methods ***/ \
1998     HRESULT (STDMETHODCALLTYPE *GetClassID)(INTERFACE *This, CLSID* pClassID);
1999
2000 /*** IUnknown methods ***/
2001 #define IPersist_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2002 #define IPersist_AddRef(p) (p)->lpVtbl->AddRef(p)
2003 #define IPersist_Release(p) (p)->lpVtbl->Release(p)
2004 /*** IPersist methods ***/
2005 #define IPersist_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
2006
2007 #endif
2008
2009 HRESULT CALLBACK IPersist_GetClassID_Proxy(
2010     IPersist* This,
2011     CLSID* pClassID);
2012 void __RPC_STUB IPersist_GetClassID_Stub(
2013     struct IRpcStubBuffer* This,
2014     struct IRpcChannelBuffer* pRpcChannelBuffer,
2015     PRPC_MESSAGE pRpcMessage,
2016     DWORD* pdwStubPhase);
2017
2018 typedef struct IPersistStream IPersistStream;
2019 typedef IPersistStream *LPPERSISTSTREAM;
2020
2021 /*****************************************************************************
2022  * IPersistStream interface
2023  */
2024 DEFINE_GUID(IID_IPersistStream, 0x00000109, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2025 #if defined(__cplusplus) && !defined(CINTERFACE)
2026 struct IPersistStream: IPersist {
2027
2028     virtual HRESULT STDMETHODCALLTYPE IsDirty(
2029         ) = 0;
2030
2031     virtual HRESULT STDMETHODCALLTYPE Load(
2032         IStream* pStm) = 0;
2033
2034     virtual HRESULT STDMETHODCALLTYPE Save(
2035         IStream* pStm,
2036         BOOL fClearDirty) = 0;
2037
2038     virtual HRESULT STDMETHODCALLTYPE GetSizeMax(
2039         ULARGE_INTEGER* pcbSize) = 0;
2040
2041 } ICOM_COM_INTERFACE_ATTRIBUTE;
2042 #else
2043 typedef struct IPersistStreamVtbl IPersistStreamVtbl;
2044 struct IPersistStream {
2045     const IPersistStreamVtbl* lpVtbl;
2046 };
2047 struct IPersistStreamVtbl {
2048     ICOM_MSVTABLE_COMPAT_FIELDS
2049
2050     /*** IUnknown methods ***/
2051     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2052         IPersistStream* This,
2053         REFIID riid,
2054         void** ppvObject);
2055
2056     ULONG (STDMETHODCALLTYPE *AddRef)(
2057         IPersistStream* This);
2058
2059     ULONG (STDMETHODCALLTYPE *Release)(
2060         IPersistStream* This);
2061
2062     /*** IPersist methods ***/
2063     HRESULT (STDMETHODCALLTYPE *GetClassID)(
2064         IPersistStream* This,
2065         CLSID* pClassID);
2066
2067     /*** IPersistStream methods ***/
2068     HRESULT (STDMETHODCALLTYPE *IsDirty)(
2069         IPersistStream* This);
2070
2071     HRESULT (STDMETHODCALLTYPE *Load)(
2072         IPersistStream* This,
2073         IStream* pStm);
2074
2075     HRESULT (STDMETHODCALLTYPE *Save)(
2076         IPersistStream* This,
2077         IStream* pStm,
2078         BOOL fClearDirty);
2079
2080     HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
2081         IPersistStream* This,
2082         ULARGE_INTEGER* pcbSize);
2083
2084 };
2085
2086 #define IPersistStream_IMETHODS \
2087     /*** IUnknown methods ***/ \
2088     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2089     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2090     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2091     /*** IPersist methods ***/ \
2092     HRESULT (STDMETHODCALLTYPE *GetClassID)(INTERFACE *This, CLSID* pClassID); \
2093     /*** IPersistStream methods ***/ \
2094     HRESULT (STDMETHODCALLTYPE *IsDirty)(INTERFACE *This); \
2095     HRESULT (STDMETHODCALLTYPE *Load)(INTERFACE *This, IStream* pStm); \
2096     HRESULT (STDMETHODCALLTYPE *Save)(INTERFACE *This, IStream* pStm, BOOL fClearDirty); \
2097     HRESULT (STDMETHODCALLTYPE *GetSizeMax)(INTERFACE *This, ULARGE_INTEGER* pcbSize);
2098
2099 /*** IUnknown methods ***/
2100 #define IPersistStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2101 #define IPersistStream_AddRef(p) (p)->lpVtbl->AddRef(p)
2102 #define IPersistStream_Release(p) (p)->lpVtbl->Release(p)
2103 /*** IPersist methods ***/
2104 #define IPersistStream_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
2105 /*** IPersistStream methods ***/
2106 #define IPersistStream_IsDirty(p) (p)->lpVtbl->IsDirty(p)
2107 #define IPersistStream_Load(p,a) (p)->lpVtbl->Load(p,a)
2108 #define IPersistStream_Save(p,a,b) (p)->lpVtbl->Save(p,a,b)
2109 #define IPersistStream_GetSizeMax(p,a) (p)->lpVtbl->GetSizeMax(p,a)
2110
2111 #endif
2112
2113 HRESULT CALLBACK IPersistStream_IsDirty_Proxy(
2114     IPersistStream* This);
2115 void __RPC_STUB IPersistStream_IsDirty_Stub(
2116     struct IRpcStubBuffer* This,
2117     struct IRpcChannelBuffer* pRpcChannelBuffer,
2118     PRPC_MESSAGE pRpcMessage,
2119     DWORD* pdwStubPhase);
2120 HRESULT CALLBACK IPersistStream_Load_Proxy(
2121     IPersistStream* This,
2122     IStream* pStm);
2123 void __RPC_STUB IPersistStream_Load_Stub(
2124     struct IRpcStubBuffer* This,
2125     struct IRpcChannelBuffer* pRpcChannelBuffer,
2126     PRPC_MESSAGE pRpcMessage,
2127     DWORD* pdwStubPhase);
2128 HRESULT CALLBACK IPersistStream_Save_Proxy(
2129     IPersistStream* This,
2130     IStream* pStm,
2131     BOOL fClearDirty);
2132 void __RPC_STUB IPersistStream_Save_Stub(
2133     struct IRpcStubBuffer* This,
2134     struct IRpcChannelBuffer* pRpcChannelBuffer,
2135     PRPC_MESSAGE pRpcMessage,
2136     DWORD* pdwStubPhase);
2137 HRESULT CALLBACK IPersistStream_GetSizeMax_Proxy(
2138     IPersistStream* This,
2139     ULARGE_INTEGER* pcbSize);
2140 void __RPC_STUB IPersistStream_GetSizeMax_Stub(
2141     struct IRpcStubBuffer* This,
2142     struct IRpcChannelBuffer* pRpcChannelBuffer,
2143     PRPC_MESSAGE pRpcMessage,
2144     DWORD* pdwStubPhase);
2145
2146 typedef IMoniker *LPMONIKER;
2147
2148 typedef enum tagMKSYS {
2149     MKSYS_NONE = 0,
2150     MKSYS_GENERICCOMPOSITE = 1,
2151     MKSYS_FILEMONIKER = 2,
2152     MKSYS_ANTIMONIKER = 3,
2153     MKSYS_ITEMMONIKER = 4,
2154     MKSYS_POINTERMONIKER = 5,
2155     MKSYS_CLASSMONIKER = 7
2156 } MKSYS;
2157
2158 typedef enum tagMKREDUCE {
2159     MKRREDUCE_ONE = 3 << 16,
2160     MKRREDUCE_TOUSER = 2 << 16,
2161     MKRREDUCE_THROUGHUSER = 1 << 16,
2162     MKRREDUCE_ALL = 0
2163 } MKRREDUCE;
2164
2165 /*****************************************************************************
2166  * IMoniker interface
2167  */
2168 DEFINE_GUID(IID_IMoniker, 0x0000000f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2169 #if defined(__cplusplus) && !defined(CINTERFACE)
2170 struct IMoniker: IPersistStream {
2171
2172     virtual HRESULT STDMETHODCALLTYPE BindToObject(
2173         IBindCtx* pbc,
2174         IMoniker* pmkToLeft,
2175         REFIID riidResult,
2176         void** ppvResult) = 0;
2177
2178     virtual HRESULT STDMETHODCALLTYPE BindToStorage(
2179         IBindCtx* pbc,
2180         IMoniker* pmkToLeft,
2181         REFIID riid,
2182         void** ppvObj) = 0;
2183
2184     virtual HRESULT STDMETHODCALLTYPE Reduce(
2185         IBindCtx* pbc,
2186         DWORD dwReduceHowFar,
2187         IMoniker** ppmkToLeft,
2188         IMoniker** ppmkReduced) = 0;
2189
2190     virtual HRESULT STDMETHODCALLTYPE ComposeWith(
2191         IMoniker* pmkRight,
2192         BOOL fOnlyIfNotGeneric,
2193         IMoniker** ppmkComposite) = 0;
2194
2195     virtual HRESULT STDMETHODCALLTYPE Enum(
2196         BOOL fForward,
2197         IEnumMoniker** ppenumMoniker) = 0;
2198
2199     virtual HRESULT STDMETHODCALLTYPE IsEqual(
2200         IMoniker* pmkOtherMoniker) = 0;
2201
2202     virtual HRESULT STDMETHODCALLTYPE Hash(
2203         DWORD* pdwHash) = 0;
2204
2205     virtual HRESULT STDMETHODCALLTYPE IsRunning(
2206         IBindCtx* pbc,
2207         IMoniker* pmkToLeft,
2208         IMoniker* pmkNewlyRunning) = 0;
2209
2210     virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
2211         IBindCtx* pbc,
2212         IMoniker* pmkToLeft,
2213         FILETIME* pFileTime) = 0;
2214
2215     virtual HRESULT STDMETHODCALLTYPE Inverse(
2216         IMoniker** ppmk) = 0;
2217
2218     virtual HRESULT STDMETHODCALLTYPE CommonPrefixWith(
2219         IMoniker* pmkOther,
2220         IMoniker** ppmkPrefix) = 0;
2221
2222     virtual HRESULT STDMETHODCALLTYPE RelativePathTo(
2223         IMoniker* pmkOther,
2224         IMoniker** ppmkRelPath) = 0;
2225
2226     virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
2227         IBindCtx* pbc,
2228         IMoniker* pmkToLeft,
2229         LPOLESTR* ppszDisplayName) = 0;
2230
2231     virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
2232         IBindCtx* pbc,
2233         IMoniker* pmkToLeft,
2234         LPOLESTR pszDisplayName,
2235         ULONG* pchEaten,
2236         IMoniker** ppmkOut) = 0;
2237
2238     virtual HRESULT STDMETHODCALLTYPE IsSystemMoniker(
2239         DWORD* pdwMksys) = 0;
2240
2241 } ICOM_COM_INTERFACE_ATTRIBUTE;
2242 #else
2243 typedef struct IMonikerVtbl IMonikerVtbl;
2244 struct IMoniker {
2245     const IMonikerVtbl* lpVtbl;
2246 };
2247 struct IMonikerVtbl {
2248     ICOM_MSVTABLE_COMPAT_FIELDS
2249
2250     /*** IUnknown methods ***/
2251     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2252         IMoniker* This,
2253         REFIID riid,
2254         void** ppvObject);
2255
2256     ULONG (STDMETHODCALLTYPE *AddRef)(
2257         IMoniker* This);
2258
2259     ULONG (STDMETHODCALLTYPE *Release)(
2260         IMoniker* This);
2261
2262     /*** IPersist methods ***/
2263     HRESULT (STDMETHODCALLTYPE *GetClassID)(
2264         IMoniker* This,
2265         CLSID* pClassID);
2266
2267     /*** IPersistStream methods ***/
2268     HRESULT (STDMETHODCALLTYPE *IsDirty)(
2269         IMoniker* This);
2270
2271     HRESULT (STDMETHODCALLTYPE *Load)(
2272         IMoniker* This,
2273         IStream* pStm);
2274
2275     HRESULT (STDMETHODCALLTYPE *Save)(
2276         IMoniker* This,
2277         IStream* pStm,
2278         BOOL fClearDirty);
2279
2280     HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
2281         IMoniker* This,
2282         ULARGE_INTEGER* pcbSize);
2283
2284     /*** IMoniker methods ***/
2285     HRESULT (STDMETHODCALLTYPE *BindToObject)(
2286         IMoniker* This,
2287         IBindCtx* pbc,
2288         IMoniker* pmkToLeft,
2289         REFIID riidResult,
2290         void** ppvResult);
2291
2292     HRESULT (STDMETHODCALLTYPE *BindToStorage)(
2293         IMoniker* This,
2294         IBindCtx* pbc,
2295         IMoniker* pmkToLeft,
2296         REFIID riid,
2297         void** ppvObj);
2298
2299     HRESULT (STDMETHODCALLTYPE *Reduce)(
2300         IMoniker* This,
2301         IBindCtx* pbc,
2302         DWORD dwReduceHowFar,
2303         IMoniker** ppmkToLeft,
2304         IMoniker** ppmkReduced);
2305
2306     HRESULT (STDMETHODCALLTYPE *ComposeWith)(
2307         IMoniker* This,
2308         IMoniker* pmkRight,
2309         BOOL fOnlyIfNotGeneric,
2310         IMoniker** ppmkComposite);
2311
2312     HRESULT (STDMETHODCALLTYPE *Enum)(
2313         IMoniker* This,
2314         BOOL fForward,
2315         IEnumMoniker** ppenumMoniker);
2316
2317     HRESULT (STDMETHODCALLTYPE *IsEqual)(
2318         IMoniker* This,
2319         IMoniker* pmkOtherMoniker);
2320
2321     HRESULT (STDMETHODCALLTYPE *Hash)(
2322         IMoniker* This,
2323         DWORD* pdwHash);
2324
2325     HRESULT (STDMETHODCALLTYPE *IsRunning)(
2326         IMoniker* This,
2327         IBindCtx* pbc,
2328         IMoniker* pmkToLeft,
2329         IMoniker* pmkNewlyRunning);
2330
2331     HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
2332         IMoniker* This,
2333         IBindCtx* pbc,
2334         IMoniker* pmkToLeft,
2335         FILETIME* pFileTime);
2336
2337     HRESULT (STDMETHODCALLTYPE *Inverse)(
2338         IMoniker* This,
2339         IMoniker** ppmk);
2340
2341     HRESULT (STDMETHODCALLTYPE *CommonPrefixWith)(
2342         IMoniker* This,
2343         IMoniker* pmkOther,
2344         IMoniker** ppmkPrefix);
2345
2346     HRESULT (STDMETHODCALLTYPE *RelativePathTo)(
2347         IMoniker* This,
2348         IMoniker* pmkOther,
2349         IMoniker** ppmkRelPath);
2350
2351     HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
2352         IMoniker* This,
2353         IBindCtx* pbc,
2354         IMoniker* pmkToLeft,
2355         LPOLESTR* ppszDisplayName);
2356
2357     HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
2358         IMoniker* This,
2359         IBindCtx* pbc,
2360         IMoniker* pmkToLeft,
2361         LPOLESTR pszDisplayName,
2362         ULONG* pchEaten,
2363         IMoniker** ppmkOut);
2364
2365     HRESULT (STDMETHODCALLTYPE *IsSystemMoniker)(
2366         IMoniker* This,
2367         DWORD* pdwMksys);
2368
2369 };
2370
2371 #define IMoniker_IMETHODS \
2372     /*** IUnknown methods ***/ \
2373     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2374     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2375     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2376     /*** IPersist methods ***/ \
2377     HRESULT (STDMETHODCALLTYPE *GetClassID)(INTERFACE *This, CLSID* pClassID); \
2378     /*** IPersistStream methods ***/ \
2379     HRESULT (STDMETHODCALLTYPE *IsDirty)(INTERFACE *This); \
2380     HRESULT (STDMETHODCALLTYPE *Load)(INTERFACE *This, IStream* pStm); \
2381     HRESULT (STDMETHODCALLTYPE *Save)(INTERFACE *This, IStream* pStm, BOOL fClearDirty); \
2382     HRESULT (STDMETHODCALLTYPE *GetSizeMax)(INTERFACE *This, ULARGE_INTEGER* pcbSize); \
2383     /*** IMoniker methods ***/ \
2384     HRESULT (STDMETHODCALLTYPE *BindToObject)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riidResult, void** ppvResult); \
2385     HRESULT (STDMETHODCALLTYPE *BindToStorage)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, REFIID riid, void** ppvObj); \
2386     HRESULT (STDMETHODCALLTYPE *Reduce)(INTERFACE *This, IBindCtx* pbc, DWORD dwReduceHowFar, IMoniker** ppmkToLeft, IMoniker** ppmkReduced); \
2387     HRESULT (STDMETHODCALLTYPE *ComposeWith)(INTERFACE *This, IMoniker* pmkRight, BOOL fOnlyIfNotGeneric, IMoniker** ppmkComposite); \
2388     HRESULT (STDMETHODCALLTYPE *Enum)(INTERFACE *This, BOOL fForward, IEnumMoniker** ppenumMoniker); \
2389     HRESULT (STDMETHODCALLTYPE *IsEqual)(INTERFACE *This, IMoniker* pmkOtherMoniker); \
2390     HRESULT (STDMETHODCALLTYPE *Hash)(INTERFACE *This, DWORD* pdwHash); \
2391     HRESULT (STDMETHODCALLTYPE *IsRunning)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, IMoniker* pmkNewlyRunning); \
2392     HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, FILETIME* pFileTime); \
2393     HRESULT (STDMETHODCALLTYPE *Inverse)(INTERFACE *This, IMoniker** ppmk); \
2394     HRESULT (STDMETHODCALLTYPE *CommonPrefixWith)(INTERFACE *This, IMoniker* pmkOther, IMoniker** ppmkPrefix); \
2395     HRESULT (STDMETHODCALLTYPE *RelativePathTo)(INTERFACE *This, IMoniker* pmkOther, IMoniker** ppmkRelPath); \
2396     HRESULT (STDMETHODCALLTYPE *GetDisplayName)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR* ppszDisplayName); \
2397     HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(INTERFACE *This, IBindCtx* pbc, IMoniker* pmkToLeft, LPOLESTR pszDisplayName, ULONG* pchEaten, IMoniker** ppmkOut); \
2398     HRESULT (STDMETHODCALLTYPE *IsSystemMoniker)(INTERFACE *This, DWORD* pdwMksys);
2399
2400 /*** IUnknown methods ***/
2401 #define IMoniker_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2402 #define IMoniker_AddRef(p) (p)->lpVtbl->AddRef(p)
2403 #define IMoniker_Release(p) (p)->lpVtbl->Release(p)
2404 /*** IPersist methods ***/
2405 #define IMoniker_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
2406 /*** IPersistStream methods ***/
2407 #define IMoniker_IsDirty(p) (p)->lpVtbl->IsDirty(p)
2408 #define IMoniker_Load(p,a) (p)->lpVtbl->Load(p,a)
2409 #define IMoniker_Save(p,a,b) (p)->lpVtbl->Save(p,a,b)
2410 #define IMoniker_GetSizeMax(p,a) (p)->lpVtbl->GetSizeMax(p,a)
2411 /*** IMoniker methods ***/
2412 #define IMoniker_BindToObject(p,a,b,c,d) (p)->lpVtbl->BindToObject(p,a,b,c,d)
2413 #define IMoniker_BindToStorage(p,a,b,c,d) (p)->lpVtbl->BindToStorage(p,a,b,c,d)
2414 #define IMoniker_Reduce(p,a,b,c,d) (p)->lpVtbl->Reduce(p,a,b,c,d)
2415 #define IMoniker_ComposeWith(p,a,b,c) (p)->lpVtbl->ComposeWith(p,a,b,c)
2416 #define IMoniker_Enum(p,a,b) (p)->lpVtbl->Enum(p,a,b)
2417 #define IMoniker_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a)
2418 #define IMoniker_Hash(p,a) (p)->lpVtbl->Hash(p,a)
2419 #define IMoniker_IsRunning(p,a,b,c) (p)->lpVtbl->IsRunning(p,a,b,c)
2420 #define IMoniker_GetTimeOfLastChange(p,a,b,c) (p)->lpVtbl->GetTimeOfLastChange(p,a,b,c)
2421 #define IMoniker_Inverse(p,a) (p)->lpVtbl->Inverse(p,a)
2422 #define IMoniker_CommonPrefixWith(p,a,b) (p)->lpVtbl->CommonPrefixWith(p,a,b)
2423 #define IMoniker_RelativePathTo(p,a,b) (p)->lpVtbl->RelativePathTo(p,a,b)
2424 #define IMoniker_GetDisplayName(p,a,b,c) (p)->lpVtbl->GetDisplayName(p,a,b,c)
2425 #define IMoniker_ParseDisplayName(p,a,b,c,d,e) (p)->lpVtbl->ParseDisplayName(p,a,b,c,d,e)
2426 #define IMoniker_IsSystemMoniker(p,a) (p)->lpVtbl->IsSystemMoniker(p,a)
2427
2428 #endif
2429
2430 HRESULT CALLBACK IMoniker_RemoteBindToObject_Proxy(
2431     IMoniker* This,
2432     IBindCtx* pbc,
2433     IMoniker* pmkToLeft,
2434     REFIID riidResult,
2435     IUnknown** ppvResult);
2436 void __RPC_STUB IMoniker_RemoteBindToObject_Stub(
2437     struct IRpcStubBuffer* This,
2438     struct IRpcChannelBuffer* pRpcChannelBuffer,
2439     PRPC_MESSAGE pRpcMessage,
2440     DWORD* pdwStubPhase);
2441 HRESULT CALLBACK IMoniker_BindToObject_Proxy(
2442     IMoniker* This,
2443     IBindCtx* pbc,
2444     IMoniker* pmkToLeft,
2445     REFIID riidResult,
2446     void** ppvResult);
2447 HRESULT __RPC_STUB IMoniker_BindToObject_Stub(
2448     IMoniker* This,
2449     IBindCtx* pbc,
2450     IMoniker* pmkToLeft,
2451     REFIID riidResult,
2452     IUnknown** ppvResult);
2453 HRESULT CALLBACK IMoniker_RemoteBindToStorage_Proxy(
2454     IMoniker* This,
2455     IBindCtx* pbc,
2456     IMoniker* pmkToLeft,
2457     REFIID riid,
2458     IUnknown** ppvObj);
2459 void __RPC_STUB IMoniker_RemoteBindToStorage_Stub(
2460     struct IRpcStubBuffer* This,
2461     struct IRpcChannelBuffer* pRpcChannelBuffer,
2462     PRPC_MESSAGE pRpcMessage,
2463     DWORD* pdwStubPhase);
2464 HRESULT CALLBACK IMoniker_BindToStorage_Proxy(
2465     IMoniker* This,
2466     IBindCtx* pbc,
2467     IMoniker* pmkToLeft,
2468     REFIID riid,
2469     void** ppvObj);
2470 HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
2471     IMoniker* This,
2472     IBindCtx* pbc,
2473     IMoniker* pmkToLeft,
2474     REFIID riid,
2475     IUnknown** ppvObj);
2476 HRESULT CALLBACK IMoniker_Reduce_Proxy(
2477     IMoniker* This,
2478     IBindCtx* pbc,
2479     DWORD dwReduceHowFar,
2480     IMoniker** ppmkToLeft,
2481     IMoniker** ppmkReduced);
2482 void __RPC_STUB IMoniker_Reduce_Stub(
2483     struct IRpcStubBuffer* This,
2484     struct IRpcChannelBuffer* pRpcChannelBuffer,
2485     PRPC_MESSAGE pRpcMessage,
2486     DWORD* pdwStubPhase);
2487 HRESULT CALLBACK IMoniker_ComposeWith_Proxy(
2488     IMoniker* This,
2489     IMoniker* pmkRight,
2490     BOOL fOnlyIfNotGeneric,
2491     IMoniker** ppmkComposite);
2492 void __RPC_STUB IMoniker_ComposeWith_Stub(
2493     struct IRpcStubBuffer* This,
2494     struct IRpcChannelBuffer* pRpcChannelBuffer,
2495     PRPC_MESSAGE pRpcMessage,
2496     DWORD* pdwStubPhase);
2497 HRESULT CALLBACK IMoniker_Enum_Proxy(
2498     IMoniker* This,
2499     BOOL fForward,
2500     IEnumMoniker** ppenumMoniker);
2501 void __RPC_STUB IMoniker_Enum_Stub(
2502     struct IRpcStubBuffer* This,
2503     struct IRpcChannelBuffer* pRpcChannelBuffer,
2504     PRPC_MESSAGE pRpcMessage,
2505     DWORD* pdwStubPhase);
2506 HRESULT CALLBACK IMoniker_IsEqual_Proxy(
2507     IMoniker* This,
2508     IMoniker* pmkOtherMoniker);
2509 void __RPC_STUB IMoniker_IsEqual_Stub(
2510     struct IRpcStubBuffer* This,
2511     struct IRpcChannelBuffer* pRpcChannelBuffer,
2512     PRPC_MESSAGE pRpcMessage,
2513     DWORD* pdwStubPhase);
2514 HRESULT CALLBACK IMoniker_Hash_Proxy(
2515     IMoniker* This,
2516     DWORD* pdwHash);
2517 void __RPC_STUB IMoniker_Hash_Stub(
2518     struct IRpcStubBuffer* This,
2519     struct IRpcChannelBuffer* pRpcChannelBuffer,
2520     PRPC_MESSAGE pRpcMessage,
2521     DWORD* pdwStubPhase);
2522 HRESULT CALLBACK IMoniker_IsRunning_Proxy(
2523     IMoniker* This,
2524     IBindCtx* pbc,
2525     IMoniker* pmkToLeft,
2526     IMoniker* pmkNewlyRunning);
2527 void __RPC_STUB IMoniker_IsRunning_Stub(
2528     struct IRpcStubBuffer* This,
2529     struct IRpcChannelBuffer* pRpcChannelBuffer,
2530     PRPC_MESSAGE pRpcMessage,
2531     DWORD* pdwStubPhase);
2532 HRESULT CALLBACK IMoniker_GetTimeOfLastChange_Proxy(
2533     IMoniker* This,
2534     IBindCtx* pbc,
2535     IMoniker* pmkToLeft,
2536     FILETIME* pFileTime);
2537 void __RPC_STUB IMoniker_GetTimeOfLastChange_Stub(
2538     struct IRpcStubBuffer* This,
2539     struct IRpcChannelBuffer* pRpcChannelBuffer,
2540     PRPC_MESSAGE pRpcMessage,
2541     DWORD* pdwStubPhase);
2542 HRESULT CALLBACK IMoniker_Inverse_Proxy(
2543     IMoniker* This,
2544     IMoniker** ppmk);
2545 void __RPC_STUB IMoniker_Inverse_Stub(
2546     struct IRpcStubBuffer* This,
2547     struct IRpcChannelBuffer* pRpcChannelBuffer,
2548     PRPC_MESSAGE pRpcMessage,
2549     DWORD* pdwStubPhase);
2550 HRESULT CALLBACK IMoniker_CommonPrefixWith_Proxy(
2551     IMoniker* This,
2552     IMoniker* pmkOther,
2553     IMoniker** ppmkPrefix);
2554 void __RPC_STUB IMoniker_CommonPrefixWith_Stub(
2555     struct IRpcStubBuffer* This,
2556     struct IRpcChannelBuffer* pRpcChannelBuffer,
2557     PRPC_MESSAGE pRpcMessage,
2558     DWORD* pdwStubPhase);
2559 HRESULT CALLBACK IMoniker_RelativePathTo_Proxy(
2560     IMoniker* This,
2561     IMoniker* pmkOther,
2562     IMoniker** ppmkRelPath);
2563 void __RPC_STUB IMoniker_RelativePathTo_Stub(
2564     struct IRpcStubBuffer* This,
2565     struct IRpcChannelBuffer* pRpcChannelBuffer,
2566     PRPC_MESSAGE pRpcMessage,
2567     DWORD* pdwStubPhase);
2568 HRESULT CALLBACK IMoniker_GetDisplayName_Proxy(
2569     IMoniker* This,
2570     IBindCtx* pbc,
2571     IMoniker* pmkToLeft,
2572     LPOLESTR* ppszDisplayName);
2573 void __RPC_STUB IMoniker_GetDisplayName_Stub(
2574     struct IRpcStubBuffer* This,
2575     struct IRpcChannelBuffer* pRpcChannelBuffer,
2576     PRPC_MESSAGE pRpcMessage,
2577     DWORD* pdwStubPhase);
2578 HRESULT CALLBACK IMoniker_ParseDisplayName_Proxy(
2579     IMoniker* This,
2580     IBindCtx* pbc,
2581     IMoniker* pmkToLeft,
2582     LPOLESTR pszDisplayName,
2583     ULONG* pchEaten,
2584     IMoniker** ppmkOut);
2585 void __RPC_STUB IMoniker_ParseDisplayName_Stub(
2586     struct IRpcStubBuffer* This,
2587     struct IRpcChannelBuffer* pRpcChannelBuffer,
2588     PRPC_MESSAGE pRpcMessage,
2589     DWORD* pdwStubPhase);
2590 HRESULT CALLBACK IMoniker_IsSystemMoniker_Proxy(
2591     IMoniker* This,
2592     DWORD* pdwMksys);
2593 void __RPC_STUB IMoniker_IsSystemMoniker_Stub(
2594     struct IRpcStubBuffer* This,
2595     struct IRpcChannelBuffer* pRpcChannelBuffer,
2596     PRPC_MESSAGE pRpcMessage,
2597     DWORD* pdwStubPhase);
2598
2599 typedef struct IROTData IROTData;
2600 /*****************************************************************************
2601  * IROTData interface
2602  */
2603 DEFINE_GUID(IID_IROTData, 0xf29f6bc0, 0x5021, 0x11ce, 0xaa,0x15, 0x00,0x00,0x69,0x01,0x29,0x3f);
2604 #if defined(__cplusplus) && !defined(CINTERFACE)
2605 struct IROTData: IUnknown {
2606
2607     virtual HRESULT STDMETHODCALLTYPE GetComparisonData(
2608         byte* pbData,
2609         ULONG cbMax,
2610         ULONG* pcbData) = 0;
2611
2612 } ICOM_COM_INTERFACE_ATTRIBUTE;
2613 #else
2614 typedef struct IROTDataVtbl IROTDataVtbl;
2615 struct IROTData {
2616     const IROTDataVtbl* lpVtbl;
2617 };
2618 struct IROTDataVtbl {
2619     ICOM_MSVTABLE_COMPAT_FIELDS
2620
2621     /*** IUnknown methods ***/
2622     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2623         IROTData* This,
2624         REFIID riid,
2625         void** ppvObject);
2626
2627     ULONG (STDMETHODCALLTYPE *AddRef)(
2628         IROTData* This);
2629
2630     ULONG (STDMETHODCALLTYPE *Release)(
2631         IROTData* This);
2632
2633     /*** IROTData methods ***/
2634     HRESULT (STDMETHODCALLTYPE *GetComparisonData)(
2635         IROTData* This,
2636         byte* pbData,
2637         ULONG cbMax,
2638         ULONG* pcbData);
2639
2640 };
2641
2642 #define IROTData_IMETHODS \
2643     /*** IUnknown methods ***/ \
2644     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2645     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2646     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2647     /*** IROTData methods ***/ \
2648     HRESULT (STDMETHODCALLTYPE *GetComparisonData)(INTERFACE *This, byte* pbData, ULONG cbMax, ULONG* pcbData);
2649
2650 /*** IUnknown methods ***/
2651 #define IROTData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2652 #define IROTData_AddRef(p) (p)->lpVtbl->AddRef(p)
2653 #define IROTData_Release(p) (p)->lpVtbl->Release(p)
2654 /*** IROTData methods ***/
2655 #define IROTData_GetComparisonData(p,a,b,c) (p)->lpVtbl->GetComparisonData(p,a,b,c)
2656
2657 #endif
2658
2659 HRESULT CALLBACK IROTData_GetComparisonData_Proxy(
2660     IROTData* This,
2661     byte* pbData,
2662     ULONG cbMax,
2663     ULONG* pcbData);
2664 void __RPC_STUB IROTData_GetComparisonData_Stub(
2665     struct IRpcStubBuffer* This,
2666     struct IRpcChannelBuffer* pRpcChannelBuffer,
2667     PRPC_MESSAGE pRpcMessage,
2668     DWORD* pdwStubPhase);
2669
2670 typedef IEnumString *LPENUMSTRING;
2671
2672 /*****************************************************************************
2673  * IEnumString interface
2674  */
2675 DEFINE_GUID(IID_IEnumString, 0x00000101, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2676 #if defined(__cplusplus) && !defined(CINTERFACE)
2677 struct IEnumString: IUnknown {
2678
2679     virtual HRESULT STDMETHODCALLTYPE Next(
2680         ULONG celt,
2681         LPOLESTR* rgelt,
2682         ULONG* pceltFetched) = 0;
2683
2684     virtual HRESULT STDMETHODCALLTYPE Skip(
2685         ULONG celt) = 0;
2686
2687     virtual HRESULT STDMETHODCALLTYPE Reset(
2688         ) = 0;
2689
2690     virtual HRESULT STDMETHODCALLTYPE Clone(
2691         IEnumString** ppenum) = 0;
2692
2693 } ICOM_COM_INTERFACE_ATTRIBUTE;
2694 #else
2695 typedef struct IEnumStringVtbl IEnumStringVtbl;
2696 struct IEnumString {
2697     const IEnumStringVtbl* lpVtbl;
2698 };
2699 struct IEnumStringVtbl {
2700     ICOM_MSVTABLE_COMPAT_FIELDS
2701
2702     /*** IUnknown methods ***/
2703     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2704         IEnumString* This,
2705         REFIID riid,
2706         void** ppvObject);
2707
2708     ULONG (STDMETHODCALLTYPE *AddRef)(
2709         IEnumString* This);
2710
2711     ULONG (STDMETHODCALLTYPE *Release)(
2712         IEnumString* This);
2713
2714     /*** IEnumString methods ***/
2715     HRESULT (STDMETHODCALLTYPE *Next)(
2716         IEnumString* This,
2717         ULONG celt,
2718         LPOLESTR* rgelt,
2719         ULONG* pceltFetched);
2720
2721     HRESULT (STDMETHODCALLTYPE *Skip)(
2722         IEnumString* This,
2723         ULONG celt);
2724
2725     HRESULT (STDMETHODCALLTYPE *Reset)(
2726         IEnumString* This);
2727
2728     HRESULT (STDMETHODCALLTYPE *Clone)(
2729         IEnumString* This,
2730         IEnumString** ppenum);
2731
2732 };
2733
2734 #define IEnumString_IMETHODS \
2735     /*** IUnknown methods ***/ \
2736     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2737     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2738     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2739     /*** IEnumString methods ***/ \
2740     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, LPOLESTR* rgelt, ULONG* pceltFetched); \
2741     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
2742     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
2743     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumString** ppenum);
2744
2745 /*** IUnknown methods ***/
2746 #define IEnumString_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2747 #define IEnumString_AddRef(p) (p)->lpVtbl->AddRef(p)
2748 #define IEnumString_Release(p) (p)->lpVtbl->Release(p)
2749 /*** IEnumString methods ***/
2750 #define IEnumString_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
2751 #define IEnumString_Skip(p,a) (p)->lpVtbl->Skip(p,a)
2752 #define IEnumString_Reset(p) (p)->lpVtbl->Reset(p)
2753 #define IEnumString_Clone(p,a) (p)->lpVtbl->Clone(p,a)
2754
2755 #endif
2756
2757 HRESULT CALLBACK IEnumString_RemoteNext_Proxy(
2758     IEnumString* This,
2759     ULONG celt,
2760     LPOLESTR* rgelt,
2761     ULONG* pceltFetched);
2762 void __RPC_STUB IEnumString_RemoteNext_Stub(
2763     struct IRpcStubBuffer* This,
2764     struct IRpcChannelBuffer* pRpcChannelBuffer,
2765     PRPC_MESSAGE pRpcMessage,
2766     DWORD* pdwStubPhase);
2767 HRESULT CALLBACK IEnumString_Next_Proxy(
2768     IEnumString* This,
2769     ULONG celt,
2770     LPOLESTR* rgelt,
2771     ULONG* pceltFetched);
2772 HRESULT __RPC_STUB IEnumString_Next_Stub(
2773     IEnumString* This,
2774     ULONG celt,
2775     LPOLESTR* rgelt,
2776     ULONG* pceltFetched);
2777 HRESULT CALLBACK IEnumString_Skip_Proxy(
2778     IEnumString* This,
2779     ULONG celt);
2780 void __RPC_STUB IEnumString_Skip_Stub(
2781     struct IRpcStubBuffer* This,
2782     struct IRpcChannelBuffer* pRpcChannelBuffer,
2783     PRPC_MESSAGE pRpcMessage,
2784     DWORD* pdwStubPhase);
2785 HRESULT CALLBACK IEnumString_Reset_Proxy(
2786     IEnumString* This);
2787 void __RPC_STUB IEnumString_Reset_Stub(
2788     struct IRpcStubBuffer* This,
2789     struct IRpcChannelBuffer* pRpcChannelBuffer,
2790     PRPC_MESSAGE pRpcMessage,
2791     DWORD* pdwStubPhase);
2792 HRESULT CALLBACK IEnumString_Clone_Proxy(
2793     IEnumString* This,
2794     IEnumString** ppenum);
2795 void __RPC_STUB IEnumString_Clone_Stub(
2796     struct IRpcStubBuffer* This,
2797     struct IRpcChannelBuffer* pRpcChannelBuffer,
2798     PRPC_MESSAGE pRpcMessage,
2799     DWORD* pdwStubPhase);
2800
2801 typedef struct IClassActivator IClassActivator;
2802 /*****************************************************************************
2803  * IClassActivator interface
2804  */
2805 DEFINE_GUID(IID_IClassActivator, 0x00000140, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2806 #if defined(__cplusplus) && !defined(CINTERFACE)
2807 struct IClassActivator: IUnknown {
2808
2809     virtual HRESULT STDMETHODCALLTYPE GetClassObject(
2810         REFCLSID rclsid,
2811         DWORD dwClassContext,
2812         LCID locale,
2813         REFIID riid,
2814         void** ppv) = 0;
2815
2816 } ICOM_COM_INTERFACE_ATTRIBUTE;
2817 #else
2818 typedef struct IClassActivatorVtbl IClassActivatorVtbl;
2819 struct IClassActivator {
2820     const IClassActivatorVtbl* lpVtbl;
2821 };
2822 struct IClassActivatorVtbl {
2823     ICOM_MSVTABLE_COMPAT_FIELDS
2824
2825     /*** IUnknown methods ***/
2826     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2827         IClassActivator* This,
2828         REFIID riid,
2829         void** ppvObject);
2830
2831     ULONG (STDMETHODCALLTYPE *AddRef)(
2832         IClassActivator* This);
2833
2834     ULONG (STDMETHODCALLTYPE *Release)(
2835         IClassActivator* This);
2836
2837     /*** IClassActivator methods ***/
2838     HRESULT (STDMETHODCALLTYPE *GetClassObject)(
2839         IClassActivator* This,
2840         REFCLSID rclsid,
2841         DWORD dwClassContext,
2842         LCID locale,
2843         REFIID riid,
2844         void** ppv);
2845
2846 };
2847
2848 #define IClassActivator_IMETHODS \
2849     /*** IUnknown methods ***/ \
2850     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2851     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2852     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2853     /*** IClassActivator methods ***/ \
2854     HRESULT (STDMETHODCALLTYPE *GetClassObject)(INTERFACE *This, REFCLSID rclsid, DWORD dwClassContext, LCID locale, REFIID riid, void** ppv);
2855
2856 /*** IUnknown methods ***/
2857 #define IClassActivator_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2858 #define IClassActivator_AddRef(p) (p)->lpVtbl->AddRef(p)
2859 #define IClassActivator_Release(p) (p)->lpVtbl->Release(p)
2860 /*** IClassActivator methods ***/
2861 #define IClassActivator_GetClassObject(p,a,b,c,d,e) (p)->lpVtbl->GetClassObject(p,a,b,c,d,e)
2862
2863 #endif
2864
2865 HRESULT CALLBACK IClassActivator_GetClassObject_Proxy(
2866     IClassActivator* This,
2867     REFCLSID rclsid,
2868     DWORD dwClassContext,
2869     LCID locale,
2870     REFIID riid,
2871     void** ppv);
2872 void __RPC_STUB IClassActivator_GetClassObject_Stub(
2873     struct IRpcStubBuffer* This,
2874     struct IRpcChannelBuffer* pRpcChannelBuffer,
2875     PRPC_MESSAGE pRpcMessage,
2876     DWORD* pdwStubPhase);
2877
2878 typedef struct ISequentialStream ISequentialStream;
2879 /*****************************************************************************
2880  * ISequentialStream interface
2881  */
2882 DEFINE_GUID(IID_ISequentialStream, 0x0c733a30, 0x2a1c, 0x11ce, 0xad,0xe5, 0x00,0xaa,0x00,0x44,0x77,0x3d);
2883 #if defined(__cplusplus) && !defined(CINTERFACE)
2884 struct ISequentialStream: IUnknown {
2885
2886     virtual HRESULT STDMETHODCALLTYPE Read(
2887         void* pv,
2888         ULONG cb,
2889         ULONG* pcbRead) = 0;
2890
2891     virtual HRESULT STDMETHODCALLTYPE Write(
2892         const void* pv,
2893         ULONG cb,
2894         ULONG* pcbWritten) = 0;
2895
2896 } ICOM_COM_INTERFACE_ATTRIBUTE;
2897 #else
2898 typedef struct ISequentialStreamVtbl ISequentialStreamVtbl;
2899 struct ISequentialStream {
2900     const ISequentialStreamVtbl* lpVtbl;
2901 };
2902 struct ISequentialStreamVtbl {
2903     ICOM_MSVTABLE_COMPAT_FIELDS
2904
2905     /*** IUnknown methods ***/
2906     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2907         ISequentialStream* This,
2908         REFIID riid,
2909         void** ppvObject);
2910
2911     ULONG (STDMETHODCALLTYPE *AddRef)(
2912         ISequentialStream* This);
2913
2914     ULONG (STDMETHODCALLTYPE *Release)(
2915         ISequentialStream* This);
2916
2917     /*** ISequentialStream methods ***/
2918     HRESULT (STDMETHODCALLTYPE *Read)(
2919         ISequentialStream* This,
2920         void* pv,
2921         ULONG cb,
2922         ULONG* pcbRead);
2923
2924     HRESULT (STDMETHODCALLTYPE *Write)(
2925         ISequentialStream* This,
2926         const void* pv,
2927         ULONG cb,
2928         ULONG* pcbWritten);
2929
2930 };
2931
2932 #define ISequentialStream_IMETHODS \
2933     /*** IUnknown methods ***/ \
2934     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
2935     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
2936     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
2937     /*** ISequentialStream methods ***/ \
2938     HRESULT (STDMETHODCALLTYPE *Read)(INTERFACE *This, void* pv, ULONG cb, ULONG* pcbRead); \
2939     HRESULT (STDMETHODCALLTYPE *Write)(INTERFACE *This, const void* pv, ULONG cb, ULONG* pcbWritten);
2940
2941 /*** IUnknown methods ***/
2942 #define ISequentialStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2943 #define ISequentialStream_AddRef(p) (p)->lpVtbl->AddRef(p)
2944 #define ISequentialStream_Release(p) (p)->lpVtbl->Release(p)
2945 /*** ISequentialStream methods ***/
2946 #define ISequentialStream_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
2947 #define ISequentialStream_Write(p,a,b,c) (p)->lpVtbl->Write(p,a,b,c)
2948
2949 #endif
2950
2951 HRESULT CALLBACK ISequentialStream_RemoteRead_Proxy(
2952     ISequentialStream* This,
2953     byte* pv,
2954     ULONG cb,
2955     ULONG* pcbRead);
2956 void __RPC_STUB ISequentialStream_RemoteRead_Stub(
2957     struct IRpcStubBuffer* This,
2958     struct IRpcChannelBuffer* pRpcChannelBuffer,
2959     PRPC_MESSAGE pRpcMessage,
2960     DWORD* pdwStubPhase);
2961 HRESULT CALLBACK ISequentialStream_Read_Proxy(
2962     ISequentialStream* This,
2963     void* pv,
2964     ULONG cb,
2965     ULONG* pcbRead);
2966 HRESULT __RPC_STUB ISequentialStream_Read_Stub(
2967     ISequentialStream* This,
2968     byte* pv,
2969     ULONG cb,
2970     ULONG* pcbRead);
2971 HRESULT CALLBACK ISequentialStream_RemoteWrite_Proxy(
2972     ISequentialStream* This,
2973     const byte* pv,
2974     ULONG cb,
2975     ULONG* pcbWritten);
2976 void __RPC_STUB ISequentialStream_RemoteWrite_Stub(
2977     struct IRpcStubBuffer* This,
2978     struct IRpcChannelBuffer* pRpcChannelBuffer,
2979     PRPC_MESSAGE pRpcMessage,
2980     DWORD* pdwStubPhase);
2981 HRESULT CALLBACK ISequentialStream_Write_Proxy(
2982     ISequentialStream* This,
2983     const void* pv,
2984     ULONG cb,
2985     ULONG* pcbWritten);
2986 HRESULT __RPC_STUB ISequentialStream_Write_Stub(
2987     ISequentialStream* This,
2988     const byte* pv,
2989     ULONG cb,
2990     ULONG* pcbWritten);
2991
2992 typedef IStream *LPSTREAM;
2993
2994 typedef struct tagSTATSTG {
2995     LPOLESTR pwcsName;
2996     DWORD type;
2997     ULARGE_INTEGER cbSize;
2998     FILETIME mtime;
2999     FILETIME ctime;
3000     FILETIME atime;
3001     DWORD grfMode;
3002     DWORD grfLocksSupported;
3003     CLSID clsid;
3004     DWORD grfStateBits;
3005     DWORD reserved;
3006 } STATSTG;
3007
3008 typedef enum tagSTGTY {
3009     STGTY_STORAGE = 1,
3010     STGTY_STREAM = 2,
3011     STGTY_LOCKBYTES = 3,
3012     STGTY_PROPERTY = 4
3013 } STGTY;
3014
3015 typedef enum tagSTREAM_SEEK {
3016     STREAM_SEEK_SET = 0,
3017     STREAM_SEEK_CUR = 1,
3018     STREAM_SEEK_END = 2
3019 } STREAM_SEEK;
3020
3021 #undef LOCK_MAND
3022 #undef LOCK_READ
3023 #undef LOCK_WRITE
3024 #undef LOCK_RW
3025 typedef enum tagLOCKTYPE {
3026     LOCK_WRITE = 1,
3027     LOCK_EXCLUSIVE = 2,
3028     LOCK_ONLYONCE = 4
3029 } LOCKTYPE;
3030
3031 /*****************************************************************************
3032  * IStream interface
3033  */
3034 DEFINE_GUID(IID_IStream, 0x0000000c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3035 #if defined(__cplusplus) && !defined(CINTERFACE)
3036 struct IStream: ISequentialStream {
3037
3038     virtual HRESULT STDMETHODCALLTYPE Seek(
3039         LARGE_INTEGER dlibMove,
3040         DWORD dwOrigin,
3041         ULARGE_INTEGER* plibNewPosition) = 0;
3042
3043     virtual HRESULT STDMETHODCALLTYPE SetSize(
3044         ULARGE_INTEGER libNewSize) = 0;
3045
3046     virtual HRESULT STDMETHODCALLTYPE CopyTo(
3047         IStream* pstm,
3048         ULARGE_INTEGER cb,
3049         ULARGE_INTEGER* pcbRead,
3050         ULARGE_INTEGER* pcbWritten) = 0;
3051
3052     virtual HRESULT STDMETHODCALLTYPE Commit(
3053         DWORD grfCommitFlags) = 0;
3054
3055     virtual HRESULT STDMETHODCALLTYPE Revert(
3056         ) = 0;
3057
3058     virtual HRESULT STDMETHODCALLTYPE LockRegion(
3059         ULARGE_INTEGER libOffset,
3060         ULARGE_INTEGER cb,
3061         DWORD dwLockType) = 0;
3062
3063     virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
3064         ULARGE_INTEGER libOffset,
3065         ULARGE_INTEGER cb,
3066         DWORD dwLockType) = 0;
3067
3068     virtual HRESULT STDMETHODCALLTYPE Stat(
3069         STATSTG* pstatstg,
3070         DWORD grfStatFlag) = 0;
3071
3072     virtual HRESULT STDMETHODCALLTYPE Clone(
3073         IStream** ppstm) = 0;
3074
3075 } ICOM_COM_INTERFACE_ATTRIBUTE;
3076 #else
3077 typedef struct IStreamVtbl IStreamVtbl;
3078 struct IStream {
3079     const IStreamVtbl* lpVtbl;
3080 };
3081 struct IStreamVtbl {
3082     ICOM_MSVTABLE_COMPAT_FIELDS
3083
3084     /*** IUnknown methods ***/
3085     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3086         IStream* This,
3087         REFIID riid,
3088         void** ppvObject);
3089
3090     ULONG (STDMETHODCALLTYPE *AddRef)(
3091         IStream* This);
3092
3093     ULONG (STDMETHODCALLTYPE *Release)(
3094         IStream* This);
3095
3096     /*** ISequentialStream methods ***/
3097     HRESULT (STDMETHODCALLTYPE *Read)(
3098         IStream* This,
3099         void* pv,
3100         ULONG cb,
3101         ULONG* pcbRead);
3102
3103     HRESULT (STDMETHODCALLTYPE *Write)(
3104         IStream* This,
3105         const void* pv,
3106         ULONG cb,
3107         ULONG* pcbWritten);
3108
3109     /*** IStream methods ***/
3110     HRESULT (STDMETHODCALLTYPE *Seek)(
3111         IStream* This,
3112         LARGE_INTEGER dlibMove,
3113         DWORD dwOrigin,
3114         ULARGE_INTEGER* plibNewPosition);
3115
3116     HRESULT (STDMETHODCALLTYPE *SetSize)(
3117         IStream* This,
3118         ULARGE_INTEGER libNewSize);
3119
3120     HRESULT (STDMETHODCALLTYPE *CopyTo)(
3121         IStream* This,
3122         IStream* pstm,
3123         ULARGE_INTEGER cb,
3124         ULARGE_INTEGER* pcbRead,
3125         ULARGE_INTEGER* pcbWritten);
3126
3127     HRESULT (STDMETHODCALLTYPE *Commit)(
3128         IStream* This,
3129         DWORD grfCommitFlags);
3130
3131     HRESULT (STDMETHODCALLTYPE *Revert)(
3132         IStream* This);
3133
3134     HRESULT (STDMETHODCALLTYPE *LockRegion)(
3135         IStream* This,
3136         ULARGE_INTEGER libOffset,
3137         ULARGE_INTEGER cb,
3138         DWORD dwLockType);
3139
3140     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
3141         IStream* This,
3142         ULARGE_INTEGER libOffset,
3143         ULARGE_INTEGER cb,
3144         DWORD dwLockType);
3145
3146     HRESULT (STDMETHODCALLTYPE *Stat)(
3147         IStream* This,
3148         STATSTG* pstatstg,
3149         DWORD grfStatFlag);
3150
3151     HRESULT (STDMETHODCALLTYPE *Clone)(
3152         IStream* This,
3153         IStream** ppstm);
3154
3155 };
3156
3157 #define IStream_IMETHODS \
3158     /*** IUnknown methods ***/ \
3159     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
3160     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
3161     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
3162     /*** ISequentialStream methods ***/ \
3163     HRESULT (STDMETHODCALLTYPE *Read)(INTERFACE *This, void* pv, ULONG cb, ULONG* pcbRead); \
3164     HRESULT (STDMETHODCALLTYPE *Write)(INTERFACE *This, const void* pv, ULONG cb, ULONG* pcbWritten); \
3165     /*** IStream methods ***/ \
3166     HRESULT (STDMETHODCALLTYPE *Seek)(INTERFACE *This, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition); \
3167     HRESULT (STDMETHODCALLTYPE *SetSize)(INTERFACE *This, ULARGE_INTEGER libNewSize); \
3168     HRESULT (STDMETHODCALLTYPE *CopyTo)(INTERFACE *This, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten); \
3169     HRESULT (STDMETHODCALLTYPE *Commit)(INTERFACE *This, DWORD grfCommitFlags); \
3170     HRESULT (STDMETHODCALLTYPE *Revert)(INTERFACE *This); \
3171     HRESULT (STDMETHODCALLTYPE *LockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
3172     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
3173     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATSTG* pstatstg, DWORD grfStatFlag); \
3174     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IStream** ppstm);
3175
3176 /*** IUnknown methods ***/
3177 #define IStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3178 #define IStream_AddRef(p) (p)->lpVtbl->AddRef(p)
3179 #define IStream_Release(p) (p)->lpVtbl->Release(p)
3180 /*** ISequentialStream methods ***/
3181 #define IStream_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
3182 #define IStream_Write(p,a,b,c) (p)->lpVtbl->Write(p,a,b,c)
3183 /*** IStream methods ***/
3184 #define IStream_Seek(p,a,b,c) (p)->lpVtbl->Seek(p,a,b,c)
3185 #define IStream_SetSize(p,a) (p)->lpVtbl->SetSize(p,a)
3186 #define IStream_CopyTo(p,a,b,c,d) (p)->lpVtbl->CopyTo(p,a,b,c,d)
3187 #define IStream_Commit(p,a) (p)->lpVtbl->Commit(p,a)
3188 #define IStream_Revert(p) (p)->lpVtbl->Revert(p)
3189 #define IStream_LockRegion(p,a,b,c) (p)->lpVtbl->LockRegion(p,a,b,c)
3190 #define IStream_UnlockRegion(p,a,b,c) (p)->lpVtbl->UnlockRegion(p,a,b,c)
3191 #define IStream_Stat(p,a,b) (p)->lpVtbl->Stat(p,a,b)
3192 #define IStream_Clone(p,a) (p)->lpVtbl->Clone(p,a)
3193
3194 #endif
3195
3196 HRESULT CALLBACK IStream_RemoteSeek_Proxy(
3197     IStream* This,
3198     LARGE_INTEGER dlibMove,
3199     DWORD dwOrigin,
3200     ULARGE_INTEGER* plibNewPosition);
3201 void __RPC_STUB IStream_RemoteSeek_Stub(
3202     struct IRpcStubBuffer* This,
3203     struct IRpcChannelBuffer* pRpcChannelBuffer,
3204     PRPC_MESSAGE pRpcMessage,
3205     DWORD* pdwStubPhase);
3206 HRESULT CALLBACK IStream_Seek_Proxy(
3207     IStream* This,
3208     LARGE_INTEGER dlibMove,
3209     DWORD dwOrigin,
3210     ULARGE_INTEGER* plibNewPosition);
3211 HRESULT __RPC_STUB IStream_Seek_Stub(
3212     IStream* This,
3213     LARGE_INTEGER dlibMove,
3214     DWORD dwOrigin,
3215     ULARGE_INTEGER* plibNewPosition);
3216 HRESULT CALLBACK IStream_SetSize_Proxy(
3217     IStream* This,
3218     ULARGE_INTEGER libNewSize);
3219 void __RPC_STUB IStream_SetSize_Stub(
3220     struct IRpcStubBuffer* This,
3221     struct IRpcChannelBuffer* pRpcChannelBuffer,
3222     PRPC_MESSAGE pRpcMessage,
3223     DWORD* pdwStubPhase);
3224 HRESULT CALLBACK IStream_RemoteCopyTo_Proxy(
3225     IStream* This,
3226     IStream* pstm,
3227     ULARGE_INTEGER cb,
3228     ULARGE_INTEGER* pcbRead,
3229     ULARGE_INTEGER* pcbWritten);
3230 void __RPC_STUB IStream_RemoteCopyTo_Stub(
3231     struct IRpcStubBuffer* This,
3232     struct IRpcChannelBuffer* pRpcChannelBuffer,
3233     PRPC_MESSAGE pRpcMessage,
3234     DWORD* pdwStubPhase);
3235 HRESULT CALLBACK IStream_CopyTo_Proxy(
3236     IStream* This,
3237     IStream* pstm,
3238     ULARGE_INTEGER cb,
3239     ULARGE_INTEGER* pcbRead,
3240     ULARGE_INTEGER* pcbWritten);
3241 HRESULT __RPC_STUB IStream_CopyTo_Stub(
3242     IStream* This,
3243     IStream* pstm,
3244     ULARGE_INTEGER cb,
3245     ULARGE_INTEGER* pcbRead,
3246     ULARGE_INTEGER* pcbWritten);
3247 HRESULT CALLBACK IStream_Commit_Proxy(
3248     IStream* This,
3249     DWORD grfCommitFlags);
3250 void __RPC_STUB IStream_Commit_Stub(
3251     struct IRpcStubBuffer* This,
3252     struct IRpcChannelBuffer* pRpcChannelBuffer,
3253     PRPC_MESSAGE pRpcMessage,
3254     DWORD* pdwStubPhase);
3255 HRESULT CALLBACK IStream_Revert_Proxy(
3256     IStream* This);
3257 void __RPC_STUB IStream_Revert_Stub(
3258     struct IRpcStubBuffer* This,
3259     struct IRpcChannelBuffer* pRpcChannelBuffer,
3260     PRPC_MESSAGE pRpcMessage,
3261     DWORD* pdwStubPhase);
3262 HRESULT CALLBACK IStream_LockRegion_Proxy(
3263     IStream* This,
3264     ULARGE_INTEGER libOffset,
3265     ULARGE_INTEGER cb,
3266     DWORD dwLockType);
3267 void __RPC_STUB IStream_LockRegion_Stub(
3268     struct IRpcStubBuffer* This,
3269     struct IRpcChannelBuffer* pRpcChannelBuffer,
3270     PRPC_MESSAGE pRpcMessage,
3271     DWORD* pdwStubPhase);
3272 HRESULT CALLBACK IStream_UnlockRegion_Proxy(
3273     IStream* This,
3274     ULARGE_INTEGER libOffset,
3275     ULARGE_INTEGER cb,
3276     DWORD dwLockType);
3277 void __RPC_STUB IStream_UnlockRegion_Stub(
3278     struct IRpcStubBuffer* This,
3279     struct IRpcChannelBuffer* pRpcChannelBuffer,
3280     PRPC_MESSAGE pRpcMessage,
3281     DWORD* pdwStubPhase);
3282 HRESULT CALLBACK IStream_Stat_Proxy(
3283     IStream* This,
3284     STATSTG* pstatstg,
3285     DWORD grfStatFlag);
3286 void __RPC_STUB IStream_Stat_Stub(
3287     struct IRpcStubBuffer* This,
3288     struct IRpcChannelBuffer* pRpcChannelBuffer,
3289     PRPC_MESSAGE pRpcMessage,
3290     DWORD* pdwStubPhase);
3291 HRESULT CALLBACK IStream_Clone_Proxy(
3292     IStream* This,
3293     IStream** ppstm);
3294 void __RPC_STUB IStream_Clone_Stub(
3295     struct IRpcStubBuffer* This,
3296     struct IRpcChannelBuffer* pRpcChannelBuffer,
3297     PRPC_MESSAGE pRpcMessage,
3298     DWORD* pdwStubPhase);
3299
3300 typedef IStream16 *LPSTREAM16;
3301
3302 typedef struct tagSTATSTG16 {
3303     LPOLESTR16 pwcsName;
3304     DWORD type;
3305     ULARGE_INTEGER cbSize;
3306     FILETIME mtime;
3307     FILETIME ctime;
3308     FILETIME atime;
3309     DWORD grfMode;
3310     DWORD grfLocksSupported;
3311     CLSID clsid;
3312     DWORD grfStateBits;
3313     DWORD reserved;
3314 } STATSTG16;
3315
3316 /*****************************************************************************
3317  * IStream16 interface
3318  */
3319 #if defined(__cplusplus) && !defined(CINTERFACE)
3320 struct IStream16: ISequentialStream {
3321
3322     virtual HRESULT STDMETHODCALLTYPE Seek(
3323         LARGE_INTEGER dlibMove,
3324         DWORD dwOrigin,
3325         ULARGE_INTEGER* plibNewPosition) = 0;
3326
3327     virtual HRESULT STDMETHODCALLTYPE SetSize(
3328         ULARGE_INTEGER libNewSize) = 0;
3329
3330     virtual HRESULT STDMETHODCALLTYPE CopyTo(
3331         IStream16* pstm,
3332         ULARGE_INTEGER cb,
3333         ULARGE_INTEGER* pcbRead,
3334         ULARGE_INTEGER* pcbWritten) = 0;
3335
3336     virtual HRESULT STDMETHODCALLTYPE Commit(
3337         DWORD grfCommitFlags) = 0;
3338
3339     virtual HRESULT STDMETHODCALLTYPE Revert(
3340         ) = 0;
3341
3342     virtual HRESULT STDMETHODCALLTYPE LockRegion(
3343         ULARGE_INTEGER libOffset,
3344         ULARGE_INTEGER cb,
3345         DWORD dwLockType) = 0;
3346
3347     virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
3348         ULARGE_INTEGER libOffset,
3349         ULARGE_INTEGER cb,
3350         DWORD dwLockType) = 0;
3351
3352     virtual HRESULT STDMETHODCALLTYPE Stat(
3353         STATSTG* pstatstg,
3354         DWORD grfStatFlag) = 0;
3355
3356     virtual HRESULT STDMETHODCALLTYPE Clone(
3357         IStream16** ppstm) = 0;
3358
3359 } ICOM_COM_INTERFACE_ATTRIBUTE;
3360 #else
3361 typedef struct IStream16Vtbl IStream16Vtbl;
3362 struct IStream16 {
3363     const IStream16Vtbl* lpVtbl;
3364 };
3365 struct IStream16Vtbl {
3366     ICOM_MSVTABLE_COMPAT_FIELDS
3367
3368     /*** IUnknown methods ***/
3369     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3370         IStream16* This,
3371         REFIID riid,
3372         void** ppvObject);
3373
3374     ULONG (STDMETHODCALLTYPE *AddRef)(
3375         IStream16* This);
3376
3377     ULONG (STDMETHODCALLTYPE *Release)(
3378         IStream16* This);
3379
3380     /*** ISequentialStream methods ***/
3381     HRESULT (STDMETHODCALLTYPE *Read)(
3382         IStream16* This,
3383         void* pv,
3384         ULONG cb,
3385         ULONG* pcbRead);
3386
3387     HRESULT (STDMETHODCALLTYPE *Write)(
3388         IStream16* This,
3389         const void* pv,
3390         ULONG cb,
3391         ULONG* pcbWritten);
3392
3393     /*** IStream16 methods ***/
3394     HRESULT (STDMETHODCALLTYPE *Seek)(
3395         IStream16* This,
3396         LARGE_INTEGER dlibMove,
3397         DWORD dwOrigin,
3398         ULARGE_INTEGER* plibNewPosition);
3399
3400     HRESULT (STDMETHODCALLTYPE *SetSize)(
3401         IStream16* This,
3402         ULARGE_INTEGER libNewSize);
3403
3404     HRESULT (STDMETHODCALLTYPE *CopyTo)(
3405         IStream16* This,
3406         IStream16* pstm,
3407         ULARGE_INTEGER cb,
3408         ULARGE_INTEGER* pcbRead,
3409         ULARGE_INTEGER* pcbWritten);
3410
3411     HRESULT (STDMETHODCALLTYPE *Commit)(
3412         IStream16* This,
3413         DWORD grfCommitFlags);
3414
3415     HRESULT (STDMETHODCALLTYPE *Revert)(
3416         IStream16* This);
3417
3418     HRESULT (STDMETHODCALLTYPE *LockRegion)(
3419         IStream16* This,
3420         ULARGE_INTEGER libOffset,
3421         ULARGE_INTEGER cb,
3422         DWORD dwLockType);
3423
3424     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
3425         IStream16* This,
3426         ULARGE_INTEGER libOffset,
3427         ULARGE_INTEGER cb,
3428         DWORD dwLockType);
3429
3430     HRESULT (STDMETHODCALLTYPE *Stat)(
3431         IStream16* This,
3432         STATSTG* pstatstg,
3433         DWORD grfStatFlag);
3434
3435     HRESULT (STDMETHODCALLTYPE *Clone)(
3436         IStream16* This,
3437         IStream16** ppstm);
3438
3439 };
3440
3441 #define IStream16_IMETHODS \
3442     /*** IUnknown methods ***/ \
3443     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
3444     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
3445     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
3446     /*** ISequentialStream methods ***/ \
3447     HRESULT (STDMETHODCALLTYPE *Read)(INTERFACE *This, void* pv, ULONG cb, ULONG* pcbRead); \
3448     HRESULT (STDMETHODCALLTYPE *Write)(INTERFACE *This, const void* pv, ULONG cb, ULONG* pcbWritten); \
3449     /*** IStream16 methods ***/ \
3450     HRESULT (STDMETHODCALLTYPE *Seek)(INTERFACE *This, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition); \
3451     HRESULT (STDMETHODCALLTYPE *SetSize)(INTERFACE *This, ULARGE_INTEGER libNewSize); \
3452     HRESULT (STDMETHODCALLTYPE *CopyTo)(INTERFACE *This, IStream16* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten); \
3453     HRESULT (STDMETHODCALLTYPE *Commit)(INTERFACE *This, DWORD grfCommitFlags); \
3454     HRESULT (STDMETHODCALLTYPE *Revert)(INTERFACE *This); \
3455     HRESULT (STDMETHODCALLTYPE *LockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
3456     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
3457     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATSTG* pstatstg, DWORD grfStatFlag); \
3458     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IStream16** ppstm);
3459
3460 /*** IUnknown methods ***/
3461 #define IStream16_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3462 #define IStream16_AddRef(p) (p)->lpVtbl->AddRef(p)
3463 #define IStream16_Release(p) (p)->lpVtbl->Release(p)
3464 /*** ISequentialStream methods ***/
3465 #define IStream16_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
3466 #define IStream16_Write(p,a,b,c) (p)->lpVtbl->Write(p,a,b,c)
3467 /*** IStream16 methods ***/
3468 #define IStream16_Seek(p,a,b,c) (p)->lpVtbl->Seek(p,a,b,c)
3469 #define IStream16_SetSize(p,a) (p)->lpVtbl->SetSize(p,a)
3470 #define IStream16_CopyTo(p,a,b,c,d) (p)->lpVtbl->CopyTo(p,a,b,c,d)
3471 #define IStream16_Commit(p,a) (p)->lpVtbl->Commit(p,a)
3472 #define IStream16_Revert(p) (p)->lpVtbl->Revert(p)
3473 #define IStream16_LockRegion(p,a,b,c) (p)->lpVtbl->LockRegion(p,a,b,c)
3474 #define IStream16_UnlockRegion(p,a,b,c) (p)->lpVtbl->UnlockRegion(p,a,b,c)
3475 #define IStream16_Stat(p,a,b) (p)->lpVtbl->Stat(p,a,b)
3476 #define IStream16_Clone(p,a) (p)->lpVtbl->Clone(p,a)
3477
3478 #endif
3479
3480 HRESULT CALLBACK IStream16_RemoteSeek_Proxy(
3481     IStream16* This,
3482     LARGE_INTEGER dlibMove,
3483     DWORD dwOrigin,
3484     ULARGE_INTEGER* plibNewPosition);
3485 void __RPC_STUB IStream16_RemoteSeek_Stub(
3486     struct IRpcStubBuffer* This,
3487     struct IRpcChannelBuffer* pRpcChannelBuffer,
3488     PRPC_MESSAGE pRpcMessage,
3489     DWORD* pdwStubPhase);
3490 HRESULT CALLBACK IStream16_Seek_Proxy(
3491     IStream16* This,
3492     LARGE_INTEGER dlibMove,
3493     DWORD dwOrigin,
3494     ULARGE_INTEGER* plibNewPosition);
3495 HRESULT __RPC_STUB IStream16_Seek_Stub(
3496     IStream16* This,
3497     LARGE_INTEGER dlibMove,
3498     DWORD dwOrigin,
3499     ULARGE_INTEGER* plibNewPosition);
3500 HRESULT CALLBACK IStream16_SetSize_Proxy(
3501     IStream16* This,
3502     ULARGE_INTEGER libNewSize);
3503 void __RPC_STUB IStream16_SetSize_Stub(
3504     struct IRpcStubBuffer* This,
3505     struct IRpcChannelBuffer* pRpcChannelBuffer,
3506     PRPC_MESSAGE pRpcMessage,
3507     DWORD* pdwStubPhase);
3508 HRESULT CALLBACK IStream16_RemoteCopyTo_Proxy(
3509     IStream16* This,
3510     IStream16* pstm,
3511     ULARGE_INTEGER cb,
3512     ULARGE_INTEGER* pcbRead,
3513     ULARGE_INTEGER* pcbWritten);
3514 void __RPC_STUB IStream16_RemoteCopyTo_Stub(
3515     struct IRpcStubBuffer* This,
3516     struct IRpcChannelBuffer* pRpcChannelBuffer,
3517     PRPC_MESSAGE pRpcMessage,
3518     DWORD* pdwStubPhase);
3519 HRESULT CALLBACK IStream16_CopyTo_Proxy(
3520     IStream16* This,
3521     IStream16* pstm,
3522     ULARGE_INTEGER cb,
3523     ULARGE_INTEGER* pcbRead,
3524     ULARGE_INTEGER* pcbWritten);
3525 HRESULT __RPC_STUB IStream16_CopyTo_Stub(
3526     IStream16* This,
3527     IStream16* pstm,
3528     ULARGE_INTEGER cb,
3529     ULARGE_INTEGER* pcbRead,
3530     ULARGE_INTEGER* pcbWritten);
3531 HRESULT CALLBACK IStream16_Commit_Proxy(
3532     IStream16* This,
3533     DWORD grfCommitFlags);
3534 void __RPC_STUB IStream16_Commit_Stub(
3535     struct IRpcStubBuffer* This,
3536     struct IRpcChannelBuffer* pRpcChannelBuffer,
3537     PRPC_MESSAGE pRpcMessage,
3538     DWORD* pdwStubPhase);
3539 HRESULT CALLBACK IStream16_Revert_Proxy(
3540     IStream16* This);
3541 void __RPC_STUB IStream16_Revert_Stub(
3542     struct IRpcStubBuffer* This,
3543     struct IRpcChannelBuffer* pRpcChannelBuffer,
3544     PRPC_MESSAGE pRpcMessage,
3545     DWORD* pdwStubPhase);
3546 HRESULT CALLBACK IStream16_LockRegion_Proxy(
3547     IStream16* This,
3548     ULARGE_INTEGER libOffset,
3549     ULARGE_INTEGER cb,
3550     DWORD dwLockType);
3551 void __RPC_STUB IStream16_LockRegion_Stub(
3552     struct IRpcStubBuffer* This,
3553     struct IRpcChannelBuffer* pRpcChannelBuffer,
3554     PRPC_MESSAGE pRpcMessage,
3555     DWORD* pdwStubPhase);
3556 HRESULT CALLBACK IStream16_UnlockRegion_Proxy(
3557     IStream16* This,
3558     ULARGE_INTEGER libOffset,
3559     ULARGE_INTEGER cb,
3560     DWORD dwLockType);
3561 void __RPC_STUB IStream16_UnlockRegion_Stub(
3562     struct IRpcStubBuffer* This,
3563     struct IRpcChannelBuffer* pRpcChannelBuffer,
3564     PRPC_MESSAGE pRpcMessage,
3565     DWORD* pdwStubPhase);
3566 HRESULT CALLBACK IStream16_Stat_Proxy(
3567     IStream16* This,
3568     STATSTG* pstatstg,
3569     DWORD grfStatFlag);
3570 void __RPC_STUB IStream16_Stat_Stub(
3571     struct IRpcStubBuffer* This,
3572     struct IRpcChannelBuffer* pRpcChannelBuffer,
3573     PRPC_MESSAGE pRpcMessage,
3574     DWORD* pdwStubPhase);
3575 HRESULT CALLBACK IStream16_Clone_Proxy(
3576     IStream16* This,
3577     IStream16** ppstm);
3578 void __RPC_STUB IStream16_Clone_Stub(
3579     struct IRpcStubBuffer* This,
3580     struct IRpcChannelBuffer* pRpcChannelBuffer,
3581     PRPC_MESSAGE pRpcMessage,
3582     DWORD* pdwStubPhase);
3583
3584 typedef struct IEnumSTATSTG IEnumSTATSTG;
3585 typedef IEnumSTATSTG *LPENUMSTATSTG;
3586
3587 /*****************************************************************************
3588  * IEnumSTATSTG interface
3589  */
3590 DEFINE_GUID(IID_IEnumSTATSTG, 0x0000000d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3591 #if defined(__cplusplus) && !defined(CINTERFACE)
3592 struct IEnumSTATSTG: IUnknown {
3593
3594     virtual HRESULT STDMETHODCALLTYPE Next(
3595         ULONG celt,
3596         STATSTG* rgelt,
3597         ULONG* pceltFetched) = 0;
3598
3599     virtual HRESULT STDMETHODCALLTYPE Skip(
3600         ULONG celt) = 0;
3601
3602     virtual HRESULT STDMETHODCALLTYPE Reset(
3603         ) = 0;
3604
3605     virtual HRESULT STDMETHODCALLTYPE Clone(
3606         IEnumSTATSTG** ppenum) = 0;
3607
3608 } ICOM_COM_INTERFACE_ATTRIBUTE;
3609 #else
3610 typedef struct IEnumSTATSTGVtbl IEnumSTATSTGVtbl;
3611 struct IEnumSTATSTG {
3612     const IEnumSTATSTGVtbl* lpVtbl;
3613 };
3614 struct IEnumSTATSTGVtbl {
3615     ICOM_MSVTABLE_COMPAT_FIELDS
3616
3617     /*** IUnknown methods ***/
3618     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3619         IEnumSTATSTG* This,
3620         REFIID riid,
3621         void** ppvObject);
3622
3623     ULONG (STDMETHODCALLTYPE *AddRef)(
3624         IEnumSTATSTG* This);
3625
3626     ULONG (STDMETHODCALLTYPE *Release)(
3627         IEnumSTATSTG* This);
3628
3629     /*** IEnumSTATSTG methods ***/
3630     HRESULT (STDMETHODCALLTYPE *Next)(
3631         IEnumSTATSTG* This,
3632         ULONG celt,
3633         STATSTG* rgelt,
3634         ULONG* pceltFetched);
3635
3636     HRESULT (STDMETHODCALLTYPE *Skip)(
3637         IEnumSTATSTG* This,
3638         ULONG celt);
3639
3640     HRESULT (STDMETHODCALLTYPE *Reset)(
3641         IEnumSTATSTG* This);
3642
3643     HRESULT (STDMETHODCALLTYPE *Clone)(
3644         IEnumSTATSTG* This,
3645         IEnumSTATSTG** ppenum);
3646
3647 };
3648
3649 #define IEnumSTATSTG_IMETHODS \
3650     /*** IUnknown methods ***/ \
3651     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
3652     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
3653     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
3654     /*** IEnumSTATSTG methods ***/ \
3655     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, STATSTG* rgelt, ULONG* pceltFetched); \
3656     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
3657     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
3658     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumSTATSTG** ppenum);
3659
3660 /*** IUnknown methods ***/
3661 #define IEnumSTATSTG_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3662 #define IEnumSTATSTG_AddRef(p) (p)->lpVtbl->AddRef(p)
3663 #define IEnumSTATSTG_Release(p) (p)->lpVtbl->Release(p)
3664 /*** IEnumSTATSTG methods ***/
3665 #define IEnumSTATSTG_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
3666 #define IEnumSTATSTG_Skip(p,a) (p)->lpVtbl->Skip(p,a)
3667 #define IEnumSTATSTG_Reset(p) (p)->lpVtbl->Reset(p)
3668 #define IEnumSTATSTG_Clone(p,a) (p)->lpVtbl->Clone(p,a)
3669
3670 #endif
3671
3672 HRESULT CALLBACK IEnumSTATSTG_RemoteNext_Proxy(
3673     IEnumSTATSTG* This,
3674     ULONG celt,
3675     STATSTG* rgelt,
3676     ULONG* pceltFetched);
3677 void __RPC_STUB IEnumSTATSTG_RemoteNext_Stub(
3678     struct IRpcStubBuffer* This,
3679     struct IRpcChannelBuffer* pRpcChannelBuffer,
3680     PRPC_MESSAGE pRpcMessage,
3681     DWORD* pdwStubPhase);
3682 HRESULT CALLBACK IEnumSTATSTG_Next_Proxy(
3683     IEnumSTATSTG* This,
3684     ULONG celt,
3685     STATSTG* rgelt,
3686     ULONG* pceltFetched);
3687 HRESULT __RPC_STUB IEnumSTATSTG_Next_Stub(
3688     IEnumSTATSTG* This,
3689     ULONG celt,
3690     STATSTG* rgelt,
3691     ULONG* pceltFetched);
3692 HRESULT CALLBACK IEnumSTATSTG_Skip_Proxy(
3693     IEnumSTATSTG* This,
3694     ULONG celt);
3695 void __RPC_STUB IEnumSTATSTG_Skip_Stub(
3696     struct IRpcStubBuffer* This,
3697     struct IRpcChannelBuffer* pRpcChannelBuffer,
3698     PRPC_MESSAGE pRpcMessage,
3699     DWORD* pdwStubPhase);
3700 HRESULT CALLBACK IEnumSTATSTG_Reset_Proxy(
3701     IEnumSTATSTG* This);
3702 void __RPC_STUB IEnumSTATSTG_Reset_Stub(
3703     struct IRpcStubBuffer* This,
3704     struct IRpcChannelBuffer* pRpcChannelBuffer,
3705     PRPC_MESSAGE pRpcMessage,
3706     DWORD* pdwStubPhase);
3707 HRESULT CALLBACK IEnumSTATSTG_Clone_Proxy(
3708     IEnumSTATSTG* This,
3709     IEnumSTATSTG** ppenum);
3710 void __RPC_STUB IEnumSTATSTG_Clone_Stub(
3711     struct IRpcStubBuffer* This,
3712     struct IRpcChannelBuffer* pRpcChannelBuffer,
3713     PRPC_MESSAGE pRpcMessage,
3714     DWORD* pdwStubPhase);
3715
3716 typedef struct IStorage IStorage;
3717 typedef IStorage *LPSTORAGE;
3718
3719 typedef struct tagRemSNB {
3720     unsigned long ulCntStr;
3721     unsigned long ulCntChar;
3722     OLECHAR rgString[1];
3723 } RemSNB;
3724
3725 typedef RemSNB *wireSNB;
3726
3727 typedef OLECHAR **SNB;
3728 unsigned long   __RPC_USER SNB_UserSize     (unsigned long *, unsigned long,   SNB *);
3729 unsigned char * __RPC_USER SNB_UserMarshal  (unsigned long *, unsigned char *, SNB *);
3730 unsigned char * __RPC_USER SNB_UserUnmarshal(unsigned long *, unsigned char *, SNB *);
3731 void            __RPC_USER SNB_UserFree     (unsigned long *, SNB *);
3732
3733 /*****************************************************************************
3734  * IStorage interface
3735  */
3736 DEFINE_GUID(IID_IStorage, 0x0000000b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3737 #if defined(__cplusplus) && !defined(CINTERFACE)
3738 struct IStorage: IUnknown {
3739
3740     virtual HRESULT STDMETHODCALLTYPE CreateStream(
3741         LPCOLESTR pwcsName,
3742         DWORD grfMode,
3743         DWORD reserved1,
3744         DWORD reserved2,
3745         IStream** ppstm) = 0;
3746
3747     virtual HRESULT STDMETHODCALLTYPE OpenStream(
3748         LPCOLESTR pwcsName,
3749         void* reserved1,
3750         DWORD grfMode,
3751         DWORD reserved2,
3752         IStream** ppstm) = 0;
3753
3754     virtual HRESULT STDMETHODCALLTYPE CreateStorage(
3755         LPCOLESTR pwcsName,
3756         DWORD grfMode,
3757         DWORD dwStgFmt,
3758         DWORD reserved2,
3759         IStorage** ppstg) = 0;
3760
3761     virtual HRESULT STDMETHODCALLTYPE OpenStorage(
3762         LPCOLESTR pwcsName,
3763         IStorage* pstgPriority,
3764         DWORD grfMode,
3765         SNB snbExclude,
3766         DWORD reserved,
3767         IStorage** ppstg) = 0;
3768
3769     virtual HRESULT STDMETHODCALLTYPE CopyTo(
3770         DWORD ciidExclude,
3771         const IID* rgiidExclude,
3772         SNB snbExclude,
3773         IStorage* pstgDest) = 0;
3774
3775     virtual HRESULT STDMETHODCALLTYPE MoveElementTo(
3776         LPCOLESTR pwcsName,
3777         IStorage* pstgDest,
3778         LPCOLESTR pwcsNewName,
3779         DWORD grfFlags) = 0;
3780
3781     virtual HRESULT STDMETHODCALLTYPE Commit(
3782         DWORD grfCommitFlags) = 0;
3783
3784     virtual HRESULT STDMETHODCALLTYPE Revert(
3785         ) = 0;
3786
3787     virtual HRESULT STDMETHODCALLTYPE EnumElements(
3788         DWORD reserved1,
3789         void* reserved2,
3790         DWORD reserved3,
3791         IEnumSTATSTG** ppenum) = 0;
3792
3793     virtual HRESULT STDMETHODCALLTYPE DestroyElement(
3794         LPCOLESTR pwcsName) = 0;
3795
3796     virtual HRESULT STDMETHODCALLTYPE RenameElement(
3797         LPCOLESTR pwcsOldName,
3798         LPCOLESTR pwcsNewName) = 0;
3799
3800     virtual HRESULT STDMETHODCALLTYPE SetElementTimes(
3801         LPCOLESTR pwcsName,
3802         const FILETIME* pctime,
3803         const FILETIME* patime,
3804         const FILETIME* pmtime) = 0;
3805
3806     virtual HRESULT STDMETHODCALLTYPE SetClass(
3807         REFCLSID clsid) = 0;
3808
3809     virtual HRESULT STDMETHODCALLTYPE SetStateBits(
3810         DWORD grfStateBits,
3811         DWORD grfMask) = 0;
3812
3813     virtual HRESULT STDMETHODCALLTYPE Stat(
3814         STATSTG* pstatstg,
3815         DWORD grfStatFlag) = 0;
3816
3817 } ICOM_COM_INTERFACE_ATTRIBUTE;
3818 #else
3819 typedef struct IStorageVtbl IStorageVtbl;
3820 struct IStorage {
3821     const IStorageVtbl* lpVtbl;
3822 };
3823 struct IStorageVtbl {
3824     ICOM_MSVTABLE_COMPAT_FIELDS
3825
3826     /*** IUnknown methods ***/
3827     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3828         IStorage* This,
3829         REFIID riid,
3830         void** ppvObject);
3831
3832     ULONG (STDMETHODCALLTYPE *AddRef)(
3833         IStorage* This);
3834
3835     ULONG (STDMETHODCALLTYPE *Release)(
3836         IStorage* This);
3837
3838     /*** IStorage methods ***/
3839     HRESULT (STDMETHODCALLTYPE *CreateStream)(
3840         IStorage* This,
3841         LPCOLESTR pwcsName,
3842         DWORD grfMode,
3843         DWORD reserved1,
3844         DWORD reserved2,
3845         IStream** ppstm);
3846
3847     HRESULT (STDMETHODCALLTYPE *OpenStream)(
3848         IStorage* This,
3849         LPCOLESTR pwcsName,
3850         void* reserved1,
3851         DWORD grfMode,
3852         DWORD reserved2,
3853         IStream** ppstm);
3854
3855     HRESULT (STDMETHODCALLTYPE *CreateStorage)(
3856         IStorage* This,
3857         LPCOLESTR pwcsName,
3858         DWORD grfMode,
3859         DWORD dwStgFmt,
3860         DWORD reserved2,
3861         IStorage** ppstg);
3862
3863     HRESULT (STDMETHODCALLTYPE *OpenStorage)(
3864         IStorage* This,
3865         LPCOLESTR pwcsName,
3866         IStorage* pstgPriority,
3867         DWORD grfMode,
3868         SNB snbExclude,
3869         DWORD reserved,
3870         IStorage** ppstg);
3871
3872     HRESULT (STDMETHODCALLTYPE *CopyTo)(
3873         IStorage* This,
3874         DWORD ciidExclude,
3875         const IID* rgiidExclude,
3876         SNB snbExclude,
3877         IStorage* pstgDest);
3878
3879     HRESULT (STDMETHODCALLTYPE *MoveElementTo)(
3880         IStorage* This,
3881         LPCOLESTR pwcsName,
3882         IStorage* pstgDest,
3883         LPCOLESTR pwcsNewName,
3884         DWORD grfFlags);
3885
3886     HRESULT (STDMETHODCALLTYPE *Commit)(
3887         IStorage* This,
3888         DWORD grfCommitFlags);
3889
3890     HRESULT (STDMETHODCALLTYPE *Revert)(
3891         IStorage* This);
3892
3893     HRESULT (STDMETHODCALLTYPE *EnumElements)(
3894         IStorage* This,
3895         DWORD reserved1,
3896         void* reserved2,
3897         DWORD reserved3,
3898         IEnumSTATSTG** ppenum);
3899
3900     HRESULT (STDMETHODCALLTYPE *DestroyElement)(
3901         IStorage* This,
3902         LPCOLESTR pwcsName);
3903
3904     HRESULT (STDMETHODCALLTYPE *RenameElement)(
3905         IStorage* This,
3906         LPCOLESTR pwcsOldName,
3907         LPCOLESTR pwcsNewName);
3908
3909     HRESULT (STDMETHODCALLTYPE *SetElementTimes)(
3910         IStorage* This,
3911         LPCOLESTR pwcsName,
3912         const FILETIME* pctime,
3913         const FILETIME* patime,
3914         const FILETIME* pmtime);
3915
3916     HRESULT (STDMETHODCALLTYPE *SetClass)(
3917         IStorage* This,
3918         REFCLSID clsid);
3919
3920     HRESULT (STDMETHODCALLTYPE *SetStateBits)(
3921         IStorage* This,
3922         DWORD grfStateBits,
3923         DWORD grfMask);
3924
3925     HRESULT (STDMETHODCALLTYPE *Stat)(
3926         IStorage* This,
3927         STATSTG* pstatstg,
3928         DWORD grfStatFlag);
3929
3930 };
3931
3932 #define IStorage_IMETHODS \
3933     /*** IUnknown methods ***/ \
3934     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
3935     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
3936     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
3937     /*** IStorage methods ***/ \
3938     HRESULT (STDMETHODCALLTYPE *CreateStream)(INTERFACE *This, LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream** ppstm); \
3939     HRESULT (STDMETHODCALLTYPE *OpenStream)(INTERFACE *This, LPCOLESTR pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream** ppstm); \
3940     HRESULT (STDMETHODCALLTYPE *CreateStorage)(INTERFACE *This, LPCOLESTR pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage** ppstg); \
3941     HRESULT (STDMETHODCALLTYPE *OpenStorage)(INTERFACE *This, LPCOLESTR pwcsName, IStorage* pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage** ppstg); \
3942     HRESULT (STDMETHODCALLTYPE *CopyTo)(INTERFACE *This, DWORD ciidExclude, const IID* rgiidExclude, SNB snbExclude, IStorage* pstgDest); \
3943     HRESULT (STDMETHODCALLTYPE *MoveElementTo)(INTERFACE *This, LPCOLESTR pwcsName, IStorage* pstgDest, LPCOLESTR pwcsNewName, DWORD grfFlags); \
3944     HRESULT (STDMETHODCALLTYPE *Commit)(INTERFACE *This, DWORD grfCommitFlags); \
3945     HRESULT (STDMETHODCALLTYPE *Revert)(INTERFACE *This); \
3946     HRESULT (STDMETHODCALLTYPE *EnumElements)(INTERFACE *This, DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum); \
3947     HRESULT (STDMETHODCALLTYPE *DestroyElement)(INTERFACE *This, LPCOLESTR pwcsName); \
3948     HRESULT (STDMETHODCALLTYPE *RenameElement)(INTERFACE *This, LPCOLESTR pwcsOldName, LPCOLESTR pwcsNewName); \
3949     HRESULT (STDMETHODCALLTYPE *SetElementTimes)(INTERFACE *This, LPCOLESTR pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime); \
3950     HRESULT (STDMETHODCALLTYPE *SetClass)(INTERFACE *This, REFCLSID clsid); \
3951     HRESULT (STDMETHODCALLTYPE *SetStateBits)(INTERFACE *This, DWORD grfStateBits, DWORD grfMask); \
3952     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATSTG* pstatstg, DWORD grfStatFlag);
3953
3954 /*** IUnknown methods ***/
3955 #define IStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3956 #define IStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
3957 #define IStorage_Release(p) (p)->lpVtbl->Release(p)
3958 /*** IStorage methods ***/
3959 #define IStorage_CreateStream(p,a,b,c,d,e) (p)->lpVtbl->CreateStream(p,a,b,c,d,e)
3960 #define IStorage_OpenStream(p,a,b,c,d,e) (p)->lpVtbl->OpenStream(p,a,b,c,d,e)
3961 #define IStorage_CreateStorage(p,a,b,c,d,e) (p)->lpVtbl->CreateStorage(p,a,b,c,d,e)
3962 #define IStorage_OpenStorage(p,a,b,c,d,e,f) (p)->lpVtbl->OpenStorage(p,a,b,c,d,e,f)
3963 #define IStorage_CopyTo(p,a,b,c,d) (p)->lpVtbl->CopyTo(p,a,b,c,d)
3964 #define IStorage_MoveElementTo(p,a,b,c,d) (p)->lpVtbl->MoveElementTo(p,a,b,c,d)
3965 #define IStorage_Commit(p,a) (p)->lpVtbl->Commit(p,a)
3966 #define IStorage_Revert(p) (p)->lpVtbl->Revert(p)
3967 #define IStorage_EnumElements(p,a,b,c,d) (p)->lpVtbl->EnumElements(p,a,b,c,d)
3968 #define IStorage_DestroyElement(p,a) (p)->lpVtbl->DestroyElement(p,a)
3969 #define IStorage_RenameElement(p,a,b) (p)->lpVtbl->RenameElement(p,a,b)
3970 #define IStorage_SetElementTimes(p,a,b,c,d) (p)->lpVtbl->SetElementTimes(p,a,b,c,d)
3971 #define IStorage_SetClass(p,a) (p)->lpVtbl->SetClass(p,a)
3972 #define IStorage_SetStateBits(p,a,b) (p)->lpVtbl->SetStateBits(p,a,b)
3973 #define IStorage_Stat(p,a,b) (p)->lpVtbl->Stat(p,a,b)
3974
3975 #endif
3976
3977 HRESULT CALLBACK IStorage_CreateStream_Proxy(
3978     IStorage* This,
3979     LPCOLESTR pwcsName,
3980     DWORD grfMode,
3981     DWORD reserved1,
3982     DWORD reserved2,
3983     IStream** ppstm);
3984 void __RPC_STUB IStorage_CreateStream_Stub(
3985     struct IRpcStubBuffer* This,
3986     struct IRpcChannelBuffer* pRpcChannelBuffer,
3987     PRPC_MESSAGE pRpcMessage,
3988     DWORD* pdwStubPhase);
3989 HRESULT CALLBACK IStorage_RemoteOpenStream_Proxy(
3990     IStorage* This,
3991     LPCOLESTR pwcsName,
3992     unsigned long cbReserved1,
3993     byte* reserved1,
3994     DWORD grfMode,
3995     DWORD reserved2,
3996     IStream** ppstm);
3997 void __RPC_STUB IStorage_RemoteOpenStream_Stub(
3998     struct IRpcStubBuffer* This,
3999     struct IRpcChannelBuffer* pRpcChannelBuffer,
4000     PRPC_MESSAGE pRpcMessage,
4001     DWORD* pdwStubPhase);
4002 HRESULT CALLBACK IStorage_OpenStream_Proxy(
4003     IStorage* This,
4004     LPCOLESTR pwcsName,
4005     void* reserved1,
4006     DWORD grfMode,
4007     DWORD reserved2,
4008     IStream** ppstm);
4009 HRESULT __RPC_STUB IStorage_OpenStream_Stub(
4010     IStorage* This,
4011     LPCOLESTR pwcsName,
4012     unsigned long cbReserved1,
4013     byte* reserved1,
4014     DWORD grfMode,
4015     DWORD reserved2,
4016     IStream** ppstm);
4017 HRESULT CALLBACK IStorage_CreateStorage_Proxy(
4018     IStorage* This,
4019     LPCOLESTR pwcsName,
4020     DWORD grfMode,
4021     DWORD dwStgFmt,
4022     DWORD reserved2,
4023     IStorage** ppstg);
4024 void __RPC_STUB IStorage_CreateStorage_Stub(
4025     struct IRpcStubBuffer* This,
4026     struct IRpcChannelBuffer* pRpcChannelBuffer,
4027     PRPC_MESSAGE pRpcMessage,
4028     DWORD* pdwStubPhase);
4029 HRESULT CALLBACK IStorage_OpenStorage_Proxy(
4030     IStorage* This,
4031     LPCOLESTR pwcsName,
4032     IStorage* pstgPriority,
4033     DWORD grfMode,
4034     SNB snbExclude,
4035     DWORD reserved,
4036     IStorage** ppstg);
4037 void __RPC_STUB IStorage_OpenStorage_Stub(
4038     struct IRpcStubBuffer* This,
4039     struct IRpcChannelBuffer* pRpcChannelBuffer,
4040     PRPC_MESSAGE pRpcMessage,
4041     DWORD* pdwStubPhase);
4042 HRESULT CALLBACK IStorage_CopyTo_Proxy(
4043     IStorage* This,
4044     DWORD ciidExclude,
4045     const IID* rgiidExclude,
4046     SNB snbExclude,
4047     IStorage* pstgDest);
4048 void __RPC_STUB IStorage_CopyTo_Stub(
4049     struct IRpcStubBuffer* This,
4050     struct IRpcChannelBuffer* pRpcChannelBuffer,
4051     PRPC_MESSAGE pRpcMessage,
4052     DWORD* pdwStubPhase);
4053 HRESULT CALLBACK IStorage_MoveElementTo_Proxy(
4054     IStorage* This,
4055     LPCOLESTR pwcsName,
4056     IStorage* pstgDest,
4057     LPCOLESTR pwcsNewName,
4058     DWORD grfFlags);
4059 void __RPC_STUB IStorage_MoveElementTo_Stub(
4060     struct IRpcStubBuffer* This,
4061     struct IRpcChannelBuffer* pRpcChannelBuffer,
4062     PRPC_MESSAGE pRpcMessage,
4063     DWORD* pdwStubPhase);
4064 HRESULT CALLBACK IStorage_Commit_Proxy(
4065     IStorage* This,
4066     DWORD grfCommitFlags);
4067 void __RPC_STUB IStorage_Commit_Stub(
4068     struct IRpcStubBuffer* This,
4069     struct IRpcChannelBuffer* pRpcChannelBuffer,
4070     PRPC_MESSAGE pRpcMessage,
4071     DWORD* pdwStubPhase);
4072 HRESULT CALLBACK IStorage_Revert_Proxy(
4073     IStorage* This);
4074 void __RPC_STUB IStorage_Revert_Stub(
4075     struct IRpcStubBuffer* This,
4076     struct IRpcChannelBuffer* pRpcChannelBuffer,
4077     PRPC_MESSAGE pRpcMessage,
4078     DWORD* pdwStubPhase);
4079 HRESULT CALLBACK IStorage_RemoteEnumElements_Proxy(
4080     IStorage* This,
4081     DWORD reserved1,
4082     unsigned long cbReserved2,
4083     byte* reserved2,
4084     DWORD reserved3,
4085     IEnumSTATSTG** ppenum);
4086 void __RPC_STUB IStorage_RemoteEnumElements_Stub(
4087     struct IRpcStubBuffer* This,
4088     struct IRpcChannelBuffer* pRpcChannelBuffer,
4089     PRPC_MESSAGE pRpcMessage,
4090     DWORD* pdwStubPhase);
4091 HRESULT CALLBACK IStorage_EnumElements_Proxy(
4092     IStorage* This,
4093     DWORD reserved1,
4094     void* reserved2,
4095     DWORD reserved3,
4096     IEnumSTATSTG** ppenum);
4097 HRESULT __RPC_STUB IStorage_EnumElements_Stub(
4098     IStorage* This,
4099     DWORD reserved1,
4100     unsigned long cbReserved2,
4101     byte* reserved2,
4102     DWORD reserved3,
4103     IEnumSTATSTG** ppenum);
4104 HRESULT CALLBACK IStorage_DestroyElement_Proxy(
4105     IStorage* This,
4106     LPCOLESTR pwcsName);
4107 void __RPC_STUB IStorage_DestroyElement_Stub(
4108     struct IRpcStubBuffer* This,
4109     struct IRpcChannelBuffer* pRpcChannelBuffer,
4110     PRPC_MESSAGE pRpcMessage,
4111     DWORD* pdwStubPhase);
4112 HRESULT CALLBACK IStorage_RenameElement_Proxy(
4113     IStorage* This,
4114     LPCOLESTR pwcsOldName,
4115     LPCOLESTR pwcsNewName);
4116 void __RPC_STUB IStorage_RenameElement_Stub(
4117     struct IRpcStubBuffer* This,
4118     struct IRpcChannelBuffer* pRpcChannelBuffer,
4119     PRPC_MESSAGE pRpcMessage,
4120     DWORD* pdwStubPhase);
4121 HRESULT CALLBACK IStorage_SetElementTimes_Proxy(
4122     IStorage* This,
4123     LPCOLESTR pwcsName,
4124     const FILETIME* pctime,
4125     const FILETIME* patime,
4126     const FILETIME* pmtime);
4127 void __RPC_STUB IStorage_SetElementTimes_Stub(
4128     struct IRpcStubBuffer* This,
4129     struct IRpcChannelBuffer* pRpcChannelBuffer,
4130     PRPC_MESSAGE pRpcMessage,
4131     DWORD* pdwStubPhase);
4132 HRESULT CALLBACK IStorage_SetClass_Proxy(
4133     IStorage* This,
4134     REFCLSID clsid);
4135 void __RPC_STUB IStorage_SetClass_Stub(
4136     struct IRpcStubBuffer* This,
4137     struct IRpcChannelBuffer* pRpcChannelBuffer,
4138     PRPC_MESSAGE pRpcMessage,
4139     DWORD* pdwStubPhase);
4140 HRESULT CALLBACK IStorage_SetStateBits_Proxy(
4141     IStorage* This,
4142     DWORD grfStateBits,
4143     DWORD grfMask);
4144 void __RPC_STUB IStorage_SetStateBits_Stub(
4145     struct IRpcStubBuffer* This,
4146     struct IRpcChannelBuffer* pRpcChannelBuffer,
4147     PRPC_MESSAGE pRpcMessage,
4148     DWORD* pdwStubPhase);
4149 HRESULT CALLBACK IStorage_Stat_Proxy(
4150     IStorage* This,
4151     STATSTG* pstatstg,
4152     DWORD grfStatFlag);
4153 void __RPC_STUB IStorage_Stat_Stub(
4154     struct IRpcStubBuffer* This,
4155     struct IRpcChannelBuffer* pRpcChannelBuffer,
4156     PRPC_MESSAGE pRpcMessage,
4157     DWORD* pdwStubPhase);
4158
4159 typedef struct IStorage16 IStorage16;
4160 typedef IStorage16 *LPSTORAGE16;
4161
4162 typedef struct tagRemSNB16 {
4163     unsigned long ulCntStr;
4164     unsigned long ulCntChar;
4165     OLECHAR16 rgString[1];
4166 } RemSNB16;
4167
4168 typedef RemSNB16 *wireSNB16;
4169
4170 typedef OLECHAR16 **SNB16;
4171 unsigned long   __RPC_USER SNB16_UserSize     (unsigned long *, unsigned long,   SNB16 *);
4172 unsigned char * __RPC_USER SNB16_UserMarshal  (unsigned long *, unsigned char *, SNB16 *);
4173 unsigned char * __RPC_USER SNB16_UserUnmarshal(unsigned long *, unsigned char *, SNB16 *);
4174 void            __RPC_USER SNB16_UserFree     (unsigned long *, SNB16 *);
4175
4176 /*****************************************************************************
4177  * IStorage16 interface
4178  */
4179 #if defined(__cplusplus) && !defined(CINTERFACE)
4180 struct IStorage16: IUnknown {
4181
4182     virtual HRESULT STDMETHODCALLTYPE CreateStream(
4183         LPCOLESTR16 pwcsName,
4184         DWORD grfMode,
4185         DWORD reserved1,
4186         DWORD reserved2,
4187         IStream16** ppstm) = 0;
4188
4189     virtual HRESULT STDMETHODCALLTYPE OpenStream(
4190         LPCOLESTR16 pwcsName,
4191         void* reserved1,
4192         DWORD grfMode,
4193         DWORD reserved2,
4194         IStream16** ppstm) = 0;
4195
4196     virtual HRESULT STDMETHODCALLTYPE CreateStorage(
4197         LPCOLESTR16 pwcsName,
4198         DWORD grfMode,
4199         DWORD dwStgFmt,
4200         DWORD reserved2,
4201         IStorage16** ppstg) = 0;
4202
4203     virtual HRESULT STDMETHODCALLTYPE OpenStorage(
4204         LPCOLESTR16 pwcsName,
4205         IStorage16* pstgPriority,
4206         DWORD grfMode,
4207         SNB16 snbExclude,
4208         DWORD reserved,
4209         IStorage16** ppstg) = 0;
4210
4211     virtual HRESULT STDMETHODCALLTYPE CopyTo(
4212         DWORD ciidExclude,
4213         const IID* rgiidExclude,
4214         SNB16 snbExclude,
4215         IStorage16* pstgDest) = 0;
4216
4217     virtual HRESULT STDMETHODCALLTYPE MoveElementTo(
4218         LPCOLESTR16 pwcsName,
4219         IStorage16* pstgDest,
4220         LPCOLESTR16 pwcsNewName,
4221         DWORD grfFlags) = 0;
4222
4223     virtual HRESULT STDMETHODCALLTYPE Commit(
4224         DWORD grfCommitFlags) = 0;
4225
4226     virtual HRESULT STDMETHODCALLTYPE Revert(
4227         ) = 0;
4228
4229     virtual HRESULT STDMETHODCALLTYPE EnumElements(
4230         DWORD reserved1,
4231         void* reserved2,
4232         DWORD reserved3,
4233         IEnumSTATSTG** ppenum) = 0;
4234
4235     virtual HRESULT STDMETHODCALLTYPE DestroyElement(
4236         LPCOLESTR16 pwcsName) = 0;
4237
4238     virtual HRESULT STDMETHODCALLTYPE RenameElement(
4239         LPCOLESTR16 pwcsOldName,
4240         LPCOLESTR16 pwcsNewName) = 0;
4241
4242     virtual HRESULT STDMETHODCALLTYPE SetElementTimes(
4243         LPCOLESTR16 pwcsName,
4244         const FILETIME* pctime,
4245         const FILETIME* patime,
4246         const FILETIME* pmtime) = 0;
4247
4248     virtual HRESULT STDMETHODCALLTYPE SetClass(
4249         REFCLSID clsid) = 0;
4250
4251     virtual HRESULT STDMETHODCALLTYPE SetStateBits(
4252         DWORD grfStateBits,
4253         DWORD grfMask) = 0;
4254
4255     virtual HRESULT STDMETHODCALLTYPE Stat(
4256         STATSTG* pstatstg,
4257         DWORD grfStatFlag) = 0;
4258
4259 } ICOM_COM_INTERFACE_ATTRIBUTE;
4260 #else
4261 typedef struct IStorage16Vtbl IStorage16Vtbl;
4262 struct IStorage16 {
4263     const IStorage16Vtbl* lpVtbl;
4264 };
4265 struct IStorage16Vtbl {
4266     ICOM_MSVTABLE_COMPAT_FIELDS
4267
4268     /*** IUnknown methods ***/
4269     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4270         IStorage16* This,
4271         REFIID riid,
4272         void** ppvObject);
4273
4274     ULONG (STDMETHODCALLTYPE *AddRef)(
4275         IStorage16* This);
4276
4277     ULONG (STDMETHODCALLTYPE *Release)(
4278         IStorage16* This);
4279
4280     /*** IStorage16 methods ***/
4281     HRESULT (STDMETHODCALLTYPE *CreateStream)(
4282         IStorage16* This,
4283         LPCOLESTR16 pwcsName,
4284         DWORD grfMode,
4285         DWORD reserved1,
4286         DWORD reserved2,
4287         IStream16** ppstm);
4288
4289     HRESULT (STDMETHODCALLTYPE *OpenStream)(
4290         IStorage16* This,
4291         LPCOLESTR16 pwcsName,
4292         void* reserved1,
4293         DWORD grfMode,
4294         DWORD reserved2,
4295         IStream16** ppstm);
4296
4297     HRESULT (STDMETHODCALLTYPE *CreateStorage)(
4298         IStorage16* This,
4299         LPCOLESTR16 pwcsName,
4300         DWORD grfMode,
4301         DWORD dwStgFmt,
4302         DWORD reserved2,
4303         IStorage16** ppstg);
4304
4305     HRESULT (STDMETHODCALLTYPE *OpenStorage)(
4306         IStorage16* This,
4307         LPCOLESTR16 pwcsName,
4308         IStorage16* pstgPriority,
4309         DWORD grfMode,
4310         SNB16 snbExclude,
4311         DWORD reserved,
4312         IStorage16** ppstg);
4313
4314     HRESULT (STDMETHODCALLTYPE *CopyTo)(
4315         IStorage16* This,
4316         DWORD ciidExclude,
4317         const IID* rgiidExclude,
4318         SNB16 snbExclude,
4319         IStorage16* pstgDest);
4320
4321     HRESULT (STDMETHODCALLTYPE *MoveElementTo)(
4322         IStorage16* This,
4323         LPCOLESTR16 pwcsName,
4324         IStorage16* pstgDest,
4325         LPCOLESTR16 pwcsNewName,
4326         DWORD grfFlags);
4327
4328     HRESULT (STDMETHODCALLTYPE *Commit)(
4329         IStorage16* This,
4330         DWORD grfCommitFlags);
4331
4332     HRESULT (STDMETHODCALLTYPE *Revert)(
4333         IStorage16* This);
4334
4335     HRESULT (STDMETHODCALLTYPE *EnumElements)(
4336         IStorage16* This,
4337         DWORD reserved1,
4338         void* reserved2,
4339         DWORD reserved3,
4340         IEnumSTATSTG** ppenum);
4341
4342     HRESULT (STDMETHODCALLTYPE *DestroyElement)(
4343         IStorage16* This,
4344         LPCOLESTR16 pwcsName);
4345
4346     HRESULT (STDMETHODCALLTYPE *RenameElement)(
4347         IStorage16* This,
4348         LPCOLESTR16 pwcsOldName,
4349         LPCOLESTR16 pwcsNewName);
4350
4351     HRESULT (STDMETHODCALLTYPE *SetElementTimes)(
4352         IStorage16* This,
4353         LPCOLESTR16 pwcsName,
4354         const FILETIME* pctime,
4355         const FILETIME* patime,
4356         const FILETIME* pmtime);
4357
4358     HRESULT (STDMETHODCALLTYPE *SetClass)(
4359         IStorage16* This,
4360         REFCLSID clsid);
4361
4362     HRESULT (STDMETHODCALLTYPE *SetStateBits)(
4363         IStorage16* This,
4364         DWORD grfStateBits,
4365         DWORD grfMask);
4366
4367     HRESULT (STDMETHODCALLTYPE *Stat)(
4368         IStorage16* This,
4369         STATSTG* pstatstg,
4370         DWORD grfStatFlag);
4371
4372 };
4373
4374 #define IStorage16_IMETHODS \
4375     /*** IUnknown methods ***/ \
4376     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
4377     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
4378     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
4379     /*** IStorage16 methods ***/ \
4380     HRESULT (STDMETHODCALLTYPE *CreateStream)(INTERFACE *This, LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16** ppstm); \
4381     HRESULT (STDMETHODCALLTYPE *OpenStream)(INTERFACE *This, LPCOLESTR16 pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream16** ppstm); \
4382     HRESULT (STDMETHODCALLTYPE *CreateStorage)(INTERFACE *This, LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16** ppstg); \
4383     HRESULT (STDMETHODCALLTYPE *OpenStorage)(INTERFACE *This, LPCOLESTR16 pwcsName, IStorage16* pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16** ppstg); \
4384     HRESULT (STDMETHODCALLTYPE *CopyTo)(INTERFACE *This, DWORD ciidExclude, const IID* rgiidExclude, SNB16 snbExclude, IStorage16* pstgDest); \
4385     HRESULT (STDMETHODCALLTYPE *MoveElementTo)(INTERFACE *This, LPCOLESTR16 pwcsName, IStorage16* pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags); \
4386     HRESULT (STDMETHODCALLTYPE *Commit)(INTERFACE *This, DWORD grfCommitFlags); \
4387     HRESULT (STDMETHODCALLTYPE *Revert)(INTERFACE *This); \
4388     HRESULT (STDMETHODCALLTYPE *EnumElements)(INTERFACE *This, DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum); \
4389     HRESULT (STDMETHODCALLTYPE *DestroyElement)(INTERFACE *This, LPCOLESTR16 pwcsName); \
4390     HRESULT (STDMETHODCALLTYPE *RenameElement)(INTERFACE *This, LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName); \
4391     HRESULT (STDMETHODCALLTYPE *SetElementTimes)(INTERFACE *This, LPCOLESTR16 pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime); \
4392     HRESULT (STDMETHODCALLTYPE *SetClass)(INTERFACE *This, REFCLSID clsid); \
4393     HRESULT (STDMETHODCALLTYPE *SetStateBits)(INTERFACE *This, DWORD grfStateBits, DWORD grfMask); \
4394     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATSTG* pstatstg, DWORD grfStatFlag);
4395
4396 /*** IUnknown methods ***/
4397 #define IStorage16_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4398 #define IStorage16_AddRef(p) (p)->lpVtbl->AddRef(p)
4399 #define IStorage16_Release(p) (p)->lpVtbl->Release(p)
4400 /*** IStorage16 methods ***/
4401 #define IStorage16_CreateStream(p,a,b,c,d,e) (p)->lpVtbl->CreateStream(p,a,b,c,d,e)
4402 #define IStorage16_OpenStream(p,a,b,c,d,e) (p)->lpVtbl->OpenStream(p,a,b,c,d,e)
4403 #define IStorage16_CreateStorage(p,a,b,c,d,e) (p)->lpVtbl->CreateStorage(p,a,b,c,d,e)
4404 #define IStorage16_OpenStorage(p,a,b,c,d,e,f) (p)->lpVtbl->OpenStorage(p,a,b,c,d,e,f)
4405 #define IStorage16_CopyTo(p,a,b,c,d) (p)->lpVtbl->CopyTo(p,a,b,c,d)
4406 #define IStorage16_MoveElementTo(p,a,b,c,d) (p)->lpVtbl->MoveElementTo(p,a,b,c,d)
4407 #define IStorage16_Commit(p,a) (p)->lpVtbl->Commit(p,a)
4408 #define IStorage16_Revert(p) (p)->lpVtbl->Revert(p)
4409 #define IStorage16_EnumElements(p,a,b,c,d) (p)->lpVtbl->EnumElements(p,a,b,c,d)
4410 #define IStorage16_DestroyElement(p,a) (p)->lpVtbl->DestroyElement(p,a)
4411 #define IStorage16_RenameElement(p,a,b) (p)->lpVtbl->RenameElement(p,a,b)
4412 #define IStorage16_SetElementTimes(p,a,b,c,d) (p)->lpVtbl->SetElementTimes(p,a,b,c,d)
4413 #define IStorage16_SetClass(p,a) (p)->lpVtbl->SetClass(p,a)
4414 #define IStorage16_SetStateBits(p,a,b) (p)->lpVtbl->SetStateBits(p,a,b)
4415 #define IStorage16_Stat(p,a,b) (p)->lpVtbl->Stat(p,a,b)
4416
4417 #endif
4418
4419 HRESULT CALLBACK IStorage16_CreateStream_Proxy(
4420     IStorage16* This,
4421     LPCOLESTR16 pwcsName,
4422     DWORD grfMode,
4423     DWORD reserved1,
4424     DWORD reserved2,
4425     IStream16** ppstm);
4426 void __RPC_STUB IStorage16_CreateStream_Stub(
4427     struct IRpcStubBuffer* This,
4428     struct IRpcChannelBuffer* pRpcChannelBuffer,
4429     PRPC_MESSAGE pRpcMessage,
4430     DWORD* pdwStubPhase);
4431 HRESULT CALLBACK IStorage16_RemoteOpenStream_Proxy(
4432     IStorage16* This,
4433     LPCOLESTR16 pwcsName,
4434     unsigned long cbReserved1,
4435     byte* reserved1,
4436     DWORD grfMode,
4437     DWORD reserved2,
4438     IStream16** ppstm);
4439 void __RPC_STUB IStorage16_RemoteOpenStream_Stub(
4440     struct IRpcStubBuffer* This,
4441     struct IRpcChannelBuffer* pRpcChannelBuffer,
4442     PRPC_MESSAGE pRpcMessage,
4443     DWORD* pdwStubPhase);
4444 HRESULT CALLBACK IStorage16_OpenStream_Proxy(
4445     IStorage16* This,
4446     LPCOLESTR16 pwcsName,
4447     void* reserved1,
4448     DWORD grfMode,
4449     DWORD reserved2,
4450     IStream16** ppstm);
4451 HRESULT __RPC_STUB IStorage16_OpenStream_Stub(
4452     IStorage16* This,
4453     LPCOLESTR16 pwcsName,
4454     unsigned long cbReserved1,
4455     byte* reserved1,
4456     DWORD grfMode,
4457     DWORD reserved2,
4458     IStream16** ppstm);
4459 HRESULT CALLBACK IStorage16_CreateStorage_Proxy(
4460     IStorage16* This,
4461     LPCOLESTR16 pwcsName,
4462     DWORD grfMode,
4463     DWORD dwStgFmt,
4464     DWORD reserved2,
4465     IStorage16** ppstg);
4466 void __RPC_STUB IStorage16_CreateStorage_Stub(
4467     struct IRpcStubBuffer* This,
4468     struct IRpcChannelBuffer* pRpcChannelBuffer,
4469     PRPC_MESSAGE pRpcMessage,
4470     DWORD* pdwStubPhase);
4471 HRESULT CALLBACK IStorage16_OpenStorage_Proxy(
4472     IStorage16* This,
4473     LPCOLESTR16 pwcsName,
4474     IStorage16* pstgPriority,
4475     DWORD grfMode,
4476     SNB16 snbExclude,
4477     DWORD reserved,
4478     IStorage16** ppstg);
4479 void __RPC_STUB IStorage16_OpenStorage_Stub(
4480     struct IRpcStubBuffer* This,
4481     struct IRpcChannelBuffer* pRpcChannelBuffer,
4482     PRPC_MESSAGE pRpcMessage,
4483     DWORD* pdwStubPhase);
4484 HRESULT CALLBACK IStorage16_CopyTo_Proxy(
4485     IStorage16* This,
4486     DWORD ciidExclude,
4487     const IID* rgiidExclude,
4488     SNB16 snbExclude,
4489     IStorage16* pstgDest);
4490 void __RPC_STUB IStorage16_CopyTo_Stub(
4491     struct IRpcStubBuffer* This,
4492     struct IRpcChannelBuffer* pRpcChannelBuffer,
4493     PRPC_MESSAGE pRpcMessage,
4494     DWORD* pdwStubPhase);
4495 HRESULT CALLBACK IStorage16_MoveElementTo_Proxy(
4496     IStorage16* This,
4497     LPCOLESTR16 pwcsName,
4498     IStorage16* pstgDest,
4499     LPCOLESTR16 pwcsNewName,
4500     DWORD grfFlags);
4501 void __RPC_STUB IStorage16_MoveElementTo_Stub(
4502     struct IRpcStubBuffer* This,
4503     struct IRpcChannelBuffer* pRpcChannelBuffer,
4504     PRPC_MESSAGE pRpcMessage,
4505     DWORD* pdwStubPhase);
4506 HRESULT CALLBACK IStorage16_Commit_Proxy(
4507     IStorage16* This,
4508     DWORD grfCommitFlags);
4509 void __RPC_STUB IStorage16_Commit_Stub(
4510     struct IRpcStubBuffer* This,
4511     struct IRpcChannelBuffer* pRpcChannelBuffer,
4512     PRPC_MESSAGE pRpcMessage,
4513     DWORD* pdwStubPhase);
4514 HRESULT CALLBACK IStorage16_Revert_Proxy(
4515     IStorage16* This);
4516 void __RPC_STUB IStorage16_Revert_Stub(
4517     struct IRpcStubBuffer* This,
4518     struct IRpcChannelBuffer* pRpcChannelBuffer,
4519     PRPC_MESSAGE pRpcMessage,
4520     DWORD* pdwStubPhase);
4521 HRESULT CALLBACK IStorage16_RemoteEnumElements_Proxy(
4522     IStorage16* This,
4523     DWORD reserved1,
4524     unsigned long cbReserved2,
4525     byte* reserved2,
4526     DWORD reserved3,
4527     IEnumSTATSTG** ppenum);
4528 void __RPC_STUB IStorage16_RemoteEnumElements_Stub(
4529     struct IRpcStubBuffer* This,
4530     struct IRpcChannelBuffer* pRpcChannelBuffer,
4531     PRPC_MESSAGE pRpcMessage,
4532     DWORD* pdwStubPhase);
4533 HRESULT CALLBACK IStorage16_EnumElements_Proxy(
4534     IStorage16* This,
4535     DWORD reserved1,
4536     void* reserved2,
4537     DWORD reserved3,
4538     IEnumSTATSTG** ppenum);
4539 HRESULT __RPC_STUB IStorage16_EnumElements_Stub(
4540     IStorage16* This,
4541     DWORD reserved1,
4542     unsigned long cbReserved2,
4543     byte* reserved2,
4544     DWORD reserved3,
4545     IEnumSTATSTG** ppenum);
4546 HRESULT CALLBACK IStorage16_DestroyElement_Proxy(
4547     IStorage16* This,
4548     LPCOLESTR16 pwcsName);
4549 void __RPC_STUB IStorage16_DestroyElement_Stub(
4550     struct IRpcStubBuffer* This,
4551     struct IRpcChannelBuffer* pRpcChannelBuffer,
4552     PRPC_MESSAGE pRpcMessage,
4553     DWORD* pdwStubPhase);
4554 HRESULT CALLBACK IStorage16_RenameElement_Proxy(
4555     IStorage16* This,
4556     LPCOLESTR16 pwcsOldName,
4557     LPCOLESTR16 pwcsNewName);
4558 void __RPC_STUB IStorage16_RenameElement_Stub(
4559     struct IRpcStubBuffer* This,
4560     struct IRpcChannelBuffer* pRpcChannelBuffer,
4561     PRPC_MESSAGE pRpcMessage,
4562     DWORD* pdwStubPhase);
4563 HRESULT CALLBACK IStorage16_SetElementTimes_Proxy(
4564     IStorage16* This,
4565     LPCOLESTR16 pwcsName,
4566     const FILETIME* pctime,
4567     const FILETIME* patime,
4568     const FILETIME* pmtime);
4569 void __RPC_STUB IStorage16_SetElementTimes_Stub(
4570     struct IRpcStubBuffer* This,
4571     struct IRpcChannelBuffer* pRpcChannelBuffer,
4572     PRPC_MESSAGE pRpcMessage,
4573     DWORD* pdwStubPhase);
4574 HRESULT CALLBACK IStorage16_SetClass_Proxy(
4575     IStorage16* This,
4576     REFCLSID clsid);
4577 void __RPC_STUB IStorage16_SetClass_Stub(
4578     struct IRpcStubBuffer* This,
4579     struct IRpcChannelBuffer* pRpcChannelBuffer,
4580     PRPC_MESSAGE pRpcMessage,
4581     DWORD* pdwStubPhase);
4582 HRESULT CALLBACK IStorage16_SetStateBits_Proxy(
4583     IStorage16* This,
4584     DWORD grfStateBits,
4585     DWORD grfMask);
4586 void __RPC_STUB IStorage16_SetStateBits_Stub(
4587     struct IRpcStubBuffer* This,
4588     struct IRpcChannelBuffer* pRpcChannelBuffer,
4589     PRPC_MESSAGE pRpcMessage,
4590     DWORD* pdwStubPhase);
4591 HRESULT CALLBACK IStorage16_Stat_Proxy(
4592     IStorage16* This,
4593     STATSTG* pstatstg,
4594     DWORD grfStatFlag);
4595 void __RPC_STUB IStorage16_Stat_Stub(
4596     struct IRpcStubBuffer* This,
4597     struct IRpcChannelBuffer* pRpcChannelBuffer,
4598     PRPC_MESSAGE pRpcMessage,
4599     DWORD* pdwStubPhase);
4600
4601 typedef struct IPersistFile IPersistFile;
4602 typedef IPersistFile *LPPERSISTFILE;
4603
4604 /*****************************************************************************
4605  * IPersistFile interface
4606  */
4607 DEFINE_GUID(IID_IPersistFile, 0x0000010b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4608 #if defined(__cplusplus) && !defined(CINTERFACE)
4609 struct IPersistFile: IPersist {
4610
4611     virtual HRESULT STDMETHODCALLTYPE IsDirty(
4612         ) = 0;
4613
4614     virtual HRESULT STDMETHODCALLTYPE Load(
4615         LPCOLESTR pszFileName,
4616         DWORD dwMode) = 0;
4617
4618     virtual HRESULT STDMETHODCALLTYPE Save(
4619         LPCOLESTR pszFileName,
4620         BOOL fRemember) = 0;
4621
4622     virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
4623         LPCOLESTR pszFileName) = 0;
4624
4625     virtual HRESULT STDMETHODCALLTYPE GetCurFile(
4626         LPOLESTR* ppszFileName) = 0;
4627
4628 } ICOM_COM_INTERFACE_ATTRIBUTE;
4629 #else
4630 typedef struct IPersistFileVtbl IPersistFileVtbl;
4631 struct IPersistFile {
4632     const IPersistFileVtbl* lpVtbl;
4633 };
4634 struct IPersistFileVtbl {
4635     ICOM_MSVTABLE_COMPAT_FIELDS
4636
4637     /*** IUnknown methods ***/
4638     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4639         IPersistFile* This,
4640         REFIID riid,
4641         void** ppvObject);
4642
4643     ULONG (STDMETHODCALLTYPE *AddRef)(
4644         IPersistFile* This);
4645
4646     ULONG (STDMETHODCALLTYPE *Release)(
4647         IPersistFile* This);
4648
4649     /*** IPersist methods ***/
4650     HRESULT (STDMETHODCALLTYPE *GetClassID)(
4651         IPersistFile* This,
4652         CLSID* pClassID);
4653
4654     /*** IPersistFile methods ***/
4655     HRESULT (STDMETHODCALLTYPE *IsDirty)(
4656         IPersistFile* This);
4657
4658     HRESULT (STDMETHODCALLTYPE *Load)(
4659         IPersistFile* This,
4660         LPCOLESTR pszFileName,
4661         DWORD dwMode);
4662
4663     HRESULT (STDMETHODCALLTYPE *Save)(
4664         IPersistFile* This,
4665         LPCOLESTR pszFileName,
4666         BOOL fRemember);
4667
4668     HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
4669         IPersistFile* This,
4670         LPCOLESTR pszFileName);
4671
4672     HRESULT (STDMETHODCALLTYPE *GetCurFile)(
4673         IPersistFile* This,
4674         LPOLESTR* ppszFileName);
4675
4676 };
4677
4678 #define IPersistFile_IMETHODS \
4679     /*** IUnknown methods ***/ \
4680     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
4681     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
4682     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
4683     /*** IPersist methods ***/ \
4684     HRESULT (STDMETHODCALLTYPE *GetClassID)(INTERFACE *This, CLSID* pClassID); \
4685     /*** IPersistFile methods ***/ \
4686     HRESULT (STDMETHODCALLTYPE *IsDirty)(INTERFACE *This); \
4687     HRESULT (STDMETHODCALLTYPE *Load)(INTERFACE *This, LPCOLESTR pszFileName, DWORD dwMode); \
4688     HRESULT (STDMETHODCALLTYPE *Save)(INTERFACE *This, LPCOLESTR pszFileName, BOOL fRemember); \
4689     HRESULT (STDMETHODCALLTYPE *SaveCompleted)(INTERFACE *This, LPCOLESTR pszFileName); \
4690     HRESULT (STDMETHODCALLTYPE *GetCurFile)(INTERFACE *This, LPOLESTR* ppszFileName);
4691
4692 /*** IUnknown methods ***/
4693 #define IPersistFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4694 #define IPersistFile_AddRef(p) (p)->lpVtbl->AddRef(p)
4695 #define IPersistFile_Release(p) (p)->lpVtbl->Release(p)
4696 /*** IPersist methods ***/
4697 #define IPersistFile_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
4698 /*** IPersistFile methods ***/
4699 #define IPersistFile_IsDirty(p) (p)->lpVtbl->IsDirty(p)
4700 #define IPersistFile_Load(p,a,b) (p)->lpVtbl->Load(p,a,b)
4701 #define IPersistFile_Save(p,a,b) (p)->lpVtbl->Save(p,a,b)
4702 #define IPersistFile_SaveCompleted(p,a) (p)->lpVtbl->SaveCompleted(p,a)
4703 #define IPersistFile_GetCurFile(p,a) (p)->lpVtbl->GetCurFile(p,a)
4704
4705 #endif
4706
4707 HRESULT CALLBACK IPersistFile_IsDirty_Proxy(
4708     IPersistFile* This);
4709 void __RPC_STUB IPersistFile_IsDirty_Stub(
4710     struct IRpcStubBuffer* This,
4711     struct IRpcChannelBuffer* pRpcChannelBuffer,
4712     PRPC_MESSAGE pRpcMessage,
4713     DWORD* pdwStubPhase);
4714 HRESULT CALLBACK IPersistFile_Load_Proxy(
4715     IPersistFile* This,
4716     LPCOLESTR pszFileName,
4717     DWORD dwMode);
4718 void __RPC_STUB IPersistFile_Load_Stub(
4719     struct IRpcStubBuffer* This,
4720     struct IRpcChannelBuffer* pRpcChannelBuffer,
4721     PRPC_MESSAGE pRpcMessage,
4722     DWORD* pdwStubPhase);
4723 HRESULT CALLBACK IPersistFile_Save_Proxy(
4724     IPersistFile* This,
4725     LPCOLESTR pszFileName,
4726     BOOL fRemember);
4727 void __RPC_STUB IPersistFile_Save_Stub(
4728     struct IRpcStubBuffer* This,
4729     struct IRpcChannelBuffer* pRpcChannelBuffer,
4730     PRPC_MESSAGE pRpcMessage,
4731     DWORD* pdwStubPhase);
4732 HRESULT CALLBACK IPersistFile_SaveCompleted_Proxy(
4733     IPersistFile* This,
4734     LPCOLESTR pszFileName);
4735 void __RPC_STUB IPersistFile_SaveCompleted_Stub(
4736     struct IRpcStubBuffer* This,
4737     struct IRpcChannelBuffer* pRpcChannelBuffer,
4738     PRPC_MESSAGE pRpcMessage,
4739     DWORD* pdwStubPhase);
4740 HRESULT CALLBACK IPersistFile_GetCurFile_Proxy(
4741     IPersistFile* This,
4742     LPOLESTR* ppszFileName);
4743 void __RPC_STUB IPersistFile_GetCurFile_Stub(
4744     struct IRpcStubBuffer* This,
4745     struct IRpcChannelBuffer* pRpcChannelBuffer,
4746     PRPC_MESSAGE pRpcMessage,
4747     DWORD* pdwStubPhase);
4748
4749 typedef struct IPersistStorage IPersistStorage;
4750 typedef IPersistStorage *LPPERSISTSTORAGE;
4751
4752 /*****************************************************************************
4753  * IPersistStorage interface
4754  */
4755 DEFINE_GUID(IID_IPersistStorage, 0x0000010a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4756 #if defined(__cplusplus) && !defined(CINTERFACE)
4757 struct IPersistStorage: IPersist {
4758
4759     virtual HRESULT STDMETHODCALLTYPE IsDirty(
4760         ) = 0;
4761
4762     virtual HRESULT STDMETHODCALLTYPE InitNew(
4763         IStorage* pStg) = 0;
4764
4765     virtual HRESULT STDMETHODCALLTYPE Load(
4766         IStorage* pStg) = 0;
4767
4768     virtual HRESULT STDMETHODCALLTYPE Save(
4769         IStorage* pStgSave,
4770         BOOL fSameAsLoad) = 0;
4771
4772     virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
4773         IStorage* pStgNew) = 0;
4774
4775     virtual HRESULT STDMETHODCALLTYPE HandsOffStorage(
4776         ) = 0;
4777
4778 } ICOM_COM_INTERFACE_ATTRIBUTE;
4779 #else
4780 typedef struct IPersistStorageVtbl IPersistStorageVtbl;
4781 struct IPersistStorage {
4782     const IPersistStorageVtbl* lpVtbl;
4783 };
4784 struct IPersistStorageVtbl {
4785     ICOM_MSVTABLE_COMPAT_FIELDS
4786
4787     /*** IUnknown methods ***/
4788     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4789         IPersistStorage* This,
4790         REFIID riid,
4791         void** ppvObject);
4792
4793     ULONG (STDMETHODCALLTYPE *AddRef)(
4794         IPersistStorage* This);
4795
4796     ULONG (STDMETHODCALLTYPE *Release)(
4797         IPersistStorage* This);
4798
4799     /*** IPersist methods ***/
4800     HRESULT (STDMETHODCALLTYPE *GetClassID)(
4801         IPersistStorage* This,
4802         CLSID* pClassID);
4803
4804     /*** IPersistStorage methods ***/
4805     HRESULT (STDMETHODCALLTYPE *IsDirty)(
4806         IPersistStorage* This);
4807
4808     HRESULT (STDMETHODCALLTYPE *InitNew)(
4809         IPersistStorage* This,
4810         IStorage* pStg);
4811
4812     HRESULT (STDMETHODCALLTYPE *Load)(
4813         IPersistStorage* This,
4814         IStorage* pStg);
4815
4816     HRESULT (STDMETHODCALLTYPE *Save)(
4817         IPersistStorage* This,
4818         IStorage* pStgSave,
4819         BOOL fSameAsLoad);
4820
4821     HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
4822         IPersistStorage* This,
4823         IStorage* pStgNew);
4824
4825     HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
4826         IPersistStorage* This);
4827
4828 };
4829
4830 #define IPersistStorage_IMETHODS \
4831     /*** IUnknown methods ***/ \
4832     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
4833     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
4834     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
4835     /*** IPersist methods ***/ \
4836     HRESULT (STDMETHODCALLTYPE *GetClassID)(INTERFACE *This, CLSID* pClassID); \
4837     /*** IPersistStorage methods ***/ \
4838     HRESULT (STDMETHODCALLTYPE *IsDirty)(INTERFACE *This); \
4839     HRESULT (STDMETHODCALLTYPE *InitNew)(INTERFACE *This, IStorage* pStg); \
4840     HRESULT (STDMETHODCALLTYPE *Load)(INTERFACE *This, IStorage* pStg); \
4841     HRESULT (STDMETHODCALLTYPE *Save)(INTERFACE *This, IStorage* pStgSave, BOOL fSameAsLoad); \
4842     HRESULT (STDMETHODCALLTYPE *SaveCompleted)(INTERFACE *This, IStorage* pStgNew); \
4843     HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(INTERFACE *This);
4844
4845 /*** IUnknown methods ***/
4846 #define IPersistStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4847 #define IPersistStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
4848 #define IPersistStorage_Release(p) (p)->lpVtbl->Release(p)
4849 /*** IPersist methods ***/
4850 #define IPersistStorage_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
4851 /*** IPersistStorage methods ***/
4852 #define IPersistStorage_IsDirty(p) (p)->lpVtbl->IsDirty(p)
4853 #define IPersistStorage_InitNew(p,a) (p)->lpVtbl->InitNew(p,a)
4854 #define IPersistStorage_Load(p,a) (p)->lpVtbl->Load(p,a)
4855 #define IPersistStorage_Save(p,a,b) (p)->lpVtbl->Save(p,a,b)
4856 #define IPersistStorage_SaveCompleted(p,a) (p)->lpVtbl->SaveCompleted(p,a)
4857 #define IPersistStorage_HandsOffStorage(p) (p)->lpVtbl->HandsOffStorage(p)
4858
4859 #endif
4860
4861 HRESULT CALLBACK IPersistStorage_IsDirty_Proxy(
4862     IPersistStorage* This);
4863 void __RPC_STUB IPersistStorage_IsDirty_Stub(
4864     struct IRpcStubBuffer* This,
4865     struct IRpcChannelBuffer* pRpcChannelBuffer,
4866     PRPC_MESSAGE pRpcMessage,
4867     DWORD* pdwStubPhase);
4868 HRESULT CALLBACK IPersistStorage_InitNew_Proxy(
4869     IPersistStorage* This,
4870     IStorage* pStg);
4871 void __RPC_STUB IPersistStorage_InitNew_Stub(
4872     struct IRpcStubBuffer* This,
4873     struct IRpcChannelBuffer* pRpcChannelBuffer,
4874     PRPC_MESSAGE pRpcMessage,
4875     DWORD* pdwStubPhase);
4876 HRESULT CALLBACK IPersistStorage_Load_Proxy(
4877     IPersistStorage* This,
4878     IStorage* pStg);
4879 void __RPC_STUB IPersistStorage_Load_Stub(
4880     struct IRpcStubBuffer* This,
4881     struct IRpcChannelBuffer* pRpcChannelBuffer,
4882     PRPC_MESSAGE pRpcMessage,
4883     DWORD* pdwStubPhase);
4884 HRESULT CALLBACK IPersistStorage_Save_Proxy(
4885     IPersistStorage* This,
4886     IStorage* pStgSave,
4887     BOOL fSameAsLoad);
4888 void __RPC_STUB IPersistStorage_Save_Stub(
4889     struct IRpcStubBuffer* This,
4890     struct IRpcChannelBuffer* pRpcChannelBuffer,
4891     PRPC_MESSAGE pRpcMessage,
4892     DWORD* pdwStubPhase);
4893 HRESULT CALLBACK IPersistStorage_SaveCompleted_Proxy(
4894     IPersistStorage* This,
4895     IStorage* pStgNew);
4896 void __RPC_STUB IPersistStorage_SaveCompleted_Stub(
4897     struct IRpcStubBuffer* This,
4898     struct IRpcChannelBuffer* pRpcChannelBuffer,
4899     PRPC_MESSAGE pRpcMessage,
4900     DWORD* pdwStubPhase);
4901 HRESULT CALLBACK IPersistStorage_HandsOffStorage_Proxy(
4902     IPersistStorage* This);
4903 void __RPC_STUB IPersistStorage_HandsOffStorage_Stub(
4904     struct IRpcStubBuffer* This,
4905     struct IRpcChannelBuffer* pRpcChannelBuffer,
4906     PRPC_MESSAGE pRpcMessage,
4907     DWORD* pdwStubPhase);
4908
4909 typedef struct IRootStorage IRootStorage;
4910 typedef IRootStorage *LPROOTSTORAGE;
4911
4912 /*****************************************************************************
4913  * IRootStorage interface
4914  */
4915 DEFINE_GUID(IID_IRootStorage, 0x00000012, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4916 #if defined(__cplusplus) && !defined(CINTERFACE)
4917 struct IRootStorage: IUnknown {
4918
4919     virtual HRESULT STDMETHODCALLTYPE SwitchToFile(
4920         LPOLESTR pszFile) = 0;
4921
4922 } ICOM_COM_INTERFACE_ATTRIBUTE;
4923 #else
4924 typedef struct IRootStorageVtbl IRootStorageVtbl;
4925 struct IRootStorage {
4926     const IRootStorageVtbl* lpVtbl;
4927 };
4928 struct IRootStorageVtbl {
4929     ICOM_MSVTABLE_COMPAT_FIELDS
4930
4931     /*** IUnknown methods ***/
4932     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4933         IRootStorage* This,
4934         REFIID riid,
4935         void** ppvObject);
4936
4937     ULONG (STDMETHODCALLTYPE *AddRef)(
4938         IRootStorage* This);
4939
4940     ULONG (STDMETHODCALLTYPE *Release)(
4941         IRootStorage* This);
4942
4943     /*** IRootStorage methods ***/
4944     HRESULT (STDMETHODCALLTYPE *SwitchToFile)(
4945         IRootStorage* This,
4946         LPOLESTR pszFile);
4947
4948 };
4949
4950 #define IRootStorage_IMETHODS \
4951     /*** IUnknown methods ***/ \
4952     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
4953     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
4954     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
4955     /*** IRootStorage methods ***/ \
4956     HRESULT (STDMETHODCALLTYPE *SwitchToFile)(INTERFACE *This, LPOLESTR pszFile);
4957
4958 /*** IUnknown methods ***/
4959 #define IRootStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4960 #define IRootStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
4961 #define IRootStorage_Release(p) (p)->lpVtbl->Release(p)
4962 /*** IRootStorage methods ***/
4963 #define IRootStorage_SwitchToFile(p,a) (p)->lpVtbl->SwitchToFile(p,a)
4964
4965 #endif
4966
4967 HRESULT CALLBACK IRootStorage_SwitchToFile_Proxy(
4968     IRootStorage* This,
4969     LPOLESTR pszFile);
4970 void __RPC_STUB IRootStorage_SwitchToFile_Stub(
4971     struct IRpcStubBuffer* This,
4972     struct IRpcChannelBuffer* pRpcChannelBuffer,
4973     PRPC_MESSAGE pRpcMessage,
4974     DWORD* pdwStubPhase);
4975
4976 typedef struct ILockBytes ILockBytes;
4977 typedef ILockBytes *LPLOCKBYTES;
4978
4979 /*****************************************************************************
4980  * ILockBytes interface
4981  */
4982 DEFINE_GUID(IID_ILockBytes, 0x0000000a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4983 #if defined(__cplusplus) && !defined(CINTERFACE)
4984 struct ILockBytes: IUnknown {
4985
4986     virtual HRESULT STDMETHODCALLTYPE ReadAt(
4987         ULARGE_INTEGER ulOffset,
4988         void* pv,
4989         ULONG cb,
4990         ULONG* pcbRead) = 0;
4991
4992     virtual HRESULT STDMETHODCALLTYPE WriteAt(
4993         ULARGE_INTEGER ulOffset,
4994         const void* pv,
4995         ULONG cb,
4996         ULONG* pcbWritten) = 0;
4997
4998     virtual HRESULT STDMETHODCALLTYPE Flush(
4999         ) = 0;
5000
5001     virtual HRESULT STDMETHODCALLTYPE SetSize(
5002         ULARGE_INTEGER cb) = 0;
5003
5004     virtual HRESULT STDMETHODCALLTYPE LockRegion(
5005         ULARGE_INTEGER libOffset,
5006         ULARGE_INTEGER cb,
5007         DWORD dwLockType) = 0;
5008
5009     virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
5010         ULARGE_INTEGER libOffset,
5011         ULARGE_INTEGER cb,
5012         DWORD dwLockType) = 0;
5013
5014     virtual HRESULT STDMETHODCALLTYPE Stat(
5015         STATSTG* pstatstg,
5016         DWORD grfStatFlag) = 0;
5017
5018 } ICOM_COM_INTERFACE_ATTRIBUTE;
5019 #else
5020 typedef struct ILockBytesVtbl ILockBytesVtbl;
5021 struct ILockBytes {
5022     const ILockBytesVtbl* lpVtbl;
5023 };
5024 struct ILockBytesVtbl {
5025     ICOM_MSVTABLE_COMPAT_FIELDS
5026
5027     /*** IUnknown methods ***/
5028     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5029         ILockBytes* This,
5030         REFIID riid,
5031         void** ppvObject);
5032
5033     ULONG (STDMETHODCALLTYPE *AddRef)(
5034         ILockBytes* This);
5035
5036     ULONG (STDMETHODCALLTYPE *Release)(
5037         ILockBytes* This);
5038
5039     /*** ILockBytes methods ***/
5040     HRESULT (STDMETHODCALLTYPE *ReadAt)(
5041         ILockBytes* This,
5042         ULARGE_INTEGER ulOffset,
5043         void* pv,
5044         ULONG cb,
5045         ULONG* pcbRead);
5046
5047     HRESULT (STDMETHODCALLTYPE *WriteAt)(
5048         ILockBytes* This,
5049         ULARGE_INTEGER ulOffset,
5050         const void* pv,
5051         ULONG cb,
5052         ULONG* pcbWritten);
5053
5054     HRESULT (STDMETHODCALLTYPE *Flush)(
5055         ILockBytes* This);
5056
5057     HRESULT (STDMETHODCALLTYPE *SetSize)(
5058         ILockBytes* This,
5059         ULARGE_INTEGER cb);
5060
5061     HRESULT (STDMETHODCALLTYPE *LockRegion)(
5062         ILockBytes* This,
5063         ULARGE_INTEGER libOffset,
5064         ULARGE_INTEGER cb,
5065         DWORD dwLockType);
5066
5067     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
5068         ILockBytes* This,
5069         ULARGE_INTEGER libOffset,
5070         ULARGE_INTEGER cb,
5071         DWORD dwLockType);
5072
5073     HRESULT (STDMETHODCALLTYPE *Stat)(
5074         ILockBytes* This,
5075         STATSTG* pstatstg,
5076         DWORD grfStatFlag);
5077
5078 };
5079
5080 #define ILockBytes_IMETHODS \
5081     /*** IUnknown methods ***/ \
5082     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5083     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5084     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5085     /*** ILockBytes methods ***/ \
5086     HRESULT (STDMETHODCALLTYPE *ReadAt)(INTERFACE *This, ULARGE_INTEGER ulOffset, void* pv, ULONG cb, ULONG* pcbRead); \
5087     HRESULT (STDMETHODCALLTYPE *WriteAt)(INTERFACE *This, ULARGE_INTEGER ulOffset, const void* pv, ULONG cb, ULONG* pcbWritten); \
5088     HRESULT (STDMETHODCALLTYPE *Flush)(INTERFACE *This); \
5089     HRESULT (STDMETHODCALLTYPE *SetSize)(INTERFACE *This, ULARGE_INTEGER cb); \
5090     HRESULT (STDMETHODCALLTYPE *LockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
5091     HRESULT (STDMETHODCALLTYPE *UnlockRegion)(INTERFACE *This, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); \
5092     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATSTG* pstatstg, DWORD grfStatFlag);
5093
5094 /*** IUnknown methods ***/
5095 #define ILockBytes_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5096 #define ILockBytes_AddRef(p) (p)->lpVtbl->AddRef(p)
5097 #define ILockBytes_Release(p) (p)->lpVtbl->Release(p)
5098 /*** ILockBytes methods ***/
5099 #define ILockBytes_ReadAt(p,a,b,c,d) (p)->lpVtbl->ReadAt(p,a,b,c,d)
5100 #define ILockBytes_WriteAt(p,a,b,c,d) (p)->lpVtbl->WriteAt(p,a,b,c,d)
5101 #define ILockBytes_Flush(p) (p)->lpVtbl->Flush(p)
5102 #define ILockBytes_SetSize(p,a) (p)->lpVtbl->SetSize(p,a)
5103 #define ILockBytes_LockRegion(p,a,b,c) (p)->lpVtbl->LockRegion(p,a,b,c)
5104 #define ILockBytes_UnlockRegion(p,a,b,c) (p)->lpVtbl->UnlockRegion(p,a,b,c)
5105 #define ILockBytes_Stat(p,a,b) (p)->lpVtbl->Stat(p,a,b)
5106
5107 #endif
5108
5109 HRESULT CALLBACK ILockBytes_RemoteReadAt_Proxy(
5110     ILockBytes* This,
5111     ULARGE_INTEGER ulOffset,
5112     byte* pv,
5113     ULONG cb,
5114     ULONG* pcbRead);
5115 void __RPC_STUB ILockBytes_RemoteReadAt_Stub(
5116     struct IRpcStubBuffer* This,
5117     struct IRpcChannelBuffer* pRpcChannelBuffer,
5118     PRPC_MESSAGE pRpcMessage,
5119     DWORD* pdwStubPhase);
5120 HRESULT CALLBACK ILockBytes_ReadAt_Proxy(
5121     ILockBytes* This,
5122     ULARGE_INTEGER ulOffset,
5123     void* pv,
5124     ULONG cb,
5125     ULONG* pcbRead);
5126 HRESULT __RPC_STUB ILockBytes_ReadAt_Stub(
5127     ILockBytes* This,
5128     ULARGE_INTEGER ulOffset,
5129     byte* pv,
5130     ULONG cb,
5131     ULONG* pcbRead);
5132 HRESULT CALLBACK ILockBytes_RemoteWriteAt_Proxy(
5133     ILockBytes* This,
5134     ULARGE_INTEGER ulOffset,
5135     const byte* pv,
5136     ULONG cb,
5137     ULONG* pcbWritten);
5138 void __RPC_STUB ILockBytes_RemoteWriteAt_Stub(
5139     struct IRpcStubBuffer* This,
5140     struct IRpcChannelBuffer* pRpcChannelBuffer,
5141     PRPC_MESSAGE pRpcMessage,
5142     DWORD* pdwStubPhase);
5143 HRESULT CALLBACK ILockBytes_WriteAt_Proxy(
5144     ILockBytes* This,
5145     ULARGE_INTEGER ulOffset,
5146     const void* pv,
5147     ULONG cb,
5148     ULONG* pcbWritten);
5149 HRESULT __RPC_STUB ILockBytes_WriteAt_Stub(
5150     ILockBytes* This,
5151     ULARGE_INTEGER ulOffset,
5152     const byte* pv,
5153     ULONG cb,
5154     ULONG* pcbWritten);
5155 HRESULT CALLBACK ILockBytes_Flush_Proxy(
5156     ILockBytes* This);
5157 void __RPC_STUB ILockBytes_Flush_Stub(
5158     struct IRpcStubBuffer* This,
5159     struct IRpcChannelBuffer* pRpcChannelBuffer,
5160     PRPC_MESSAGE pRpcMessage,
5161     DWORD* pdwStubPhase);
5162 HRESULT CALLBACK ILockBytes_SetSize_Proxy(
5163     ILockBytes* This,
5164     ULARGE_INTEGER cb);
5165 void __RPC_STUB ILockBytes_SetSize_Stub(
5166     struct IRpcStubBuffer* This,
5167     struct IRpcChannelBuffer* pRpcChannelBuffer,
5168     PRPC_MESSAGE pRpcMessage,
5169     DWORD* pdwStubPhase);
5170 HRESULT CALLBACK ILockBytes_LockRegion_Proxy(
5171     ILockBytes* This,
5172     ULARGE_INTEGER libOffset,
5173     ULARGE_INTEGER cb,
5174     DWORD dwLockType);
5175 void __RPC_STUB ILockBytes_LockRegion_Stub(
5176     struct IRpcStubBuffer* This,
5177     struct IRpcChannelBuffer* pRpcChannelBuffer,
5178     PRPC_MESSAGE pRpcMessage,
5179     DWORD* pdwStubPhase);
5180 HRESULT CALLBACK ILockBytes_UnlockRegion_Proxy(
5181     ILockBytes* This,
5182     ULARGE_INTEGER libOffset,
5183     ULARGE_INTEGER cb,
5184     DWORD dwLockType);
5185 void __RPC_STUB ILockBytes_UnlockRegion_Stub(
5186     struct IRpcStubBuffer* This,
5187     struct IRpcChannelBuffer* pRpcChannelBuffer,
5188     PRPC_MESSAGE pRpcMessage,
5189     DWORD* pdwStubPhase);
5190 HRESULT CALLBACK ILockBytes_Stat_Proxy(
5191     ILockBytes* This,
5192     STATSTG* pstatstg,
5193     DWORD grfStatFlag);
5194 void __RPC_STUB ILockBytes_Stat_Stub(
5195     struct IRpcStubBuffer* This,
5196     struct IRpcChannelBuffer* pRpcChannelBuffer,
5197     PRPC_MESSAGE pRpcMessage,
5198     DWORD* pdwStubPhase);
5199
5200 typedef struct IFillLockBytes IFillLockBytes;
5201 /*****************************************************************************
5202  * IFillLockBytes interface
5203  */
5204 DEFINE_GUID(IID_IFillLockBytes, 0x99caf010, 0x415e, 0x11cf, 0x88,0x14, 0x00,0xaa,0x00,0xb5,0x69,0xf5);
5205 #if defined(__cplusplus) && !defined(CINTERFACE)
5206 struct IFillLockBytes: IUnknown {
5207
5208     virtual HRESULT STDMETHODCALLTYPE FillAppend(
5209         const void* pv,
5210         ULONG cb,
5211         ULONG* pcbWritten) = 0;
5212
5213     virtual HRESULT STDMETHODCALLTYPE FillAt(
5214         ULARGE_INTEGER ulOffset,
5215         const void* pv,
5216         ULONG cb,
5217         ULONG* pcbWritten) = 0;
5218
5219     virtual HRESULT STDMETHODCALLTYPE SetFillSize(
5220         ULARGE_INTEGER ulSize) = 0;
5221
5222     virtual HRESULT STDMETHODCALLTYPE Terminate(
5223         BOOL bCanceled) = 0;
5224
5225 } ICOM_COM_INTERFACE_ATTRIBUTE;
5226 #else
5227 typedef struct IFillLockBytesVtbl IFillLockBytesVtbl;
5228 struct IFillLockBytes {
5229     const IFillLockBytesVtbl* lpVtbl;
5230 };
5231 struct IFillLockBytesVtbl {
5232     ICOM_MSVTABLE_COMPAT_FIELDS
5233
5234     /*** IUnknown methods ***/
5235     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5236         IFillLockBytes* This,
5237         REFIID riid,
5238         void** ppvObject);
5239
5240     ULONG (STDMETHODCALLTYPE *AddRef)(
5241         IFillLockBytes* This);
5242
5243     ULONG (STDMETHODCALLTYPE *Release)(
5244         IFillLockBytes* This);
5245
5246     /*** IFillLockBytes methods ***/
5247     HRESULT (STDMETHODCALLTYPE *FillAppend)(
5248         IFillLockBytes* This,
5249         const void* pv,
5250         ULONG cb,
5251         ULONG* pcbWritten);
5252
5253     HRESULT (STDMETHODCALLTYPE *FillAt)(
5254         IFillLockBytes* This,
5255         ULARGE_INTEGER ulOffset,
5256         const void* pv,
5257         ULONG cb,
5258         ULONG* pcbWritten);
5259
5260     HRESULT (STDMETHODCALLTYPE *SetFillSize)(
5261         IFillLockBytes* This,
5262         ULARGE_INTEGER ulSize);
5263
5264     HRESULT (STDMETHODCALLTYPE *Terminate)(
5265         IFillLockBytes* This,
5266         BOOL bCanceled);
5267
5268 };
5269
5270 #define IFillLockBytes_IMETHODS \
5271     /*** IUnknown methods ***/ \
5272     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5273     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5274     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5275     /*** IFillLockBytes methods ***/ \
5276     HRESULT (STDMETHODCALLTYPE *FillAppend)(INTERFACE *This, const void* pv, ULONG cb, ULONG* pcbWritten); \
5277     HRESULT (STDMETHODCALLTYPE *FillAt)(INTERFACE *This, ULARGE_INTEGER ulOffset, const void* pv, ULONG cb, ULONG* pcbWritten); \
5278     HRESULT (STDMETHODCALLTYPE *SetFillSize)(INTERFACE *This, ULARGE_INTEGER ulSize); \
5279     HRESULT (STDMETHODCALLTYPE *Terminate)(INTERFACE *This, BOOL bCanceled);
5280
5281 /*** IUnknown methods ***/
5282 #define IFillLockBytes_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5283 #define IFillLockBytes_AddRef(p) (p)->lpVtbl->AddRef(p)
5284 #define IFillLockBytes_Release(p) (p)->lpVtbl->Release(p)
5285 /*** IFillLockBytes methods ***/
5286 #define IFillLockBytes_FillAppend(p,a,b,c) (p)->lpVtbl->FillAppend(p,a,b,c)
5287 #define IFillLockBytes_FillAt(p,a,b,c,d) (p)->lpVtbl->FillAt(p,a,b,c,d)
5288 #define IFillLockBytes_SetFillSize(p,a) (p)->lpVtbl->SetFillSize(p,a)
5289 #define IFillLockBytes_Terminate(p,a) (p)->lpVtbl->Terminate(p,a)
5290
5291 #endif
5292
5293 HRESULT CALLBACK IFillLockBytes_RemoteFillAppend_Proxy(
5294     IFillLockBytes* This,
5295     const byte* pv,
5296     ULONG cb,
5297     ULONG* pcbWritten);
5298 void __RPC_STUB IFillLockBytes_RemoteFillAppend_Stub(
5299     struct IRpcStubBuffer* This,
5300     struct IRpcChannelBuffer* pRpcChannelBuffer,
5301     PRPC_MESSAGE pRpcMessage,
5302     DWORD* pdwStubPhase);
5303 HRESULT CALLBACK IFillLockBytes_FillAppend_Proxy(
5304     IFillLockBytes* This,
5305     const void* pv,
5306     ULONG cb,
5307     ULONG* pcbWritten);
5308 HRESULT __RPC_STUB IFillLockBytes_FillAppend_Stub(
5309     IFillLockBytes* This,
5310     const byte* pv,
5311     ULONG cb,
5312     ULONG* pcbWritten);
5313 HRESULT CALLBACK IFillLockBytes_RemoteFillAt_Proxy(
5314     IFillLockBytes* This,
5315     ULARGE_INTEGER ulOffset,
5316     const byte* pv,
5317     ULONG cb,
5318     ULONG* pcbWritten);
5319 void __RPC_STUB IFillLockBytes_RemoteFillAt_Stub(
5320     struct IRpcStubBuffer* This,
5321     struct IRpcChannelBuffer* pRpcChannelBuffer,
5322     PRPC_MESSAGE pRpcMessage,
5323     DWORD* pdwStubPhase);
5324 HRESULT CALLBACK IFillLockBytes_FillAt_Proxy(
5325     IFillLockBytes* This,
5326     ULARGE_INTEGER ulOffset,
5327     const void* pv,
5328     ULONG cb,
5329     ULONG* pcbWritten);
5330 HRESULT __RPC_STUB IFillLockBytes_FillAt_Stub(
5331     IFillLockBytes* This,
5332     ULARGE_INTEGER ulOffset,
5333     const byte* pv,
5334     ULONG cb,
5335     ULONG* pcbWritten);
5336 HRESULT CALLBACK IFillLockBytes_SetFillSize_Proxy(
5337     IFillLockBytes* This,
5338     ULARGE_INTEGER ulSize);
5339 void __RPC_STUB IFillLockBytes_SetFillSize_Stub(
5340     struct IRpcStubBuffer* This,
5341     struct IRpcChannelBuffer* pRpcChannelBuffer,
5342     PRPC_MESSAGE pRpcMessage,
5343     DWORD* pdwStubPhase);
5344 HRESULT CALLBACK IFillLockBytes_Terminate_Proxy(
5345     IFillLockBytes* This,
5346     BOOL bCanceled);
5347 void __RPC_STUB IFillLockBytes_Terminate_Stub(
5348     struct IRpcStubBuffer* This,
5349     struct IRpcChannelBuffer* pRpcChannelBuffer,
5350     PRPC_MESSAGE pRpcMessage,
5351     DWORD* pdwStubPhase);
5352
5353 typedef struct IProgressNotify IProgressNotify;
5354 /*****************************************************************************
5355  * IProgressNotify interface
5356  */
5357 DEFINE_GUID(IID_IProgressNotify, 0xa9d758a0, 0x4617, 0x11cf, 0x95,0xfc, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
5358 #if defined(__cplusplus) && !defined(CINTERFACE)
5359 struct IProgressNotify: IUnknown {
5360
5361     virtual HRESULT STDMETHODCALLTYPE OnProgress(
5362         DWORD dwProgressCurrent,
5363         DWORD dwProgressMaximum,
5364         BOOL fAccurate,
5365         BOOL fOwner) = 0;
5366
5367 } ICOM_COM_INTERFACE_ATTRIBUTE;
5368 #else
5369 typedef struct IProgressNotifyVtbl IProgressNotifyVtbl;
5370 struct IProgressNotify {
5371     const IProgressNotifyVtbl* lpVtbl;
5372 };
5373 struct IProgressNotifyVtbl {
5374     ICOM_MSVTABLE_COMPAT_FIELDS
5375
5376     /*** IUnknown methods ***/
5377     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5378         IProgressNotify* This,
5379         REFIID riid,
5380         void** ppvObject);
5381
5382     ULONG (STDMETHODCALLTYPE *AddRef)(
5383         IProgressNotify* This);
5384
5385     ULONG (STDMETHODCALLTYPE *Release)(
5386         IProgressNotify* This);
5387
5388     /*** IProgressNotify methods ***/
5389     HRESULT (STDMETHODCALLTYPE *OnProgress)(
5390         IProgressNotify* This,
5391         DWORD dwProgressCurrent,
5392         DWORD dwProgressMaximum,
5393         BOOL fAccurate,
5394         BOOL fOwner);
5395
5396 };
5397
5398 #define IProgressNotify_IMETHODS \
5399     /*** IUnknown methods ***/ \
5400     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5401     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5402     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5403     /*** IProgressNotify methods ***/ \
5404     HRESULT (STDMETHODCALLTYPE *OnProgress)(INTERFACE *This, DWORD dwProgressCurrent, DWORD dwProgressMaximum, BOOL fAccurate, BOOL fOwner);
5405
5406 /*** IUnknown methods ***/
5407 #define IProgressNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5408 #define IProgressNotify_AddRef(p) (p)->lpVtbl->AddRef(p)
5409 #define IProgressNotify_Release(p) (p)->lpVtbl->Release(p)
5410 /*** IProgressNotify methods ***/
5411 #define IProgressNotify_OnProgress(p,a,b,c,d) (p)->lpVtbl->OnProgress(p,a,b,c,d)
5412
5413 #endif
5414
5415 HRESULT CALLBACK IProgressNotify_OnProgress_Proxy(
5416     IProgressNotify* This,
5417     DWORD dwProgressCurrent,
5418     DWORD dwProgressMaximum,
5419     BOOL fAccurate,
5420     BOOL fOwner);
5421 void __RPC_STUB IProgressNotify_OnProgress_Stub(
5422     struct IRpcStubBuffer* This,
5423     struct IRpcChannelBuffer* pRpcChannelBuffer,
5424     PRPC_MESSAGE pRpcMessage,
5425     DWORD* pdwStubPhase);
5426
5427 typedef struct ILayoutStorage ILayoutStorage;
5428 typedef struct tagStorageLayout {
5429     DWORD LayoutType;
5430     OLECHAR *pwcsElementName;
5431     LARGE_INTEGER cOffset;
5432     LARGE_INTEGER cBytes;
5433 } StorageLayout;
5434
5435 /*****************************************************************************
5436  * ILayoutStorage interface
5437  */
5438 DEFINE_GUID(IID_ILayoutStorage, 0x0e6d4d90, 0x6738, 0x11cf, 0x96,0x08, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
5439 #if defined(__cplusplus) && !defined(CINTERFACE)
5440 struct ILayoutStorage: IUnknown {
5441
5442     virtual HRESULT STDMETHODCALLTYPE LayoutScript(
5443         StorageLayout* pStorageLayout,
5444         DWORD nEntries,
5445         DWORD glfInterleavedFlag) = 0;
5446
5447     virtual HRESULT STDMETHODCALLTYPE BeginMonitor(
5448         ) = 0;
5449
5450     virtual HRESULT STDMETHODCALLTYPE EndMonitor(
5451         ) = 0;
5452
5453     virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfile(
5454         OLECHAR* pwcsNewDfName) = 0;
5455
5456     virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfileOnILockBytes(
5457         ILockBytes* pILockBytes) = 0;
5458
5459 } ICOM_COM_INTERFACE_ATTRIBUTE;
5460 #else
5461 typedef struct ILayoutStorageVtbl ILayoutStorageVtbl;
5462 struct ILayoutStorage {
5463     const ILayoutStorageVtbl* lpVtbl;
5464 };
5465 struct ILayoutStorageVtbl {
5466     ICOM_MSVTABLE_COMPAT_FIELDS
5467
5468     /*** IUnknown methods ***/
5469     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5470         ILayoutStorage* This,
5471         REFIID riid,
5472         void** ppvObject);
5473
5474     ULONG (STDMETHODCALLTYPE *AddRef)(
5475         ILayoutStorage* This);
5476
5477     ULONG (STDMETHODCALLTYPE *Release)(
5478         ILayoutStorage* This);
5479
5480     /*** ILayoutStorage methods ***/
5481     HRESULT (STDMETHODCALLTYPE *LayoutScript)(
5482         ILayoutStorage* This,
5483         StorageLayout* pStorageLayout,
5484         DWORD nEntries,
5485         DWORD glfInterleavedFlag);
5486
5487     HRESULT (STDMETHODCALLTYPE *BeginMonitor)(
5488         ILayoutStorage* This);
5489
5490     HRESULT (STDMETHODCALLTYPE *EndMonitor)(
5491         ILayoutStorage* This);
5492
5493     HRESULT (STDMETHODCALLTYPE *ReLayoutDocfile)(
5494         ILayoutStorage* This,
5495         OLECHAR* pwcsNewDfName);
5496
5497     HRESULT (STDMETHODCALLTYPE *ReLayoutDocfileOnILockBytes)(
5498         ILayoutStorage* This,
5499         ILockBytes* pILockBytes);
5500
5501 };
5502
5503 #define ILayoutStorage_IMETHODS \
5504     /*** IUnknown methods ***/ \
5505     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5506     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5507     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5508     /*** ILayoutStorage methods ***/ \
5509     HRESULT (STDMETHODCALLTYPE *LayoutScript)(INTERFACE *This, StorageLayout* pStorageLayout, DWORD nEntries, DWORD glfInterleavedFlag); \
5510     HRESULT (STDMETHODCALLTYPE *BeginMonitor)(INTERFACE *This); \
5511     HRESULT (STDMETHODCALLTYPE *EndMonitor)(INTERFACE *This); \
5512     HRESULT (STDMETHODCALLTYPE *ReLayoutDocfile)(INTERFACE *This, OLECHAR* pwcsNewDfName); \
5513     HRESULT (STDMETHODCALLTYPE *ReLayoutDocfileOnILockBytes)(INTERFACE *This, ILockBytes* pILockBytes);
5514
5515 /*** IUnknown methods ***/
5516 #define ILayoutStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5517 #define ILayoutStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
5518 #define ILayoutStorage_Release(p) (p)->lpVtbl->Release(p)
5519 /*** ILayoutStorage methods ***/
5520 #define ILayoutStorage_LayoutScript(p,a,b,c) (p)->lpVtbl->LayoutScript(p,a,b,c)
5521 #define ILayoutStorage_BeginMonitor(p) (p)->lpVtbl->BeginMonitor(p)
5522 #define ILayoutStorage_EndMonitor(p) (p)->lpVtbl->EndMonitor(p)
5523 #define ILayoutStorage_ReLayoutDocfile(p,a) (p)->lpVtbl->ReLayoutDocfile(p,a)
5524 #define ILayoutStorage_ReLayoutDocfileOnILockBytes(p,a) (p)->lpVtbl->ReLayoutDocfileOnILockBytes(p,a)
5525
5526 #endif
5527
5528 HRESULT CALLBACK ILayoutStorage_LayoutScript_Proxy(
5529     ILayoutStorage* This,
5530     StorageLayout* pStorageLayout,
5531     DWORD nEntries,
5532     DWORD glfInterleavedFlag);
5533 void __RPC_STUB ILayoutStorage_LayoutScript_Stub(
5534     struct IRpcStubBuffer* This,
5535     struct IRpcChannelBuffer* pRpcChannelBuffer,
5536     PRPC_MESSAGE pRpcMessage,
5537     DWORD* pdwStubPhase);
5538 HRESULT CALLBACK ILayoutStorage_BeginMonitor_Proxy(
5539     ILayoutStorage* This);
5540 void __RPC_STUB ILayoutStorage_BeginMonitor_Stub(
5541     struct IRpcStubBuffer* This,
5542     struct IRpcChannelBuffer* pRpcChannelBuffer,
5543     PRPC_MESSAGE pRpcMessage,
5544     DWORD* pdwStubPhase);
5545 HRESULT CALLBACK ILayoutStorage_EndMonitor_Proxy(
5546     ILayoutStorage* This);
5547 void __RPC_STUB ILayoutStorage_EndMonitor_Stub(
5548     struct IRpcStubBuffer* This,
5549     struct IRpcChannelBuffer* pRpcChannelBuffer,
5550     PRPC_MESSAGE pRpcMessage,
5551     DWORD* pdwStubPhase);
5552 HRESULT CALLBACK ILayoutStorage_ReLayoutDocfile_Proxy(
5553     ILayoutStorage* This,
5554     OLECHAR* pwcsNewDfName);
5555 void __RPC_STUB ILayoutStorage_ReLayoutDocfile_Stub(
5556     struct IRpcStubBuffer* This,
5557     struct IRpcChannelBuffer* pRpcChannelBuffer,
5558     PRPC_MESSAGE pRpcMessage,
5559     DWORD* pdwStubPhase);
5560 HRESULT CALLBACK ILayoutStorage_ReLayoutDocfileOnILockBytes_Proxy(
5561     ILayoutStorage* This,
5562     ILockBytes* pILockBytes);
5563 void __RPC_STUB ILayoutStorage_ReLayoutDocfileOnILockBytes_Stub(
5564     struct IRpcStubBuffer* This,
5565     struct IRpcChannelBuffer* pRpcChannelBuffer,
5566     PRPC_MESSAGE pRpcMessage,
5567     DWORD* pdwStubPhase);
5568
5569 typedef struct IEnumFORMATETC IEnumFORMATETC;
5570 typedef IEnumFORMATETC *LPENUMFORMATETC;
5571
5572 typedef struct tagDVTARGETDEVICE {
5573     DWORD tdSize;
5574     WORD tdDriverNameOffset;
5575     WORD tdDeviceNameOffset;
5576     WORD tdPortNameOffset;
5577     WORD tdExtDevmodeOffset;
5578     BYTE tdData[1];
5579 } DVTARGETDEVICE;
5580
5581 typedef CLIPFORMAT *LPCLIPFORMAT;
5582
5583 typedef struct tagFORMATETC {
5584     CLIPFORMAT cfFormat;
5585     DVTARGETDEVICE *ptd;
5586     DWORD dwAspect;
5587     LONG lindex;
5588     DWORD tymed;
5589 } FORMATETC, *LPFORMATETC;
5590
5591 /*****************************************************************************
5592  * IEnumFORMATETC interface
5593  */
5594 DEFINE_GUID(IID_IEnumFORMATETC, 0x00000103, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
5595 #if defined(__cplusplus) && !defined(CINTERFACE)
5596 struct IEnumFORMATETC: IUnknown {
5597
5598     virtual HRESULT STDMETHODCALLTYPE Next(
5599         ULONG celt,
5600         FORMATETC* rgelt,
5601         ULONG* pceltFetched) = 0;
5602
5603     virtual HRESULT STDMETHODCALLTYPE Skip(
5604         ULONG celt) = 0;
5605
5606     virtual HRESULT STDMETHODCALLTYPE Reset(
5607         ) = 0;
5608
5609     virtual HRESULT STDMETHODCALLTYPE Clone(
5610         IEnumFORMATETC** ppenum) = 0;
5611
5612 } ICOM_COM_INTERFACE_ATTRIBUTE;
5613 #else
5614 typedef struct IEnumFORMATETCVtbl IEnumFORMATETCVtbl;
5615 struct IEnumFORMATETC {
5616     const IEnumFORMATETCVtbl* lpVtbl;
5617 };
5618 struct IEnumFORMATETCVtbl {
5619     ICOM_MSVTABLE_COMPAT_FIELDS
5620
5621     /*** IUnknown methods ***/
5622     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5623         IEnumFORMATETC* This,
5624         REFIID riid,
5625         void** ppvObject);
5626
5627     ULONG (STDMETHODCALLTYPE *AddRef)(
5628         IEnumFORMATETC* This);
5629
5630     ULONG (STDMETHODCALLTYPE *Release)(
5631         IEnumFORMATETC* This);
5632
5633     /*** IEnumFORMATETC methods ***/
5634     HRESULT (STDMETHODCALLTYPE *Next)(
5635         IEnumFORMATETC* This,
5636         ULONG celt,
5637         FORMATETC* rgelt,
5638         ULONG* pceltFetched);
5639
5640     HRESULT (STDMETHODCALLTYPE *Skip)(
5641         IEnumFORMATETC* This,
5642         ULONG celt);
5643
5644     HRESULT (STDMETHODCALLTYPE *Reset)(
5645         IEnumFORMATETC* This);
5646
5647     HRESULT (STDMETHODCALLTYPE *Clone)(
5648         IEnumFORMATETC* This,
5649         IEnumFORMATETC** ppenum);
5650
5651 };
5652
5653 #define IEnumFORMATETC_IMETHODS \
5654     /*** IUnknown methods ***/ \
5655     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5656     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5657     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5658     /*** IEnumFORMATETC methods ***/ \
5659     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, FORMATETC* rgelt, ULONG* pceltFetched); \
5660     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
5661     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
5662     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumFORMATETC** ppenum);
5663
5664 /*** IUnknown methods ***/
5665 #define IEnumFORMATETC_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5666 #define IEnumFORMATETC_AddRef(p) (p)->lpVtbl->AddRef(p)
5667 #define IEnumFORMATETC_Release(p) (p)->lpVtbl->Release(p)
5668 /*** IEnumFORMATETC methods ***/
5669 #define IEnumFORMATETC_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
5670 #define IEnumFORMATETC_Skip(p,a) (p)->lpVtbl->Skip(p,a)
5671 #define IEnumFORMATETC_Reset(p) (p)->lpVtbl->Reset(p)
5672 #define IEnumFORMATETC_Clone(p,a) (p)->lpVtbl->Clone(p,a)
5673
5674 #endif
5675
5676 HRESULT CALLBACK IEnumFORMATETC_RemoteNext_Proxy(
5677     IEnumFORMATETC* This,
5678     ULONG celt,
5679     FORMATETC* rgelt,
5680     ULONG* pceltFetched);
5681 void __RPC_STUB IEnumFORMATETC_RemoteNext_Stub(
5682     struct IRpcStubBuffer* This,
5683     struct IRpcChannelBuffer* pRpcChannelBuffer,
5684     PRPC_MESSAGE pRpcMessage,
5685     DWORD* pdwStubPhase);
5686 HRESULT CALLBACK IEnumFORMATETC_Next_Proxy(
5687     IEnumFORMATETC* This,
5688     ULONG celt,
5689     FORMATETC* rgelt,
5690     ULONG* pceltFetched);
5691 HRESULT __RPC_STUB IEnumFORMATETC_Next_Stub(
5692     IEnumFORMATETC* This,
5693     ULONG celt,
5694     FORMATETC* rgelt,
5695     ULONG* pceltFetched);
5696 HRESULT CALLBACK IEnumFORMATETC_Skip_Proxy(
5697     IEnumFORMATETC* This,
5698     ULONG celt);
5699 void __RPC_STUB IEnumFORMATETC_Skip_Stub(
5700     struct IRpcStubBuffer* This,
5701     struct IRpcChannelBuffer* pRpcChannelBuffer,
5702     PRPC_MESSAGE pRpcMessage,
5703     DWORD* pdwStubPhase);
5704 HRESULT CALLBACK IEnumFORMATETC_Reset_Proxy(
5705     IEnumFORMATETC* This);
5706 void __RPC_STUB IEnumFORMATETC_Reset_Stub(
5707     struct IRpcStubBuffer* This,
5708     struct IRpcChannelBuffer* pRpcChannelBuffer,
5709     PRPC_MESSAGE pRpcMessage,
5710     DWORD* pdwStubPhase);
5711 HRESULT CALLBACK IEnumFORMATETC_Clone_Proxy(
5712     IEnumFORMATETC* This,
5713     IEnumFORMATETC** ppenum);
5714 void __RPC_STUB IEnumFORMATETC_Clone_Stub(
5715     struct IRpcStubBuffer* This,
5716     struct IRpcChannelBuffer* pRpcChannelBuffer,
5717     PRPC_MESSAGE pRpcMessage,
5718     DWORD* pdwStubPhase);
5719
5720 typedef struct IEnumSTATDATA IEnumSTATDATA;
5721 typedef IEnumSTATDATA *LPENUMSTATDATA;
5722
5723 typedef enum tagADVF {
5724     ADVF_NODATA = 1,
5725     ADVF_PRIMEFIRST = 2,
5726     ADVF_ONLYONCE = 4,
5727     ADVF_DATAONSTOP = 64,
5728     ADVFCACHE_NOHANDLER = 8,
5729     ADVFCACHE_FORCEBUILTIN = 16,
5730     ADVFCACHE_ONSAVE = 32
5731 } ADVF;
5732
5733 typedef struct tagSTATDATA {
5734     FORMATETC formatetc;
5735     DWORD advf;
5736     IAdviseSink *pAdvSink;
5737     DWORD dwConnection;
5738 } STATDATA, *LPSTATDATA;
5739
5740 /*****************************************************************************
5741  * IEnumSTATDATA interface
5742  */
5743 DEFINE_GUID(IID_IEnumSTATDATA, 0x00000105, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
5744 #if defined(__cplusplus) && !defined(CINTERFACE)
5745 struct IEnumSTATDATA: IUnknown {
5746
5747     virtual HRESULT STDMETHODCALLTYPE Next(
5748         ULONG celt,
5749         STATDATA* rgelt,
5750         ULONG* pceltFetched) = 0;
5751
5752     virtual HRESULT STDMETHODCALLTYPE Skip(
5753         ULONG celt) = 0;
5754
5755     virtual HRESULT STDMETHODCALLTYPE Reset(
5756         ) = 0;
5757
5758     virtual HRESULT STDMETHODCALLTYPE Clone(
5759         IEnumSTATDATA** ppenum) = 0;
5760
5761 } ICOM_COM_INTERFACE_ATTRIBUTE;
5762 #else
5763 typedef struct IEnumSTATDATAVtbl IEnumSTATDATAVtbl;
5764 struct IEnumSTATDATA {
5765     const IEnumSTATDATAVtbl* lpVtbl;
5766 };
5767 struct IEnumSTATDATAVtbl {
5768     ICOM_MSVTABLE_COMPAT_FIELDS
5769
5770     /*** IUnknown methods ***/
5771     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
5772         IEnumSTATDATA* This,
5773         REFIID riid,
5774         void** ppvObject);
5775
5776     ULONG (STDMETHODCALLTYPE *AddRef)(
5777         IEnumSTATDATA* This);
5778
5779     ULONG (STDMETHODCALLTYPE *Release)(
5780         IEnumSTATDATA* This);
5781
5782     /*** IEnumSTATDATA methods ***/
5783     HRESULT (STDMETHODCALLTYPE *Next)(
5784         IEnumSTATDATA* This,
5785         ULONG celt,
5786         STATDATA* rgelt,
5787         ULONG* pceltFetched);
5788
5789     HRESULT (STDMETHODCALLTYPE *Skip)(
5790         IEnumSTATDATA* This,
5791         ULONG celt);
5792
5793     HRESULT (STDMETHODCALLTYPE *Reset)(
5794         IEnumSTATDATA* This);
5795
5796     HRESULT (STDMETHODCALLTYPE *Clone)(
5797         IEnumSTATDATA* This,
5798         IEnumSTATDATA** ppenum);
5799
5800 };
5801
5802 #define IEnumSTATDATA_IMETHODS \
5803     /*** IUnknown methods ***/ \
5804     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
5805     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
5806     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
5807     /*** IEnumSTATDATA methods ***/ \
5808     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, STATDATA* rgelt, ULONG* pceltFetched); \
5809     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
5810     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
5811     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumSTATDATA** ppenum);
5812
5813 /*** IUnknown methods ***/
5814 #define IEnumSTATDATA_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
5815 #define IEnumSTATDATA_AddRef(p) (p)->lpVtbl->AddRef(p)
5816 #define IEnumSTATDATA_Release(p) (p)->lpVtbl->Release(p)
5817 /*** IEnumSTATDATA methods ***/
5818 #define IEnumSTATDATA_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
5819 #define IEnumSTATDATA_Skip(p,a) (p)->lpVtbl->Skip(p,a)
5820 #define IEnumSTATDATA_Reset(p) (p)->lpVtbl->Reset(p)
5821 #define IEnumSTATDATA_Clone(p,a) (p)->lpVtbl->Clone(p,a)
5822
5823 #endif
5824
5825 HRESULT CALLBACK IEnumSTATDATA_RemoteNext_Proxy(
5826     IEnumSTATDATA* This,
5827     ULONG celt,
5828     STATDATA* rgelt,
5829     ULONG* pceltFetched);
5830 void __RPC_STUB IEnumSTATDATA_RemoteNext_Stub(
5831     struct IRpcStubBuffer* This,
5832     struct IRpcChannelBuffer* pRpcChannelBuffer,
5833     PRPC_MESSAGE pRpcMessage,
5834     DWORD* pdwStubPhase);
5835 HRESULT CALLBACK IEnumSTATDATA_Next_Proxy(
5836     IEnumSTATDATA* This,
5837     ULONG celt,
5838     STATDATA* rgelt,
5839     ULONG* pceltFetched);
5840 HRESULT __RPC_STUB IEnumSTATDATA_Next_Stub(
5841     IEnumSTATDATA* This,
5842     ULONG celt,
5843     STATDATA* rgelt,
5844     ULONG* pceltFetched);
5845 HRESULT CALLBACK IEnumSTATDATA_Skip_Proxy(
5846     IEnumSTATDATA* This,
5847     ULONG celt);
5848 void __RPC_STUB IEnumSTATDATA_Skip_Stub(
5849     struct IRpcStubBuffer* This,
5850     struct IRpcChannelBuffer* pRpcChannelBuffer,
5851     PRPC_MESSAGE pRpcMessage,
5852     DWORD* pdwStubPhase);
5853 HRESULT CALLBACK IEnumSTATDATA_Reset_Proxy(
5854     IEnumSTATDATA* This);
5855 void __RPC_STUB IEnumSTATDATA_Reset_Stub(
5856     struct IRpcStubBuffer* This,
5857     struct IRpcChannelBuffer* pRpcChannelBuffer,
5858     PRPC_MESSAGE pRpcMessage,
5859     DWORD* pdwStubPhase);
5860 HRESULT CALLBACK IEnumSTATDATA_Clone_Proxy(
5861     IEnumSTATDATA* This,
5862     IEnumSTATDATA** ppenum);
5863 void __RPC_STUB IEnumSTATDATA_Clone_Stub(
5864     struct IRpcStubBuffer* This,
5865     struct IRpcChannelBuffer* pRpcChannelBuffer,
5866     PRPC_MESSAGE pRpcMessage,
5867     DWORD* pdwStubPhase);
5868
5869 typedef IAdviseSink *LPADVISESINK;
5870
5871 typedef enum tagTYMED {
5872     TYMED_HGLOBAL = 1,
5873     TYMED_FILE = 2,
5874     TYMED_ISTREAM = 4,
5875     TYMED_ISTORAGE = 8,
5876     TYMED_GDI = 16,
5877     TYMED_MFPICT = 32,
5878     TYMED_ENHMF = 64,
5879     TYMED_NULL = 0
5880 } TYMED;
5881
5882 typedef struct tagRemSTGMEDIUM {
5883     DWORD tymed;
5884     DWORD dwHandleType;
5885     unsigned long pData;
5886     unsigned long pUnkForRelease;
5887     unsigned long cbData;
5888     byte data[1];
5889 } RemSTGMEDIUM;
5890
5891 typedef struct tagSTGMEDIUM {
5892     DWORD tymed;
5893     union {
5894         HBITMAP hBitmap;
5895         HMETAFILEPICT hMetaFilePict;
5896         HENHMETAFILE hEnhMetaFile;
5897         HGLOBAL hGlobal;
5898         LPOLESTR lpszFileName;
5899         IStream *pstm;
5900         IStorage *pstg;
5901     } DUMMYUNIONNAME;
5902     IUnknown *pUnkForRelease;
5903 } uSTGMEDIUM;
5904
5905 typedef struct _GDI_OBJECT {
5906     DWORD ObjectType;
5907     union {
5908         wireHBITMAP hBitmap;
5909         wireHPALETTE hPalette;
5910         wireHGLOBAL hGeneric;
5911     } u;
5912 } GDI_OBJECT;
5913
5914 typedef struct _userSTGMEDIUM {
5915     struct _STGMEDIUM_UNION {
5916         DWORD tymed;
5917         union {
5918             wireHMETAFILEPICT hMetaFilePict;
5919             wireHENHMETAFILE hHEnhMetaFile;
5920             GDI_OBJECT *hGdiHandle;
5921             wireHGLOBAL hGlobal;
5922             LPOLESTR lpszFileName;
5923             BYTE_BLOB *pstm;
5924             BYTE_BLOB *pstg;
5925         } u;
5926     } DUMMYSTRUCTNAME;
5927     IUnknown *pUnkForRelease;
5928 } userSTGMEDIUM;
5929
5930 typedef userSTGMEDIUM *wireSTGMEDIUM;
5931
5932 typedef uSTGMEDIUM STGMEDIUM;
5933 unsigned long   __RPC_USER STGMEDIUM_UserSize     (unsigned long *, unsigned long,   STGMEDIUM *);
5934 unsigned char * __RPC_USER STGMEDIUM_UserMarshal  (unsigned long *, unsigned char *, STGMEDIUM *);
5935 unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, STGMEDIUM *);
5936 void            __RPC_USER STGMEDIUM_UserFree     (unsigned long *, STGMEDIUM *);
5937
5938 typedef userSTGMEDIUM *wireASYNC_STGMEDIUM;
5939
5940 typedef STGMEDIUM ASYNC_STGMEDIUM;
5941 unsigned long   __RPC_USER ASYNC_STGMEDIUM_UserSize     (unsigned long *, unsigned long,   ASYNC_STGMEDIUM *);
5942 unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserMarshal  (unsigned long *, unsigned char *, ASYNC_STGMEDIUM *);
5943 unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, ASYNC_STGMEDIUM *);
5944 void            __RPC_USER ASYNC_STGMEDIUM_UserFree     (unsigned long *, ASYNC_STGMEDIUM *);
5945
5946 typedef STGMEDIUM *LPSTGMEDIUM;
5947
5948 typedef struct _userFLAG_STGMEDIUM {
5949     long ContextFlags;
5950     long fPassOwnership;
5951     userSTGMEDIUM Stgmed;
5952 } userFLAG_STGMEDIUM;
5953
5954 typedef userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
5955
5956 typedef struct _FLAG_STGMEDIUM {
5957     long ContextFlags;
5958     long fPassOwnership;
5959     STGMEDIUM Stgmed;
5960 } FLAG_STGMEDIUM;
5961 unsigned long   __RPC_USER FLAG_STGMEDIUM_UserSize     (unsigned long *, unsigned long,   FLAG_STGMEDIUM *);
5962 unsigned char * __RPC_USER FLAG_STGMEDIUM_UserMarshal  (unsigned long *, unsigned char *, FLAG_STGMEDIUM *);
5963 unsigned char * __RPC_USER FLAG_STGMEDIUM_UserUnmarshal(unsigned long *, unsigned char *, FLAG_STGMEDIUM *);
5964 void            __RPC_USER FLAG_STGMEDIUM_UserFree     (unsigned long *, FLAG_STGMEDIUM *);
5965
5966 /*****************************************************************************
5967  * IAdviseSink interface
5968  */
5969 DEFINE_GUID(IID_IAdviseSink, 0x0000010f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
5970 #if defined(__cplusplus) && !defined(CINTERFACE)
5971 struct IAdviseSink: IUnknown {
5972
5973     virtual void STDMETHODCALLTYPE OnDataChange(
5974         FORMATETC* pFormatetc,
5975         STGMEDIUM* pStgmed) = 0;
5976
5977     virtual void STDMETHODCALLTYPE OnViewChange(
5978         DWORD dwAspect,
5979         LONG lindex) = 0;
5980
5981     virtual void STDMETHODCALLTYPE OnRename(
5982         IMoniker* pmk) = 0;
5983
5984     virtual void STDMETHODCALLTYPE OnSave(
5985         ) = 0;
5986
5987     virtual void STDMETHODCALLTYPE OnClose(
5988         ) = 0;
5989
5990 } ICOM_COM_INTERFACE_ATTRIBUTE;
5991 #else
5992 typedef struct IAdviseSinkVtbl IAdviseSinkVtbl;
5993 struct IAdviseSink {
5994     const IAdviseSinkVtbl* lpVtbl;
5995 };
5996 struct IAdviseSinkVtbl {
5997     ICOM_MSVTABLE_COMPAT_FIELDS
5998
5999     /*** IUnknown methods ***/
6000     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6001         IAdviseSink* This,
6002         REFIID riid,
6003         void** ppvObject);
6004
6005     ULONG (STDMETHODCALLTYPE *AddRef)(
6006         IAdviseSink* This);
6007
6008     ULONG (STDMETHODCALLTYPE *Release)(
6009         IAdviseSink* This);
6010
6011     /*** IAdviseSink methods ***/
6012     void (STDMETHODCALLTYPE *OnDataChange)(
6013         IAdviseSink* This,
6014         FORMATETC* pFormatetc,
6015         STGMEDIUM* pStgmed);
6016
6017     void (STDMETHODCALLTYPE *OnViewChange)(
6018         IAdviseSink* This,
6019         DWORD dwAspect,
6020         LONG lindex);
6021
6022     void (STDMETHODCALLTYPE *OnRename)(
6023         IAdviseSink* This,
6024         IMoniker* pmk);
6025
6026     void (STDMETHODCALLTYPE *OnSave)(
6027         IAdviseSink* This);
6028
6029     void (STDMETHODCALLTYPE *OnClose)(
6030         IAdviseSink* This);
6031
6032 };
6033
6034 #define IAdviseSink_IMETHODS \
6035     /*** IUnknown methods ***/ \
6036     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6037     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6038     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6039     /*** IAdviseSink methods ***/ \
6040     void (STDMETHODCALLTYPE *OnDataChange)(INTERFACE *This, FORMATETC* pFormatetc, STGMEDIUM* pStgmed); \
6041     void (STDMETHODCALLTYPE *OnViewChange)(INTERFACE *This, DWORD dwAspect, LONG lindex); \
6042     void (STDMETHODCALLTYPE *OnRename)(INTERFACE *This, IMoniker* pmk); \
6043     void (STDMETHODCALLTYPE *OnSave)(INTERFACE *This); \
6044     void (STDMETHODCALLTYPE *OnClose)(INTERFACE *This);
6045
6046 /*** IUnknown methods ***/
6047 #define IAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6048 #define IAdviseSink_AddRef(p) (p)->lpVtbl->AddRef(p)
6049 #define IAdviseSink_Release(p) (p)->lpVtbl->Release(p)
6050 /*** IAdviseSink methods ***/
6051 #define IAdviseSink_OnDataChange(p,a,b) (p)->lpVtbl->OnDataChange(p,a,b)
6052 #define IAdviseSink_OnViewChange(p,a,b) (p)->lpVtbl->OnViewChange(p,a,b)
6053 #define IAdviseSink_OnRename(p,a) (p)->lpVtbl->OnRename(p,a)
6054 #define IAdviseSink_OnSave(p) (p)->lpVtbl->OnSave(p)
6055 #define IAdviseSink_OnClose(p) (p)->lpVtbl->OnClose(p)
6056
6057 #endif
6058
6059 HRESULT CALLBACK IAdviseSink_RemoteOnDataChange_Proxy(
6060     IAdviseSink* This,
6061     IAsyncManager** ppIAM,
6062     FORMATETC* pFormatetc,
6063     ASYNC_STGMEDIUM* pStgmed);
6064 void __RPC_STUB IAdviseSink_RemoteOnDataChange_Stub(
6065     struct IRpcStubBuffer* This,
6066     struct IRpcChannelBuffer* pRpcChannelBuffer,
6067     PRPC_MESSAGE pRpcMessage,
6068     DWORD* pdwStubPhase);
6069 void CALLBACK IAdviseSink_OnDataChange_Proxy(
6070     IAdviseSink* This,
6071     FORMATETC* pFormatetc,
6072     STGMEDIUM* pStgmed);
6073 HRESULT __RPC_STUB IAdviseSink_OnDataChange_Stub(
6074     IAdviseSink* This,
6075     IAsyncManager** ppIAM,
6076     FORMATETC* pFormatetc,
6077     ASYNC_STGMEDIUM* pStgmed);
6078 HRESULT CALLBACK IAdviseSink_RemoteOnViewChange_Proxy(
6079     IAdviseSink* This,
6080     IAsyncManager** ppIAM,
6081     DWORD dwAspect,
6082     LONG lindex);
6083 void __RPC_STUB IAdviseSink_RemoteOnViewChange_Stub(
6084     struct IRpcStubBuffer* This,
6085     struct IRpcChannelBuffer* pRpcChannelBuffer,
6086     PRPC_MESSAGE pRpcMessage,
6087     DWORD* pdwStubPhase);
6088 void CALLBACK IAdviseSink_OnViewChange_Proxy(
6089     IAdviseSink* This,
6090     DWORD dwAspect,
6091     LONG lindex);
6092 HRESULT __RPC_STUB IAdviseSink_OnViewChange_Stub(
6093     IAdviseSink* This,
6094     IAsyncManager** ppIAM,
6095     DWORD dwAspect,
6096     LONG lindex);
6097 HRESULT CALLBACK IAdviseSink_RemoteOnRename_Proxy(
6098     IAdviseSink* This,
6099     IAsyncManager** ppIAM,
6100     IMoniker* pmk);
6101 void __RPC_STUB IAdviseSink_RemoteOnRename_Stub(
6102     struct IRpcStubBuffer* This,
6103     struct IRpcChannelBuffer* pRpcChannelBuffer,
6104     PRPC_MESSAGE pRpcMessage,
6105     DWORD* pdwStubPhase);
6106 void CALLBACK IAdviseSink_OnRename_Proxy(
6107     IAdviseSink* This,
6108     IMoniker* pmk);
6109 HRESULT __RPC_STUB IAdviseSink_OnRename_Stub(
6110     IAdviseSink* This,
6111     IAsyncManager** ppIAM,
6112     IMoniker* pmk);
6113 HRESULT CALLBACK IAdviseSink_RemoteOnSave_Proxy(
6114     IAdviseSink* This,
6115     IAsyncManager** ppIAM);
6116 void __RPC_STUB IAdviseSink_RemoteOnSave_Stub(
6117     struct IRpcStubBuffer* This,
6118     struct IRpcChannelBuffer* pRpcChannelBuffer,
6119     PRPC_MESSAGE pRpcMessage,
6120     DWORD* pdwStubPhase);
6121 void CALLBACK IAdviseSink_OnSave_Proxy(
6122     IAdviseSink* This);
6123 HRESULT __RPC_STUB IAdviseSink_OnSave_Stub(
6124     IAdviseSink* This,
6125     IAsyncManager** ppIAM);
6126 HRESULT CALLBACK IAdviseSink_RemoteOnClose_Proxy(
6127     IAdviseSink* This);
6128 void __RPC_STUB IAdviseSink_RemoteOnClose_Stub(
6129     struct IRpcStubBuffer* This,
6130     struct IRpcChannelBuffer* pRpcChannelBuffer,
6131     PRPC_MESSAGE pRpcMessage,
6132     DWORD* pdwStubPhase);
6133 void CALLBACK IAdviseSink_OnClose_Proxy(
6134     IAdviseSink* This);
6135 HRESULT __RPC_STUB IAdviseSink_OnClose_Stub(
6136     IAdviseSink* This);
6137
6138 typedef struct IAdviseSink2 IAdviseSink2;
6139 typedef IAdviseSink2 *LPADVISESINK2;
6140
6141 /*****************************************************************************
6142  * IAdviseSink2 interface
6143  */
6144 DEFINE_GUID(IID_IAdviseSink2, 0x00000125, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
6145 #if defined(__cplusplus) && !defined(CINTERFACE)
6146 struct IAdviseSink2: IAdviseSink {
6147
6148     virtual void STDMETHODCALLTYPE OnLinkSrcChange(
6149         IMoniker* pmk) = 0;
6150
6151 } ICOM_COM_INTERFACE_ATTRIBUTE;
6152 #else
6153 typedef struct IAdviseSink2Vtbl IAdviseSink2Vtbl;
6154 struct IAdviseSink2 {
6155     const IAdviseSink2Vtbl* lpVtbl;
6156 };
6157 struct IAdviseSink2Vtbl {
6158     ICOM_MSVTABLE_COMPAT_FIELDS
6159
6160     /*** IUnknown methods ***/
6161     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6162         IAdviseSink2* This,
6163         REFIID riid,
6164         void** ppvObject);
6165
6166     ULONG (STDMETHODCALLTYPE *AddRef)(
6167         IAdviseSink2* This);
6168
6169     ULONG (STDMETHODCALLTYPE *Release)(
6170         IAdviseSink2* This);
6171
6172     /*** IAdviseSink methods ***/
6173     void (STDMETHODCALLTYPE *OnDataChange)(
6174         IAdviseSink2* This,
6175         FORMATETC* pFormatetc,
6176         STGMEDIUM* pStgmed);
6177
6178     void (STDMETHODCALLTYPE *OnViewChange)(
6179         IAdviseSink2* This,
6180         DWORD dwAspect,
6181         LONG lindex);
6182
6183     void (STDMETHODCALLTYPE *OnRename)(
6184         IAdviseSink2* This,
6185         IMoniker* pmk);
6186
6187     void (STDMETHODCALLTYPE *OnSave)(
6188         IAdviseSink2* This);
6189
6190     void (STDMETHODCALLTYPE *OnClose)(
6191         IAdviseSink2* This);
6192
6193     /*** IAdviseSink2 methods ***/
6194     void (STDMETHODCALLTYPE *OnLinkSrcChange)(
6195         IAdviseSink2* This,
6196         IMoniker* pmk);
6197
6198 };
6199
6200 #define IAdviseSink2_IMETHODS \
6201     /*** IUnknown methods ***/ \
6202     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6203     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6204     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6205     /*** IAdviseSink methods ***/ \
6206     void (STDMETHODCALLTYPE *OnDataChange)(INTERFACE *This, FORMATETC* pFormatetc, STGMEDIUM* pStgmed); \
6207     void (STDMETHODCALLTYPE *OnViewChange)(INTERFACE *This, DWORD dwAspect, LONG lindex); \
6208     void (STDMETHODCALLTYPE *OnRename)(INTERFACE *This, IMoniker* pmk); \
6209     void (STDMETHODCALLTYPE *OnSave)(INTERFACE *This); \
6210     void (STDMETHODCALLTYPE *OnClose)(INTERFACE *This); \
6211     /*** IAdviseSink2 methods ***/ \
6212     void (STDMETHODCALLTYPE *OnLinkSrcChange)(INTERFACE *This, IMoniker* pmk);
6213
6214 /*** IUnknown methods ***/
6215 #define IAdviseSink2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6216 #define IAdviseSink2_AddRef(p) (p)->lpVtbl->AddRef(p)
6217 #define IAdviseSink2_Release(p) (p)->lpVtbl->Release(p)
6218 /*** IAdviseSink methods ***/
6219 #define IAdviseSink2_OnDataChange(p,a,b) (p)->lpVtbl->OnDataChange(p,a,b)
6220 #define IAdviseSink2_OnViewChange(p,a,b) (p)->lpVtbl->OnViewChange(p,a,b)
6221 #define IAdviseSink2_OnRename(p,a) (p)->lpVtbl->OnRename(p,a)
6222 #define IAdviseSink2_OnSave(p) (p)->lpVtbl->OnSave(p)
6223 #define IAdviseSink2_OnClose(p) (p)->lpVtbl->OnClose(p)
6224 /*** IAdviseSink2 methods ***/
6225 #define IAdviseSink2_OnLinkSrcChange(p,a) (p)->lpVtbl->OnLinkSrcChange(p,a)
6226
6227 #endif
6228
6229 HRESULT CALLBACK IAdviseSink2_RemoteOnLinkSrcChange_Proxy(
6230     IAdviseSink2* This,
6231     IAsyncManager** ppIAM,
6232     IMoniker* pmk);
6233 void __RPC_STUB IAdviseSink2_RemoteOnLinkSrcChange_Stub(
6234     struct IRpcStubBuffer* This,
6235     struct IRpcChannelBuffer* pRpcChannelBuffer,
6236     PRPC_MESSAGE pRpcMessage,
6237     DWORD* pdwStubPhase);
6238 void CALLBACK IAdviseSink2_OnLinkSrcChange_Proxy(
6239     IAdviseSink2* This,
6240     IMoniker* pmk);
6241 HRESULT __RPC_STUB IAdviseSink2_OnLinkSrcChange_Stub(
6242     IAdviseSink2* This,
6243     IAsyncManager** ppIAM,
6244     IMoniker* pmk);
6245
6246 typedef struct IDataObject IDataObject;
6247 typedef IDataObject *LPDATAOBJECT;
6248
6249 typedef enum tagDATADIR {
6250     DATADIR_GET = 1,
6251     DATADIR_SET = 2
6252 } DATADIR;
6253
6254 /*****************************************************************************
6255  * IDataObject interface
6256  */
6257 DEFINE_GUID(IID_IDataObject, 0x0000010e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
6258 #if defined(__cplusplus) && !defined(CINTERFACE)
6259 struct IDataObject: IUnknown {
6260
6261     virtual HRESULT STDMETHODCALLTYPE GetData(
6262         FORMATETC* pformatetcIn,
6263         STGMEDIUM* pmedium) = 0;
6264
6265     virtual HRESULT STDMETHODCALLTYPE GetDataHere(
6266         FORMATETC* pformatetc,
6267         STGMEDIUM* pmedium) = 0;
6268
6269     virtual HRESULT STDMETHODCALLTYPE QueryGetData(
6270         FORMATETC* pformatetc) = 0;
6271
6272     virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(
6273         FORMATETC* pformatectIn,
6274         FORMATETC* pformatetcOut) = 0;
6275
6276     virtual HRESULT STDMETHODCALLTYPE SetData(
6277         FORMATETC* pformatetc,
6278         STGMEDIUM* pmedium,
6279         BOOL fRelease) = 0;
6280
6281     virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(
6282         DWORD dwDirection,
6283         IEnumFORMATETC** ppenumFormatEtc) = 0;
6284
6285     virtual HRESULT STDMETHODCALLTYPE DAdvise(
6286         FORMATETC* pformatetc,
6287         DWORD advf,
6288         IAdviseSink* pAdvSink,
6289         DWORD* pdwConnection) = 0;
6290
6291     virtual HRESULT STDMETHODCALLTYPE DUnadvise(
6292         DWORD dwConnection) = 0;
6293
6294     virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(
6295         IEnumSTATDATA** ppenumAdvise) = 0;
6296
6297 } ICOM_COM_INTERFACE_ATTRIBUTE;
6298 #else
6299 typedef struct IDataObjectVtbl IDataObjectVtbl;
6300 struct IDataObject {
6301     const IDataObjectVtbl* lpVtbl;
6302 };
6303 struct IDataObjectVtbl {
6304     ICOM_MSVTABLE_COMPAT_FIELDS
6305
6306     /*** IUnknown methods ***/
6307     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6308         IDataObject* This,
6309         REFIID riid,
6310         void** ppvObject);
6311
6312     ULONG (STDMETHODCALLTYPE *AddRef)(
6313         IDataObject* This);
6314
6315     ULONG (STDMETHODCALLTYPE *Release)(
6316         IDataObject* This);
6317
6318     /*** IDataObject methods ***/
6319     HRESULT (STDMETHODCALLTYPE *GetData)(
6320         IDataObject* This,
6321         FORMATETC* pformatetcIn,
6322         STGMEDIUM* pmedium);
6323
6324     HRESULT (STDMETHODCALLTYPE *GetDataHere)(
6325         IDataObject* This,
6326         FORMATETC* pformatetc,
6327         STGMEDIUM* pmedium);
6328
6329     HRESULT (STDMETHODCALLTYPE *QueryGetData)(
6330         IDataObject* This,
6331         FORMATETC* pformatetc);
6332
6333     HRESULT (STDMETHODCALLTYPE *GetCanonicalFormatEtc)(
6334         IDataObject* This,
6335         FORMATETC* pformatectIn,
6336         FORMATETC* pformatetcOut);
6337
6338     HRESULT (STDMETHODCALLTYPE *SetData)(
6339         IDataObject* This,
6340         FORMATETC* pformatetc,
6341         STGMEDIUM* pmedium,
6342         BOOL fRelease);
6343
6344     HRESULT (STDMETHODCALLTYPE *EnumFormatEtc)(
6345         IDataObject* This,
6346         DWORD dwDirection,
6347         IEnumFORMATETC** ppenumFormatEtc);
6348
6349     HRESULT (STDMETHODCALLTYPE *DAdvise)(
6350         IDataObject* This,
6351         FORMATETC* pformatetc,
6352         DWORD advf,
6353         IAdviseSink* pAdvSink,
6354         DWORD* pdwConnection);
6355
6356     HRESULT (STDMETHODCALLTYPE *DUnadvise)(
6357         IDataObject* This,
6358         DWORD dwConnection);
6359
6360     HRESULT (STDMETHODCALLTYPE *EnumDAdvise)(
6361         IDataObject* This,
6362         IEnumSTATDATA** ppenumAdvise);
6363
6364 };
6365
6366 #define IDataObject_IMETHODS \
6367     /*** IUnknown methods ***/ \
6368     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6369     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6370     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6371     /*** IDataObject methods ***/ \
6372     HRESULT (STDMETHODCALLTYPE *GetData)(INTERFACE *This, FORMATETC* pformatetcIn, STGMEDIUM* pmedium); \
6373     HRESULT (STDMETHODCALLTYPE *GetDataHere)(INTERFACE *This, FORMATETC* pformatetc, STGMEDIUM* pmedium); \
6374     HRESULT (STDMETHODCALLTYPE *QueryGetData)(INTERFACE *This, FORMATETC* pformatetc); \
6375     HRESULT (STDMETHODCALLTYPE *GetCanonicalFormatEtc)(INTERFACE *This, FORMATETC* pformatectIn, FORMATETC* pformatetcOut); \
6376     HRESULT (STDMETHODCALLTYPE *SetData)(INTERFACE *This, FORMATETC* pformatetc, STGMEDIUM* pmedium, BOOL fRelease); \
6377     HRESULT (STDMETHODCALLTYPE *EnumFormatEtc)(INTERFACE *This, DWORD dwDirection, IEnumFORMATETC** ppenumFormatEtc); \
6378     HRESULT (STDMETHODCALLTYPE *DAdvise)(INTERFACE *This, FORMATETC* pformatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection); \
6379     HRESULT (STDMETHODCALLTYPE *DUnadvise)(INTERFACE *This, DWORD dwConnection); \
6380     HRESULT (STDMETHODCALLTYPE *EnumDAdvise)(INTERFACE *This, IEnumSTATDATA** ppenumAdvise);
6381
6382 /*** IUnknown methods ***/
6383 #define IDataObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6384 #define IDataObject_AddRef(p) (p)->lpVtbl->AddRef(p)
6385 #define IDataObject_Release(p) (p)->lpVtbl->Release(p)
6386 /*** IDataObject methods ***/
6387 #define IDataObject_GetData(p,a,b) (p)->lpVtbl->GetData(p,a,b)
6388 #define IDataObject_GetDataHere(p,a,b) (p)->lpVtbl->GetDataHere(p,a,b)
6389 #define IDataObject_QueryGetData(p,a) (p)->lpVtbl->QueryGetData(p,a)
6390 #define IDataObject_GetCanonicalFormatEtc(p,a,b) (p)->lpVtbl->GetCanonicalFormatEtc(p,a,b)
6391 #define IDataObject_SetData(p,a,b,c) (p)->lpVtbl->SetData(p,a,b,c)
6392 #define IDataObject_EnumFormatEtc(p,a,b) (p)->lpVtbl->EnumFormatEtc(p,a,b)
6393 #define IDataObject_DAdvise(p,a,b,c,d) (p)->lpVtbl->DAdvise(p,a,b,c,d)
6394 #define IDataObject_DUnadvise(p,a) (p)->lpVtbl->DUnadvise(p,a)
6395 #define IDataObject_EnumDAdvise(p,a) (p)->lpVtbl->EnumDAdvise(p,a)
6396
6397 #endif
6398
6399 HRESULT CALLBACK IDataObject_RemoteGetData_Proxy(
6400     IDataObject* This,
6401     FORMATETC* pformatetcIn,
6402     STGMEDIUM* pRemoteMedium);
6403 void __RPC_STUB IDataObject_RemoteGetData_Stub(
6404     struct IRpcStubBuffer* This,
6405     struct IRpcChannelBuffer* pRpcChannelBuffer,
6406     PRPC_MESSAGE pRpcMessage,
6407     DWORD* pdwStubPhase);
6408 HRESULT CALLBACK IDataObject_GetData_Proxy(
6409     IDataObject* This,
6410     FORMATETC* pformatetcIn,
6411     STGMEDIUM* pmedium);
6412 HRESULT __RPC_STUB IDataObject_GetData_Stub(
6413     IDataObject* This,
6414     FORMATETC* pformatetcIn,
6415     STGMEDIUM* pRemoteMedium);
6416 HRESULT CALLBACK IDataObject_RemoteGetDataHere_Proxy(
6417     IDataObject* This,
6418     FORMATETC* pformatetc,
6419     STGMEDIUM* pRemoteMedium);
6420 void __RPC_STUB IDataObject_RemoteGetDataHere_Stub(
6421     struct IRpcStubBuffer* This,
6422     struct IRpcChannelBuffer* pRpcChannelBuffer,
6423     PRPC_MESSAGE pRpcMessage,
6424     DWORD* pdwStubPhase);
6425 HRESULT CALLBACK IDataObject_GetDataHere_Proxy(
6426     IDataObject* This,
6427     FORMATETC* pformatetc,
6428     STGMEDIUM* pmedium);
6429 HRESULT __RPC_STUB IDataObject_GetDataHere_Stub(
6430     IDataObject* This,
6431     FORMATETC* pformatetc,
6432     STGMEDIUM* pRemoteMedium);
6433 HRESULT CALLBACK IDataObject_QueryGetData_Proxy(
6434     IDataObject* This,
6435     FORMATETC* pformatetc);
6436 void __RPC_STUB IDataObject_QueryGetData_Stub(
6437     struct IRpcStubBuffer* This,
6438     struct IRpcChannelBuffer* pRpcChannelBuffer,
6439     PRPC_MESSAGE pRpcMessage,
6440     DWORD* pdwStubPhase);
6441 HRESULT CALLBACK IDataObject_GetCanonicalFormatEtc_Proxy(
6442     IDataObject* This,
6443     FORMATETC* pformatectIn,
6444     FORMATETC* pformatetcOut);
6445 void __RPC_STUB IDataObject_GetCanonicalFormatEtc_Stub(
6446     struct IRpcStubBuffer* This,
6447     struct IRpcChannelBuffer* pRpcChannelBuffer,
6448     PRPC_MESSAGE pRpcMessage,
6449     DWORD* pdwStubPhase);
6450 HRESULT CALLBACK IDataObject_RemoteSetData_Proxy(
6451     IDataObject* This,
6452     FORMATETC* pformatetc,
6453     FLAG_STGMEDIUM* pmedium,
6454     BOOL fRelease);
6455 void __RPC_STUB IDataObject_RemoteSetData_Stub(
6456     struct IRpcStubBuffer* This,
6457     struct IRpcChannelBuffer* pRpcChannelBuffer,
6458     PRPC_MESSAGE pRpcMessage,
6459     DWORD* pdwStubPhase);
6460 HRESULT CALLBACK IDataObject_SetData_Proxy(
6461     IDataObject* This,
6462     FORMATETC* pformatetc,
6463     STGMEDIUM* pmedium,
6464     BOOL fRelease);
6465 HRESULT __RPC_STUB IDataObject_SetData_Stub(
6466     IDataObject* This,
6467     FORMATETC* pformatetc,
6468     FLAG_STGMEDIUM* pmedium,
6469     BOOL fRelease);
6470 HRESULT CALLBACK IDataObject_EnumFormatEtc_Proxy(
6471     IDataObject* This,
6472     DWORD dwDirection,
6473     IEnumFORMATETC** ppenumFormatEtc);
6474 void __RPC_STUB IDataObject_EnumFormatEtc_Stub(
6475     struct IRpcStubBuffer* This,
6476     struct IRpcChannelBuffer* pRpcChannelBuffer,
6477     PRPC_MESSAGE pRpcMessage,
6478     DWORD* pdwStubPhase);
6479 HRESULT CALLBACK IDataObject_DAdvise_Proxy(
6480     IDataObject* This,
6481     FORMATETC* pformatetc,
6482     DWORD advf,
6483     IAdviseSink* pAdvSink,
6484     DWORD* pdwConnection);
6485 void __RPC_STUB IDataObject_DAdvise_Stub(
6486     struct IRpcStubBuffer* This,
6487     struct IRpcChannelBuffer* pRpcChannelBuffer,
6488     PRPC_MESSAGE pRpcMessage,
6489     DWORD* pdwStubPhase);
6490 HRESULT CALLBACK IDataObject_DUnadvise_Proxy(
6491     IDataObject* This,
6492     DWORD dwConnection);
6493 void __RPC_STUB IDataObject_DUnadvise_Stub(
6494     struct IRpcStubBuffer* This,
6495     struct IRpcChannelBuffer* pRpcChannelBuffer,
6496     PRPC_MESSAGE pRpcMessage,
6497     DWORD* pdwStubPhase);
6498 HRESULT CALLBACK IDataObject_EnumDAdvise_Proxy(
6499     IDataObject* This,
6500     IEnumSTATDATA** ppenumAdvise);
6501 void __RPC_STUB IDataObject_EnumDAdvise_Stub(
6502     struct IRpcStubBuffer* This,
6503     struct IRpcChannelBuffer* pRpcChannelBuffer,
6504     PRPC_MESSAGE pRpcMessage,
6505     DWORD* pdwStubPhase);
6506
6507 typedef struct IDataAdviseHolder IDataAdviseHolder;
6508 typedef IDataAdviseHolder *LPDATAADVISEHOLDER;
6509
6510 /*****************************************************************************
6511  * IDataAdviseHolder interface
6512  */
6513 DEFINE_GUID(IID_IDataAdviseHolder, 0x00000110, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
6514 #if defined(__cplusplus) && !defined(CINTERFACE)
6515 struct IDataAdviseHolder: IUnknown {
6516
6517     virtual HRESULT STDMETHODCALLTYPE Advise(
6518         IDataObject* pDataObject,
6519         FORMATETC* pFetc,
6520         DWORD advf,
6521         IAdviseSink* pAdvise,
6522         DWORD* pdwConnection) = 0;
6523
6524     virtual HRESULT STDMETHODCALLTYPE Unadvise(
6525         DWORD dwConnection) = 0;
6526
6527     virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
6528         IEnumSTATDATA** ppenumAdvise) = 0;
6529
6530     virtual HRESULT STDMETHODCALLTYPE SendOnDataChange(
6531         IDataObject* pDataObject,
6532         DWORD dwReserved,
6533         DWORD advf) = 0;
6534
6535 } ICOM_COM_INTERFACE_ATTRIBUTE;
6536 #else
6537 typedef struct IDataAdviseHolderVtbl IDataAdviseHolderVtbl;
6538 struct IDataAdviseHolder {
6539     const IDataAdviseHolderVtbl* lpVtbl;
6540 };
6541 struct IDataAdviseHolderVtbl {
6542     ICOM_MSVTABLE_COMPAT_FIELDS
6543
6544     /*** IUnknown methods ***/
6545     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6546         IDataAdviseHolder* This,
6547         REFIID riid,
6548         void** ppvObject);
6549
6550     ULONG (STDMETHODCALLTYPE *AddRef)(
6551         IDataAdviseHolder* This);
6552
6553     ULONG (STDMETHODCALLTYPE *Release)(
6554         IDataAdviseHolder* This);
6555
6556     /*** IDataAdviseHolder methods ***/
6557     HRESULT (STDMETHODCALLTYPE *Advise)(
6558         IDataAdviseHolder* This,
6559         IDataObject* pDataObject,
6560         FORMATETC* pFetc,
6561         DWORD advf,
6562         IAdviseSink* pAdvise,
6563         DWORD* pdwConnection);
6564
6565     HRESULT (STDMETHODCALLTYPE *Unadvise)(
6566         IDataAdviseHolder* This,
6567         DWORD dwConnection);
6568
6569     HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
6570         IDataAdviseHolder* This,
6571         IEnumSTATDATA** ppenumAdvise);
6572
6573     HRESULT (STDMETHODCALLTYPE *SendOnDataChange)(
6574         IDataAdviseHolder* This,
6575         IDataObject* pDataObject,
6576         DWORD dwReserved,
6577         DWORD advf);
6578
6579 };
6580
6581 #define IDataAdviseHolder_IMETHODS \
6582     /*** IUnknown methods ***/ \
6583     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6584     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6585     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6586     /*** IDataAdviseHolder methods ***/ \
6587     HRESULT (STDMETHODCALLTYPE *Advise)(INTERFACE *This, IDataObject* pDataObject, FORMATETC* pFetc, DWORD advf, IAdviseSink* pAdvise, DWORD* pdwConnection); \
6588     HRESULT (STDMETHODCALLTYPE *Unadvise)(INTERFACE *This, DWORD dwConnection); \
6589     HRESULT (STDMETHODCALLTYPE *EnumAdvise)(INTERFACE *This, IEnumSTATDATA** ppenumAdvise); \
6590     HRESULT (STDMETHODCALLTYPE *SendOnDataChange)(INTERFACE *This, IDataObject* pDataObject, DWORD dwReserved, DWORD advf);
6591
6592 /*** IUnknown methods ***/
6593 #define IDataAdviseHolder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6594 #define IDataAdviseHolder_AddRef(p) (p)->lpVtbl->AddRef(p)
6595 #define IDataAdviseHolder_Release(p) (p)->lpVtbl->Release(p)
6596 /*** IDataAdviseHolder methods ***/
6597 #define IDataAdviseHolder_Advise(p,a,b,c,d,e) (p)->lpVtbl->Advise(p,a,b,c,d,e)
6598 #define IDataAdviseHolder_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
6599 #define IDataAdviseHolder_EnumAdvise(p,a) (p)->lpVtbl->EnumAdvise(p,a)
6600 #define IDataAdviseHolder_SendOnDataChange(p,a,b,c) (p)->lpVtbl->SendOnDataChange(p,a,b,c)
6601
6602 #endif
6603
6604 HRESULT CALLBACK IDataAdviseHolder_Advise_Proxy(
6605     IDataAdviseHolder* This,
6606     IDataObject* pDataObject,
6607     FORMATETC* pFetc,
6608     DWORD advf,
6609     IAdviseSink* pAdvise,
6610     DWORD* pdwConnection);
6611 void __RPC_STUB IDataAdviseHolder_Advise_Stub(
6612     struct IRpcStubBuffer* This,
6613     struct IRpcChannelBuffer* pRpcChannelBuffer,
6614     PRPC_MESSAGE pRpcMessage,
6615     DWORD* pdwStubPhase);
6616 HRESULT CALLBACK IDataAdviseHolder_Unadvise_Proxy(
6617     IDataAdviseHolder* This,
6618     DWORD dwConnection);
6619 void __RPC_STUB IDataAdviseHolder_Unadvise_Stub(
6620     struct IRpcStubBuffer* This,
6621     struct IRpcChannelBuffer* pRpcChannelBuffer,
6622     PRPC_MESSAGE pRpcMessage,
6623     DWORD* pdwStubPhase);
6624 HRESULT CALLBACK IDataAdviseHolder_EnumAdvise_Proxy(
6625     IDataAdviseHolder* This,
6626     IEnumSTATDATA** ppenumAdvise);
6627 void __RPC_STUB IDataAdviseHolder_EnumAdvise_Stub(
6628     struct IRpcStubBuffer* This,
6629     struct IRpcChannelBuffer* pRpcChannelBuffer,
6630     PRPC_MESSAGE pRpcMessage,
6631     DWORD* pdwStubPhase);
6632 HRESULT CALLBACK IDataAdviseHolder_SendOnDataChange_Proxy(
6633     IDataAdviseHolder* This,
6634     IDataObject* pDataObject,
6635     DWORD dwReserved,
6636     DWORD advf);
6637 void __RPC_STUB IDataAdviseHolder_SendOnDataChange_Stub(
6638     struct IRpcStubBuffer* This,
6639     struct IRpcChannelBuffer* pRpcChannelBuffer,
6640     PRPC_MESSAGE pRpcMessage,
6641     DWORD* pdwStubPhase);
6642
6643 typedef struct IMessageFilter IMessageFilter;
6644 typedef IMessageFilter *LPMESSAGEFILTER;
6645
6646 typedef enum tagCALLTYPE {
6647     CALLTYPE_TOPLEVEL = 1,
6648     CALLTYPE_NESTED = 2,
6649     CALLTYPE_ASYNC = 3,
6650     CALLTYPE_TOPLEVEL_CALLPENDING = 4,
6651     CALLTYPE_ASYNC_CALLPENDING = 5
6652 } CALLTYPE;
6653
6654 typedef enum tagSERVERCALL {
6655     SERVERCALL_ISHANDLED = 0,
6656     SERVERCALL_REJECTED = 1,
6657     SERVERCALL_RETRYLATER = 2
6658 } SERVERCALL;
6659
6660 typedef enum tagPENDINGTYPE {
6661     PENDINGTYPE_TOPLEVEL = 1,
6662     PENDINGTYPE_NESTED = 2
6663 } PENDINGTYPE;
6664
6665 typedef enum tagPENDINGMSG {
6666     PENDINGMSG_CANCELCALL = 0,
6667     PENDINGMSG_WAITNOPROCESS = 1,
6668     PENDINGMSG_WAITDEFPROCESS = 2
6669 } PENDINGMSG;
6670
6671 typedef struct tagINTERFACEINFO {
6672     IUnknown *pUnk;
6673     IID iid;
6674     WORD wMethod;
6675 } INTERFACEINFO, *LPINTERFACEINFO;
6676
6677 /*****************************************************************************
6678  * IMessageFilter interface
6679  */
6680 DEFINE_GUID(IID_IMessageFilter, 0x00000016, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
6681 #if defined(__cplusplus) && !defined(CINTERFACE)
6682 struct IMessageFilter: IUnknown {
6683
6684     virtual DWORD STDMETHODCALLTYPE HandleInComingCall(
6685         DWORD dwCallType,
6686         HTASK htaskCaller,
6687         DWORD dwTickCount,
6688         LPINTERFACEINFO lpInterfaceInfo) = 0;
6689
6690     virtual DWORD STDMETHODCALLTYPE RetryRejectedCall(
6691         HTASK htaskCallee,
6692         DWORD dwTickCount,
6693         DWORD dwRejectType) = 0;
6694
6695     virtual DWORD STDMETHODCALLTYPE MessagePending(
6696         HTASK htaskCallee,
6697         DWORD dwTickCount,
6698         DWORD dwPendingType) = 0;
6699
6700 } ICOM_COM_INTERFACE_ATTRIBUTE;
6701 #else
6702 typedef struct IMessageFilterVtbl IMessageFilterVtbl;
6703 struct IMessageFilter {
6704     const IMessageFilterVtbl* lpVtbl;
6705 };
6706 struct IMessageFilterVtbl {
6707     ICOM_MSVTABLE_COMPAT_FIELDS
6708
6709     /*** IUnknown methods ***/
6710     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6711         IMessageFilter* This,
6712         REFIID riid,
6713         void** ppvObject);
6714
6715     ULONG (STDMETHODCALLTYPE *AddRef)(
6716         IMessageFilter* This);
6717
6718     ULONG (STDMETHODCALLTYPE *Release)(
6719         IMessageFilter* This);
6720
6721     /*** IMessageFilter methods ***/
6722     DWORD (STDMETHODCALLTYPE *HandleInComingCall)(
6723         IMessageFilter* This,
6724         DWORD dwCallType,
6725         HTASK htaskCaller,
6726         DWORD dwTickCount,
6727         LPINTERFACEINFO lpInterfaceInfo);
6728
6729     DWORD (STDMETHODCALLTYPE *RetryRejectedCall)(
6730         IMessageFilter* This,
6731         HTASK htaskCallee,
6732         DWORD dwTickCount,
6733         DWORD dwRejectType);
6734
6735     DWORD (STDMETHODCALLTYPE *MessagePending)(
6736         IMessageFilter* This,
6737         HTASK htaskCallee,
6738         DWORD dwTickCount,
6739         DWORD dwPendingType);
6740
6741 };
6742
6743 #define IMessageFilter_IMETHODS \
6744     /*** IUnknown methods ***/ \
6745     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6746     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6747     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6748     /*** IMessageFilter methods ***/ \
6749     DWORD (STDMETHODCALLTYPE *HandleInComingCall)(INTERFACE *This, DWORD dwCallType, HTASK htaskCaller, DWORD dwTickCount, LPINTERFACEINFO lpInterfaceInfo); \
6750     DWORD (STDMETHODCALLTYPE *RetryRejectedCall)(INTERFACE *This, HTASK htaskCallee, DWORD dwTickCount, DWORD dwRejectType); \
6751     DWORD (STDMETHODCALLTYPE *MessagePending)(INTERFACE *This, HTASK htaskCallee, DWORD dwTickCount, DWORD dwPendingType);
6752
6753 /*** IUnknown methods ***/
6754 #define IMessageFilter_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6755 #define IMessageFilter_AddRef(p) (p)->lpVtbl->AddRef(p)
6756 #define IMessageFilter_Release(p) (p)->lpVtbl->Release(p)
6757 /*** IMessageFilter methods ***/
6758 #define IMessageFilter_HandleInComingCall(p,a,b,c,d) (p)->lpVtbl->HandleInComingCall(p,a,b,c,d)
6759 #define IMessageFilter_RetryRejectedCall(p,a,b,c) (p)->lpVtbl->RetryRejectedCall(p,a,b,c)
6760 #define IMessageFilter_MessagePending(p,a,b,c) (p)->lpVtbl->MessagePending(p,a,b,c)
6761
6762 #endif
6763
6764 DWORD CALLBACK IMessageFilter_HandleInComingCall_Proxy(
6765     IMessageFilter* This,
6766     DWORD dwCallType,
6767     HTASK htaskCaller,
6768     DWORD dwTickCount,
6769     LPINTERFACEINFO lpInterfaceInfo);
6770 void __RPC_STUB IMessageFilter_HandleInComingCall_Stub(
6771     struct IRpcStubBuffer* This,
6772     struct IRpcChannelBuffer* pRpcChannelBuffer,
6773     PRPC_MESSAGE pRpcMessage,
6774     DWORD* pdwStubPhase);
6775 DWORD CALLBACK IMessageFilter_RetryRejectedCall_Proxy(
6776     IMessageFilter* This,
6777     HTASK htaskCallee,
6778     DWORD dwTickCount,
6779     DWORD dwRejectType);
6780 void __RPC_STUB IMessageFilter_RetryRejectedCall_Stub(
6781     struct IRpcStubBuffer* This,
6782     struct IRpcChannelBuffer* pRpcChannelBuffer,
6783     PRPC_MESSAGE pRpcMessage,
6784     DWORD* pdwStubPhase);
6785 DWORD CALLBACK IMessageFilter_MessagePending_Proxy(
6786     IMessageFilter* This,
6787     HTASK htaskCallee,
6788     DWORD dwTickCount,
6789     DWORD dwPendingType);
6790 void __RPC_STUB IMessageFilter_MessagePending_Stub(
6791     struct IRpcStubBuffer* This,
6792     struct IRpcChannelBuffer* pRpcChannelBuffer,
6793     PRPC_MESSAGE pRpcMessage,
6794     DWORD* pdwStubPhase);
6795
6796 typedef struct IRpcChannelBuffer IRpcChannelBuffer;
6797 typedef IRpcChannelBuffer *LPRPCCHANNELBUFFER;
6798
6799 typedef unsigned long RPCOLEDATAREP;
6800
6801 typedef struct tagRPCOLEMESSAGE {
6802     void *reserved1;
6803     RPCOLEDATAREP dataRepresentation;
6804     void *Buffer;
6805     ULONG cbBuffer;
6806     ULONG iMethod;
6807     void *reserved2[5];
6808     ULONG rpcFlags;
6809 } RPCOLEMESSAGE;
6810
6811 typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
6812
6813 /*****************************************************************************
6814  * IRpcChannelBuffer interface
6815  */
6816 DEFINE_GUID(IID_IRpcChannelBuffer, 0xd5f56b60, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
6817 #if defined(__cplusplus) && !defined(CINTERFACE)
6818 struct IRpcChannelBuffer: IUnknown {
6819
6820     virtual HRESULT STDMETHODCALLTYPE GetBuffer(
6821         RPCOLEMESSAGE* pMessage,
6822         REFIID riid) = 0;
6823
6824     virtual HRESULT STDMETHODCALLTYPE SendReceive(
6825         RPCOLEMESSAGE* pMessage,
6826         ULONG* pStatus) = 0;
6827
6828     virtual HRESULT STDMETHODCALLTYPE FreeBuffer(
6829         RPCOLEMESSAGE* pMessage) = 0;
6830
6831     virtual HRESULT STDMETHODCALLTYPE GetDestCtx(
6832         DWORD* pdwDestContext,
6833         void** ppvDestContext) = 0;
6834
6835     virtual HRESULT STDMETHODCALLTYPE IsConnected(
6836         ) = 0;
6837
6838 } ICOM_COM_INTERFACE_ATTRIBUTE;
6839 #else
6840 typedef struct IRpcChannelBufferVtbl IRpcChannelBufferVtbl;
6841 struct IRpcChannelBuffer {
6842     const IRpcChannelBufferVtbl* lpVtbl;
6843 };
6844 struct IRpcChannelBufferVtbl {
6845     ICOM_MSVTABLE_COMPAT_FIELDS
6846
6847     /*** IUnknown methods ***/
6848     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6849         IRpcChannelBuffer* This,
6850         REFIID riid,
6851         void** ppvObject);
6852
6853     ULONG (STDMETHODCALLTYPE *AddRef)(
6854         IRpcChannelBuffer* This);
6855
6856     ULONG (STDMETHODCALLTYPE *Release)(
6857         IRpcChannelBuffer* This);
6858
6859     /*** IRpcChannelBuffer methods ***/
6860     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
6861         IRpcChannelBuffer* This,
6862         RPCOLEMESSAGE* pMessage,
6863         REFIID riid);
6864
6865     HRESULT (STDMETHODCALLTYPE *SendReceive)(
6866         IRpcChannelBuffer* This,
6867         RPCOLEMESSAGE* pMessage,
6868         ULONG* pStatus);
6869
6870     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
6871         IRpcChannelBuffer* This,
6872         RPCOLEMESSAGE* pMessage);
6873
6874     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
6875         IRpcChannelBuffer* This,
6876         DWORD* pdwDestContext,
6877         void** ppvDestContext);
6878
6879     HRESULT (STDMETHODCALLTYPE *IsConnected)(
6880         IRpcChannelBuffer* This);
6881
6882 };
6883
6884 #define IRpcChannelBuffer_IMETHODS \
6885     /*** IUnknown methods ***/ \
6886     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
6887     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
6888     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
6889     /*** IRpcChannelBuffer methods ***/ \
6890     HRESULT (STDMETHODCALLTYPE *GetBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage, REFIID riid); \
6891     HRESULT (STDMETHODCALLTYPE *SendReceive)(INTERFACE *This, RPCOLEMESSAGE* pMessage, ULONG* pStatus); \
6892     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage); \
6893     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(INTERFACE *This, DWORD* pdwDestContext, void** ppvDestContext); \
6894     HRESULT (STDMETHODCALLTYPE *IsConnected)(INTERFACE *This);
6895
6896 /*** IUnknown methods ***/
6897 #define IRpcChannelBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
6898 #define IRpcChannelBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
6899 #define IRpcChannelBuffer_Release(p) (p)->lpVtbl->Release(p)
6900 /*** IRpcChannelBuffer methods ***/
6901 #define IRpcChannelBuffer_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
6902 #define IRpcChannelBuffer_SendReceive(p,a,b) (p)->lpVtbl->SendReceive(p,a,b)
6903 #define IRpcChannelBuffer_FreeBuffer(p,a) (p)->lpVtbl->FreeBuffer(p,a)
6904 #define IRpcChannelBuffer_GetDestCtx(p,a,b) (p)->lpVtbl->GetDestCtx(p,a,b)
6905 #define IRpcChannelBuffer_IsConnected(p) (p)->lpVtbl->IsConnected(p)
6906
6907 #endif
6908
6909 HRESULT CALLBACK IRpcChannelBuffer_GetBuffer_Proxy(
6910     IRpcChannelBuffer* This,
6911     RPCOLEMESSAGE* pMessage,
6912     REFIID riid);
6913 void __RPC_STUB IRpcChannelBuffer_GetBuffer_Stub(
6914     struct IRpcStubBuffer* This,
6915     struct IRpcChannelBuffer* pRpcChannelBuffer,
6916     PRPC_MESSAGE pRpcMessage,
6917     DWORD* pdwStubPhase);
6918 HRESULT CALLBACK IRpcChannelBuffer_SendReceive_Proxy(
6919     IRpcChannelBuffer* This,
6920     RPCOLEMESSAGE* pMessage,
6921     ULONG* pStatus);
6922 void __RPC_STUB IRpcChannelBuffer_SendReceive_Stub(
6923     struct IRpcStubBuffer* This,
6924     struct IRpcChannelBuffer* pRpcChannelBuffer,
6925     PRPC_MESSAGE pRpcMessage,
6926     DWORD* pdwStubPhase);
6927 HRESULT CALLBACK IRpcChannelBuffer_FreeBuffer_Proxy(
6928     IRpcChannelBuffer* This,
6929     RPCOLEMESSAGE* pMessage);
6930 void __RPC_STUB IRpcChannelBuffer_FreeBuffer_Stub(
6931     struct IRpcStubBuffer* This,
6932     struct IRpcChannelBuffer* pRpcChannelBuffer,
6933     PRPC_MESSAGE pRpcMessage,
6934     DWORD* pdwStubPhase);
6935 HRESULT CALLBACK IRpcChannelBuffer_GetDestCtx_Proxy(
6936     IRpcChannelBuffer* This,
6937     DWORD* pdwDestContext,
6938     void** ppvDestContext);
6939 void __RPC_STUB IRpcChannelBuffer_GetDestCtx_Stub(
6940     struct IRpcStubBuffer* This,
6941     struct IRpcChannelBuffer* pRpcChannelBuffer,
6942     PRPC_MESSAGE pRpcMessage,
6943     DWORD* pdwStubPhase);
6944 HRESULT CALLBACK IRpcChannelBuffer_IsConnected_Proxy(
6945     IRpcChannelBuffer* This);
6946 void __RPC_STUB IRpcChannelBuffer_IsConnected_Stub(
6947     struct IRpcStubBuffer* This,
6948     struct IRpcChannelBuffer* pRpcChannelBuffer,
6949     PRPC_MESSAGE pRpcMessage,
6950     DWORD* pdwStubPhase);
6951
6952 typedef struct IRpcChannelBuffer2 IRpcChannelBuffer2;
6953 typedef IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
6954
6955 /*****************************************************************************
6956  * IRpcChannelBuffer2 interface
6957  */
6958 DEFINE_GUID(IID_IRpcChannelBuffer2, 0x594f31d0, 0x7f19, 0x11d0, 0xb1,0x94, 0x00,0xa0,0xc9,0x0d,0xc8,0xbf);
6959 #if defined(__cplusplus) && !defined(CINTERFACE)
6960 struct IRpcChannelBuffer2: IRpcChannelBuffer {
6961
6962     virtual HRESULT STDMETHODCALLTYPE GetProtocolVersion(
6963         DWORD* pdwVersion) = 0;
6964
6965 } ICOM_COM_INTERFACE_ATTRIBUTE;
6966 #else
6967 typedef struct IRpcChannelBuffer2Vtbl IRpcChannelBuffer2Vtbl;
6968 struct IRpcChannelBuffer2 {
6969     const IRpcChannelBuffer2Vtbl* lpVtbl;
6970 };
6971 struct IRpcChannelBuffer2Vtbl {
6972     ICOM_MSVTABLE_COMPAT_FIELDS
6973
6974     /*** IUnknown methods ***/
6975     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
6976         IRpcChannelBuffer2* This,
6977         REFIID riid,
6978         void** ppvObject);
6979
6980     ULONG (STDMETHODCALLTYPE *AddRef)(
6981         IRpcChannelBuffer2* This);
6982
6983     ULONG (STDMETHODCALLTYPE *Release)(
6984         IRpcChannelBuffer2* This);
6985
6986     /*** IRpcChannelBuffer methods ***/
6987     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
6988         IRpcChannelBuffer2* This,
6989         RPCOLEMESSAGE* pMessage,
6990         REFIID riid);
6991
6992     HRESULT (STDMETHODCALLTYPE *SendReceive)(
6993         IRpcChannelBuffer2* This,
6994         RPCOLEMESSAGE* pMessage,
6995         ULONG* pStatus);
6996
6997     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
6998         IRpcChannelBuffer2* This,
6999         RPCOLEMESSAGE* pMessage);
7000
7001     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
7002         IRpcChannelBuffer2* This,
7003         DWORD* pdwDestContext,
7004         void** ppvDestContext);
7005
7006     HRESULT (STDMETHODCALLTYPE *IsConnected)(
7007         IRpcChannelBuffer2* This);
7008
7009     /*** IRpcChannelBuffer2 methods ***/
7010     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
7011         IRpcChannelBuffer2* This,
7012         DWORD* pdwVersion);
7013
7014 };
7015
7016 #define IRpcChannelBuffer2_IMETHODS \
7017     /*** IUnknown methods ***/ \
7018     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7019     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7020     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7021     /*** IRpcChannelBuffer methods ***/ \
7022     HRESULT (STDMETHODCALLTYPE *GetBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage, REFIID riid); \
7023     HRESULT (STDMETHODCALLTYPE *SendReceive)(INTERFACE *This, RPCOLEMESSAGE* pMessage, ULONG* pStatus); \
7024     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage); \
7025     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(INTERFACE *This, DWORD* pdwDestContext, void** ppvDestContext); \
7026     HRESULT (STDMETHODCALLTYPE *IsConnected)(INTERFACE *This); \
7027     /*** IRpcChannelBuffer2 methods ***/ \
7028     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(INTERFACE *This, DWORD* pdwVersion);
7029
7030 /*** IUnknown methods ***/
7031 #define IRpcChannelBuffer2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7032 #define IRpcChannelBuffer2_AddRef(p) (p)->lpVtbl->AddRef(p)
7033 #define IRpcChannelBuffer2_Release(p) (p)->lpVtbl->Release(p)
7034 /*** IRpcChannelBuffer methods ***/
7035 #define IRpcChannelBuffer2_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
7036 #define IRpcChannelBuffer2_SendReceive(p,a,b) (p)->lpVtbl->SendReceive(p,a,b)
7037 #define IRpcChannelBuffer2_FreeBuffer(p,a) (p)->lpVtbl->FreeBuffer(p,a)
7038 #define IRpcChannelBuffer2_GetDestCtx(p,a,b) (p)->lpVtbl->GetDestCtx(p,a,b)
7039 #define IRpcChannelBuffer2_IsConnected(p) (p)->lpVtbl->IsConnected(p)
7040 /*** IRpcChannelBuffer2 methods ***/
7041 #define IRpcChannelBuffer2_GetProtocolVersion(p,a) (p)->lpVtbl->GetProtocolVersion(p,a)
7042
7043 #endif
7044
7045 HRESULT CALLBACK IRpcChannelBuffer2_GetProtocolVersion_Proxy(
7046     IRpcChannelBuffer2* This,
7047     DWORD* pdwVersion);
7048 void __RPC_STUB IRpcChannelBuffer2_GetProtocolVersion_Stub(
7049     struct IRpcStubBuffer* This,
7050     struct IRpcChannelBuffer* pRpcChannelBuffer,
7051     PRPC_MESSAGE pRpcMessage,
7052     DWORD* pdwStubPhase);
7053
7054 typedef struct IRpcChannelBuffer3 IRpcChannelBuffer3;
7055 typedef IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
7056
7057 /*****************************************************************************
7058  * IRpcChannelBuffer3 interface
7059  */
7060 DEFINE_GUID(IID_IRpcChannelBuffer3, 0x25b15600, 0x0115, 0x11d0, 0xbf,0x0d, 0x00,0xaa,0x00,0xb8,0xdf,0xd2);
7061 #if defined(__cplusplus) && !defined(CINTERFACE)
7062 struct IRpcChannelBuffer3: IRpcChannelBuffer2 {
7063
7064     virtual HRESULT STDMETHODCALLTYPE Send(
7065         RPCOLEMESSAGE* pMsg,
7066         ULONG* pulStatus) = 0;
7067
7068     virtual HRESULT STDMETHODCALLTYPE Receive(
7069         RPCOLEMESSAGE* pMsg,
7070         ULONG ulSize,
7071         ULONG* pulStatus) = 0;
7072
7073     virtual HRESULT STDMETHODCALLTYPE Cancel(
7074         RPCOLEMESSAGE* pMsg) = 0;
7075
7076     virtual HRESULT STDMETHODCALLTYPE GetCallContext(
7077         RPCOLEMESSAGE* pMsg,
7078         REFIID riid,
7079         void** pInterface) = 0;
7080
7081     virtual HRESULT STDMETHODCALLTYPE GetDestCtxEx(
7082         RPCOLEMESSAGE* pMsg,
7083         DWORD* pdwDestContext,
7084         void** ppvDestContext) = 0;
7085
7086     virtual HRESULT STDMETHODCALLTYPE GetState(
7087         RPCOLEMESSAGE* pMsg,
7088         DWORD* pState) = 0;
7089
7090     virtual HRESULT STDMETHODCALLTYPE RegisterAsync(
7091         RPCOLEMESSAGE* pMsg,
7092         IAsyncManager* pAsyncMgr) = 0;
7093
7094 } ICOM_COM_INTERFACE_ATTRIBUTE;
7095 #else
7096 typedef struct IRpcChannelBuffer3Vtbl IRpcChannelBuffer3Vtbl;
7097 struct IRpcChannelBuffer3 {
7098     const IRpcChannelBuffer3Vtbl* lpVtbl;
7099 };
7100 struct IRpcChannelBuffer3Vtbl {
7101     ICOM_MSVTABLE_COMPAT_FIELDS
7102
7103     /*** IUnknown methods ***/
7104     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
7105         IRpcChannelBuffer3* This,
7106         REFIID riid,
7107         void** ppvObject);
7108
7109     ULONG (STDMETHODCALLTYPE *AddRef)(
7110         IRpcChannelBuffer3* This);
7111
7112     ULONG (STDMETHODCALLTYPE *Release)(
7113         IRpcChannelBuffer3* This);
7114
7115     /*** IRpcChannelBuffer methods ***/
7116     HRESULT (STDMETHODCALLTYPE *GetBuffer)(
7117         IRpcChannelBuffer3* This,
7118         RPCOLEMESSAGE* pMessage,
7119         REFIID riid);
7120
7121     HRESULT (STDMETHODCALLTYPE *SendReceive)(
7122         IRpcChannelBuffer3* This,
7123         RPCOLEMESSAGE* pMessage,
7124         ULONG* pStatus);
7125
7126     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
7127         IRpcChannelBuffer3* This,
7128         RPCOLEMESSAGE* pMessage);
7129
7130     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
7131         IRpcChannelBuffer3* This,
7132         DWORD* pdwDestContext,
7133         void** ppvDestContext);
7134
7135     HRESULT (STDMETHODCALLTYPE *IsConnected)(
7136         IRpcChannelBuffer3* This);
7137
7138     /*** IRpcChannelBuffer2 methods ***/
7139     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
7140         IRpcChannelBuffer3* This,
7141         DWORD* pdwVersion);
7142
7143     /*** IRpcChannelBuffer3 methods ***/
7144     HRESULT (STDMETHODCALLTYPE *Send)(
7145         IRpcChannelBuffer3* This,
7146         RPCOLEMESSAGE* pMsg,
7147         ULONG* pulStatus);
7148
7149     HRESULT (STDMETHODCALLTYPE *Receive)(
7150         IRpcChannelBuffer3* This,
7151         RPCOLEMESSAGE* pMsg,
7152         ULONG ulSize,
7153         ULONG* pulStatus);
7154
7155     HRESULT (STDMETHODCALLTYPE *Cancel)(
7156         IRpcChannelBuffer3* This,
7157         RPCOLEMESSAGE* pMsg);
7158
7159     HRESULT (STDMETHODCALLTYPE *GetCallContext)(
7160         IRpcChannelBuffer3* This,
7161         RPCOLEMESSAGE* pMsg,
7162         REFIID riid,
7163         void** pInterface);
7164
7165     HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
7166         IRpcChannelBuffer3* This,
7167         RPCOLEMESSAGE* pMsg,
7168         DWORD* pdwDestContext,
7169         void** ppvDestContext);
7170
7171     HRESULT (STDMETHODCALLTYPE *GetState)(
7172         IRpcChannelBuffer3* This,
7173         RPCOLEMESSAGE* pMsg,
7174         DWORD* pState);
7175
7176     HRESULT (STDMETHODCALLTYPE *RegisterAsync)(
7177         IRpcChannelBuffer3* This,
7178         RPCOLEMESSAGE* pMsg,
7179         IAsyncManager* pAsyncMgr);
7180
7181 };
7182
7183 #define IRpcChannelBuffer3_IMETHODS \
7184     /*** IUnknown methods ***/ \
7185     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7186     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7187     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7188     /*** IRpcChannelBuffer methods ***/ \
7189     HRESULT (STDMETHODCALLTYPE *GetBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage, REFIID riid); \
7190     HRESULT (STDMETHODCALLTYPE *SendReceive)(INTERFACE *This, RPCOLEMESSAGE* pMessage, ULONG* pStatus); \
7191     HRESULT (STDMETHODCALLTYPE *FreeBuffer)(INTERFACE *This, RPCOLEMESSAGE* pMessage); \
7192     HRESULT (STDMETHODCALLTYPE *GetDestCtx)(INTERFACE *This, DWORD* pdwDestContext, void** ppvDestContext); \
7193     HRESULT (STDMETHODCALLTYPE *IsConnected)(INTERFACE *This); \
7194     /*** IRpcChannelBuffer2 methods ***/ \
7195     HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(INTERFACE *This, DWORD* pdwVersion); \
7196     /*** IRpcChannelBuffer3 methods ***/ \
7197     HRESULT (STDMETHODCALLTYPE *Send)(INTERFACE *This, RPCOLEMESSAGE* pMsg, ULONG* pulStatus); \
7198     HRESULT (STDMETHODCALLTYPE *Receive)(INTERFACE *This, RPCOLEMESSAGE* pMsg, ULONG ulSize, ULONG* pulStatus); \
7199     HRESULT (STDMETHODCALLTYPE *Cancel)(INTERFACE *This, RPCOLEMESSAGE* pMsg); \
7200     HRESULT (STDMETHODCALLTYPE *GetCallContext)(INTERFACE *This, RPCOLEMESSAGE* pMsg, REFIID riid, void** pInterface); \
7201     HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(INTERFACE *This, RPCOLEMESSAGE* pMsg, DWORD* pdwDestContext, void** ppvDestContext); \
7202     HRESULT (STDMETHODCALLTYPE *GetState)(INTERFACE *This, RPCOLEMESSAGE* pMsg, DWORD* pState); \
7203     HRESULT (STDMETHODCALLTYPE *RegisterAsync)(INTERFACE *This, RPCOLEMESSAGE* pMsg, IAsyncManager* pAsyncMgr);
7204
7205 /*** IUnknown methods ***/
7206 #define IRpcChannelBuffer3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7207 #define IRpcChannelBuffer3_AddRef(p) (p)->lpVtbl->AddRef(p)
7208 #define IRpcChannelBuffer3_Release(p) (p)->lpVtbl->Release(p)
7209 /*** IRpcChannelBuffer methods ***/
7210 #define IRpcChannelBuffer3_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
7211 #define IRpcChannelBuffer3_SendReceive(p,a,b) (p)->lpVtbl->SendReceive(p,a,b)
7212 #define IRpcChannelBuffer3_FreeBuffer(p,a) (p)->lpVtbl->FreeBuffer(p,a)
7213 #define IRpcChannelBuffer3_GetDestCtx(p,a,b) (p)->lpVtbl->GetDestCtx(p,a,b)
7214 #define IRpcChannelBuffer3_IsConnected(p) (p)->lpVtbl->IsConnected(p)
7215 /*** IRpcChannelBuffer2 methods ***/
7216 #define IRpcChannelBuffer3_GetProtocolVersion(p,a) (p)->lpVtbl->GetProtocolVersion(p,a)
7217 /*** IRpcChannelBuffer3 methods ***/
7218 #define IRpcChannelBuffer3_Send(p,a,b) (p)->lpVtbl->Send(p,a,b)
7219 #define IRpcChannelBuffer3_Receive(p,a,b,c) (p)->lpVtbl->Receive(p,a,b,c)
7220 #define IRpcChannelBuffer3_Cancel(p,a) (p)->lpVtbl->Cancel(p,a)
7221 #define IRpcChannelBuffer3_GetCallContext(p,a,b,c) (p)->lpVtbl->GetCallContext(p,a,b,c)
7222 #define IRpcChannelBuffer3_GetDestCtxEx(p,a,b,c) (p)->lpVtbl->GetDestCtxEx(p,a,b,c)
7223 #define IRpcChannelBuffer3_GetState(p,a,b) (p)->lpVtbl->GetState(p,a,b)
7224 #define IRpcChannelBuffer3_RegisterAsync(p,a,b) (p)->lpVtbl->RegisterAsync(p,a,b)
7225
7226 #endif
7227
7228 HRESULT CALLBACK IRpcChannelBuffer3_Send_Proxy(
7229     IRpcChannelBuffer3* This,
7230     RPCOLEMESSAGE* pMsg,
7231     ULONG* pulStatus);
7232 void __RPC_STUB IRpcChannelBuffer3_Send_Stub(
7233     struct IRpcStubBuffer* This,
7234     struct IRpcChannelBuffer* pRpcChannelBuffer,
7235     PRPC_MESSAGE pRpcMessage,
7236     DWORD* pdwStubPhase);
7237 HRESULT CALLBACK IRpcChannelBuffer3_Receive_Proxy(
7238     IRpcChannelBuffer3* This,
7239     RPCOLEMESSAGE* pMsg,
7240     ULONG ulSize,
7241     ULONG* pulStatus);
7242 void __RPC_STUB IRpcChannelBuffer3_Receive_Stub(
7243     struct IRpcStubBuffer* This,
7244     struct IRpcChannelBuffer* pRpcChannelBuffer,
7245     PRPC_MESSAGE pRpcMessage,
7246     DWORD* pdwStubPhase);
7247 HRESULT CALLBACK IRpcChannelBuffer3_Cancel_Proxy(
7248     IRpcChannelBuffer3* This,
7249     RPCOLEMESSAGE* pMsg);
7250 void __RPC_STUB IRpcChannelBuffer3_Cancel_Stub(
7251     struct IRpcStubBuffer* This,
7252     struct IRpcChannelBuffer* pRpcChannelBuffer,
7253     PRPC_MESSAGE pRpcMessage,
7254     DWORD* pdwStubPhase);
7255 HRESULT CALLBACK IRpcChannelBuffer3_GetCallContext_Proxy(
7256     IRpcChannelBuffer3* This,
7257     RPCOLEMESSAGE* pMsg,
7258     REFIID riid,
7259     void** pInterface);
7260 void __RPC_STUB IRpcChannelBuffer3_GetCallContext_Stub(
7261     struct IRpcStubBuffer* This,
7262     struct IRpcChannelBuffer* pRpcChannelBuffer,
7263     PRPC_MESSAGE pRpcMessage,
7264     DWORD* pdwStubPhase);
7265 HRESULT CALLBACK IRpcChannelBuffer3_GetDestCtxEx_Proxy(
7266     IRpcChannelBuffer3* This,
7267     RPCOLEMESSAGE* pMsg,
7268     DWORD* pdwDestContext,
7269     void** ppvDestContext);
7270 void __RPC_STUB IRpcChannelBuffer3_GetDestCtxEx_Stub(
7271     struct IRpcStubBuffer* This,
7272     struct IRpcChannelBuffer* pRpcChannelBuffer,
7273     PRPC_MESSAGE pRpcMessage,
7274     DWORD* pdwStubPhase);
7275 HRESULT CALLBACK IRpcChannelBuffer3_GetState_Proxy(
7276     IRpcChannelBuffer3* This,
7277     RPCOLEMESSAGE* pMsg,
7278     DWORD* pState);
7279 void __RPC_STUB IRpcChannelBuffer3_GetState_Stub(
7280     struct IRpcStubBuffer* This,
7281     struct IRpcChannelBuffer* pRpcChannelBuffer,
7282     PRPC_MESSAGE pRpcMessage,
7283     DWORD* pdwStubPhase);
7284 HRESULT CALLBACK IRpcChannelBuffer3_RegisterAsync_Proxy(
7285     IRpcChannelBuffer3* This,
7286     RPCOLEMESSAGE* pMsg,
7287     IAsyncManager* pAsyncMgr);
7288 void __RPC_STUB IRpcChannelBuffer3_RegisterAsync_Stub(
7289     struct IRpcStubBuffer* This,
7290     struct IRpcChannelBuffer* pRpcChannelBuffer,
7291     PRPC_MESSAGE pRpcMessage,
7292     DWORD* pdwStubPhase);
7293
7294 typedef struct IRpcProxyBuffer IRpcProxyBuffer;
7295 typedef IRpcProxyBuffer *LPRPCPROXYBUFFER;
7296
7297 /*****************************************************************************
7298  * IRpcProxyBuffer interface
7299  */
7300 DEFINE_GUID(IID_IRpcProxyBuffer, 0xd5f56a34, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
7301 #if defined(__cplusplus) && !defined(CINTERFACE)
7302 struct IRpcProxyBuffer: IUnknown {
7303
7304     virtual HRESULT STDMETHODCALLTYPE Connect(
7305         IRpcChannelBuffer* pRpcChannelBuffer) = 0;
7306
7307     virtual void STDMETHODCALLTYPE Disconnect(
7308         ) = 0;
7309
7310 } ICOM_COM_INTERFACE_ATTRIBUTE;
7311 #else
7312 typedef struct IRpcProxyBufferVtbl IRpcProxyBufferVtbl;
7313 struct IRpcProxyBuffer {
7314     const IRpcProxyBufferVtbl* lpVtbl;
7315 };
7316 struct IRpcProxyBufferVtbl {
7317     ICOM_MSVTABLE_COMPAT_FIELDS
7318
7319     /*** IUnknown methods ***/
7320     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
7321         IRpcProxyBuffer* This,
7322         REFIID riid,
7323         void** ppvObject);
7324
7325     ULONG (STDMETHODCALLTYPE *AddRef)(
7326         IRpcProxyBuffer* This);
7327
7328     ULONG (STDMETHODCALLTYPE *Release)(
7329         IRpcProxyBuffer* This);
7330
7331     /*** IRpcProxyBuffer methods ***/
7332     HRESULT (STDMETHODCALLTYPE *Connect)(
7333         IRpcProxyBuffer* This,
7334         IRpcChannelBuffer* pRpcChannelBuffer);
7335
7336     void (STDMETHODCALLTYPE *Disconnect)(
7337         IRpcProxyBuffer* This);
7338
7339 };
7340
7341 #define IRpcProxyBuffer_IMETHODS \
7342     /*** IUnknown methods ***/ \
7343     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7344     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7345     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7346     /*** IRpcProxyBuffer methods ***/ \
7347     HRESULT (STDMETHODCALLTYPE *Connect)(INTERFACE *This, IRpcChannelBuffer* pRpcChannelBuffer); \
7348     void (STDMETHODCALLTYPE *Disconnect)(INTERFACE *This);
7349
7350 /*** IUnknown methods ***/
7351 #define IRpcProxyBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7352 #define IRpcProxyBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
7353 #define IRpcProxyBuffer_Release(p) (p)->lpVtbl->Release(p)
7354 /*** IRpcProxyBuffer methods ***/
7355 #define IRpcProxyBuffer_Connect(p,a) (p)->lpVtbl->Connect(p,a)
7356 #define IRpcProxyBuffer_Disconnect(p) (p)->lpVtbl->Disconnect(p)
7357
7358 #endif
7359
7360 HRESULT CALLBACK IRpcProxyBuffer_Connect_Proxy(
7361     IRpcProxyBuffer* This,
7362     IRpcChannelBuffer* pRpcChannelBuffer);
7363 void __RPC_STUB IRpcProxyBuffer_Connect_Stub(
7364     struct IRpcStubBuffer* This,
7365     struct IRpcChannelBuffer* pRpcChannelBuffer,
7366     PRPC_MESSAGE pRpcMessage,
7367     DWORD* pdwStubPhase);
7368 void CALLBACK IRpcProxyBuffer_Disconnect_Proxy(
7369     IRpcProxyBuffer* This);
7370 void __RPC_STUB IRpcProxyBuffer_Disconnect_Stub(
7371     struct IRpcStubBuffer* This,
7372     struct IRpcChannelBuffer* pRpcChannelBuffer,
7373     PRPC_MESSAGE pRpcMessage,
7374     DWORD* pdwStubPhase);
7375
7376 typedef struct IRpcStubBuffer IRpcStubBuffer;
7377 typedef IRpcStubBuffer *LPRPCSTUBBUFFER;
7378
7379 /*****************************************************************************
7380  * IRpcStubBuffer interface
7381  */
7382 DEFINE_GUID(IID_IRpcStubBuffer, 0xd5f56afc, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
7383 #if defined(__cplusplus) && !defined(CINTERFACE)
7384 struct IRpcStubBuffer: IUnknown {
7385
7386     virtual HRESULT STDMETHODCALLTYPE Connect(
7387         IUnknown* pUnkServer) = 0;
7388
7389     virtual void STDMETHODCALLTYPE Disconnect(
7390         ) = 0;
7391
7392     virtual HRESULT STDMETHODCALLTYPE Invoke(
7393         RPCOLEMESSAGE* _prpcmsg,
7394         IRpcChannelBuffer* _pRpcChannelBuffer) = 0;
7395
7396     virtual IRpcStubBuffer* STDMETHODCALLTYPE IsIIDSupported(
7397         REFIID riid) = 0;
7398
7399     virtual ULONG STDMETHODCALLTYPE CountRefs(
7400         ) = 0;
7401
7402     virtual HRESULT STDMETHODCALLTYPE DebugServerQueryInterface(
7403         void** ppv) = 0;
7404
7405     virtual void STDMETHODCALLTYPE DebugServerRelease(
7406         void* pv) = 0;
7407
7408 } ICOM_COM_INTERFACE_ATTRIBUTE;
7409 #else
7410 typedef struct IRpcStubBufferVtbl IRpcStubBufferVtbl;
7411 struct IRpcStubBuffer {
7412     const IRpcStubBufferVtbl* lpVtbl;
7413 };
7414 struct IRpcStubBufferVtbl {
7415     ICOM_MSVTABLE_COMPAT_FIELDS
7416
7417     /*** IUnknown methods ***/
7418     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
7419         IRpcStubBuffer* This,
7420         REFIID riid,
7421         void** ppvObject);
7422
7423     ULONG (STDMETHODCALLTYPE *AddRef)(
7424         IRpcStubBuffer* This);
7425
7426     ULONG (STDMETHODCALLTYPE *Release)(
7427         IRpcStubBuffer* This);
7428
7429     /*** IRpcStubBuffer methods ***/
7430     HRESULT (STDMETHODCALLTYPE *Connect)(
7431         IRpcStubBuffer* This,
7432         IUnknown* pUnkServer);
7433
7434     void (STDMETHODCALLTYPE *Disconnect)(
7435         IRpcStubBuffer* This);
7436
7437     HRESULT (STDMETHODCALLTYPE *Invoke)(
7438         IRpcStubBuffer* This,
7439         RPCOLEMESSAGE* _prpcmsg,
7440         IRpcChannelBuffer* _pRpcChannelBuffer);
7441
7442     IRpcStubBuffer* (STDMETHODCALLTYPE *IsIIDSupported)(
7443         IRpcStubBuffer* This,
7444         REFIID riid);
7445
7446     ULONG (STDMETHODCALLTYPE *CountRefs)(
7447         IRpcStubBuffer* This);
7448
7449     HRESULT (STDMETHODCALLTYPE *DebugServerQueryInterface)(
7450         IRpcStubBuffer* This,
7451         void** ppv);
7452
7453     void (STDMETHODCALLTYPE *DebugServerRelease)(
7454         IRpcStubBuffer* This,
7455         void* pv);
7456
7457 };
7458
7459 #define IRpcStubBuffer_IMETHODS \
7460     /*** IUnknown methods ***/ \
7461     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7462     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7463     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7464     /*** IRpcStubBuffer methods ***/ \
7465     HRESULT (STDMETHODCALLTYPE *Connect)(INTERFACE *This, IUnknown* pUnkServer); \
7466     void (STDMETHODCALLTYPE *Disconnect)(INTERFACE *This); \
7467     HRESULT (STDMETHODCALLTYPE *Invoke)(INTERFACE *This, RPCOLEMESSAGE* _prpcmsg, IRpcChannelBuffer* _pRpcChannelBuffer); \
7468     IRpcStubBuffer* (STDMETHODCALLTYPE *IsIIDSupported)(INTERFACE *This, REFIID riid); \
7469     ULONG (STDMETHODCALLTYPE *CountRefs)(INTERFACE *This); \
7470     HRESULT (STDMETHODCALLTYPE *DebugServerQueryInterface)(INTERFACE *This, void** ppv); \
7471     void (STDMETHODCALLTYPE *DebugServerRelease)(INTERFACE *This, void* pv);
7472
7473 /*** IUnknown methods ***/
7474 #define IRpcStubBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7475 #define IRpcStubBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
7476 #define IRpcStubBuffer_Release(p) (p)->lpVtbl->Release(p)
7477 /*** IRpcStubBuffer methods ***/
7478 #define IRpcStubBuffer_Connect(p,a) (p)->lpVtbl->Connect(p,a)
7479 #define IRpcStubBuffer_Disconnect(p) (p)->lpVtbl->Disconnect(p)
7480 #define IRpcStubBuffer_Invoke(p,a,b) (p)->lpVtbl->Invoke(p,a,b)
7481 #define IRpcStubBuffer_IsIIDSupported(p,a) (p)->lpVtbl->IsIIDSupported(p,a)
7482 #define IRpcStubBuffer_CountRefs(p) (p)->lpVtbl->CountRefs(p)
7483 #define IRpcStubBuffer_DebugServerQueryInterface(p,a) (p)->lpVtbl->DebugServerQueryInterface(p,a)
7484 #define IRpcStubBuffer_DebugServerRelease(p,a) (p)->lpVtbl->DebugServerRelease(p,a)
7485
7486 #endif
7487
7488 HRESULT CALLBACK IRpcStubBuffer_Connect_Proxy(
7489     IRpcStubBuffer* This,
7490     IUnknown* pUnkServer);
7491 void __RPC_STUB IRpcStubBuffer_Connect_Stub(
7492     struct IRpcStubBuffer* This,
7493     struct IRpcChannelBuffer* pRpcChannelBuffer,
7494     PRPC_MESSAGE pRpcMessage,
7495     DWORD* pdwStubPhase);
7496 void CALLBACK IRpcStubBuffer_Disconnect_Proxy(
7497     IRpcStubBuffer* This);
7498 void __RPC_STUB IRpcStubBuffer_Disconnect_Stub(
7499     struct IRpcStubBuffer* This,
7500     struct IRpcChannelBuffer* pRpcChannelBuffer,
7501     PRPC_MESSAGE pRpcMessage,
7502     DWORD* pdwStubPhase);
7503 HRESULT CALLBACK IRpcStubBuffer_Invoke_Proxy(
7504     IRpcStubBuffer* This,
7505     RPCOLEMESSAGE* _prpcmsg,
7506     IRpcChannelBuffer* _pRpcChannelBuffer);
7507 void __RPC_STUB IRpcStubBuffer_Invoke_Stub(
7508     struct IRpcStubBuffer* This,
7509     struct IRpcChannelBuffer* pRpcChannelBuffer,
7510     PRPC_MESSAGE pRpcMessage,
7511     DWORD* pdwStubPhase);
7512 IRpcStubBuffer* CALLBACK IRpcStubBuffer_IsIIDSupported_Proxy(
7513     IRpcStubBuffer* This,
7514     REFIID riid);
7515 void __RPC_STUB IRpcStubBuffer_IsIIDSupported_Stub(
7516     struct IRpcStubBuffer* This,
7517     struct IRpcChannelBuffer* pRpcChannelBuffer,
7518     PRPC_MESSAGE pRpcMessage,
7519     DWORD* pdwStubPhase);
7520 ULONG CALLBACK IRpcStubBuffer_CountRefs_Proxy(
7521     IRpcStubBuffer* This);
7522 void __RPC_STUB IRpcStubBuffer_CountRefs_Stub(
7523     struct IRpcStubBuffer* This,
7524     struct IRpcChannelBuffer* pRpcChannelBuffer,
7525     PRPC_MESSAGE pRpcMessage,
7526     DWORD* pdwStubPhase);
7527 HRESULT CALLBACK IRpcStubBuffer_DebugServerQueryInterface_Proxy(
7528     IRpcStubBuffer* This,
7529     void** ppv);
7530 void __RPC_STUB IRpcStubBuffer_DebugServerQueryInterface_Stub(
7531     struct IRpcStubBuffer* This,
7532     struct IRpcChannelBuffer* pRpcChannelBuffer,
7533     PRPC_MESSAGE pRpcMessage,
7534     DWORD* pdwStubPhase);
7535 void CALLBACK IRpcStubBuffer_DebugServerRelease_Proxy(
7536     IRpcStubBuffer* This,
7537     void* pv);
7538 void __RPC_STUB IRpcStubBuffer_DebugServerRelease_Stub(
7539     struct IRpcStubBuffer* This,
7540     struct IRpcChannelBuffer* pRpcChannelBuffer,
7541     PRPC_MESSAGE pRpcMessage,
7542     DWORD* pdwStubPhase);
7543
7544 typedef struct IPSFactoryBuffer IPSFactoryBuffer;
7545 typedef IPSFactoryBuffer *LPPSFACTORYBUFFER;
7546
7547 /*****************************************************************************
7548  * IPSFactoryBuffer interface
7549  */
7550 DEFINE_GUID(IID_IPSFactoryBuffer, 0xd5f569d0, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
7551 #if defined(__cplusplus) && !defined(CINTERFACE)
7552 struct IPSFactoryBuffer: IUnknown {
7553
7554     virtual HRESULT STDMETHODCALLTYPE CreateProxy(
7555         IUnknown* pUnkOuter,
7556         REFIID riid,
7557         IRpcProxyBuffer** ppProxy,
7558         void** ppv) = 0;
7559
7560     virtual HRESULT STDMETHODCALLTYPE CreateStub(
7561         REFIID riid,
7562         IUnknown* pUnkServer,
7563         IRpcStubBuffer** ppStub) = 0;
7564
7565 } ICOM_COM_INTERFACE_ATTRIBUTE;
7566 #else
7567 typedef struct IPSFactoryBufferVtbl IPSFactoryBufferVtbl;
7568 struct IPSFactoryBuffer {
7569     const IPSFactoryBufferVtbl* lpVtbl;
7570 };
7571 struct IPSFactoryBufferVtbl {
7572     ICOM_MSVTABLE_COMPAT_FIELDS
7573
7574     /*** IUnknown methods ***/
7575     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
7576         IPSFactoryBuffer* This,
7577         REFIID riid,
7578         void** ppvObject);
7579
7580     ULONG (STDMETHODCALLTYPE *AddRef)(
7581         IPSFactoryBuffer* This);
7582
7583     ULONG (STDMETHODCALLTYPE *Release)(
7584         IPSFactoryBuffer* This);
7585
7586     /*** IPSFactoryBuffer methods ***/
7587     HRESULT (STDMETHODCALLTYPE *CreateProxy)(
7588         IPSFactoryBuffer* This,
7589         IUnknown* pUnkOuter,
7590         REFIID riid,
7591         IRpcProxyBuffer** ppProxy,
7592         void** ppv);
7593
7594     HRESULT (STDMETHODCALLTYPE *CreateStub)(
7595         IPSFactoryBuffer* This,
7596         REFIID riid,
7597         IUnknown* pUnkServer,
7598         IRpcStubBuffer** ppStub);
7599
7600 };
7601
7602 #define IPSFactoryBuffer_IMETHODS \
7603     /*** IUnknown methods ***/ \
7604     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7605     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7606     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7607     /*** IPSFactoryBuffer methods ***/ \
7608     HRESULT (STDMETHODCALLTYPE *CreateProxy)(INTERFACE *This, IUnknown* pUnkOuter, REFIID riid, IRpcProxyBuffer** ppProxy, void** ppv); \
7609     HRESULT (STDMETHODCALLTYPE *CreateStub)(INTERFACE *This, REFIID riid, IUnknown* pUnkServer, IRpcStubBuffer** ppStub);
7610
7611 /*** IUnknown methods ***/
7612 #define IPSFactoryBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7613 #define IPSFactoryBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
7614 #define IPSFactoryBuffer_Release(p) (p)->lpVtbl->Release(p)
7615 /*** IPSFactoryBuffer methods ***/
7616 #define IPSFactoryBuffer_CreateProxy(p,a,b,c,d) (p)->lpVtbl->CreateProxy(p,a,b,c,d)
7617 #define IPSFactoryBuffer_CreateStub(p,a,b,c) (p)->lpVtbl->CreateStub(p,a,b,c)
7618
7619 #endif
7620
7621 HRESULT CALLBACK IPSFactoryBuffer_CreateProxy_Proxy(
7622     IPSFactoryBuffer* This,
7623     IUnknown* pUnkOuter,
7624     REFIID riid,
7625     IRpcProxyBuffer** ppProxy,
7626     void** ppv);
7627 void __RPC_STUB IPSFactoryBuffer_CreateProxy_Stub(
7628     struct IRpcStubBuffer* This,
7629     struct IRpcChannelBuffer* pRpcChannelBuffer,
7630     PRPC_MESSAGE pRpcMessage,
7631     DWORD* pdwStubPhase);
7632 HRESULT CALLBACK IPSFactoryBuffer_CreateStub_Proxy(
7633     IPSFactoryBuffer* This,
7634     REFIID riid,
7635     IUnknown* pUnkServer,
7636     IRpcStubBuffer** ppStub);
7637 void __RPC_STUB IPSFactoryBuffer_CreateStub_Stub(
7638     struct IRpcStubBuffer* This,
7639     struct IRpcChannelBuffer* pRpcChannelBuffer,
7640     PRPC_MESSAGE pRpcMessage,
7641     DWORD* pdwStubPhase);
7642
7643 typedef struct IChannelHook IChannelHook;
7644 typedef IChannelHook *LPCHANNELHOOK;
7645
7646 typedef struct SChannelHookCallInfo {
7647     IID iid;
7648     DWORD cbSize;
7649     GUID uCausality;
7650     DWORD dwServerPid;
7651     DWORD iMethod;
7652     void *pObject;
7653 } SChannelHookCallInfo;
7654
7655 /*****************************************************************************
7656  * IChannelHook interface
7657  */
7658 DEFINE_GUID(IID_IChannelHook, 0x1008c4a0, 0x7613, 0x11cf, 0x9a,0xf1, 0x00,0x20,0xaf,0x6e,0x72,0xf4);
7659 #if defined(__cplusplus) && !defined(CINTERFACE)
7660 struct IChannelHook: IUnknown {
7661
7662     virtual void STDMETHODCALLTYPE ClientGetSize(
7663         REFGUID uExtent,
7664         REFIID riid,
7665         ULONG* pDataSize) = 0;
7666
7667     virtual void STDMETHODCALLTYPE ClientFillBuffer(
7668         REFGUID uExtent,
7669         REFIID riid,
7670         ULONG* pDataSize,
7671         void* pDataBuffer) = 0;
7672
7673     virtual void STDMETHODCALLTYPE ClientNotify(
7674         REFGUID uExtent,
7675         REFIID riid,
7676         ULONG cbDataSize,
7677         void* pDataBuffer,
7678         DWORD lDataRep,
7679         HRESULT hrFault) = 0;
7680
7681     virtual void STDMETHODCALLTYPE ServerNotify(
7682         REFGUID uExtent,
7683         REFIID riid,
7684         ULONG cbDataSize,
7685         void* pDataBuffer,
7686         DWORD lDataRep) = 0;
7687
7688     virtual void STDMETHODCALLTYPE ServerGetSize(
7689         REFGUID uExtent,
7690         REFIID riid,
7691         HRESULT hrFault,
7692         ULONG* pDataSize) = 0;
7693
7694     virtual void STDMETHODCALLTYPE ServerFillBuffer(
7695         REFGUID uExtent,
7696         REFIID riid,
7697         ULONG* pDataSize,
7698         void* pDataBuffer,
7699         HRESULT hrFault) = 0;
7700
7701 } ICOM_COM_INTERFACE_ATTRIBUTE;
7702 #else
7703 typedef struct IChannelHookVtbl IChannelHookVtbl;
7704 struct IChannelHook {
7705     const IChannelHookVtbl* lpVtbl;
7706 };
7707 struct IChannelHookVtbl {
7708     ICOM_MSVTABLE_COMPAT_FIELDS
7709
7710     /*** IUnknown methods ***/
7711     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
7712         IChannelHook* This,
7713         REFIID riid,
7714         void** ppvObject);
7715
7716     ULONG (STDMETHODCALLTYPE *AddRef)(
7717         IChannelHook* This);
7718
7719     ULONG (STDMETHODCALLTYPE *Release)(
7720         IChannelHook* This);
7721
7722     /*** IChannelHook methods ***/
7723     void (STDMETHODCALLTYPE *ClientGetSize)(
7724         IChannelHook* This,
7725         REFGUID uExtent,
7726         REFIID riid,
7727         ULONG* pDataSize);
7728
7729     void (STDMETHODCALLTYPE *ClientFillBuffer)(
7730         IChannelHook* This,
7731         REFGUID uExtent,
7732         REFIID riid,
7733         ULONG* pDataSize,
7734         void* pDataBuffer);
7735
7736     void (STDMETHODCALLTYPE *ClientNotify)(
7737         IChannelHook* This,
7738         REFGUID uExtent,
7739         REFIID riid,
7740         ULONG cbDataSize,
7741         void* pDataBuffer,
7742         DWORD lDataRep,
7743         HRESULT hrFault);
7744
7745     void (STDMETHODCALLTYPE *ServerNotify)(
7746         IChannelHook* This,
7747         REFGUID uExtent,
7748         REFIID riid,
7749         ULONG cbDataSize,
7750         void* pDataBuffer,
7751         DWORD lDataRep);
7752
7753     void (STDMETHODCALLTYPE *ServerGetSize)(
7754         IChannelHook* This,
7755         REFGUID uExtent,
7756         REFIID riid,
7757         HRESULT hrFault,
7758         ULONG* pDataSize);
7759
7760     void (STDMETHODCALLTYPE *ServerFillBuffer)(
7761         IChannelHook* This,
7762         REFGUID uExtent,
7763         REFIID riid,
7764         ULONG* pDataSize,
7765         void* pDataBuffer,
7766         HRESULT hrFault);
7767
7768 };
7769
7770 #define IChannelHook_IMETHODS \
7771     /*** IUnknown methods ***/ \
7772     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
7773     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
7774     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
7775     /*** IChannelHook methods ***/ \
7776     void (STDMETHODCALLTYPE *ClientGetSize)(INTERFACE *This, REFGUID uExtent, REFIID riid, ULONG* pDataSize); \
7777     void (STDMETHODCALLTYPE *ClientFillBuffer)(INTERFACE *This, REFGUID uExtent, REFIID riid, ULONG* pDataSize, void* pDataBuffer); \
7778     void (STDMETHODCALLTYPE *ClientNotify)(INTERFACE *This, REFGUID uExtent, REFIID riid, ULONG cbDataSize, void* pDataBuffer, DWORD lDataRep, HRESULT hrFault); \
7779     void (STDMETHODCALLTYPE *ServerNotify)(INTERFACE *This, REFGUID uExtent, REFIID riid, ULONG cbDataSize, void* pDataBuffer, DWORD lDataRep); \
7780     void (STDMETHODCALLTYPE *ServerGetSize)(INTERFACE *This, REFGUID uExtent, REFIID riid, HRESULT hrFault, ULONG* pDataSize); \
7781     void (STDMETHODCALLTYPE *ServerFillBuffer)(INTERFACE *This, REFGUID uExtent, REFIID riid, ULONG* pDataSize, void* pDataBuffer, HRESULT hrFault);
7782
7783 /*** IUnknown methods ***/
7784 #define IChannelHook_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
7785 #define IChannelHook_AddRef(p) (p)->lpVtbl->AddRef(p)
7786 #define IChannelHook_Release(p) (p)->lpVtbl->Release(p)
7787 /*** IChannelHook methods ***/
7788 #define IChannelHook_ClientGetSize(p,a,b,c) (p)->lpVtbl->ClientGetSize(p,a,b,c)
7789 #define IChannelHook_ClientFillBuffer(p,a,b,c,d) (p)->lpVtbl->ClientFillBuffer(p,a,b,c,d)
7790 #define IChannelHook_ClientNotify(p,a,b,c,d,e,f) (p)->lpVtbl->ClientNotify(p,a,b,c,d,e,f)
7791 #define IChannelHook_ServerNotify(p,a,b,c,d,e) (p)->lpVtbl->ServerNotify(p,a,b,c,d,e)
7792 #define IChannelHook_ServerGetSize(p,a,b,c,d) (p)->lpVtbl->ServerGetSize(p,a,b,c,d)
7793 #define IChannelHook_ServerFillBuffer(p,a,b,c,d,e) (p)->lpVtbl->ServerFillBuffer(p,a,b,c,d,e)
7794
7795 #endif
7796
7797 void CALLBACK IChannelHook_ClientGetSize_Proxy(
7798     IChannelHook* This,
7799     REFGUID uExtent,
7800     REFIID riid,
7801     ULONG* pDataSize);
7802 void __RPC_STUB IChannelHook_ClientGetSize_Stub(
7803     struct IRpcStubBuffer* This,
7804     struct IRpcChannelBuffer* pRpcChannelBuffer,
7805     PRPC_MESSAGE pRpcMessage,
7806     DWORD* pdwStubPhase);
7807 void CALLBACK IChannelHook_ClientFillBuffer_Proxy(
7808     IChannelHook* This,
7809     REFGUID uExtent,
7810     REFIID riid,
7811     ULONG* pDataSize,
7812     void* pDataBuffer);
7813 void __RPC_STUB IChannelHook_ClientFillBuffer_Stub(
7814     struct IRpcStubBuffer* This,
7815     struct IRpcChannelBuffer* pRpcChannelBuffer,
7816     PRPC_MESSAGE pRpcMessage,
7817     DWORD* pdwStubPhase);
7818 void CALLBACK IChannelHook_ClientNotify_Proxy(
7819     IChannelHook* This,
7820     REFGUID uExtent,
7821     REFIID riid,
7822     ULONG cbDataSize,
7823     void* pDataBuffer,
7824     DWORD lDataRep,
7825     HRESULT hrFault);
7826 void __RPC_STUB IChannelHook_ClientNotify_Stub(
7827     struct IRpcStubBuffer* This,
7828     struct IRpcChannelBuffer* pRpcChannelBuffer,
7829     PRPC_MESSAGE pRpcMessage,
7830     DWORD* pdwStubPhase);
7831 void CALLBACK IChannelHook_ServerNotify_Proxy(
7832     IChannelHook* This,
7833     REFGUID uExtent,
7834     REFIID riid,
7835     ULONG cbDataSize,
7836     void* pDataBuffer,
7837     DWORD lDataRep);
7838 void __RPC_STUB IChannelHook_ServerNotify_Stub(
7839     struct IRpcStubBuffer* This,
7840     struct IRpcChannelBuffer* pRpcChannelBuffer,
7841     PRPC_MESSAGE pRpcMessage,
7842     DWORD* pdwStubPhase);
7843 void CALLBACK IChannelHook_ServerGetSize_Proxy(
7844     IChannelHook* This,
7845     REFGUID uExtent,
7846     REFIID riid,
7847     HRESULT hrFault,
7848     ULONG* pDataSize);
7849 void __RPC_STUB IChannelHook_ServerGetSize_Stub(
7850     struct IRpcStubBuffer* This,
7851     struct IRpcChannelBuffer* pRpcChannelBuffer,
7852     PRPC_MESSAGE pRpcMessage,
7853     DWORD* pdwStubPhase);
7854 void CALLBACK IChannelHook_ServerFillBuffer_Proxy(
7855     IChannelHook* This,
7856     REFGUID uExtent,
7857     REFIID riid,
7858     ULONG* pDataSize,
7859     void* pDataBuffer,
7860     HRESULT hrFault);
7861 void __RPC_STUB IChannelHook_ServerFillBuffer_Stub(
7862     struct IRpcStubBuffer* This,
7863     struct IRpcChannelBuffer* pRpcChannelBuffer,
7864     PRPC_MESSAGE pRpcMessage,
7865     DWORD* pdwStubPhase);
7866
7867 typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG;
7868 typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
7869 typedef struct IPropertyStorage IPropertyStorage;
7870 typedef IPropertyStorage *LPPROPERTYSTORAGE;
7871
7872 extern const FMTID FMTID_SummaryInformation;
7873
7874 extern const FMTID FMTID_DocSummaryInformation;
7875
7876 extern const FMTID FMTID_UserDefinedProperties;
7877
7878 #define PROPSETFLAG_DEFAULT (0)
7879
7880 #define PROPSETFLAG_NONSIMPLE (1)
7881
7882 #define PROPSETFLAG_ANSI (2)
7883
7884 #define PROPSETFLAG_UNBUFFERED (4)
7885
7886 typedef struct tagPROPVARIANT PROPVARIANT;
7887
7888 typedef struct tagCAUB {
7889     ULONG cElems;
7890     unsigned char *pElems;
7891 } CAUB;
7892
7893 typedef struct tagCAI {
7894     ULONG cElems;
7895     short *pElems;
7896 } CAI;
7897
7898 typedef struct tagCAUI {
7899     ULONG cElems;
7900     USHORT *pElems;
7901 } CAUI;
7902
7903 typedef struct tagCAL {
7904     ULONG cElems;
7905     long *pElems;
7906 } CAL;
7907
7908 typedef struct tagCAUL {
7909     ULONG cElems;
7910     ULONG *pElems;
7911 } CAUL;
7912
7913 typedef struct tagCAFLT {
7914     ULONG cElems;
7915     float *pElems;
7916 } CAFLT;
7917
7918 typedef struct tagCADBL {
7919     ULONG cElems;
7920     double *pElems;
7921 } CADBL;
7922
7923 typedef struct tagCACY {
7924     ULONG cElems;
7925     CY *pElems;
7926 } CACY;
7927
7928 typedef struct tagCADATE {
7929     ULONG cElems;
7930     DATE *pElems;
7931 } CADATE;
7932
7933 typedef struct tagCABSTR {
7934     ULONG cElems;
7935     BSTR *pElems;
7936 } CABSTR;
7937
7938 typedef struct tagCABSTRBLOB {
7939     ULONG cElems;
7940     BSTRBLOB *pElems;
7941 } CABSTRBLOB;
7942
7943 typedef struct tagCABOOL {
7944     ULONG cElems;
7945     VARIANT_BOOL *pElems;
7946 } CABOOL;
7947
7948 typedef struct tagCASCODE {
7949     ULONG cElems;
7950     SCODE *pElems;
7951 } CASCODE;
7952
7953 typedef struct tagCAPROPVARIANT {
7954     ULONG cElems;
7955     PROPVARIANT *pElems;
7956 } CAPROPVARIANT;
7957
7958 typedef struct tagCAH {
7959     ULONG cElems;
7960     LARGE_INTEGER *pElems;
7961 } CAH;
7962
7963 typedef struct tagCAUH {
7964     ULONG cElems;
7965     ULARGE_INTEGER *pElems;
7966 } CAUH;
7967
7968 typedef struct tagCALPSTR {
7969     ULONG cElems;
7970     LPSTR *pElems;
7971 } CALPSTR;
7972
7973 typedef struct tagCALPWSTR {
7974     ULONG cElems;
7975     LPWSTR *pElems;
7976 } CALPWSTR;
7977
7978 typedef struct tagCAFILETIME {
7979     ULONG cElems;
7980     FILETIME *pElems;
7981 } CAFILETIME;
7982
7983 typedef struct tagCACLIPDATA {
7984     ULONG cElems;
7985     CLIPDATA *pElems;
7986 } CACLIPDATA;
7987
7988 typedef struct tagCACLSID {
7989     ULONG cElems;
7990     CLSID *pElems;
7991 } CACLSID;
7992
7993 struct tagPROPVARIANT {
7994     VARTYPE vt;
7995     WORD wReserved1;
7996     WORD wReserved2;
7997     WORD wReserved3;
7998     union {
7999         UCHAR bVal;
8000         short iVal;
8001         USHORT uiVal;
8002         VARIANT_BOOL boolVal;
8003         long lVal;
8004         ULONG ulVal;
8005         float fltVal;
8006         SCODE scode;
8007         LARGE_INTEGER hVal;
8008         ULARGE_INTEGER uhVal;
8009         double dblVal;
8010         CY cyVal;
8011         DATE date;
8012         FILETIME filetime;
8013         CLSID *puuid;
8014         BLOB blob;
8015         CLIPDATA *pclipdata;
8016         IStream *pStream;
8017         IStorage *pStorage;
8018         BSTR bstrVal;
8019         BSTRBLOB bstrblobVal;
8020         LPSTR pszVal;
8021         LPWSTR pwszVal;
8022         CAUB caub;
8023         CAI cai;
8024         CAUI caui;
8025         CABOOL cabool;
8026         CAL cal;
8027         CAUL caul;
8028         CAFLT caflt;
8029         CASCODE cascode;
8030         CAH cah;
8031         CAUH cauh;
8032         CADBL cadbl;
8033         CACY cacy;
8034         CADATE cadate;
8035         CAFILETIME cafiletime;
8036         CACLSID cauuid;
8037         CACLIPDATA caclipdata;
8038         CABSTR cabstr;
8039         CABSTRBLOB cabstrblob;
8040         CALPSTR calpstr;
8041         CALPWSTR calpwstr;
8042         CAPROPVARIANT capropvar;
8043     } DUMMYUNIONNAME;
8044 };
8045
8046 typedef struct tagPROPVARIANT *LPPROPVARIANT;
8047
8048 #define PRSPEC_INVALID (0x7fffffff)
8049
8050 #define PRSPEC_LPWSTR (0)
8051
8052 #define PRSPEC_PROPID (1)
8053
8054 typedef struct tagPROPSPEC {
8055     ULONG ulKind;
8056     union {
8057         PROPID propid;
8058         LPOLESTR lpwstr;
8059     } DUMMYUNIONNAME;
8060 } PROPSPEC;
8061
8062 typedef struct tagSTATPROPSTG {
8063     LPOLESTR lpwstrName;
8064     PROPID propid;
8065     VARTYPE vt;
8066 } STATPROPSTG;
8067
8068 typedef struct tagSTATPROPSETSTG {
8069     FMTID fmtid;
8070     CLSID clsid;
8071     DWORD grfFlags;
8072     FILETIME mtime;
8073     FILETIME ctime;
8074     FILETIME atime;
8075     DWORD dwOSVersion;
8076 } STATPROPSETSTG;
8077
8078 /*****************************************************************************
8079  * IPropertyStorage interface
8080  */
8081 DEFINE_GUID(IID_IPropertyStorage, 0x00000138, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8082 #if defined(__cplusplus) && !defined(CINTERFACE)
8083 struct IPropertyStorage: IUnknown {
8084
8085     virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
8086         ULONG cpspec,
8087         const PROPSPEC rgpspec[],
8088         PROPVARIANT rgpropvar[]) = 0;
8089
8090     virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
8091         ULONG cpspec,
8092         const PROPSPEC rgpspec[],
8093         const PROPVARIANT rgpropvar[],
8094         PROPID propidNameFirst) = 0;
8095
8096     virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
8097         ULONG cpspec,
8098         const PROPSPEC rgpspec[]) = 0;
8099
8100     virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
8101         ULONG cpropid,
8102         const PROPID rgpropid[],
8103         LPOLESTR rglpwstrName[]) = 0;
8104
8105     virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
8106         ULONG cpropid,
8107         const PROPID rgpropid[],
8108         const LPOLESTR rglpwstrName[]) = 0;
8109
8110     virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
8111         ULONG cpropid,
8112         const PROPID rgpropid[]) = 0;
8113
8114     virtual HRESULT STDMETHODCALLTYPE Commit(
8115         DWORD grfCommitFlags) = 0;
8116
8117     virtual HRESULT STDMETHODCALLTYPE Revert(
8118         ) = 0;
8119
8120     virtual HRESULT STDMETHODCALLTYPE Enum(
8121         IEnumSTATPROPSTG** ppenum) = 0;
8122
8123     virtual HRESULT STDMETHODCALLTYPE SetTimes(
8124         const FILETIME* pctime,
8125         const FILETIME* patime,
8126         const FILETIME* pmtime) = 0;
8127
8128     virtual HRESULT STDMETHODCALLTYPE SetClass(
8129         REFCLSID clsid) = 0;
8130
8131     virtual HRESULT STDMETHODCALLTYPE Stat(
8132         STATPROPSETSTG* statpsstg) = 0;
8133
8134 } ICOM_COM_INTERFACE_ATTRIBUTE;
8135 #else
8136 typedef struct IPropertyStorageVtbl IPropertyStorageVtbl;
8137 struct IPropertyStorage {
8138     const IPropertyStorageVtbl* lpVtbl;
8139 };
8140 struct IPropertyStorageVtbl {
8141     ICOM_MSVTABLE_COMPAT_FIELDS
8142
8143     /*** IUnknown methods ***/
8144     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8145         IPropertyStorage* This,
8146         REFIID riid,
8147         void** ppvObject);
8148
8149     ULONG (STDMETHODCALLTYPE *AddRef)(
8150         IPropertyStorage* This);
8151
8152     ULONG (STDMETHODCALLTYPE *Release)(
8153         IPropertyStorage* This);
8154
8155     /*** IPropertyStorage methods ***/
8156     HRESULT (STDMETHODCALLTYPE *ReadMultiple)(
8157         IPropertyStorage* This,
8158         ULONG cpspec,
8159         const PROPSPEC rgpspec[],
8160         PROPVARIANT rgpropvar[]);
8161
8162     HRESULT (STDMETHODCALLTYPE *WriteMultiple)(
8163         IPropertyStorage* This,
8164         ULONG cpspec,
8165         const PROPSPEC rgpspec[],
8166         const PROPVARIANT rgpropvar[],
8167         PROPID propidNameFirst);
8168
8169     HRESULT (STDMETHODCALLTYPE *DeleteMultiple)(
8170         IPropertyStorage* This,
8171         ULONG cpspec,
8172         const PROPSPEC rgpspec[]);
8173
8174     HRESULT (STDMETHODCALLTYPE *ReadPropertyNames)(
8175         IPropertyStorage* This,
8176         ULONG cpropid,
8177         const PROPID rgpropid[],
8178         LPOLESTR rglpwstrName[]);
8179
8180     HRESULT (STDMETHODCALLTYPE *WritePropertyNames)(
8181         IPropertyStorage* This,
8182         ULONG cpropid,
8183         const PROPID rgpropid[],
8184         const LPOLESTR rglpwstrName[]);
8185
8186     HRESULT (STDMETHODCALLTYPE *DeletePropertyNames)(
8187         IPropertyStorage* This,
8188         ULONG cpropid,
8189         const PROPID rgpropid[]);
8190
8191     HRESULT (STDMETHODCALLTYPE *Commit)(
8192         IPropertyStorage* This,
8193         DWORD grfCommitFlags);
8194
8195     HRESULT (STDMETHODCALLTYPE *Revert)(
8196         IPropertyStorage* This);
8197
8198     HRESULT (STDMETHODCALLTYPE *Enum)(
8199         IPropertyStorage* This,
8200         IEnumSTATPROPSTG** ppenum);
8201
8202     HRESULT (STDMETHODCALLTYPE *SetTimes)(
8203         IPropertyStorage* This,
8204         const FILETIME* pctime,
8205         const FILETIME* patime,
8206         const FILETIME* pmtime);
8207
8208     HRESULT (STDMETHODCALLTYPE *SetClass)(
8209         IPropertyStorage* This,
8210         REFCLSID clsid);
8211
8212     HRESULT (STDMETHODCALLTYPE *Stat)(
8213         IPropertyStorage* This,
8214         STATPROPSETSTG* statpsstg);
8215
8216 };
8217
8218 #define IPropertyStorage_IMETHODS \
8219     /*** IUnknown methods ***/ \
8220     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8221     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8222     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
8223     /*** IPropertyStorage methods ***/ \
8224     HRESULT (STDMETHODCALLTYPE *ReadMultiple)(INTERFACE *This, ULONG cpspec, const PROPSPEC rgpspec[], PROPVARIANT rgpropvar[]); \
8225     HRESULT (STDMETHODCALLTYPE *WriteMultiple)(INTERFACE *This, ULONG cpspec, const PROPSPEC rgpspec[], const PROPVARIANT rgpropvar[], PROPID propidNameFirst); \
8226     HRESULT (STDMETHODCALLTYPE *DeleteMultiple)(INTERFACE *This, ULONG cpspec, const PROPSPEC rgpspec[]); \
8227     HRESULT (STDMETHODCALLTYPE *ReadPropertyNames)(INTERFACE *This, ULONG cpropid, const PROPID rgpropid[], LPOLESTR rglpwstrName[]); \
8228     HRESULT (STDMETHODCALLTYPE *WritePropertyNames)(INTERFACE *This, ULONG cpropid, const PROPID rgpropid[], const LPOLESTR rglpwstrName[]); \
8229     HRESULT (STDMETHODCALLTYPE *DeletePropertyNames)(INTERFACE *This, ULONG cpropid, const PROPID rgpropid[]); \
8230     HRESULT (STDMETHODCALLTYPE *Commit)(INTERFACE *This, DWORD grfCommitFlags); \
8231     HRESULT (STDMETHODCALLTYPE *Revert)(INTERFACE *This); \
8232     HRESULT (STDMETHODCALLTYPE *Enum)(INTERFACE *This, IEnumSTATPROPSTG** ppenum); \
8233     HRESULT (STDMETHODCALLTYPE *SetTimes)(INTERFACE *This, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime); \
8234     HRESULT (STDMETHODCALLTYPE *SetClass)(INTERFACE *This, REFCLSID clsid); \
8235     HRESULT (STDMETHODCALLTYPE *Stat)(INTERFACE *This, STATPROPSETSTG* statpsstg);
8236
8237 /*** IUnknown methods ***/
8238 #define IPropertyStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
8239 #define IPropertyStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
8240 #define IPropertyStorage_Release(p) (p)->lpVtbl->Release(p)
8241 /*** IPropertyStorage methods ***/
8242 #define IPropertyStorage_ReadMultiple(p,a,b,c) (p)->lpVtbl->ReadMultiple(p,a,b,c)
8243 #define IPropertyStorage_WriteMultiple(p,a,b,c,d) (p)->lpVtbl->WriteMultiple(p,a,b,c,d)
8244 #define IPropertyStorage_DeleteMultiple(p,a,b) (p)->lpVtbl->DeleteMultiple(p,a,b)
8245 #define IPropertyStorage_ReadPropertyNames(p,a,b,c) (p)->lpVtbl->ReadPropertyNames(p,a,b,c)
8246 #define IPropertyStorage_WritePropertyNames(p,a,b,c) (p)->lpVtbl->WritePropertyNames(p,a,b,c)
8247 #define IPropertyStorage_DeletePropertyNames(p,a,b) (p)->lpVtbl->DeletePropertyNames(p,a,b)
8248 #define IPropertyStorage_Commit(p,a) (p)->lpVtbl->Commit(p,a)
8249 #define IPropertyStorage_Revert(p) (p)->lpVtbl->Revert(p)
8250 #define IPropertyStorage_Enum(p,a) (p)->lpVtbl->Enum(p,a)
8251 #define IPropertyStorage_SetTimes(p,a,b,c) (p)->lpVtbl->SetTimes(p,a,b,c)
8252 #define IPropertyStorage_SetClass(p,a) (p)->lpVtbl->SetClass(p,a)
8253 #define IPropertyStorage_Stat(p,a) (p)->lpVtbl->Stat(p,a)
8254
8255 #endif
8256
8257 HRESULT CALLBACK IPropertyStorage_ReadMultiple_Proxy(
8258     IPropertyStorage* This,
8259     ULONG cpspec,
8260     const PROPSPEC rgpspec[],
8261     PROPVARIANT rgpropvar[]);
8262 void __RPC_STUB IPropertyStorage_ReadMultiple_Stub(
8263     struct IRpcStubBuffer* This,
8264     struct IRpcChannelBuffer* pRpcChannelBuffer,
8265     PRPC_MESSAGE pRpcMessage,
8266     DWORD* pdwStubPhase);
8267 HRESULT CALLBACK IPropertyStorage_WriteMultiple_Proxy(
8268     IPropertyStorage* This,
8269     ULONG cpspec,
8270     const PROPSPEC rgpspec[],
8271     const PROPVARIANT rgpropvar[],
8272     PROPID propidNameFirst);
8273 void __RPC_STUB IPropertyStorage_WriteMultiple_Stub(
8274     struct IRpcStubBuffer* This,
8275     struct IRpcChannelBuffer* pRpcChannelBuffer,
8276     PRPC_MESSAGE pRpcMessage,
8277     DWORD* pdwStubPhase);
8278 HRESULT CALLBACK IPropertyStorage_DeleteMultiple_Proxy(
8279     IPropertyStorage* This,
8280     ULONG cpspec,
8281     const PROPSPEC rgpspec[]);
8282 void __RPC_STUB IPropertyStorage_DeleteMultiple_Stub(
8283     struct IRpcStubBuffer* This,
8284     struct IRpcChannelBuffer* pRpcChannelBuffer,
8285     PRPC_MESSAGE pRpcMessage,
8286     DWORD* pdwStubPhase);
8287 HRESULT CALLBACK IPropertyStorage_ReadPropertyNames_Proxy(
8288     IPropertyStorage* This,
8289     ULONG cpropid,
8290     const PROPID rgpropid[],
8291     LPOLESTR rglpwstrName[]);
8292 void __RPC_STUB IPropertyStorage_ReadPropertyNames_Stub(
8293     struct IRpcStubBuffer* This,
8294     struct IRpcChannelBuffer* pRpcChannelBuffer,
8295     PRPC_MESSAGE pRpcMessage,
8296     DWORD* pdwStubPhase);
8297 HRESULT CALLBACK IPropertyStorage_WritePropertyNames_Proxy(
8298     IPropertyStorage* This,
8299     ULONG cpropid,
8300     const PROPID rgpropid[],
8301     const LPOLESTR rglpwstrName[]);
8302 void __RPC_STUB IPropertyStorage_WritePropertyNames_Stub(
8303     struct IRpcStubBuffer* This,
8304     struct IRpcChannelBuffer* pRpcChannelBuffer,
8305     PRPC_MESSAGE pRpcMessage,
8306     DWORD* pdwStubPhase);
8307 HRESULT CALLBACK IPropertyStorage_DeletePropertyNames_Proxy(
8308     IPropertyStorage* This,
8309     ULONG cpropid,
8310     const PROPID rgpropid[]);
8311 void __RPC_STUB IPropertyStorage_DeletePropertyNames_Stub(
8312     struct IRpcStubBuffer* This,
8313     struct IRpcChannelBuffer* pRpcChannelBuffer,
8314     PRPC_MESSAGE pRpcMessage,
8315     DWORD* pdwStubPhase);
8316 HRESULT CALLBACK IPropertyStorage_Commit_Proxy(
8317     IPropertyStorage* This,
8318     DWORD grfCommitFlags);
8319 void __RPC_STUB IPropertyStorage_Commit_Stub(
8320     struct IRpcStubBuffer* This,
8321     struct IRpcChannelBuffer* pRpcChannelBuffer,
8322     PRPC_MESSAGE pRpcMessage,
8323     DWORD* pdwStubPhase);
8324 HRESULT CALLBACK IPropertyStorage_Revert_Proxy(
8325     IPropertyStorage* This);
8326 void __RPC_STUB IPropertyStorage_Revert_Stub(
8327     struct IRpcStubBuffer* This,
8328     struct IRpcChannelBuffer* pRpcChannelBuffer,
8329     PRPC_MESSAGE pRpcMessage,
8330     DWORD* pdwStubPhase);
8331 HRESULT CALLBACK IPropertyStorage_Enum_Proxy(
8332     IPropertyStorage* This,
8333     IEnumSTATPROPSTG** ppenum);
8334 void __RPC_STUB IPropertyStorage_Enum_Stub(
8335     struct IRpcStubBuffer* This,
8336     struct IRpcChannelBuffer* pRpcChannelBuffer,
8337     PRPC_MESSAGE pRpcMessage,
8338     DWORD* pdwStubPhase);
8339 HRESULT CALLBACK IPropertyStorage_SetTimes_Proxy(
8340     IPropertyStorage* This,
8341     const FILETIME* pctime,
8342     const FILETIME* patime,
8343     const FILETIME* pmtime);
8344 void __RPC_STUB IPropertyStorage_SetTimes_Stub(
8345     struct IRpcStubBuffer* This,
8346     struct IRpcChannelBuffer* pRpcChannelBuffer,
8347     PRPC_MESSAGE pRpcMessage,
8348     DWORD* pdwStubPhase);
8349 HRESULT CALLBACK IPropertyStorage_SetClass_Proxy(
8350     IPropertyStorage* This,
8351     REFCLSID clsid);
8352 void __RPC_STUB IPropertyStorage_SetClass_Stub(
8353     struct IRpcStubBuffer* This,
8354     struct IRpcChannelBuffer* pRpcChannelBuffer,
8355     PRPC_MESSAGE pRpcMessage,
8356     DWORD* pdwStubPhase);
8357 HRESULT CALLBACK IPropertyStorage_Stat_Proxy(
8358     IPropertyStorage* This,
8359     STATPROPSETSTG* statpsstg);
8360 void __RPC_STUB IPropertyStorage_Stat_Stub(
8361     struct IRpcStubBuffer* This,
8362     struct IRpcChannelBuffer* pRpcChannelBuffer,
8363     PRPC_MESSAGE pRpcMessage,
8364     DWORD* pdwStubPhase);
8365
8366 typedef struct IPropertySetStorage IPropertySetStorage;
8367 typedef IPropertySetStorage *LPPROPERTYSETSTORAGE;
8368
8369 /*****************************************************************************
8370  * IPropertySetStorage interface
8371  */
8372 DEFINE_GUID(IID_IPropertySetStorage, 0x0000013a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8373 #if defined(__cplusplus) && !defined(CINTERFACE)
8374 struct IPropertySetStorage: IUnknown {
8375
8376     virtual HRESULT STDMETHODCALLTYPE Create(
8377         REFFMTID rfmtid,
8378         const CLSID* pclsid,
8379         DWORD grfFlags,
8380         DWORD grfMode,
8381         IPropertyStorage** ppprstg) = 0;
8382
8383     virtual HRESULT STDMETHODCALLTYPE Open(
8384         REFFMTID rfmtid,
8385         DWORD grfMode,
8386         IPropertyStorage** ppprstg) = 0;
8387
8388     virtual HRESULT STDMETHODCALLTYPE Delete(
8389         REFFMTID rfmtid) = 0;
8390
8391     virtual HRESULT STDMETHODCALLTYPE Enum(
8392         IEnumSTATPROPSETSTG** ppenum) = 0;
8393
8394 } ICOM_COM_INTERFACE_ATTRIBUTE;
8395 #else
8396 typedef struct IPropertySetStorageVtbl IPropertySetStorageVtbl;
8397 struct IPropertySetStorage {
8398     const IPropertySetStorageVtbl* lpVtbl;
8399 };
8400 struct IPropertySetStorageVtbl {
8401     ICOM_MSVTABLE_COMPAT_FIELDS
8402
8403     /*** IUnknown methods ***/
8404     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8405         IPropertySetStorage* This,
8406         REFIID riid,
8407         void** ppvObject);
8408
8409     ULONG (STDMETHODCALLTYPE *AddRef)(
8410         IPropertySetStorage* This);
8411
8412     ULONG (STDMETHODCALLTYPE *Release)(
8413         IPropertySetStorage* This);
8414
8415     /*** IPropertySetStorage methods ***/
8416     HRESULT (STDMETHODCALLTYPE *Create)(
8417         IPropertySetStorage* This,
8418         REFFMTID rfmtid,
8419         const CLSID* pclsid,
8420         DWORD grfFlags,
8421         DWORD grfMode,
8422         IPropertyStorage** ppprstg);
8423
8424     HRESULT (STDMETHODCALLTYPE *Open)(
8425         IPropertySetStorage* This,
8426         REFFMTID rfmtid,
8427         DWORD grfMode,
8428         IPropertyStorage** ppprstg);
8429
8430     HRESULT (STDMETHODCALLTYPE *Delete)(
8431         IPropertySetStorage* This,
8432         REFFMTID rfmtid);
8433
8434     HRESULT (STDMETHODCALLTYPE *Enum)(
8435         IPropertySetStorage* This,
8436         IEnumSTATPROPSETSTG** ppenum);
8437
8438 };
8439
8440 #define IPropertySetStorage_IMETHODS \
8441     /*** IUnknown methods ***/ \
8442     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8443     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8444     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
8445     /*** IPropertySetStorage methods ***/ \
8446     HRESULT (STDMETHODCALLTYPE *Create)(INTERFACE *This, REFFMTID rfmtid, const CLSID* pclsid, DWORD grfFlags, DWORD grfMode, IPropertyStorage** ppprstg); \
8447     HRESULT (STDMETHODCALLTYPE *Open)(INTERFACE *This, REFFMTID rfmtid, DWORD grfMode, IPropertyStorage** ppprstg); \
8448     HRESULT (STDMETHODCALLTYPE *Delete)(INTERFACE *This, REFFMTID rfmtid); \
8449     HRESULT (STDMETHODCALLTYPE *Enum)(INTERFACE *This, IEnumSTATPROPSETSTG** ppenum);
8450
8451 /*** IUnknown methods ***/
8452 #define IPropertySetStorage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
8453 #define IPropertySetStorage_AddRef(p) (p)->lpVtbl->AddRef(p)
8454 #define IPropertySetStorage_Release(p) (p)->lpVtbl->Release(p)
8455 /*** IPropertySetStorage methods ***/
8456 #define IPropertySetStorage_Create(p,a,b,c,d,e) (p)->lpVtbl->Create(p,a,b,c,d,e)
8457 #define IPropertySetStorage_Open(p,a,b,c) (p)->lpVtbl->Open(p,a,b,c)
8458 #define IPropertySetStorage_Delete(p,a) (p)->lpVtbl->Delete(p,a)
8459 #define IPropertySetStorage_Enum(p,a) (p)->lpVtbl->Enum(p,a)
8460
8461 #endif
8462
8463 HRESULT CALLBACK IPropertySetStorage_Create_Proxy(
8464     IPropertySetStorage* This,
8465     REFFMTID rfmtid,
8466     const CLSID* pclsid,
8467     DWORD grfFlags,
8468     DWORD grfMode,
8469     IPropertyStorage** ppprstg);
8470 void __RPC_STUB IPropertySetStorage_Create_Stub(
8471     struct IRpcStubBuffer* This,
8472     struct IRpcChannelBuffer* pRpcChannelBuffer,
8473     PRPC_MESSAGE pRpcMessage,
8474     DWORD* pdwStubPhase);
8475 HRESULT CALLBACK IPropertySetStorage_Open_Proxy(
8476     IPropertySetStorage* This,
8477     REFFMTID rfmtid,
8478     DWORD grfMode,
8479     IPropertyStorage** ppprstg);
8480 void __RPC_STUB IPropertySetStorage_Open_Stub(
8481     struct IRpcStubBuffer* This,
8482     struct IRpcChannelBuffer* pRpcChannelBuffer,
8483     PRPC_MESSAGE pRpcMessage,
8484     DWORD* pdwStubPhase);
8485 HRESULT CALLBACK IPropertySetStorage_Delete_Proxy(
8486     IPropertySetStorage* This,
8487     REFFMTID rfmtid);
8488 void __RPC_STUB IPropertySetStorage_Delete_Stub(
8489     struct IRpcStubBuffer* This,
8490     struct IRpcChannelBuffer* pRpcChannelBuffer,
8491     PRPC_MESSAGE pRpcMessage,
8492     DWORD* pdwStubPhase);
8493 HRESULT CALLBACK IPropertySetStorage_Enum_Proxy(
8494     IPropertySetStorage* This,
8495     IEnumSTATPROPSETSTG** ppenum);
8496 void __RPC_STUB IPropertySetStorage_Enum_Stub(
8497     struct IRpcStubBuffer* This,
8498     struct IRpcChannelBuffer* pRpcChannelBuffer,
8499     PRPC_MESSAGE pRpcMessage,
8500     DWORD* pdwStubPhase);
8501
8502 typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
8503
8504 /*****************************************************************************
8505  * IEnumSTATPROPSTG interface
8506  */
8507 DEFINE_GUID(IID_IEnumSTATPROPSTG, 0x00000139, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8508 #if defined(__cplusplus) && !defined(CINTERFACE)
8509 struct IEnumSTATPROPSTG: IUnknown {
8510
8511     virtual HRESULT STDMETHODCALLTYPE Next(
8512         ULONG celt,
8513         STATPROPSTG* rgelt,
8514         ULONG* pceltFetched) = 0;
8515
8516     virtual HRESULT STDMETHODCALLTYPE Skip(
8517         ULONG celt) = 0;
8518
8519     virtual HRESULT STDMETHODCALLTYPE Reset(
8520         ) = 0;
8521
8522     virtual HRESULT STDMETHODCALLTYPE Clone(
8523         IEnumSTATPROPSTG** ppenum) = 0;
8524
8525 } ICOM_COM_INTERFACE_ATTRIBUTE;
8526 #else
8527 typedef struct IEnumSTATPROPSTGVtbl IEnumSTATPROPSTGVtbl;
8528 struct IEnumSTATPROPSTG {
8529     const IEnumSTATPROPSTGVtbl* lpVtbl;
8530 };
8531 struct IEnumSTATPROPSTGVtbl {
8532     ICOM_MSVTABLE_COMPAT_FIELDS
8533
8534     /*** IUnknown methods ***/
8535     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8536         IEnumSTATPROPSTG* This,
8537         REFIID riid,
8538         void** ppvObject);
8539
8540     ULONG (STDMETHODCALLTYPE *AddRef)(
8541         IEnumSTATPROPSTG* This);
8542
8543     ULONG (STDMETHODCALLTYPE *Release)(
8544         IEnumSTATPROPSTG* This);
8545
8546     /*** IEnumSTATPROPSTG methods ***/
8547     HRESULT (STDMETHODCALLTYPE *Next)(
8548         IEnumSTATPROPSTG* This,
8549         ULONG celt,
8550         STATPROPSTG* rgelt,
8551         ULONG* pceltFetched);
8552
8553     HRESULT (STDMETHODCALLTYPE *Skip)(
8554         IEnumSTATPROPSTG* This,
8555         ULONG celt);
8556
8557     HRESULT (STDMETHODCALLTYPE *Reset)(
8558         IEnumSTATPROPSTG* This);
8559
8560     HRESULT (STDMETHODCALLTYPE *Clone)(
8561         IEnumSTATPROPSTG* This,
8562         IEnumSTATPROPSTG** ppenum);
8563
8564 };
8565
8566 #define IEnumSTATPROPSTG_IMETHODS \
8567     /*** IUnknown methods ***/ \
8568     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8569     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8570     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
8571     /*** IEnumSTATPROPSTG methods ***/ \
8572     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, STATPROPSTG* rgelt, ULONG* pceltFetched); \
8573     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
8574     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
8575     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumSTATPROPSTG** ppenum);
8576
8577 /*** IUnknown methods ***/
8578 #define IEnumSTATPROPSTG_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
8579 #define IEnumSTATPROPSTG_AddRef(p) (p)->lpVtbl->AddRef(p)
8580 #define IEnumSTATPROPSTG_Release(p) (p)->lpVtbl->Release(p)
8581 /*** IEnumSTATPROPSTG methods ***/
8582 #define IEnumSTATPROPSTG_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
8583 #define IEnumSTATPROPSTG_Skip(p,a) (p)->lpVtbl->Skip(p,a)
8584 #define IEnumSTATPROPSTG_Reset(p) (p)->lpVtbl->Reset(p)
8585 #define IEnumSTATPROPSTG_Clone(p,a) (p)->lpVtbl->Clone(p,a)
8586
8587 #endif
8588
8589 HRESULT CALLBACK IEnumSTATPROPSTG_RemoteNext_Proxy(
8590     IEnumSTATPROPSTG* This,
8591     ULONG celt,
8592     STATPROPSTG* rgelt,
8593     ULONG* pceltFetched);
8594 void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
8595     struct IRpcStubBuffer* This,
8596     struct IRpcChannelBuffer* pRpcChannelBuffer,
8597     PRPC_MESSAGE pRpcMessage,
8598     DWORD* pdwStubPhase);
8599 HRESULT CALLBACK IEnumSTATPROPSTG_Next_Proxy(
8600     IEnumSTATPROPSTG* This,
8601     ULONG celt,
8602     STATPROPSTG* rgelt,
8603     ULONG* pceltFetched);
8604 HRESULT __RPC_STUB IEnumSTATPROPSTG_Next_Stub(
8605     IEnumSTATPROPSTG* This,
8606     ULONG celt,
8607     STATPROPSTG* rgelt,
8608     ULONG* pceltFetched);
8609 HRESULT CALLBACK IEnumSTATPROPSTG_Skip_Proxy(
8610     IEnumSTATPROPSTG* This,
8611     ULONG celt);
8612 void __RPC_STUB IEnumSTATPROPSTG_Skip_Stub(
8613     struct IRpcStubBuffer* This,
8614     struct IRpcChannelBuffer* pRpcChannelBuffer,
8615     PRPC_MESSAGE pRpcMessage,
8616     DWORD* pdwStubPhase);
8617 HRESULT CALLBACK IEnumSTATPROPSTG_Reset_Proxy(
8618     IEnumSTATPROPSTG* This);
8619 void __RPC_STUB IEnumSTATPROPSTG_Reset_Stub(
8620     struct IRpcStubBuffer* This,
8621     struct IRpcChannelBuffer* pRpcChannelBuffer,
8622     PRPC_MESSAGE pRpcMessage,
8623     DWORD* pdwStubPhase);
8624 HRESULT CALLBACK IEnumSTATPROPSTG_Clone_Proxy(
8625     IEnumSTATPROPSTG* This,
8626     IEnumSTATPROPSTG** ppenum);
8627 void __RPC_STUB IEnumSTATPROPSTG_Clone_Stub(
8628     struct IRpcStubBuffer* This,
8629     struct IRpcChannelBuffer* pRpcChannelBuffer,
8630     PRPC_MESSAGE pRpcMessage,
8631     DWORD* pdwStubPhase);
8632
8633 typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
8634
8635 /*****************************************************************************
8636  * IEnumSTATPROPSETSTG interface
8637  */
8638 DEFINE_GUID(IID_IEnumSTATPROPSETSTG, 0x0000013b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8639 #if defined(__cplusplus) && !defined(CINTERFACE)
8640 struct IEnumSTATPROPSETSTG: IUnknown {
8641
8642     virtual HRESULT STDMETHODCALLTYPE Next(
8643         ULONG celt,
8644         STATPROPSETSTG* rgelt,
8645         ULONG* pceltFetched) = 0;
8646
8647     virtual HRESULT STDMETHODCALLTYPE Skip(
8648         ULONG celt) = 0;
8649
8650     virtual HRESULT STDMETHODCALLTYPE Reset(
8651         ) = 0;
8652
8653     virtual HRESULT STDMETHODCALLTYPE Clone(
8654         IEnumSTATPROPSETSTG** ppenum) = 0;
8655
8656 } ICOM_COM_INTERFACE_ATTRIBUTE;
8657 #else
8658 typedef struct IEnumSTATPROPSETSTGVtbl IEnumSTATPROPSETSTGVtbl;
8659 struct IEnumSTATPROPSETSTG {
8660     const IEnumSTATPROPSETSTGVtbl* lpVtbl;
8661 };
8662 struct IEnumSTATPROPSETSTGVtbl {
8663     ICOM_MSVTABLE_COMPAT_FIELDS
8664
8665     /*** IUnknown methods ***/
8666     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8667         IEnumSTATPROPSETSTG* This,
8668         REFIID riid,
8669         void** ppvObject);
8670
8671     ULONG (STDMETHODCALLTYPE *AddRef)(
8672         IEnumSTATPROPSETSTG* This);
8673
8674     ULONG (STDMETHODCALLTYPE *Release)(
8675         IEnumSTATPROPSETSTG* This);
8676
8677     /*** IEnumSTATPROPSETSTG methods ***/
8678     HRESULT (STDMETHODCALLTYPE *Next)(
8679         IEnumSTATPROPSETSTG* This,
8680         ULONG celt,
8681         STATPROPSETSTG* rgelt,
8682         ULONG* pceltFetched);
8683
8684     HRESULT (STDMETHODCALLTYPE *Skip)(
8685         IEnumSTATPROPSETSTG* This,
8686         ULONG celt);
8687
8688     HRESULT (STDMETHODCALLTYPE *Reset)(
8689         IEnumSTATPROPSETSTG* This);
8690
8691     HRESULT (STDMETHODCALLTYPE *Clone)(
8692         IEnumSTATPROPSETSTG* This,
8693         IEnumSTATPROPSETSTG** ppenum);
8694
8695 };
8696
8697 #define IEnumSTATPROPSETSTG_IMETHODS \
8698     /*** IUnknown methods ***/ \
8699     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8700     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8701     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
8702     /*** IEnumSTATPROPSETSTG methods ***/ \
8703     HRESULT (STDMETHODCALLTYPE *Next)(INTERFACE *This, ULONG celt, STATPROPSETSTG* rgelt, ULONG* pceltFetched); \
8704     HRESULT (STDMETHODCALLTYPE *Skip)(INTERFACE *This, ULONG celt); \
8705     HRESULT (STDMETHODCALLTYPE *Reset)(INTERFACE *This); \
8706     HRESULT (STDMETHODCALLTYPE *Clone)(INTERFACE *This, IEnumSTATPROPSETSTG** ppenum);
8707
8708 /*** IUnknown methods ***/
8709 #define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
8710 #define IEnumSTATPROPSETSTG_AddRef(p) (p)->lpVtbl->AddRef(p)
8711 #define IEnumSTATPROPSETSTG_Release(p) (p)->lpVtbl->Release(p)
8712 /*** IEnumSTATPROPSETSTG methods ***/
8713 #define IEnumSTATPROPSETSTG_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
8714 #define IEnumSTATPROPSETSTG_Skip(p,a) (p)->lpVtbl->Skip(p,a)
8715 #define IEnumSTATPROPSETSTG_Reset(p) (p)->lpVtbl->Reset(p)
8716 #define IEnumSTATPROPSETSTG_Clone(p,a) (p)->lpVtbl->Clone(p,a)
8717
8718 #endif
8719
8720 HRESULT CALLBACK IEnumSTATPROPSETSTG_RemoteNext_Proxy(
8721     IEnumSTATPROPSETSTG* This,
8722     ULONG celt,
8723     STATPROPSETSTG* rgelt,
8724     ULONG* pceltFetched);
8725 void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
8726     struct IRpcStubBuffer* This,
8727     struct IRpcChannelBuffer* pRpcChannelBuffer,
8728     PRPC_MESSAGE pRpcMessage,
8729     DWORD* pdwStubPhase);
8730 HRESULT CALLBACK IEnumSTATPROPSETSTG_Next_Proxy(
8731     IEnumSTATPROPSETSTG* This,
8732     ULONG celt,
8733     STATPROPSETSTG* rgelt,
8734     ULONG* pceltFetched);
8735 HRESULT __RPC_STUB IEnumSTATPROPSETSTG_Next_Stub(
8736     IEnumSTATPROPSETSTG* This,
8737     ULONG celt,
8738     STATPROPSETSTG* rgelt,
8739     ULONG* pceltFetched);
8740 HRESULT CALLBACK IEnumSTATPROPSETSTG_Skip_Proxy(
8741     IEnumSTATPROPSETSTG* This,
8742     ULONG celt);
8743 void __RPC_STUB IEnumSTATPROPSETSTG_Skip_Stub(
8744     struct IRpcStubBuffer* This,
8745     struct IRpcChannelBuffer* pRpcChannelBuffer,
8746     PRPC_MESSAGE pRpcMessage,
8747     DWORD* pdwStubPhase);
8748 HRESULT CALLBACK IEnumSTATPROPSETSTG_Reset_Proxy(
8749     IEnumSTATPROPSETSTG* This);
8750 void __RPC_STUB IEnumSTATPROPSETSTG_Reset_Stub(
8751     struct IRpcStubBuffer* This,
8752     struct IRpcChannelBuffer* pRpcChannelBuffer,
8753     PRPC_MESSAGE pRpcMessage,
8754     DWORD* pdwStubPhase);
8755 HRESULT CALLBACK IEnumSTATPROPSETSTG_Clone_Proxy(
8756     IEnumSTATPROPSETSTG* This,
8757     IEnumSTATPROPSETSTG** ppenum);
8758 void __RPC_STUB IEnumSTATPROPSETSTG_Clone_Stub(
8759     struct IRpcStubBuffer* This,
8760     struct IRpcChannelBuffer* pRpcChannelBuffer,
8761     PRPC_MESSAGE pRpcMessage,
8762     DWORD* pdwStubPhase);
8763
8764 typedef struct IClientSecurity IClientSecurity;
8765 typedef struct tagSOLE_AUTHENTICATION_SERVICE {
8766     DWORD dwAuthnSvc;
8767     DWORD dwAuthzSvc;
8768     OLECHAR *pPrincipalName;
8769     HRESULT hr;
8770 } SOLE_AUTHENTICATION_SERVICE;
8771
8772 typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
8773
8774 typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
8775     EOAC_NONE = 0x0,
8776     EOAC_MUTUAL_AUTH = 0x1,
8777     EOAC_CLOAKING = 0x10,
8778     EOAC_SECURE_REFS = 0x2,
8779     EOAC_ACCESS_CONTROL = 0x4,
8780     EOAC_APPID = 0x8
8781 } EOLE_AUTHENTICATION_CAPABILITIES;
8782
8783 /*****************************************************************************
8784  * IClientSecurity interface
8785  */
8786 DEFINE_GUID(IID_IClientSecurity, 0x0000013d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8787 #if defined(__cplusplus) && !defined(CINTERFACE)
8788 struct IClientSecurity: IUnknown {
8789
8790     virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
8791         IUnknown* pProxy,
8792         DWORD* pAuthnSvc,
8793         DWORD* pAuthzSvc,
8794         OLECHAR** pServerPrincName,
8795         DWORD* pAuthnLevel,
8796         DWORD* pImpLevel,
8797         void** pAuthInfo,
8798         DWORD* pCapabilites) = 0;
8799
8800     virtual HRESULT STDMETHODCALLTYPE SetBlanket(
8801         IUnknown* pProxy,
8802         DWORD AuthnSvc,
8803         DWORD AuthzSvc,
8804         OLECHAR* pServerPrincName,
8805         DWORD AuthnLevel,
8806         DWORD ImpLevel,
8807         void* pAuthInfo,
8808         DWORD Capabilities) = 0;
8809
8810     virtual HRESULT STDMETHODCALLTYPE CopyProxy(
8811         IUnknown* pProxy,
8812         IUnknown** ppCopy) = 0;
8813
8814 } ICOM_COM_INTERFACE_ATTRIBUTE;
8815 #else
8816 typedef struct IClientSecurityVtbl IClientSecurityVtbl;
8817 struct IClientSecurity {
8818     const IClientSecurityVtbl* lpVtbl;
8819 };
8820 struct IClientSecurityVtbl {
8821     ICOM_MSVTABLE_COMPAT_FIELDS
8822
8823     /*** IUnknown methods ***/
8824     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8825         IClientSecurity* This,
8826         REFIID riid,
8827         void** ppvObject);
8828
8829     ULONG (STDMETHODCALLTYPE *AddRef)(
8830         IClientSecurity* This);
8831
8832     ULONG (STDMETHODCALLTYPE *Release)(
8833         IClientSecurity* This);
8834
8835     /*** IClientSecurity methods ***/
8836     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
8837         IClientSecurity* This,
8838         IUnknown* pProxy,
8839         DWORD* pAuthnSvc,
8840         DWORD* pAuthzSvc,
8841         OLECHAR** pServerPrincName,
8842         DWORD* pAuthnLevel,
8843         DWORD* pImpLevel,
8844         void** pAuthInfo,
8845         DWORD* pCapabilites);
8846
8847     HRESULT (STDMETHODCALLTYPE *SetBlanket)(
8848         IClientSecurity* This,
8849         IUnknown* pProxy,
8850         DWORD AuthnSvc,
8851         DWORD AuthzSvc,
8852         OLECHAR* pServerPrincName,
8853         DWORD AuthnLevel,
8854         DWORD ImpLevel,
8855         void* pAuthInfo,
8856         DWORD Capabilities);
8857
8858     HRESULT (STDMETHODCALLTYPE *CopyProxy)(
8859         IClientSecurity* This,
8860         IUnknown* pProxy,
8861         IUnknown** ppCopy);
8862
8863 };
8864
8865 #define IClientSecurity_IMETHODS \
8866     /*** IUnknown methods ***/ \
8867     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8868     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8869     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
8870     /*** IClientSecurity methods ***/ \
8871     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(INTERFACE *This, IUnknown* pProxy, DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, void** pAuthInfo, DWORD* pCapabilites); \
8872     HRESULT (STDMETHODCALLTYPE *SetBlanket)(INTERFACE *This, IUnknown* pProxy, DWORD AuthnSvc, DWORD AuthzSvc, OLECHAR* pServerPrincName, DWORD AuthnLevel, DWORD ImpLevel, void* pAuthInfo, DWORD Capabilities); \
8873     HRESULT (STDMETHODCALLTYPE *CopyProxy)(INTERFACE *This, IUnknown* pProxy, IUnknown** ppCopy);
8874
8875 /*** IUnknown methods ***/
8876 #define IClientSecurity_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
8877 #define IClientSecurity_AddRef(p) (p)->lpVtbl->AddRef(p)
8878 #define IClientSecurity_Release(p) (p)->lpVtbl->Release(p)
8879 /*** IClientSecurity methods ***/
8880 #define IClientSecurity_QueryBlanket(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->QueryBlanket(p,a,b,c,d,e,f,g,h)
8881 #define IClientSecurity_SetBlanket(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->SetBlanket(p,a,b,c,d,e,f,g,h)
8882 #define IClientSecurity_CopyProxy(p,a,b) (p)->lpVtbl->CopyProxy(p,a,b)
8883
8884 #endif
8885
8886 HRESULT CALLBACK IClientSecurity_QueryBlanket_Proxy(
8887     IClientSecurity* This,
8888     IUnknown* pProxy,
8889     DWORD* pAuthnSvc,
8890     DWORD* pAuthzSvc,
8891     OLECHAR** pServerPrincName,
8892     DWORD* pAuthnLevel,
8893     DWORD* pImpLevel,
8894     void** pAuthInfo,
8895     DWORD* pCapabilites);
8896 void __RPC_STUB IClientSecurity_QueryBlanket_Stub(
8897     struct IRpcStubBuffer* This,
8898     struct IRpcChannelBuffer* pRpcChannelBuffer,
8899     PRPC_MESSAGE pRpcMessage,
8900     DWORD* pdwStubPhase);
8901 HRESULT CALLBACK IClientSecurity_SetBlanket_Proxy(
8902     IClientSecurity* This,
8903     IUnknown* pProxy,
8904     DWORD AuthnSvc,
8905     DWORD AuthzSvc,
8906     OLECHAR* pServerPrincName,
8907     DWORD AuthnLevel,
8908     DWORD ImpLevel,
8909     void* pAuthInfo,
8910     DWORD Capabilities);
8911 void __RPC_STUB IClientSecurity_SetBlanket_Stub(
8912     struct IRpcStubBuffer* This,
8913     struct IRpcChannelBuffer* pRpcChannelBuffer,
8914     PRPC_MESSAGE pRpcMessage,
8915     DWORD* pdwStubPhase);
8916 HRESULT CALLBACK IClientSecurity_CopyProxy_Proxy(
8917     IClientSecurity* This,
8918     IUnknown* pProxy,
8919     IUnknown** ppCopy);
8920 void __RPC_STUB IClientSecurity_CopyProxy_Stub(
8921     struct IRpcStubBuffer* This,
8922     struct IRpcChannelBuffer* pRpcChannelBuffer,
8923     PRPC_MESSAGE pRpcMessage,
8924     DWORD* pdwStubPhase);
8925
8926 typedef struct IServerSecurity IServerSecurity;
8927 /*****************************************************************************
8928  * IServerSecurity interface
8929  */
8930 DEFINE_GUID(IID_IServerSecurity, 0x0000013e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
8931 #if defined(__cplusplus) && !defined(CINTERFACE)
8932 struct IServerSecurity: IUnknown {
8933
8934     virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
8935         DWORD* pAuthnSvc,
8936         DWORD* pAuthzSvc,
8937         OLECHAR** pServerPrincName,
8938         DWORD* pAuthnLevel,
8939         DWORD* pImpLevel,
8940         void** pPrivs,
8941         DWORD* pCapabilities) = 0;
8942
8943     virtual HRESULT STDMETHODCALLTYPE ImpersonateClient(
8944         ) = 0;
8945
8946     virtual HRESULT STDMETHODCALLTYPE RevertToSelf(
8947         ) = 0;
8948
8949     virtual BOOL STDMETHODCALLTYPE IsImpersonating(
8950         ) = 0;
8951
8952 } ICOM_COM_INTERFACE_ATTRIBUTE;
8953 #else
8954 typedef struct IServerSecurityVtbl IServerSecurityVtbl;
8955 struct IServerSecurity {
8956     const IServerSecurityVtbl* lpVtbl;
8957 };
8958 struct IServerSecurityVtbl {
8959     ICOM_MSVTABLE_COMPAT_FIELDS
8960
8961     /*** IUnknown methods ***/
8962     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
8963         IServerSecurity* This,
8964         REFIID riid,
8965         void** ppvObject);
8966
8967     ULONG (STDMETHODCALLTYPE *AddRef)(
8968         IServerSecurity* This);
8969
8970     ULONG (STDMETHODCALLTYPE *Release)(
8971         IServerSecurity* This);
8972
8973     /*** IServerSecurity methods ***/
8974     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
8975         IServerSecurity* This,
8976         DWORD* pAuthnSvc,
8977         DWORD* pAuthzSvc,
8978         OLECHAR** pServerPrincName,
8979         DWORD* pAuthnLevel,
8980         DWORD* pImpLevel,
8981         void** pPrivs,
8982         DWORD* pCapabilities);
8983
8984     HRESULT (STDMETHODCALLTYPE *ImpersonateClient)(
8985         IServerSecurity* This);
8986
8987     HRESULT (STDMETHODCALLTYPE *RevertToSelf)(
8988         IServerSecurity* This);
8989
8990     BOOL (STDMETHODCALLTYPE *IsImpersonating)(
8991         IServerSecurity* This);
8992
8993 };
8994
8995 #define IServerSecurity_IMETHODS \
8996     /*** IUnknown methods ***/ \
8997     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
8998     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
8999     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
9000     /*** IServerSecurity methods ***/ \
9001     HRESULT (STDMETHODCALLTYPE *QueryBlanket)(INTERFACE *This, DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, void** pPrivs, DWORD* pCapabilities); \
9002     HRESULT (STDMETHODCALLTYPE *ImpersonateClient)(INTERFACE *This); \
9003     HRESULT (STDMETHODCALLTYPE *RevertToSelf)(INTERFACE *This); \
9004     BOOL (STDMETHODCALLTYPE *IsImpersonating)(INTERFACE *This);
9005
9006 /*** IUnknown methods ***/
9007 #define IServerSecurity_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
9008 #define IServerSecurity_AddRef(p) (p)->lpVtbl->AddRef(p)
9009 #define IServerSecurity_Release(p) (p)->lpVtbl->Release(p)
9010 /*** IServerSecurity methods ***/
9011 #define IServerSecurity_QueryBlanket(p,a,b,c,d,e,f,g) (p)->lpVtbl->QueryBlanket(p,a,b,c,d,e,f,g)
9012 #define IServerSecurity_ImpersonateClient(p) (p)->lpVtbl->ImpersonateClient(p)
9013 #define IServerSecurity_RevertToSelf(p) (p)->lpVtbl->RevertToSelf(p)
9014 #define IServerSecurity_IsImpersonating(p) (p)->lpVtbl->IsImpersonating(p)
9015
9016 #endif
9017
9018 HRESULT CALLBACK IServerSecurity_QueryBlanket_Proxy(
9019     IServerSecurity* This,
9020     DWORD* pAuthnSvc,
9021     DWORD* pAuthzSvc,
9022     OLECHAR** pServerPrincName,
9023     DWORD* pAuthnLevel,
9024     DWORD* pImpLevel,
9025     void** pPrivs,
9026     DWORD* pCapabilities);
9027 void __RPC_STUB IServerSecurity_QueryBlanket_Stub(
9028     struct IRpcStubBuffer* This,
9029     struct IRpcChannelBuffer* pRpcChannelBuffer,
9030     PRPC_MESSAGE pRpcMessage,
9031     DWORD* pdwStubPhase);
9032 HRESULT CALLBACK IServerSecurity_ImpersonateClient_Proxy(
9033     IServerSecurity* This);
9034 void __RPC_STUB IServerSecurity_ImpersonateClient_Stub(
9035     struct IRpcStubBuffer* This,
9036     struct IRpcChannelBuffer* pRpcChannelBuffer,
9037     PRPC_MESSAGE pRpcMessage,
9038     DWORD* pdwStubPhase);
9039 HRESULT CALLBACK IServerSecurity_RevertToSelf_Proxy(
9040     IServerSecurity* This);
9041 void __RPC_STUB IServerSecurity_RevertToSelf_Stub(
9042     struct IRpcStubBuffer* This,
9043     struct IRpcChannelBuffer* pRpcChannelBuffer,
9044     PRPC_MESSAGE pRpcMessage,
9045     DWORD* pdwStubPhase);
9046 BOOL CALLBACK IServerSecurity_IsImpersonating_Proxy(
9047     IServerSecurity* This);
9048 void __RPC_STUB IServerSecurity_IsImpersonating_Stub(
9049     struct IRpcStubBuffer* This,
9050     struct IRpcChannelBuffer* pRpcChannelBuffer,
9051     PRPC_MESSAGE pRpcMessage,
9052     DWORD* pdwStubPhase);
9053
9054 typedef struct IAsyncSetup IAsyncSetup;
9055 /*****************************************************************************
9056  * IAsyncSetup interface
9057  */
9058 DEFINE_GUID(IID_IAsyncSetup, 0x00000024, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
9059 #if defined(__cplusplus) && !defined(CINTERFACE)
9060 struct IAsyncSetup: IUnknown {
9061
9062     virtual HRESULT STDMETHODCALLTYPE GetAsyncManager(
9063         REFIID riid,
9064         IUnknown* pOuter,
9065         DWORD dwFlags,
9066         IUnknown** ppInner,
9067         IAsyncManager** ppAsyncMgr) = 0;
9068
9069 } ICOM_COM_INTERFACE_ATTRIBUTE;
9070 #else
9071 typedef struct IAsyncSetupVtbl IAsyncSetupVtbl;
9072 struct IAsyncSetup {
9073     const IAsyncSetupVtbl* lpVtbl;
9074 };
9075 struct IAsyncSetupVtbl {
9076     ICOM_MSVTABLE_COMPAT_FIELDS
9077
9078     /*** IUnknown methods ***/
9079     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
9080         IAsyncSetup* This,
9081         REFIID riid,
9082         void** ppvObject);
9083
9084     ULONG (STDMETHODCALLTYPE *AddRef)(
9085         IAsyncSetup* This);
9086
9087     ULONG (STDMETHODCALLTYPE *Release)(
9088         IAsyncSetup* This);
9089
9090     /*** IAsyncSetup methods ***/
9091     HRESULT (STDMETHODCALLTYPE *GetAsyncManager)(
9092         IAsyncSetup* This,
9093         REFIID riid,
9094         IUnknown* pOuter,
9095         DWORD dwFlags,
9096         IUnknown** ppInner,
9097         IAsyncManager** ppAsyncMgr);
9098
9099 };
9100
9101 #define IAsyncSetup_IMETHODS \
9102     /*** IUnknown methods ***/ \
9103     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
9104     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
9105     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
9106     /*** IAsyncSetup methods ***/ \
9107     HRESULT (STDMETHODCALLTYPE *GetAsyncManager)(INTERFACE *This, REFIID riid, IUnknown* pOuter, DWORD dwFlags, IUnknown** ppInner, IAsyncManager** ppAsyncMgr);
9108
9109 /*** IUnknown methods ***/
9110 #define IAsyncSetup_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
9111 #define IAsyncSetup_AddRef(p) (p)->lpVtbl->AddRef(p)
9112 #define IAsyncSetup_Release(p) (p)->lpVtbl->Release(p)
9113 /*** IAsyncSetup methods ***/
9114 #define IAsyncSetup_GetAsyncManager(p,a,b,c,d,e) (p)->lpVtbl->GetAsyncManager(p,a,b,c,d,e)
9115
9116 #endif
9117
9118 HRESULT CALLBACK IAsyncSetup_GetAsyncManager_Proxy(
9119     IAsyncSetup* This,
9120     REFIID riid,
9121     IUnknown* pOuter,
9122     DWORD dwFlags,
9123     IUnknown** ppInner,
9124     IAsyncManager** ppAsyncMgr);
9125 void __RPC_STUB IAsyncSetup_GetAsyncManager_Stub(
9126     struct IRpcStubBuffer* This,
9127     struct IRpcChannelBuffer* pRpcChannelBuffer,
9128     PRPC_MESSAGE pRpcMessage,
9129     DWORD* pdwStubPhase);
9130
9131 typedef enum tagDCOM_CALL_STATE {
9132     DCOM_NONE = 0,
9133     DCOM_CALL_COMPLETE = 1,
9134     DCOM_CALL_CANCELED = 2
9135 } DCOM_CALL_STATE;
9136
9137 /*****************************************************************************
9138  * IAsyncManager interface
9139  */
9140 DEFINE_GUID(IID_IAsyncManager, 0x0000002a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
9141 #if defined(__cplusplus) && !defined(CINTERFACE)
9142 struct IAsyncManager: IUnknown {
9143
9144     virtual HRESULT STDMETHODCALLTYPE CompleteCall(
9145         HRESULT Result) = 0;
9146
9147     virtual HRESULT STDMETHODCALLTYPE GetCallContext(
9148         REFIID riid,
9149         void** pInterface) = 0;
9150
9151     virtual HRESULT STDMETHODCALLTYPE GetState(
9152         ULONG* pulStateFlags) = 0;
9153
9154 } ICOM_COM_INTERFACE_ATTRIBUTE;
9155 #else
9156 typedef struct IAsyncManagerVtbl IAsyncManagerVtbl;
9157 struct IAsyncManager {
9158     const IAsyncManagerVtbl* lpVtbl;
9159 };
9160 struct IAsyncManagerVtbl {
9161     ICOM_MSVTABLE_COMPAT_FIELDS
9162
9163     /*** IUnknown methods ***/
9164     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
9165         IAsyncManager* This,
9166         REFIID riid,
9167         void** ppvObject);
9168
9169     ULONG (STDMETHODCALLTYPE *AddRef)(
9170         IAsyncManager* This);
9171
9172     ULONG (STDMETHODCALLTYPE *Release)(
9173         IAsyncManager* This);
9174
9175     /*** IAsyncManager methods ***/
9176     HRESULT (STDMETHODCALLTYPE *CompleteCall)(
9177         IAsyncManager* This,
9178         HRESULT Result);
9179
9180     HRESULT (STDMETHODCALLTYPE *GetCallContext)(
9181         IAsyncManager* This,
9182         REFIID riid,
9183         void** pInterface);
9184
9185     HRESULT (STDMETHODCALLTYPE *GetState)(
9186         IAsyncManager* This,
9187         ULONG* pulStateFlags);
9188
9189 };
9190
9191 #define IAsyncManager_IMETHODS \
9192     /*** IUnknown methods ***/ \
9193     HRESULT (STDMETHODCALLTYPE *QueryInterface)(INTERFACE *This, REFIID riid, void** ppvObject); \
9194     ULONG (STDMETHODCALLTYPE *AddRef)(INTERFACE *This); \
9195     ULONG (STDMETHODCALLTYPE *Release)(INTERFACE *This); \
9196     /*** IAsyncManager methods ***/ \
9197     HRESULT (STDMETHODCALLTYPE *CompleteCall)(INTERFACE *This, HRESULT Result); \
9198     HRESULT (STDMETHODCALLTYPE *GetCallContext)(INTERFACE *This, REFIID riid, void** pInterface); \
9199     HRESULT (STDMETHODCALLTYPE *GetState)(INTERFACE *This, ULONG* pulStateFlags);
9200
9201 /*** IUnknown methods ***/
9202 #define IAsyncManager_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
9203 #define IAsyncManager_AddRef(p) (p)->lpVtbl->AddRef(p)
9204 #define IAsyncManager_Release(p) (p)->lpVtbl->Release(p)
9205 /*** IAsyncManager methods ***/
9206 #define IAsyncManager_CompleteCall(p,a) (p)->lpVtbl->CompleteCall(p,a)
9207 #define IAsyncManager_GetCallContext(p,a,b) (p)->lpVtbl->GetCallContext(p,a,b)
9208 #define IAsyncManager_GetState(p,a) (p)->lpVtbl->GetState(p,a)
9209
9210 #endif
9211
9212 HRESULT CALLBACK IAsyncManager_CompleteCall_Proxy(
9213     IAsyncManager* This,
9214     HRESULT Result);
9215 void __RPC_STUB IAsyncManager_CompleteCall_Stub(
9216     struct IRpcStubBuffer* This,
9217     struct IRpcChannelBuffer* pRpcChannelBuffer,
9218     PRPC_MESSAGE pRpcMessage,
9219     DWORD* pdwStubPhase);
9220 HRESULT CALLBACK IAsyncManager_GetCallContext_Proxy(
9221     IAsyncManager* This,
9222     REFIID riid,
9223     void** pInterface);
9224 void __RPC_STUB IAsyncManager_GetCallContext_Stub(
9225     struct IRpcStubBuffer* This,
9226     struct IRpcChannelBuffer* pRpcChannelBuffer,
9227     PRPC_MESSAGE pRpcMessage,
9228     DWORD* pdwStubPhase);
9229 HRESULT CALLBACK IAsyncManager_GetState_Proxy(
9230     IAsyncManager* This,
9231     ULONG* pulStateFlags);
9232 void __RPC_STUB IAsyncManager_GetState_Stub(
9233     struct IRpcStubBuffer* This,
9234     struct IRpcChannelBuffer* pRpcChannelBuffer,
9235     PRPC_MESSAGE pRpcMessage,
9236     DWORD* pdwStubPhase);
9237
9238 #ifdef __cplusplus
9239 }
9240 #endif
9241 #endif /* __WIDL_OBJIDL_H */