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