Move the PROPVARIANT declaration from objidl.idl to propidl.idl.
[wine] / include / shobjidl.h
1 /*** Autogenerated by WIDL 0.1 from shobjidl.idl - Do not edit ***/
2 #include <rpc.h>
3 #include <rpcndr.h>
4
5 #ifndef __WIDL_SHOBJIDL_H
6 #define __WIDL_SHOBJIDL_H
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 #include <objidl.h>
11 #include <oleidl.h>
12 #include <oaidl.h>
13 #include <shtypes.h>
14 #include <servprov.h>
15 #include <comcat.h>
16 #include <propidl.h>
17 #ifndef __IPersistFolder_FWD_DEFINED__
18 #define __IPersistFolder_FWD_DEFINED__
19 typedef struct IPersistFolder IPersistFolder;
20 #endif
21
22 typedef IPersistFolder *LPPERSISTFOLDER;
23
24 /*****************************************************************************
25  * IPersistFolder interface
26  */
27 #ifndef __IPersistFolder_INTERFACE_DEFINED__
28 #define __IPersistFolder_INTERFACE_DEFINED__
29
30 DEFINE_GUID(IID_IPersistFolder, 0x000214ea, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
31 #if defined(__cplusplus) && !defined(CINTERFACE)
32 struct IPersistFolder : public IPersist
33 {
34     virtual HRESULT STDMETHODCALLTYPE Initialize(
35         LPCITEMIDLIST pidl) = 0;
36
37 };
38 #else
39 typedef struct IPersistFolderVtbl IPersistFolderVtbl;
40 struct IPersistFolder {
41     const IPersistFolderVtbl* lpVtbl;
42 };
43 struct IPersistFolderVtbl {
44     BEGIN_INTERFACE
45
46     /*** IUnknown methods ***/
47     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
48         IPersistFolder* This,
49         REFIID riid,
50         void** ppvObject);
51
52     ULONG (STDMETHODCALLTYPE *AddRef)(
53         IPersistFolder* This);
54
55     ULONG (STDMETHODCALLTYPE *Release)(
56         IPersistFolder* This);
57
58     /*** IPersist methods ***/
59     HRESULT (STDMETHODCALLTYPE *GetClassID)(
60         IPersistFolder* This,
61         CLSID* pClassID);
62
63     /*** IPersistFolder methods ***/
64     HRESULT (STDMETHODCALLTYPE *Initialize)(
65         IPersistFolder* This,
66         LPCITEMIDLIST pidl);
67
68     END_INTERFACE
69 };
70
71 #ifdef COBJMACROS
72 /*** IUnknown methods ***/
73 #define IPersistFolder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
74 #define IPersistFolder_AddRef(p) (p)->lpVtbl->AddRef(p)
75 #define IPersistFolder_Release(p) (p)->lpVtbl->Release(p)
76 /*** IPersist methods ***/
77 #define IPersistFolder_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
78 /*** IPersistFolder methods ***/
79 #define IPersistFolder_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
80 #endif
81
82 #endif
83
84 #define IPersistFolder_METHODS \
85     /*** IUnknown methods ***/ \
86     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
87     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
88     STDMETHOD_(ULONG,Release)(THIS) PURE; \
89     /*** IPersist methods ***/ \
90     STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
91     /*** IPersistFolder methods ***/ \
92     STDMETHOD_(HRESULT,Initialize)(THIS_ LPCITEMIDLIST pidl) PURE;
93
94 HRESULT CALLBACK IPersistFolder_Initialize_Proxy(
95     IPersistFolder* This,
96     LPCITEMIDLIST pidl);
97 void __RPC_STUB IPersistFolder_Initialize_Stub(
98     struct IRpcStubBuffer* This,
99     struct IRpcChannelBuffer* pRpcChannelBuffer,
100     PRPC_MESSAGE pRpcMessage,
101     DWORD* pdwStubPhase);
102
103 #endif  /* __IPersistFolder_INTERFACE_DEFINED__ */
104
105 #ifndef __IPersistFolder2_FWD_DEFINED__
106 #define __IPersistFolder2_FWD_DEFINED__
107 typedef struct IPersistFolder2 IPersistFolder2;
108 #endif
109
110 typedef IPersistFolder2 *LPPERSISTFOLDER2;
111
112 /*****************************************************************************
113  * IPersistFolder2 interface
114  */
115 #ifndef __IPersistFolder2_INTERFACE_DEFINED__
116 #define __IPersistFolder2_INTERFACE_DEFINED__
117
118 DEFINE_GUID(IID_IPersistFolder2, 0x1ac3d9f0, 0x175c, 0x11d1, 0x95,0xbe, 0x00,0x60,0x97,0x97,0xea,0x4f);
119 #if defined(__cplusplus) && !defined(CINTERFACE)
120 struct IPersistFolder2 : public IPersistFolder
121 {
122     virtual HRESULT STDMETHODCALLTYPE GetCurFolder(
123         LPITEMIDLIST* ppidl) = 0;
124
125 };
126 #else
127 typedef struct IPersistFolder2Vtbl IPersistFolder2Vtbl;
128 struct IPersistFolder2 {
129     const IPersistFolder2Vtbl* lpVtbl;
130 };
131 struct IPersistFolder2Vtbl {
132     BEGIN_INTERFACE
133
134     /*** IUnknown methods ***/
135     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
136         IPersistFolder2* This,
137         REFIID riid,
138         void** ppvObject);
139
140     ULONG (STDMETHODCALLTYPE *AddRef)(
141         IPersistFolder2* This);
142
143     ULONG (STDMETHODCALLTYPE *Release)(
144         IPersistFolder2* This);
145
146     /*** IPersist methods ***/
147     HRESULT (STDMETHODCALLTYPE *GetClassID)(
148         IPersistFolder2* This,
149         CLSID* pClassID);
150
151     /*** IPersistFolder methods ***/
152     HRESULT (STDMETHODCALLTYPE *Initialize)(
153         IPersistFolder2* This,
154         LPCITEMIDLIST pidl);
155
156     /*** IPersistFolder2 methods ***/
157     HRESULT (STDMETHODCALLTYPE *GetCurFolder)(
158         IPersistFolder2* This,
159         LPITEMIDLIST* ppidl);
160
161     END_INTERFACE
162 };
163
164 #ifdef COBJMACROS
165 /*** IUnknown methods ***/
166 #define IPersistFolder2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
167 #define IPersistFolder2_AddRef(p) (p)->lpVtbl->AddRef(p)
168 #define IPersistFolder2_Release(p) (p)->lpVtbl->Release(p)
169 /*** IPersist methods ***/
170 #define IPersistFolder2_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
171 /*** IPersistFolder methods ***/
172 #define IPersistFolder2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
173 /*** IPersistFolder2 methods ***/
174 #define IPersistFolder2_GetCurFolder(p,a) (p)->lpVtbl->GetCurFolder(p,a)
175 #endif
176
177 #endif
178
179 #define IPersistFolder2_METHODS \
180     /*** IUnknown methods ***/ \
181     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
182     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
183     STDMETHOD_(ULONG,Release)(THIS) PURE; \
184     /*** IPersist methods ***/ \
185     STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
186     /*** IPersistFolder methods ***/ \
187     STDMETHOD_(HRESULT,Initialize)(THIS_ LPCITEMIDLIST pidl) PURE; \
188     /*** IPersistFolder2 methods ***/ \
189     STDMETHOD_(HRESULT,GetCurFolder)(THIS_ LPITEMIDLIST* ppidl) PURE;
190
191 HRESULT CALLBACK IPersistFolder2_GetCurFolder_Proxy(
192     IPersistFolder2* This,
193     LPITEMIDLIST* ppidl);
194 void __RPC_STUB IPersistFolder2_GetCurFolder_Stub(
195     struct IRpcStubBuffer* This,
196     struct IRpcChannelBuffer* pRpcChannelBuffer,
197     PRPC_MESSAGE pRpcMessage,
198     DWORD* pdwStubPhase);
199
200 #endif  /* __IPersistFolder2_INTERFACE_DEFINED__ */
201
202 #ifndef __IEnumIDList_FWD_DEFINED__
203 #define __IEnumIDList_FWD_DEFINED__
204 typedef struct IEnumIDList IEnumIDList;
205 #endif
206
207 typedef IEnumIDList *LPENUMIDLIST;
208
209 /*****************************************************************************
210  * IEnumIDList interface
211  */
212 #ifndef __IEnumIDList_INTERFACE_DEFINED__
213 #define __IEnumIDList_INTERFACE_DEFINED__
214
215 DEFINE_GUID(IID_IEnumIDList, 0x000214f2, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
216 #if defined(__cplusplus) && !defined(CINTERFACE)
217 struct IEnumIDList : public IUnknown
218 {
219     virtual HRESULT STDMETHODCALLTYPE Next(
220         ULONG celt,
221         LPITEMIDLIST* rgelt,
222         ULONG* pceltFetched) = 0;
223
224     virtual HRESULT STDMETHODCALLTYPE Skip(
225         ULONG celt) = 0;
226
227     virtual HRESULT STDMETHODCALLTYPE Reset(
228         ) = 0;
229
230     virtual HRESULT STDMETHODCALLTYPE Clone(
231         IEnumIDList** ppenum) = 0;
232
233 };
234 #else
235 typedef struct IEnumIDListVtbl IEnumIDListVtbl;
236 struct IEnumIDList {
237     const IEnumIDListVtbl* lpVtbl;
238 };
239 struct IEnumIDListVtbl {
240     BEGIN_INTERFACE
241
242     /*** IUnknown methods ***/
243     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
244         IEnumIDList* This,
245         REFIID riid,
246         void** ppvObject);
247
248     ULONG (STDMETHODCALLTYPE *AddRef)(
249         IEnumIDList* This);
250
251     ULONG (STDMETHODCALLTYPE *Release)(
252         IEnumIDList* This);
253
254     /*** IEnumIDList methods ***/
255     HRESULT (STDMETHODCALLTYPE *Next)(
256         IEnumIDList* This,
257         ULONG celt,
258         LPITEMIDLIST* rgelt,
259         ULONG* pceltFetched);
260
261     HRESULT (STDMETHODCALLTYPE *Skip)(
262         IEnumIDList* This,
263         ULONG celt);
264
265     HRESULT (STDMETHODCALLTYPE *Reset)(
266         IEnumIDList* This);
267
268     HRESULT (STDMETHODCALLTYPE *Clone)(
269         IEnumIDList* This,
270         IEnumIDList** ppenum);
271
272     END_INTERFACE
273 };
274
275 #ifdef COBJMACROS
276 /*** IUnknown methods ***/
277 #define IEnumIDList_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
278 #define IEnumIDList_AddRef(p) (p)->lpVtbl->AddRef(p)
279 #define IEnumIDList_Release(p) (p)->lpVtbl->Release(p)
280 /*** IEnumIDList methods ***/
281 #define IEnumIDList_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
282 #define IEnumIDList_Skip(p,a) (p)->lpVtbl->Skip(p,a)
283 #define IEnumIDList_Reset(p) (p)->lpVtbl->Reset(p)
284 #define IEnumIDList_Clone(p,a) (p)->lpVtbl->Clone(p,a)
285 #endif
286
287 #endif
288
289 #define IEnumIDList_METHODS \
290     /*** IUnknown methods ***/ \
291     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
292     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
293     STDMETHOD_(ULONG,Release)(THIS) PURE; \
294     /*** IEnumIDList methods ***/ \
295     STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt, LPITEMIDLIST* rgelt, ULONG* pceltFetched) PURE; \
296     STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE; \
297     STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
298     STDMETHOD_(HRESULT,Clone)(THIS_ IEnumIDList** ppenum) PURE;
299
300 HRESULT CALLBACK IEnumIDList_Next_Proxy(
301     IEnumIDList* This,
302     ULONG celt,
303     LPITEMIDLIST* rgelt,
304     ULONG* pceltFetched);
305 void __RPC_STUB IEnumIDList_Next_Stub(
306     struct IRpcStubBuffer* This,
307     struct IRpcChannelBuffer* pRpcChannelBuffer,
308     PRPC_MESSAGE pRpcMessage,
309     DWORD* pdwStubPhase);
310 HRESULT CALLBACK IEnumIDList_Skip_Proxy(
311     IEnumIDList* This,
312     ULONG celt);
313 void __RPC_STUB IEnumIDList_Skip_Stub(
314     struct IRpcStubBuffer* This,
315     struct IRpcChannelBuffer* pRpcChannelBuffer,
316     PRPC_MESSAGE pRpcMessage,
317     DWORD* pdwStubPhase);
318 HRESULT CALLBACK IEnumIDList_Reset_Proxy(
319     IEnumIDList* This);
320 void __RPC_STUB IEnumIDList_Reset_Stub(
321     struct IRpcStubBuffer* This,
322     struct IRpcChannelBuffer* pRpcChannelBuffer,
323     PRPC_MESSAGE pRpcMessage,
324     DWORD* pdwStubPhase);
325 HRESULT CALLBACK IEnumIDList_Clone_Proxy(
326     IEnumIDList* This,
327     IEnumIDList** ppenum);
328 void __RPC_STUB IEnumIDList_Clone_Stub(
329     struct IRpcStubBuffer* This,
330     struct IRpcChannelBuffer* pRpcChannelBuffer,
331     PRPC_MESSAGE pRpcMessage,
332     DWORD* pdwStubPhase);
333
334 #endif  /* __IEnumIDList_INTERFACE_DEFINED__ */
335
336 #ifndef __IShellFolder_FWD_DEFINED__
337 #define __IShellFolder_FWD_DEFINED__
338 typedef struct IShellFolder IShellFolder;
339 #endif
340
341 typedef IShellFolder *LPSHELLFOLDER;
342
343 typedef enum tagSHGDN {
344     SHGDN_NORMAL = 0,
345     SHGDN_INFOLDER = 1,
346     SHGDN_FOREDITING = 0x1000,
347     SHGDN_INCLUDE_NONFILESYS = 0x2000,
348     SHGDN_FORADDRESSBAR = 0x4000,
349     SHGDN_FORPARSING = 0x8000
350 } SHGNO;
351
352 typedef DWORD SHGDNF;
353
354 enum tagSHCONTF {
355     SHCONTF_FOLDERS = 32,
356     SHCONTF_NONFOLDERS = 64,
357     SHCONTF_INCLUDEHIDDEN = 128,
358     SHCONTF_INIT_ON_FIRST_NEXT = 256,
359     SHCONTF_NETPRINTERSRCH = 512,
360     SHCONTF_SHAREABLE = 1024,
361     SHCONTF_STORAGE = 2048
362 };
363
364 typedef DWORD SHCONTF;
365
366 #define SFGAO_CANCOPY           DROPEFFECT_COPY
367 #define SFGAO_CANMOVE           DROPEFFECT_MOVE
368 #define SFGAO_CANLINK           DROPEFFECT_LINK
369 #define SFGAO_CANRENAME         0x00000010L
370 #define SFGAO_CANDELETE         0x00000020L
371 #define SFGAO_HASPROPSHEET      0x00000040L
372 #define SFGAO_DROPTARGET        0x00000100L
373 #define SFGAO_CAPABILITYMASK    0x00000177L
374 #define SFGAO_LINK              0x00010000L
375 #define SFGAO_SHARE             0x00020000L
376 #define SFGAO_READONLY          0x00040000L
377 #define SFGAO_GHOSTED           0x00080000L
378 #define SFGAO_HIDDEN            0x00080000L
379 #define SFGAO_DISPLAYATTRMASK   0x000F0000L
380 #define SFGAO_FILESYSANCESTOR   0x10000000L
381 #define SFGAO_FOLDER            0x20000000L
382 #define SFGAO_FILESYSTEM        0x40000000L
383 #define SFGAO_HASSUBFOLDER      0x80000000L
384 #define SFGAO_CONTENTSMASK      0x80000000L
385 #define SFGAO_VALIDATE          0x01000000L
386 #define SFGAO_REMOVABLE         0x02000000L
387 #define SFGAO_COMPRESSED        0x04000000L
388 #define SFGAO_BROWSABLE         0x08000000L
389 #define SFGAO_NONENUMERATED     0x00100000L
390 #define SFGAO_NEWCONTENT        0x00200000L
391 typedef ULONG SFGAOF;
392
393 /*****************************************************************************
394  * IShellFolder interface
395  */
396 #ifndef __IShellFolder_INTERFACE_DEFINED__
397 #define __IShellFolder_INTERFACE_DEFINED__
398
399 DEFINE_GUID(IID_IShellFolder, 0x000214e6, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
400 #if defined(__cplusplus) && !defined(CINTERFACE)
401 struct IShellFolder : public IUnknown
402 {
403     virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
404         HWND hwndOwner,
405         LPBC pbcReserved,
406         LPOLESTR lpszDisplayName,
407         ULONG* pchEaten,
408         LPITEMIDLIST* ppidl,
409         ULONG* pdwAttributes) = 0;
410
411     virtual HRESULT STDMETHODCALLTYPE EnumObjects(
412         HWND hwndOwner,
413         SHCONTF grfFlags,
414         IEnumIDList** ppenumIDList) = 0;
415
416     virtual HRESULT STDMETHODCALLTYPE BindToObject(
417         LPCITEMIDLIST pidl,
418         LPBC pbcReserved,
419         REFIID riid,
420         void** ppvOut) = 0;
421
422     virtual HRESULT STDMETHODCALLTYPE BindToStorage(
423         LPCITEMIDLIST pidl,
424         LPBC pbcReserved,
425         REFIID riid,
426         void** ppvObj) = 0;
427
428     virtual HRESULT STDMETHODCALLTYPE CompareIDs(
429         LPARAM lParam,
430         LPCITEMIDLIST pidl1,
431         LPCITEMIDLIST pidl2) = 0;
432
433     virtual HRESULT STDMETHODCALLTYPE CreateViewObject(
434         HWND hwndOwner,
435         REFIID riid,
436         void** ppvOut) = 0;
437
438     virtual HRESULT STDMETHODCALLTYPE GetAttributesOf(
439         UINT cidl,
440         LPCITEMIDLIST* apidl,
441         SFGAOF* rgfInOut) = 0;
442
443     virtual HRESULT STDMETHODCALLTYPE GetUIObjectOf(
444         HWND hwndOwner,
445         UINT cidl,
446         LPCITEMIDLIST* apidl,
447         REFIID riid,
448         UINT* prgfInOut,
449         void** ppvOut) = 0;
450
451     virtual HRESULT STDMETHODCALLTYPE GetDisplayNameOf(
452         LPCITEMIDLIST pidl,
453         SHGDNF uFlags,
454         STRRET* lpName) = 0;
455
456     virtual HRESULT STDMETHODCALLTYPE SetNameOf(
457         HWND hwnd,
458         LPCITEMIDLIST pidl,
459         LPCOLESTR lpszName,
460         SHGDNF uFlags,
461         LPITEMIDLIST* ppidlOut) = 0;
462
463 };
464 #else
465 typedef struct IShellFolderVtbl IShellFolderVtbl;
466 struct IShellFolder {
467     const IShellFolderVtbl* lpVtbl;
468 };
469 struct IShellFolderVtbl {
470     BEGIN_INTERFACE
471
472     /*** IUnknown methods ***/
473     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
474         IShellFolder* This,
475         REFIID riid,
476         void** ppvObject);
477
478     ULONG (STDMETHODCALLTYPE *AddRef)(
479         IShellFolder* This);
480
481     ULONG (STDMETHODCALLTYPE *Release)(
482         IShellFolder* This);
483
484     /*** IShellFolder methods ***/
485     HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
486         IShellFolder* This,
487         HWND hwndOwner,
488         LPBC pbcReserved,
489         LPOLESTR lpszDisplayName,
490         ULONG* pchEaten,
491         LPITEMIDLIST* ppidl,
492         ULONG* pdwAttributes);
493
494     HRESULT (STDMETHODCALLTYPE *EnumObjects)(
495         IShellFolder* This,
496         HWND hwndOwner,
497         SHCONTF grfFlags,
498         IEnumIDList** ppenumIDList);
499
500     HRESULT (STDMETHODCALLTYPE *BindToObject)(
501         IShellFolder* This,
502         LPCITEMIDLIST pidl,
503         LPBC pbcReserved,
504         REFIID riid,
505         void** ppvOut);
506
507     HRESULT (STDMETHODCALLTYPE *BindToStorage)(
508         IShellFolder* This,
509         LPCITEMIDLIST pidl,
510         LPBC pbcReserved,
511         REFIID riid,
512         void** ppvObj);
513
514     HRESULT (STDMETHODCALLTYPE *CompareIDs)(
515         IShellFolder* This,
516         LPARAM lParam,
517         LPCITEMIDLIST pidl1,
518         LPCITEMIDLIST pidl2);
519
520     HRESULT (STDMETHODCALLTYPE *CreateViewObject)(
521         IShellFolder* This,
522         HWND hwndOwner,
523         REFIID riid,
524         void** ppvOut);
525
526     HRESULT (STDMETHODCALLTYPE *GetAttributesOf)(
527         IShellFolder* This,
528         UINT cidl,
529         LPCITEMIDLIST* apidl,
530         SFGAOF* rgfInOut);
531
532     HRESULT (STDMETHODCALLTYPE *GetUIObjectOf)(
533         IShellFolder* This,
534         HWND hwndOwner,
535         UINT cidl,
536         LPCITEMIDLIST* apidl,
537         REFIID riid,
538         UINT* prgfInOut,
539         void** ppvOut);
540
541     HRESULT (STDMETHODCALLTYPE *GetDisplayNameOf)(
542         IShellFolder* This,
543         LPCITEMIDLIST pidl,
544         SHGDNF uFlags,
545         STRRET* lpName);
546
547     HRESULT (STDMETHODCALLTYPE *SetNameOf)(
548         IShellFolder* This,
549         HWND hwnd,
550         LPCITEMIDLIST pidl,
551         LPCOLESTR lpszName,
552         SHGDNF uFlags,
553         LPITEMIDLIST* ppidlOut);
554
555     END_INTERFACE
556 };
557
558 #ifdef COBJMACROS
559 /*** IUnknown methods ***/
560 #define IShellFolder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
561 #define IShellFolder_AddRef(p) (p)->lpVtbl->AddRef(p)
562 #define IShellFolder_Release(p) (p)->lpVtbl->Release(p)
563 /*** IShellFolder methods ***/
564 #define IShellFolder_ParseDisplayName(p,a,b,c,d,e,f) (p)->lpVtbl->ParseDisplayName(p,a,b,c,d,e,f)
565 #define IShellFolder_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
566 #define IShellFolder_BindToObject(p,a,b,c,d) (p)->lpVtbl->BindToObject(p,a,b,c,d)
567 #define IShellFolder_BindToStorage(p,a,b,c,d) (p)->lpVtbl->BindToStorage(p,a,b,c,d)
568 #define IShellFolder_CompareIDs(p,a,b,c) (p)->lpVtbl->CompareIDs(p,a,b,c)
569 #define IShellFolder_CreateViewObject(p,a,b,c) (p)->lpVtbl->CreateViewObject(p,a,b,c)
570 #define IShellFolder_GetAttributesOf(p,a,b,c) (p)->lpVtbl->GetAttributesOf(p,a,b,c)
571 #define IShellFolder_GetUIObjectOf(p,a,b,c,d,e,f) (p)->lpVtbl->GetUIObjectOf(p,a,b,c,d,e,f)
572 #define IShellFolder_GetDisplayNameOf(p,a,b,c) (p)->lpVtbl->GetDisplayNameOf(p,a,b,c)
573 #define IShellFolder_SetNameOf(p,a,b,c,d,e) (p)->lpVtbl->SetNameOf(p,a,b,c,d,e)
574 #endif
575
576 #endif
577
578 #define IShellFolder_METHODS \
579     /*** IUnknown methods ***/ \
580     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
581     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
582     STDMETHOD_(ULONG,Release)(THIS) PURE; \
583     /*** IShellFolder methods ***/ \
584     STDMETHOD_(HRESULT,ParseDisplayName)(THIS_ HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG* pchEaten, LPITEMIDLIST* ppidl, ULONG* pdwAttributes) PURE; \
585     STDMETHOD_(HRESULT,EnumObjects)(THIS_ HWND hwndOwner, SHCONTF grfFlags, IEnumIDList** ppenumIDList) PURE; \
586     STDMETHOD_(HRESULT,BindToObject)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void** ppvOut) PURE; \
587     STDMETHOD_(HRESULT,BindToStorage)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void** ppvObj) PURE; \
588     STDMETHOD_(HRESULT,CompareIDs)(THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; \
589     STDMETHOD_(HRESULT,CreateViewObject)(THIS_ HWND hwndOwner, REFIID riid, void** ppvOut) PURE; \
590     STDMETHOD_(HRESULT,GetAttributesOf)(THIS_ UINT cidl, LPCITEMIDLIST* apidl, SFGAOF* rgfInOut) PURE; \
591     STDMETHOD_(HRESULT,GetUIObjectOf)(THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST* apidl, REFIID riid, UINT* prgfInOut, void** ppvOut) PURE; \
592     STDMETHOD_(HRESULT,GetDisplayNameOf)(THIS_ LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET* lpName) PURE; \
593     STDMETHOD_(HRESULT,SetNameOf)(THIS_ HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST* ppidlOut) PURE;
594
595 HRESULT CALLBACK IShellFolder_ParseDisplayName_Proxy(
596     IShellFolder* This,
597     HWND hwndOwner,
598     LPBC pbcReserved,
599     LPOLESTR lpszDisplayName,
600     ULONG* pchEaten,
601     LPITEMIDLIST* ppidl,
602     ULONG* pdwAttributes);
603 void __RPC_STUB IShellFolder_ParseDisplayName_Stub(
604     struct IRpcStubBuffer* This,
605     struct IRpcChannelBuffer* pRpcChannelBuffer,
606     PRPC_MESSAGE pRpcMessage,
607     DWORD* pdwStubPhase);
608 HRESULT CALLBACK IShellFolder_EnumObjects_Proxy(
609     IShellFolder* This,
610     HWND hwndOwner,
611     SHCONTF grfFlags,
612     IEnumIDList** ppenumIDList);
613 void __RPC_STUB IShellFolder_EnumObjects_Stub(
614     struct IRpcStubBuffer* This,
615     struct IRpcChannelBuffer* pRpcChannelBuffer,
616     PRPC_MESSAGE pRpcMessage,
617     DWORD* pdwStubPhase);
618 HRESULT CALLBACK IShellFolder_BindToObject_Proxy(
619     IShellFolder* This,
620     LPCITEMIDLIST pidl,
621     LPBC pbcReserved,
622     REFIID riid,
623     void** ppvOut);
624 void __RPC_STUB IShellFolder_BindToObject_Stub(
625     struct IRpcStubBuffer* This,
626     struct IRpcChannelBuffer* pRpcChannelBuffer,
627     PRPC_MESSAGE pRpcMessage,
628     DWORD* pdwStubPhase);
629 HRESULT CALLBACK IShellFolder_BindToStorage_Proxy(
630     IShellFolder* This,
631     LPCITEMIDLIST pidl,
632     LPBC pbcReserved,
633     REFIID riid,
634     void** ppvObj);
635 void __RPC_STUB IShellFolder_BindToStorage_Stub(
636     struct IRpcStubBuffer* This,
637     struct IRpcChannelBuffer* pRpcChannelBuffer,
638     PRPC_MESSAGE pRpcMessage,
639     DWORD* pdwStubPhase);
640 HRESULT CALLBACK IShellFolder_CompareIDs_Proxy(
641     IShellFolder* This,
642     LPARAM lParam,
643     LPCITEMIDLIST pidl1,
644     LPCITEMIDLIST pidl2);
645 void __RPC_STUB IShellFolder_CompareIDs_Stub(
646     struct IRpcStubBuffer* This,
647     struct IRpcChannelBuffer* pRpcChannelBuffer,
648     PRPC_MESSAGE pRpcMessage,
649     DWORD* pdwStubPhase);
650 HRESULT CALLBACK IShellFolder_CreateViewObject_Proxy(
651     IShellFolder* This,
652     HWND hwndOwner,
653     REFIID riid,
654     void** ppvOut);
655 void __RPC_STUB IShellFolder_CreateViewObject_Stub(
656     struct IRpcStubBuffer* This,
657     struct IRpcChannelBuffer* pRpcChannelBuffer,
658     PRPC_MESSAGE pRpcMessage,
659     DWORD* pdwStubPhase);
660 HRESULT CALLBACK IShellFolder_GetAttributesOf_Proxy(
661     IShellFolder* This,
662     UINT cidl,
663     LPCITEMIDLIST* apidl,
664     SFGAOF* rgfInOut);
665 void __RPC_STUB IShellFolder_GetAttributesOf_Stub(
666     struct IRpcStubBuffer* This,
667     struct IRpcChannelBuffer* pRpcChannelBuffer,
668     PRPC_MESSAGE pRpcMessage,
669     DWORD* pdwStubPhase);
670 HRESULT CALLBACK IShellFolder_GetUIObjectOf_Proxy(
671     IShellFolder* This,
672     HWND hwndOwner,
673     UINT cidl,
674     LPCITEMIDLIST* apidl,
675     REFIID riid,
676     UINT* prgfInOut,
677     void** ppvOut);
678 void __RPC_STUB IShellFolder_GetUIObjectOf_Stub(
679     struct IRpcStubBuffer* This,
680     struct IRpcChannelBuffer* pRpcChannelBuffer,
681     PRPC_MESSAGE pRpcMessage,
682     DWORD* pdwStubPhase);
683 HRESULT CALLBACK IShellFolder_GetDisplayNameOf_Proxy(
684     IShellFolder* This,
685     LPCITEMIDLIST pidl,
686     SHGDNF uFlags,
687     STRRET* lpName);
688 void __RPC_STUB IShellFolder_GetDisplayNameOf_Stub(
689     struct IRpcStubBuffer* This,
690     struct IRpcChannelBuffer* pRpcChannelBuffer,
691     PRPC_MESSAGE pRpcMessage,
692     DWORD* pdwStubPhase);
693 HRESULT CALLBACK IShellFolder_SetNameOf_Proxy(
694     IShellFolder* This,
695     HWND hwnd,
696     LPCITEMIDLIST pidl,
697     LPCOLESTR lpszName,
698     SHGDNF uFlags,
699     LPITEMIDLIST* ppidlOut);
700 void __RPC_STUB IShellFolder_SetNameOf_Stub(
701     struct IRpcStubBuffer* This,
702     struct IRpcChannelBuffer* pRpcChannelBuffer,
703     PRPC_MESSAGE pRpcMessage,
704     DWORD* pdwStubPhase);
705
706 #endif  /* __IShellFolder_INTERFACE_DEFINED__ */
707
708 #ifndef __IEnumExtraSearch_FWD_DEFINED__
709 #define __IEnumExtraSearch_FWD_DEFINED__
710 typedef struct IEnumExtraSearch IEnumExtraSearch;
711 #endif
712
713 typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
714
715 typedef struct {
716     GUID guidSearch;
717     WCHAR wszFriendlyName[80];
718     WCHAR wszUrl[2084];
719 } EXTRASEARCH, *LPEXTRASEARCH;
720
721 /*****************************************************************************
722  * IEnumExtraSearch interface
723  */
724 #ifndef __IEnumExtraSearch_INTERFACE_DEFINED__
725 #define __IEnumExtraSearch_INTERFACE_DEFINED__
726
727 DEFINE_GUID(IID_IEnumExtraSearch, 0x0e700be1, 0x9db6, 0x11d1, 0xa1,0xce, 0x00,0xc0,0x4f,0xd7,0x5d,0x13);
728 #if defined(__cplusplus) && !defined(CINTERFACE)
729 struct IEnumExtraSearch : public IUnknown
730 {
731     virtual HRESULT STDMETHODCALLTYPE Next(
732         ULONG celt,
733         EXTRASEARCH* rgelt,
734         ULONG* pceltFetched) = 0;
735
736     virtual HRESULT STDMETHODCALLTYPE Skip(
737         ULONG celt) = 0;
738
739     virtual HRESULT STDMETHODCALLTYPE Reset(
740         ) = 0;
741
742     virtual HRESULT STDMETHODCALLTYPE Clone(
743         IEnumExtraSearch** ppenum) = 0;
744
745 };
746 #else
747 typedef struct IEnumExtraSearchVtbl IEnumExtraSearchVtbl;
748 struct IEnumExtraSearch {
749     const IEnumExtraSearchVtbl* lpVtbl;
750 };
751 struct IEnumExtraSearchVtbl {
752     BEGIN_INTERFACE
753
754     /*** IUnknown methods ***/
755     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
756         IEnumExtraSearch* This,
757         REFIID riid,
758         void** ppvObject);
759
760     ULONG (STDMETHODCALLTYPE *AddRef)(
761         IEnumExtraSearch* This);
762
763     ULONG (STDMETHODCALLTYPE *Release)(
764         IEnumExtraSearch* This);
765
766     /*** IEnumExtraSearch methods ***/
767     HRESULT (STDMETHODCALLTYPE *Next)(
768         IEnumExtraSearch* This,
769         ULONG celt,
770         EXTRASEARCH* rgelt,
771         ULONG* pceltFetched);
772
773     HRESULT (STDMETHODCALLTYPE *Skip)(
774         IEnumExtraSearch* This,
775         ULONG celt);
776
777     HRESULT (STDMETHODCALLTYPE *Reset)(
778         IEnumExtraSearch* This);
779
780     HRESULT (STDMETHODCALLTYPE *Clone)(
781         IEnumExtraSearch* This,
782         IEnumExtraSearch** ppenum);
783
784     END_INTERFACE
785 };
786
787 #ifdef COBJMACROS
788 /*** IUnknown methods ***/
789 #define IEnumExtraSearch_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
790 #define IEnumExtraSearch_AddRef(p) (p)->lpVtbl->AddRef(p)
791 #define IEnumExtraSearch_Release(p) (p)->lpVtbl->Release(p)
792 /*** IEnumExtraSearch methods ***/
793 #define IEnumExtraSearch_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
794 #define IEnumExtraSearch_Skip(p,a) (p)->lpVtbl->Skip(p,a)
795 #define IEnumExtraSearch_Reset(p) (p)->lpVtbl->Reset(p)
796 #define IEnumExtraSearch_Clone(p,a) (p)->lpVtbl->Clone(p,a)
797 #endif
798
799 #endif
800
801 #define IEnumExtraSearch_METHODS \
802     /*** IUnknown methods ***/ \
803     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
804     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
805     STDMETHOD_(ULONG,Release)(THIS) PURE; \
806     /*** IEnumExtraSearch methods ***/ \
807     STDMETHOD_(HRESULT,Next)(THIS_ ULONG celt, EXTRASEARCH* rgelt, ULONG* pceltFetched) PURE; \
808     STDMETHOD_(HRESULT,Skip)(THIS_ ULONG celt) PURE; \
809     STDMETHOD_(HRESULT,Reset)(THIS) PURE; \
810     STDMETHOD_(HRESULT,Clone)(THIS_ IEnumExtraSearch** ppenum) PURE;
811
812 HRESULT CALLBACK IEnumExtraSearch_Next_Proxy(
813     IEnumExtraSearch* This,
814     ULONG celt,
815     EXTRASEARCH* rgelt,
816     ULONG* pceltFetched);
817 void __RPC_STUB IEnumExtraSearch_Next_Stub(
818     struct IRpcStubBuffer* This,
819     struct IRpcChannelBuffer* pRpcChannelBuffer,
820     PRPC_MESSAGE pRpcMessage,
821     DWORD* pdwStubPhase);
822 HRESULT CALLBACK IEnumExtraSearch_Skip_Proxy(
823     IEnumExtraSearch* This,
824     ULONG celt);
825 void __RPC_STUB IEnumExtraSearch_Skip_Stub(
826     struct IRpcStubBuffer* This,
827     struct IRpcChannelBuffer* pRpcChannelBuffer,
828     PRPC_MESSAGE pRpcMessage,
829     DWORD* pdwStubPhase);
830 HRESULT CALLBACK IEnumExtraSearch_Reset_Proxy(
831     IEnumExtraSearch* This);
832 void __RPC_STUB IEnumExtraSearch_Reset_Stub(
833     struct IRpcStubBuffer* This,
834     struct IRpcChannelBuffer* pRpcChannelBuffer,
835     PRPC_MESSAGE pRpcMessage,
836     DWORD* pdwStubPhase);
837 HRESULT CALLBACK IEnumExtraSearch_Clone_Proxy(
838     IEnumExtraSearch* This,
839     IEnumExtraSearch** ppenum);
840 void __RPC_STUB IEnumExtraSearch_Clone_Stub(
841     struct IRpcStubBuffer* This,
842     struct IRpcChannelBuffer* pRpcChannelBuffer,
843     PRPC_MESSAGE pRpcMessage,
844     DWORD* pdwStubPhase);
845
846 #endif  /* __IEnumExtraSearch_INTERFACE_DEFINED__ */
847
848 #ifndef __IShellFolder2_FWD_DEFINED__
849 #define __IShellFolder2_FWD_DEFINED__
850 typedef struct IShellFolder2 IShellFolder2;
851 #endif
852
853 typedef enum {
854     SHCOLSTATE_TYPE_STR = 0x1,
855     SHCOLSTATE_TYPE_INT = 0x2,
856     SHCOLSTATE_TYPE_DATE = 0x3,
857     SHCOLSTATE_TYPEMASK = 0xf,
858     SHCOLSTATE_ONBYDEFAULT = 0x10,
859     SHCOLSTATE_SLOW = 0x20,
860     SHCOLSTATE_EXTENDED = 0x40,
861     SHCOLSTATE_SECONDARYUI = 0x80,
862     SHCOLSTATE_HIDDEN = 0x100,
863     SHCOLSTATE_PREFER_VARCMP = 0x200
864 } SHCOLSTATE;
865
866 typedef DWORD SHCOLSTATEF;
867
868 typedef struct {
869     GUID fmtid;
870     DWORD pid;
871 } SHCOLUMNID, *LPSHCOLUMNID;
872
873 typedef const SHCOLUMNID *LPCSHCOLUMNID;
874
875 /*****************************************************************************
876  * IShellFolder2 interface
877  */
878 #ifndef __IShellFolder2_INTERFACE_DEFINED__
879 #define __IShellFolder2_INTERFACE_DEFINED__
880
881 DEFINE_GUID(IID_IShellFolder2, 0x93f2f68c, 0x1d1b, 0x11d3, 0xa3,0x0e, 0x00,0xc0,0x4f,0x79,0xab,0xd1);
882 #if defined(__cplusplus) && !defined(CINTERFACE)
883 struct IShellFolder2 : public IShellFolder
884 {
885     virtual HRESULT STDMETHODCALLTYPE GetDefaultSearchGUID(
886         GUID* lpguid) = 0;
887
888     virtual HRESULT STDMETHODCALLTYPE EnumSearches(
889         IEnumExtraSearch** ppenum) = 0;
890
891     virtual HRESULT STDMETHODCALLTYPE GetDefaultColumn(
892         DWORD dwReserved,
893         ULONG* pSort,
894         ULONG* pDisplay) = 0;
895
896     virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnState(
897         UINT iColumn,
898         SHCOLSTATEF* pcsFlags) = 0;
899
900     virtual HRESULT STDMETHODCALLTYPE GetDetailsEx(
901         LPCITEMIDLIST pidl,
902         const SHCOLUMNID* pscid,
903         VARIANT* pv) = 0;
904
905     virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(
906         LPCITEMIDLIST pidl,
907         UINT iColumn,
908         SHELLDETAILS* psd) = 0;
909
910     virtual HRESULT STDMETHODCALLTYPE MapColumnToSCID(
911         UINT iColumn,
912         SHCOLUMNID* pscid) = 0;
913
914 };
915 #else
916 typedef struct IShellFolder2Vtbl IShellFolder2Vtbl;
917 struct IShellFolder2 {
918     const IShellFolder2Vtbl* lpVtbl;
919 };
920 struct IShellFolder2Vtbl {
921     BEGIN_INTERFACE
922
923     /*** IUnknown methods ***/
924     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
925         IShellFolder2* This,
926         REFIID riid,
927         void** ppvObject);
928
929     ULONG (STDMETHODCALLTYPE *AddRef)(
930         IShellFolder2* This);
931
932     ULONG (STDMETHODCALLTYPE *Release)(
933         IShellFolder2* This);
934
935     /*** IShellFolder methods ***/
936     HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
937         IShellFolder2* This,
938         HWND hwndOwner,
939         LPBC pbcReserved,
940         LPOLESTR lpszDisplayName,
941         ULONG* pchEaten,
942         LPITEMIDLIST* ppidl,
943         ULONG* pdwAttributes);
944
945     HRESULT (STDMETHODCALLTYPE *EnumObjects)(
946         IShellFolder2* This,
947         HWND hwndOwner,
948         SHCONTF grfFlags,
949         IEnumIDList** ppenumIDList);
950
951     HRESULT (STDMETHODCALLTYPE *BindToObject)(
952         IShellFolder2* This,
953         LPCITEMIDLIST pidl,
954         LPBC pbcReserved,
955         REFIID riid,
956         void** ppvOut);
957
958     HRESULT (STDMETHODCALLTYPE *BindToStorage)(
959         IShellFolder2* This,
960         LPCITEMIDLIST pidl,
961         LPBC pbcReserved,
962         REFIID riid,
963         void** ppvObj);
964
965     HRESULT (STDMETHODCALLTYPE *CompareIDs)(
966         IShellFolder2* This,
967         LPARAM lParam,
968         LPCITEMIDLIST pidl1,
969         LPCITEMIDLIST pidl2);
970
971     HRESULT (STDMETHODCALLTYPE *CreateViewObject)(
972         IShellFolder2* This,
973         HWND hwndOwner,
974         REFIID riid,
975         void** ppvOut);
976
977     HRESULT (STDMETHODCALLTYPE *GetAttributesOf)(
978         IShellFolder2* This,
979         UINT cidl,
980         LPCITEMIDLIST* apidl,
981         SFGAOF* rgfInOut);
982
983     HRESULT (STDMETHODCALLTYPE *GetUIObjectOf)(
984         IShellFolder2* This,
985         HWND hwndOwner,
986         UINT cidl,
987         LPCITEMIDLIST* apidl,
988         REFIID riid,
989         UINT* prgfInOut,
990         void** ppvOut);
991
992     HRESULT (STDMETHODCALLTYPE *GetDisplayNameOf)(
993         IShellFolder2* This,
994         LPCITEMIDLIST pidl,
995         SHGDNF uFlags,
996         STRRET* lpName);
997
998     HRESULT (STDMETHODCALLTYPE *SetNameOf)(
999         IShellFolder2* This,
1000         HWND hwnd,
1001         LPCITEMIDLIST pidl,
1002         LPCOLESTR lpszName,
1003         SHGDNF uFlags,
1004         LPITEMIDLIST* ppidlOut);
1005
1006     /*** IShellFolder2 methods ***/
1007     HRESULT (STDMETHODCALLTYPE *GetDefaultSearchGUID)(
1008         IShellFolder2* This,
1009         GUID* lpguid);
1010
1011     HRESULT (STDMETHODCALLTYPE *EnumSearches)(
1012         IShellFolder2* This,
1013         IEnumExtraSearch** ppenum);
1014
1015     HRESULT (STDMETHODCALLTYPE *GetDefaultColumn)(
1016         IShellFolder2* This,
1017         DWORD dwReserved,
1018         ULONG* pSort,
1019         ULONG* pDisplay);
1020
1021     HRESULT (STDMETHODCALLTYPE *GetDefaultColumnState)(
1022         IShellFolder2* This,
1023         UINT iColumn,
1024         SHCOLSTATEF* pcsFlags);
1025
1026     HRESULT (STDMETHODCALLTYPE *GetDetailsEx)(
1027         IShellFolder2* This,
1028         LPCITEMIDLIST pidl,
1029         const SHCOLUMNID* pscid,
1030         VARIANT* pv);
1031
1032     HRESULT (STDMETHODCALLTYPE *GetDetailsOf)(
1033         IShellFolder2* This,
1034         LPCITEMIDLIST pidl,
1035         UINT iColumn,
1036         SHELLDETAILS* psd);
1037
1038     HRESULT (STDMETHODCALLTYPE *MapColumnToSCID)(
1039         IShellFolder2* This,
1040         UINT iColumn,
1041         SHCOLUMNID* pscid);
1042
1043     END_INTERFACE
1044 };
1045
1046 #ifdef COBJMACROS
1047 /*** IUnknown methods ***/
1048 #define IShellFolder2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1049 #define IShellFolder2_AddRef(p) (p)->lpVtbl->AddRef(p)
1050 #define IShellFolder2_Release(p) (p)->lpVtbl->Release(p)
1051 /*** IShellFolder methods ***/
1052 #define IShellFolder2_ParseDisplayName(p,a,b,c,d,e,f) (p)->lpVtbl->ParseDisplayName(p,a,b,c,d,e,f)
1053 #define IShellFolder2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
1054 #define IShellFolder2_BindToObject(p,a,b,c,d) (p)->lpVtbl->BindToObject(p,a,b,c,d)
1055 #define IShellFolder2_BindToStorage(p,a,b,c,d) (p)->lpVtbl->BindToStorage(p,a,b,c,d)
1056 #define IShellFolder2_CompareIDs(p,a,b,c) (p)->lpVtbl->CompareIDs(p,a,b,c)
1057 #define IShellFolder2_CreateViewObject(p,a,b,c) (p)->lpVtbl->CreateViewObject(p,a,b,c)
1058 #define IShellFolder2_GetAttributesOf(p,a,b,c) (p)->lpVtbl->GetAttributesOf(p,a,b,c)
1059 #define IShellFolder2_GetUIObjectOf(p,a,b,c,d,e,f) (p)->lpVtbl->GetUIObjectOf(p,a,b,c,d,e,f)
1060 #define IShellFolder2_GetDisplayNameOf(p,a,b,c) (p)->lpVtbl->GetDisplayNameOf(p,a,b,c)
1061 #define IShellFolder2_SetNameOf(p,a,b,c,d,e) (p)->lpVtbl->SetNameOf(p,a,b,c,d,e)
1062 /*** IShellFolder2 methods ***/
1063 #define IShellFolder2_GetDefaultSearchGUID(p,a) (p)->lpVtbl->GetDefaultSearchGUID(p,a)
1064 #define IShellFolder2_EnumSearches(p,a) (p)->lpVtbl->EnumSearches(p,a)
1065 #define IShellFolder2_GetDefaultColumn(p,a,b,c) (p)->lpVtbl->GetDefaultColumn(p,a,b,c)
1066 #define IShellFolder2_GetDefaultColumnState(p,a,b) (p)->lpVtbl->GetDefaultColumnState(p,a,b)
1067 #define IShellFolder2_GetDetailsEx(p,a,b,c) (p)->lpVtbl->GetDetailsEx(p,a,b,c)
1068 #define IShellFolder2_GetDetailsOf(p,a,b,c) (p)->lpVtbl->GetDetailsOf(p,a,b,c)
1069 #define IShellFolder2_MapColumnToSCID(p,a,b) (p)->lpVtbl->MapColumnToSCID(p,a,b)
1070 #endif
1071
1072 #endif
1073
1074 #define IShellFolder2_METHODS \
1075     /*** IUnknown methods ***/ \
1076     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
1077     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
1078     STDMETHOD_(ULONG,Release)(THIS) PURE; \
1079     /*** IShellFolder methods ***/ \
1080     STDMETHOD_(HRESULT,ParseDisplayName)(THIS_ HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG* pchEaten, LPITEMIDLIST* ppidl, ULONG* pdwAttributes) PURE; \
1081     STDMETHOD_(HRESULT,EnumObjects)(THIS_ HWND hwndOwner, SHCONTF grfFlags, IEnumIDList** ppenumIDList) PURE; \
1082     STDMETHOD_(HRESULT,BindToObject)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void** ppvOut) PURE; \
1083     STDMETHOD_(HRESULT,BindToStorage)(THIS_ LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void** ppvObj) PURE; \
1084     STDMETHOD_(HRESULT,CompareIDs)(THIS_ LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE; \
1085     STDMETHOD_(HRESULT,CreateViewObject)(THIS_ HWND hwndOwner, REFIID riid, void** ppvOut) PURE; \
1086     STDMETHOD_(HRESULT,GetAttributesOf)(THIS_ UINT cidl, LPCITEMIDLIST* apidl, SFGAOF* rgfInOut) PURE; \
1087     STDMETHOD_(HRESULT,GetUIObjectOf)(THIS_ HWND hwndOwner, UINT cidl, LPCITEMIDLIST* apidl, REFIID riid, UINT* prgfInOut, void** ppvOut) PURE; \
1088     STDMETHOD_(HRESULT,GetDisplayNameOf)(THIS_ LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET* lpName) PURE; \
1089     STDMETHOD_(HRESULT,SetNameOf)(THIS_ HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST* ppidlOut) PURE; \
1090     /*** IShellFolder2 methods ***/ \
1091     STDMETHOD_(HRESULT,GetDefaultSearchGUID)(THIS_ GUID* lpguid) PURE; \
1092     STDMETHOD_(HRESULT,EnumSearches)(THIS_ IEnumExtraSearch** ppenum) PURE; \
1093     STDMETHOD_(HRESULT,GetDefaultColumn)(THIS_ DWORD dwReserved, ULONG* pSort, ULONG* pDisplay) PURE; \
1094     STDMETHOD_(HRESULT,GetDefaultColumnState)(THIS_ UINT iColumn, SHCOLSTATEF* pcsFlags) PURE; \
1095     STDMETHOD_(HRESULT,GetDetailsEx)(THIS_ LPCITEMIDLIST pidl, const SHCOLUMNID* pscid, VARIANT* pv) PURE; \
1096     STDMETHOD_(HRESULT,GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS* psd) PURE; \
1097     STDMETHOD_(HRESULT,MapColumnToSCID)(THIS_ UINT iColumn, SHCOLUMNID* pscid) PURE;
1098
1099 HRESULT CALLBACK IShellFolder2_GetDefaultSearchGUID_Proxy(
1100     IShellFolder2* This,
1101     GUID* lpguid);
1102 void __RPC_STUB IShellFolder2_GetDefaultSearchGUID_Stub(
1103     struct IRpcStubBuffer* This,
1104     struct IRpcChannelBuffer* pRpcChannelBuffer,
1105     PRPC_MESSAGE pRpcMessage,
1106     DWORD* pdwStubPhase);
1107 HRESULT CALLBACK IShellFolder2_EnumSearches_Proxy(
1108     IShellFolder2* This,
1109     IEnumExtraSearch** ppenum);
1110 void __RPC_STUB IShellFolder2_EnumSearches_Stub(
1111     struct IRpcStubBuffer* This,
1112     struct IRpcChannelBuffer* pRpcChannelBuffer,
1113     PRPC_MESSAGE pRpcMessage,
1114     DWORD* pdwStubPhase);
1115 HRESULT CALLBACK IShellFolder2_GetDefaultColumn_Proxy(
1116     IShellFolder2* This,
1117     DWORD dwReserved,
1118     ULONG* pSort,
1119     ULONG* pDisplay);
1120 void __RPC_STUB IShellFolder2_GetDefaultColumn_Stub(
1121     struct IRpcStubBuffer* This,
1122     struct IRpcChannelBuffer* pRpcChannelBuffer,
1123     PRPC_MESSAGE pRpcMessage,
1124     DWORD* pdwStubPhase);
1125 HRESULT CALLBACK IShellFolder2_GetDefaultColumnState_Proxy(
1126     IShellFolder2* This,
1127     UINT iColumn,
1128     SHCOLSTATEF* pcsFlags);
1129 void __RPC_STUB IShellFolder2_GetDefaultColumnState_Stub(
1130     struct IRpcStubBuffer* This,
1131     struct IRpcChannelBuffer* pRpcChannelBuffer,
1132     PRPC_MESSAGE pRpcMessage,
1133     DWORD* pdwStubPhase);
1134 HRESULT CALLBACK IShellFolder2_GetDetailsEx_Proxy(
1135     IShellFolder2* This,
1136     LPCITEMIDLIST pidl,
1137     const SHCOLUMNID* pscid,
1138     VARIANT* pv);
1139 void __RPC_STUB IShellFolder2_GetDetailsEx_Stub(
1140     struct IRpcStubBuffer* This,
1141     struct IRpcChannelBuffer* pRpcChannelBuffer,
1142     PRPC_MESSAGE pRpcMessage,
1143     DWORD* pdwStubPhase);
1144 HRESULT CALLBACK IShellFolder2_GetDetailsOf_Proxy(
1145     IShellFolder2* This,
1146     LPCITEMIDLIST pidl,
1147     UINT iColumn,
1148     SHELLDETAILS* psd);
1149 void __RPC_STUB IShellFolder2_GetDetailsOf_Stub(
1150     struct IRpcStubBuffer* This,
1151     struct IRpcChannelBuffer* pRpcChannelBuffer,
1152     PRPC_MESSAGE pRpcMessage,
1153     DWORD* pdwStubPhase);
1154 HRESULT CALLBACK IShellFolder2_MapColumnToSCID_Proxy(
1155     IShellFolder2* This,
1156     UINT iColumn,
1157     SHCOLUMNID* pscid);
1158 void __RPC_STUB IShellFolder2_MapColumnToSCID_Stub(
1159     struct IRpcStubBuffer* This,
1160     struct IRpcChannelBuffer* pRpcChannelBuffer,
1161     PRPC_MESSAGE pRpcMessage,
1162     DWORD* pdwStubPhase);
1163
1164 #endif  /* __IShellFolder2_INTERFACE_DEFINED__ */
1165
1166 typedef char *LPVIEWSETTINGS;
1167
1168 typedef enum {
1169     FWF_AUTOARRANGE = 0x1,
1170     FWF_ABBREVIATEDNAMES = 0x2,
1171     FWF_SNAPTOGRID = 0x4,
1172     FWF_OWNERDATA = 0x8,
1173     FWF_BESTFITWINDOW = 0x10,
1174     FWF_DESKTOP = 0x20,
1175     FWF_SINGLESEL = 0x40,
1176     FWF_NOSUBFOLDERS = 0x80,
1177     FWF_TRANSPARENT = 0x100,
1178     FWF_NOCLIENTEDGE = 0x200,
1179     FWF_NOSCROLL = 0x400,
1180     FWF_ALIGNLEFT = 0x800,
1181     FWF_NOICONS = 0x1000,
1182     FWF_SHOWSELALWAYS = 0x2000,
1183     FWF_NOVISIBLE = 0x4000,
1184     FWF_SINGLECLICKACTIVATE = 0x8000,
1185     FWF_NOWEBVIEW = 0x10000,
1186     FWF_HIDEFILENAMES = 0x20000,
1187     FWF_CHECKSELECT = 0x40000
1188 } FOLDERFLAGS;
1189
1190 typedef enum {
1191     FVM_ICON = 1,
1192     FVM_FIRST = FVM_ICON,
1193     FVM_SMALLICON = 2,
1194     FVM_LIST = 3,
1195     FVM_DETAILS = 4,
1196     FVM_THUMBNAIL = 5,
1197     FVM_TILE = 6,
1198     FVM_THUMBSTRIP = 7,
1199     FVM_LAST = FVM_THUMBSTRIP
1200 } FOLDERVIEWMODE;
1201
1202 typedef struct {
1203     UINT ViewMode;
1204     UINT fFlags;
1205 } FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;
1206
1207 typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
1208
1209 #ifndef __IShellBrowser_FWD_DEFINED__
1210 #define __IShellBrowser_FWD_DEFINED__
1211 typedef struct IShellBrowser IShellBrowser;
1212 #endif
1213
1214 #ifndef __IShellView_FWD_DEFINED__
1215 #define __IShellView_FWD_DEFINED__
1216 typedef struct IShellView IShellView;
1217 #endif
1218
1219 typedef IShellView *LPSHELLVIEW;
1220
1221 #define SVSI_DESELECT       0x00000000
1222 #define SVSI_SELECT         0x00000001
1223 #define SVSI_EDIT           0x00000003
1224 #define SVSI_DESELECTOTHERS 0x00000004
1225 #define SVSI_ENSUREVISIBLE  0x00000008
1226 #define SVSI_FOCUSED        0x00000010
1227 #define SVSI_TRANSLATEPT    0x00000020
1228 #define SVSI_SELECTIONMARK  0x00000040
1229 #define SVSI_POSITIONITEM   0x00000080
1230 #define SVSI_CHECK          0x00000100
1231 #define SVSI_NOSTATECHANGE  0x80000000
1232 typedef UINT SVSIF;
1233
1234 typedef enum {
1235     SVGIO_BACKGROUND = 0x0,
1236     SVGIO_SELECTION = 0x1,
1237     SVGIO_ALLVIEW = 0x2,
1238     SVGIO_CHECKED = 0x3,
1239     SVGIO_TYPE_MASK = 0xf,
1240     SVGIO_FLAG_VIEWORDER = 0x80000000
1241 } SVGIO;
1242
1243 typedef enum {
1244     SVUIA_DEACTIVATE = 0,
1245     SVUIA_ACTIVATE_NOFOCUS = 1,
1246     SVUIA_ACTIVATE_FOCUS = 2,
1247     SVUIA_INPLACEACTIVATE = 3
1248 } SVUIA_STATUS;
1249
1250 #if 0
1251 typedef LPARAM LPFNSVADDPROPSHEETPAGE;
1252
1253 #else
1254 #include <prsht.h>
1255 typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;
1256 #endif
1257 /*****************************************************************************
1258  * IShellView interface
1259  */
1260 #ifndef __IShellView_INTERFACE_DEFINED__
1261 #define __IShellView_INTERFACE_DEFINED__
1262
1263 DEFINE_GUID(IID_IShellView, 0x000214e3, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1264 #if defined(__cplusplus) && !defined(CINTERFACE)
1265 struct IShellView : public IOleWindow
1266 {
1267     virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
1268         MSG* pmsg) = 0;
1269
1270     virtual HRESULT STDMETHODCALLTYPE EnableModeless(
1271         BOOL fEnable) = 0;
1272
1273     virtual HRESULT STDMETHODCALLTYPE UIActivate(
1274         UINT uState) = 0;
1275
1276     virtual HRESULT STDMETHODCALLTYPE Refresh(
1277         ) = 0;
1278
1279     virtual HRESULT STDMETHODCALLTYPE CreateViewWindow(
1280         IShellView* psvPrevious,
1281         LPCFOLDERSETTINGS lpfs,
1282         IShellBrowser* psb,
1283         RECT* prcView,
1284         HWND* phWnd) = 0;
1285
1286     virtual HRESULT STDMETHODCALLTYPE DestroyViewWindow(
1287         ) = 0;
1288
1289     virtual HRESULT STDMETHODCALLTYPE GetCurrentInfo(
1290         LPFOLDERSETTINGS lpfs) = 0;
1291
1292     virtual HRESULT STDMETHODCALLTYPE AddPropertySheetPages(
1293         DWORD dwReserved,
1294         LPFNSVADDPROPSHEETPAGE pfn,
1295         LPARAM lparam) = 0;
1296
1297     virtual HRESULT STDMETHODCALLTYPE SaveViewState(
1298         ) = 0;
1299
1300     virtual HRESULT STDMETHODCALLTYPE SelectItem(
1301         LPCITEMIDLIST pidlItem,
1302         SVSIF uFlags) = 0;
1303
1304     virtual HRESULT STDMETHODCALLTYPE GetItemObject(
1305         UINT uItem,
1306         REFIID riid,
1307         void** ppv) = 0;
1308
1309 };
1310 #else
1311 typedef struct IShellViewVtbl IShellViewVtbl;
1312 struct IShellView {
1313     const IShellViewVtbl* lpVtbl;
1314 };
1315 struct IShellViewVtbl {
1316     BEGIN_INTERFACE
1317
1318     /*** IUnknown methods ***/
1319     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1320         IShellView* This,
1321         REFIID riid,
1322         void** ppvObject);
1323
1324     ULONG (STDMETHODCALLTYPE *AddRef)(
1325         IShellView* This);
1326
1327     ULONG (STDMETHODCALLTYPE *Release)(
1328         IShellView* This);
1329
1330     /*** IOleWindow methods ***/
1331     HRESULT (STDMETHODCALLTYPE *GetWindow)(
1332         IShellView* This,
1333         HWND* phwnd);
1334
1335     HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
1336         IShellView* This,
1337         BOOL fEnterMode);
1338
1339     /*** IShellView methods ***/
1340     HRESULT (STDMETHODCALLTYPE *TranslateAccelerator)(
1341         IShellView* This,
1342         MSG* pmsg);
1343
1344     HRESULT (STDMETHODCALLTYPE *EnableModeless)(
1345         IShellView* This,
1346         BOOL fEnable);
1347
1348     HRESULT (STDMETHODCALLTYPE *UIActivate)(
1349         IShellView* This,
1350         UINT uState);
1351
1352     HRESULT (STDMETHODCALLTYPE *Refresh)(
1353         IShellView* This);
1354
1355     HRESULT (STDMETHODCALLTYPE *CreateViewWindow)(
1356         IShellView* This,
1357         IShellView* psvPrevious,
1358         LPCFOLDERSETTINGS lpfs,
1359         IShellBrowser* psb,
1360         RECT* prcView,
1361         HWND* phWnd);
1362
1363     HRESULT (STDMETHODCALLTYPE *DestroyViewWindow)(
1364         IShellView* This);
1365
1366     HRESULT (STDMETHODCALLTYPE *GetCurrentInfo)(
1367         IShellView* This,
1368         LPFOLDERSETTINGS lpfs);
1369
1370     HRESULT (STDMETHODCALLTYPE *AddPropertySheetPages)(
1371         IShellView* This,
1372         DWORD dwReserved,
1373         LPFNSVADDPROPSHEETPAGE pfn,
1374         LPARAM lparam);
1375
1376     HRESULT (STDMETHODCALLTYPE *SaveViewState)(
1377         IShellView* This);
1378
1379     HRESULT (STDMETHODCALLTYPE *SelectItem)(
1380         IShellView* This,
1381         LPCITEMIDLIST pidlItem,
1382         SVSIF uFlags);
1383
1384     HRESULT (STDMETHODCALLTYPE *GetItemObject)(
1385         IShellView* This,
1386         UINT uItem,
1387         REFIID riid,
1388         void** ppv);
1389
1390     END_INTERFACE
1391 };
1392
1393 #ifdef COBJMACROS
1394 /*** IUnknown methods ***/
1395 #define IShellView_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1396 #define IShellView_AddRef(p) (p)->lpVtbl->AddRef(p)
1397 #define IShellView_Release(p) (p)->lpVtbl->Release(p)
1398 /*** IOleWindow methods ***/
1399 #define IShellView_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
1400 #define IShellView_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
1401 /*** IShellView methods ***/
1402 #define IShellView_TranslateAccelerator(p,a) (p)->lpVtbl->TranslateAccelerator(p,a)
1403 #define IShellView_EnableModeless(p,a) (p)->lpVtbl->EnableModeless(p,a)
1404 #define IShellView_UIActivate(p,a) (p)->lpVtbl->UIActivate(p,a)
1405 #define IShellView_Refresh(p) (p)->lpVtbl->Refresh(p)
1406 #define IShellView_CreateViewWindow(p,a,b,c,d,e) (p)->lpVtbl->CreateViewWindow(p,a,b,c,d,e)
1407 #define IShellView_DestroyViewWindow(p) (p)->lpVtbl->DestroyViewWindow(p)
1408 #define IShellView_GetCurrentInfo(p,a) (p)->lpVtbl->GetCurrentInfo(p,a)
1409 #define IShellView_AddPropertySheetPages(p,a,b,c) (p)->lpVtbl->AddPropertySheetPages(p,a,b,c)
1410 #define IShellView_SaveViewState(p) (p)->lpVtbl->SaveViewState(p)
1411 #define IShellView_SelectItem(p,a,b) (p)->lpVtbl->SelectItem(p,a,b)
1412 #define IShellView_GetItemObject(p,a,b,c) (p)->lpVtbl->GetItemObject(p,a,b,c)
1413 #endif
1414
1415 #endif
1416
1417 #define IShellView_METHODS \
1418     /*** IUnknown methods ***/ \
1419     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
1420     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
1421     STDMETHOD_(ULONG,Release)(THIS) PURE; \
1422     /*** IOleWindow methods ***/ \
1423     STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND* phwnd) PURE; \
1424     STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL fEnterMode) PURE; \
1425     /*** IShellView methods ***/ \
1426     STDMETHOD_(HRESULT,TranslateAccelerator)(THIS_ MSG* pmsg) PURE; \
1427     STDMETHOD_(HRESULT,EnableModeless)(THIS_ BOOL fEnable) PURE; \
1428     STDMETHOD_(HRESULT,UIActivate)(THIS_ UINT uState) PURE; \
1429     STDMETHOD_(HRESULT,Refresh)(THIS) PURE; \
1430     STDMETHOD_(HRESULT,CreateViewWindow)(THIS_ IShellView* psvPrevious, LPCFOLDERSETTINGS lpfs, IShellBrowser* psb, RECT* prcView, HWND* phWnd) PURE; \
1431     STDMETHOD_(HRESULT,DestroyViewWindow)(THIS) PURE; \
1432     STDMETHOD_(HRESULT,GetCurrentInfo)(THIS_ LPFOLDERSETTINGS lpfs) PURE; \
1433     STDMETHOD_(HRESULT,AddPropertySheetPages)(THIS_ DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) PURE; \
1434     STDMETHOD_(HRESULT,SaveViewState)(THIS) PURE; \
1435     STDMETHOD_(HRESULT,SelectItem)(THIS_ LPCITEMIDLIST pidlItem, SVSIF uFlags) PURE; \
1436     STDMETHOD_(HRESULT,GetItemObject)(THIS_ UINT uItem, REFIID riid, void** ppv) PURE;
1437
1438 HRESULT CALLBACK IShellView_TranslateAccelerator_Proxy(
1439     IShellView* This,
1440     MSG* pmsg);
1441 void __RPC_STUB IShellView_TranslateAccelerator_Stub(
1442     struct IRpcStubBuffer* This,
1443     struct IRpcChannelBuffer* pRpcChannelBuffer,
1444     PRPC_MESSAGE pRpcMessage,
1445     DWORD* pdwStubPhase);
1446 HRESULT CALLBACK IShellView_EnableModeless_Proxy(
1447     IShellView* This,
1448     BOOL fEnable);
1449 void __RPC_STUB IShellView_EnableModeless_Stub(
1450     struct IRpcStubBuffer* This,
1451     struct IRpcChannelBuffer* pRpcChannelBuffer,
1452     PRPC_MESSAGE pRpcMessage,
1453     DWORD* pdwStubPhase);
1454 HRESULT CALLBACK IShellView_UIActivate_Proxy(
1455     IShellView* This,
1456     UINT uState);
1457 void __RPC_STUB IShellView_UIActivate_Stub(
1458     struct IRpcStubBuffer* This,
1459     struct IRpcChannelBuffer* pRpcChannelBuffer,
1460     PRPC_MESSAGE pRpcMessage,
1461     DWORD* pdwStubPhase);
1462 HRESULT CALLBACK IShellView_Refresh_Proxy(
1463     IShellView* This);
1464 void __RPC_STUB IShellView_Refresh_Stub(
1465     struct IRpcStubBuffer* This,
1466     struct IRpcChannelBuffer* pRpcChannelBuffer,
1467     PRPC_MESSAGE pRpcMessage,
1468     DWORD* pdwStubPhase);
1469 HRESULT CALLBACK IShellView_CreateViewWindow_Proxy(
1470     IShellView* This,
1471     IShellView* psvPrevious,
1472     LPCFOLDERSETTINGS lpfs,
1473     IShellBrowser* psb,
1474     RECT* prcView,
1475     HWND* phWnd);
1476 void __RPC_STUB IShellView_CreateViewWindow_Stub(
1477     struct IRpcStubBuffer* This,
1478     struct IRpcChannelBuffer* pRpcChannelBuffer,
1479     PRPC_MESSAGE pRpcMessage,
1480     DWORD* pdwStubPhase);
1481 HRESULT CALLBACK IShellView_DestroyViewWindow_Proxy(
1482     IShellView* This);
1483 void __RPC_STUB IShellView_DestroyViewWindow_Stub(
1484     struct IRpcStubBuffer* This,
1485     struct IRpcChannelBuffer* pRpcChannelBuffer,
1486     PRPC_MESSAGE pRpcMessage,
1487     DWORD* pdwStubPhase);
1488 HRESULT CALLBACK IShellView_GetCurrentInfo_Proxy(
1489     IShellView* This,
1490     LPFOLDERSETTINGS lpfs);
1491 void __RPC_STUB IShellView_GetCurrentInfo_Stub(
1492     struct IRpcStubBuffer* This,
1493     struct IRpcChannelBuffer* pRpcChannelBuffer,
1494     PRPC_MESSAGE pRpcMessage,
1495     DWORD* pdwStubPhase);
1496 HRESULT CALLBACK IShellView_SaveViewState_Proxy(
1497     IShellView* This);
1498 void __RPC_STUB IShellView_SaveViewState_Stub(
1499     struct IRpcStubBuffer* This,
1500     struct IRpcChannelBuffer* pRpcChannelBuffer,
1501     PRPC_MESSAGE pRpcMessage,
1502     DWORD* pdwStubPhase);
1503 HRESULT CALLBACK IShellView_SelectItem_Proxy(
1504     IShellView* This,
1505     LPCITEMIDLIST pidlItem,
1506     SVSIF uFlags);
1507 void __RPC_STUB IShellView_SelectItem_Stub(
1508     struct IRpcStubBuffer* This,
1509     struct IRpcChannelBuffer* pRpcChannelBuffer,
1510     PRPC_MESSAGE pRpcMessage,
1511     DWORD* pdwStubPhase);
1512 HRESULT CALLBACK IShellView_GetItemObject_Proxy(
1513     IShellView* This,
1514     UINT uItem,
1515     REFIID riid,
1516     void** ppv);
1517 void __RPC_STUB IShellView_GetItemObject_Stub(
1518     struct IRpcStubBuffer* This,
1519     struct IRpcChannelBuffer* pRpcChannelBuffer,
1520     PRPC_MESSAGE pRpcMessage,
1521     DWORD* pdwStubPhase);
1522
1523 #endif  /* __IShellView_INTERFACE_DEFINED__ */
1524
1525 typedef IShellBrowser *LPSHELLBROWSER;
1526
1527 #define SBSP_DEFBROWSER            0x00000000
1528 #define SBSP_SAMEBROWSER           0x00000001
1529 #define SBSP_NEWBROWSER            0x00000002
1530 #define SBSP_DEFMODE               0x00000000
1531 #define SBSP_OPENMODE              0x00000010
1532 #define SBSP_EXPLOREMODE           0x00000020
1533 #define SBSP_HELPMODE              0x00000040
1534 #define SBSP_NOTRANSFERHIST        0x00000080
1535 #define SBSP_ABSOLUTE              0x00000000
1536 #define SBSP_RELATIVE              0x00001000
1537 #define SBSP_PARENT                0x00002000
1538 #define SBSP_NAVIGATEBACK          0x00004000
1539 #define SBSP_NAVIGATEFORWARD       0x00008000
1540 #define SBSP_ALLOW_AUTONAVIGATE    0x00010000
1541 #define SBSP_NOAUTOSELECT          0x04000000
1542 #define SBSP_WRITENOHISTORY        0x08000000
1543 #define SBSP_REDIRECT              0x40000000
1544 #define SBSP_INITIATEDBYHLINKFRAME 0x80000000
1545 #define FCW_STATUS      0x0001
1546 #define FCW_TOOLBAR     0x0002
1547 #define FCW_TREE        0x0003
1548 #define FCW_INTERNETBAR 0x0006
1549 #define FCW_PROGRESS    0x0008
1550 #define FCT_MERGE       0x0001
1551 #define FCT_CONFIGABLE  0x0002
1552 #define FCT_ADDTOEND    0x0004
1553 #if 0
1554 typedef LPARAM LPTBBUTTONSB;
1555
1556 #else
1557 #include <commctrl.h>
1558 typedef LPTBBUTTON LPTBBUTTONSB;
1559 #endif
1560 /*****************************************************************************
1561  * IShellBrowser interface
1562  */
1563 #ifndef __IShellBrowser_INTERFACE_DEFINED__
1564 #define __IShellBrowser_INTERFACE_DEFINED__
1565
1566 DEFINE_GUID(IID_IShellBrowser, 0x000214e2, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1567 #if defined(__cplusplus) && !defined(CINTERFACE)
1568 struct IShellBrowser : public IOleWindow
1569 {
1570     virtual HRESULT STDMETHODCALLTYPE InsertMenusSB(
1571         HMENU hmenuShared,
1572         LPOLEMENUGROUPWIDTHS lpMenuWidths) = 0;
1573
1574     virtual HRESULT STDMETHODCALLTYPE SetMenuSB(
1575         HMENU hmenuShared,
1576         HOLEMENU holemenuReserved,
1577         HWND hwndActiveObject) = 0;
1578
1579     virtual HRESULT STDMETHODCALLTYPE RemoveMenusSB(
1580         HMENU hmenuShared) = 0;
1581
1582     virtual HRESULT STDMETHODCALLTYPE SetStatusTextSB(
1583         LPCOLESTR pszStatusText) = 0;
1584
1585     virtual HRESULT STDMETHODCALLTYPE EnableModelessSB(
1586         BOOL fEnable) = 0;
1587
1588     virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorSB(
1589         MSG* pmsg,
1590         WORD wID) = 0;
1591
1592     virtual HRESULT STDMETHODCALLTYPE BrowseObject(
1593         LPCITEMIDLIST pidl,
1594         UINT wFlags) = 0;
1595
1596     virtual HRESULT STDMETHODCALLTYPE GetViewStateStream(
1597         DWORD grfMode,
1598         IStream** ppStrm) = 0;
1599
1600     virtual HRESULT STDMETHODCALLTYPE GetControlWindow(
1601         UINT id,
1602         HWND* phwnd) = 0;
1603
1604     virtual HRESULT STDMETHODCALLTYPE SendControlMsg(
1605         UINT id,
1606         UINT uMsg,
1607         WPARAM wParam,
1608         LPARAM lParam,
1609         LRESULT* pret) = 0;
1610
1611     virtual HRESULT STDMETHODCALLTYPE QueryActiveShellView(
1612         IShellView** ppshv) = 0;
1613
1614     virtual HRESULT STDMETHODCALLTYPE OnViewWindowActive(
1615         IShellView* pshv) = 0;
1616
1617     virtual HRESULT STDMETHODCALLTYPE SetToolbarItems(
1618         LPTBBUTTONSB lpButtons,
1619         UINT nButtons,
1620         UINT uFlags) = 0;
1621
1622 };
1623 #else
1624 typedef struct IShellBrowserVtbl IShellBrowserVtbl;
1625 struct IShellBrowser {
1626     const IShellBrowserVtbl* lpVtbl;
1627 };
1628 struct IShellBrowserVtbl {
1629     BEGIN_INTERFACE
1630
1631     /*** IUnknown methods ***/
1632     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1633         IShellBrowser* This,
1634         REFIID riid,
1635         void** ppvObject);
1636
1637     ULONG (STDMETHODCALLTYPE *AddRef)(
1638         IShellBrowser* This);
1639
1640     ULONG (STDMETHODCALLTYPE *Release)(
1641         IShellBrowser* This);
1642
1643     /*** IOleWindow methods ***/
1644     HRESULT (STDMETHODCALLTYPE *GetWindow)(
1645         IShellBrowser* This,
1646         HWND* phwnd);
1647
1648     HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
1649         IShellBrowser* This,
1650         BOOL fEnterMode);
1651
1652     /*** IShellBrowser methods ***/
1653     HRESULT (STDMETHODCALLTYPE *InsertMenusSB)(
1654         IShellBrowser* This,
1655         HMENU hmenuShared,
1656         LPOLEMENUGROUPWIDTHS lpMenuWidths);
1657
1658     HRESULT (STDMETHODCALLTYPE *SetMenuSB)(
1659         IShellBrowser* This,
1660         HMENU hmenuShared,
1661         HOLEMENU holemenuReserved,
1662         HWND hwndActiveObject);
1663
1664     HRESULT (STDMETHODCALLTYPE *RemoveMenusSB)(
1665         IShellBrowser* This,
1666         HMENU hmenuShared);
1667
1668     HRESULT (STDMETHODCALLTYPE *SetStatusTextSB)(
1669         IShellBrowser* This,
1670         LPCOLESTR pszStatusText);
1671
1672     HRESULT (STDMETHODCALLTYPE *EnableModelessSB)(
1673         IShellBrowser* This,
1674         BOOL fEnable);
1675
1676     HRESULT (STDMETHODCALLTYPE *TranslateAcceleratorSB)(
1677         IShellBrowser* This,
1678         MSG* pmsg,
1679         WORD wID);
1680
1681     HRESULT (STDMETHODCALLTYPE *BrowseObject)(
1682         IShellBrowser* This,
1683         LPCITEMIDLIST pidl,
1684         UINT wFlags);
1685
1686     HRESULT (STDMETHODCALLTYPE *GetViewStateStream)(
1687         IShellBrowser* This,
1688         DWORD grfMode,
1689         IStream** ppStrm);
1690
1691     HRESULT (STDMETHODCALLTYPE *GetControlWindow)(
1692         IShellBrowser* This,
1693         UINT id,
1694         HWND* phwnd);
1695
1696     HRESULT (STDMETHODCALLTYPE *SendControlMsg)(
1697         IShellBrowser* This,
1698         UINT id,
1699         UINT uMsg,
1700         WPARAM wParam,
1701         LPARAM lParam,
1702         LRESULT* pret);
1703
1704     HRESULT (STDMETHODCALLTYPE *QueryActiveShellView)(
1705         IShellBrowser* This,
1706         IShellView** ppshv);
1707
1708     HRESULT (STDMETHODCALLTYPE *OnViewWindowActive)(
1709         IShellBrowser* This,
1710         IShellView* pshv);
1711
1712     HRESULT (STDMETHODCALLTYPE *SetToolbarItems)(
1713         IShellBrowser* This,
1714         LPTBBUTTONSB lpButtons,
1715         UINT nButtons,
1716         UINT uFlags);
1717
1718     END_INTERFACE
1719 };
1720
1721 #ifdef COBJMACROS
1722 /*** IUnknown methods ***/
1723 #define IShellBrowser_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
1724 #define IShellBrowser_AddRef(p) (p)->lpVtbl->AddRef(p)
1725 #define IShellBrowser_Release(p) (p)->lpVtbl->Release(p)
1726 /*** IOleWindow methods ***/
1727 #define IShellBrowser_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
1728 #define IShellBrowser_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
1729 /*** IShellBrowser methods ***/
1730 #define IShellBrowser_InsertMenusSB(p,a,b) (p)->lpVtbl->InsertMenusSB(p,a,b)
1731 #define IShellBrowser_SetMenuSB(p,a,b,c) (p)->lpVtbl->SetMenuSB(p,a,b,c)
1732 #define IShellBrowser_RemoveMenusSB(p,a) (p)->lpVtbl->RemoveMenusSB(p,a)
1733 #define IShellBrowser_SetStatusTextSB(p,a) (p)->lpVtbl->SetStatusTextSB(p,a)
1734 #define IShellBrowser_EnableModelessSB(p,a) (p)->lpVtbl->EnableModelessSB(p,a)
1735 #define IShellBrowser_TranslateAcceleratorSB(p,a,b) (p)->lpVtbl->TranslateAcceleratorSB(p,a,b)
1736 #define IShellBrowser_BrowseObject(p,a,b) (p)->lpVtbl->BrowseObject(p,a,b)
1737 #define IShellBrowser_GetViewStateStream(p,a,b) (p)->lpVtbl->GetViewStateStream(p,a,b)
1738 #define IShellBrowser_GetControlWindow(p,a,b) (p)->lpVtbl->GetControlWindow(p,a,b)
1739 #define IShellBrowser_SendControlMsg(p,a,b,c,d,e) (p)->lpVtbl->SendControlMsg(p,a,b,c,d,e)
1740 #define IShellBrowser_QueryActiveShellView(p,a) (p)->lpVtbl->QueryActiveShellView(p,a)
1741 #define IShellBrowser_OnViewWindowActive(p,a) (p)->lpVtbl->OnViewWindowActive(p,a)
1742 #define IShellBrowser_SetToolbarItems(p,a,b,c) (p)->lpVtbl->SetToolbarItems(p,a,b,c)
1743 #endif
1744
1745 #endif
1746
1747 #define IShellBrowser_METHODS \
1748     /*** IUnknown methods ***/ \
1749     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
1750     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
1751     STDMETHOD_(ULONG,Release)(THIS) PURE; \
1752     /*** IOleWindow methods ***/ \
1753     STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND* phwnd) PURE; \
1754     STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL fEnterMode) PURE; \
1755     /*** IShellBrowser methods ***/ \
1756     STDMETHOD_(HRESULT,InsertMenusSB)(THIS_ HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) PURE; \
1757     STDMETHOD_(HRESULT,SetMenuSB)(THIS_ HMENU hmenuShared, HOLEMENU holemenuReserved, HWND hwndActiveObject) PURE; \
1758     STDMETHOD_(HRESULT,RemoveMenusSB)(THIS_ HMENU hmenuShared) PURE; \
1759     STDMETHOD_(HRESULT,SetStatusTextSB)(THIS_ LPCOLESTR pszStatusText) PURE; \
1760     STDMETHOD_(HRESULT,EnableModelessSB)(THIS_ BOOL fEnable) PURE; \
1761     STDMETHOD_(HRESULT,TranslateAcceleratorSB)(THIS_ MSG* pmsg, WORD wID) PURE; \
1762     STDMETHOD_(HRESULT,BrowseObject)(THIS_ LPCITEMIDLIST pidl, UINT wFlags) PURE; \
1763     STDMETHOD_(HRESULT,GetViewStateStream)(THIS_ DWORD grfMode, IStream** ppStrm) PURE; \
1764     STDMETHOD_(HRESULT,GetControlWindow)(THIS_ UINT id, HWND* phwnd) PURE; \
1765     STDMETHOD_(HRESULT,SendControlMsg)(THIS_ UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pret) PURE; \
1766     STDMETHOD_(HRESULT,QueryActiveShellView)(THIS_ IShellView** ppshv) PURE; \
1767     STDMETHOD_(HRESULT,OnViewWindowActive)(THIS_ IShellView* pshv) PURE; \
1768     STDMETHOD_(HRESULT,SetToolbarItems)(THIS_ LPTBBUTTONSB lpButtons, UINT nButtons, UINT uFlags) PURE;
1769
1770 HRESULT CALLBACK IShellBrowser_InsertMenusSB_Proxy(
1771     IShellBrowser* This,
1772     HMENU hmenuShared,
1773     LPOLEMENUGROUPWIDTHS lpMenuWidths);
1774 void __RPC_STUB IShellBrowser_InsertMenusSB_Stub(
1775     struct IRpcStubBuffer* This,
1776     struct IRpcChannelBuffer* pRpcChannelBuffer,
1777     PRPC_MESSAGE pRpcMessage,
1778     DWORD* pdwStubPhase);
1779 HRESULT CALLBACK IShellBrowser_SetMenuSB_Proxy(
1780     IShellBrowser* This,
1781     HMENU hmenuShared,
1782     HOLEMENU holemenuReserved,
1783     HWND hwndActiveObject);
1784 void __RPC_STUB IShellBrowser_SetMenuSB_Stub(
1785     struct IRpcStubBuffer* This,
1786     struct IRpcChannelBuffer* pRpcChannelBuffer,
1787     PRPC_MESSAGE pRpcMessage,
1788     DWORD* pdwStubPhase);
1789 HRESULT CALLBACK IShellBrowser_RemoveMenusSB_Proxy(
1790     IShellBrowser* This,
1791     HMENU hmenuShared);
1792 void __RPC_STUB IShellBrowser_RemoveMenusSB_Stub(
1793     struct IRpcStubBuffer* This,
1794     struct IRpcChannelBuffer* pRpcChannelBuffer,
1795     PRPC_MESSAGE pRpcMessage,
1796     DWORD* pdwStubPhase);
1797 HRESULT CALLBACK IShellBrowser_SetStatusTextSB_Proxy(
1798     IShellBrowser* This,
1799     LPCOLESTR pszStatusText);
1800 void __RPC_STUB IShellBrowser_SetStatusTextSB_Stub(
1801     struct IRpcStubBuffer* This,
1802     struct IRpcChannelBuffer* pRpcChannelBuffer,
1803     PRPC_MESSAGE pRpcMessage,
1804     DWORD* pdwStubPhase);
1805 HRESULT CALLBACK IShellBrowser_EnableModelessSB_Proxy(
1806     IShellBrowser* This,
1807     BOOL fEnable);
1808 void __RPC_STUB IShellBrowser_EnableModelessSB_Stub(
1809     struct IRpcStubBuffer* This,
1810     struct IRpcChannelBuffer* pRpcChannelBuffer,
1811     PRPC_MESSAGE pRpcMessage,
1812     DWORD* pdwStubPhase);
1813 HRESULT CALLBACK IShellBrowser_TranslateAcceleratorSB_Proxy(
1814     IShellBrowser* This,
1815     MSG* pmsg,
1816     WORD wID);
1817 void __RPC_STUB IShellBrowser_TranslateAcceleratorSB_Stub(
1818     struct IRpcStubBuffer* This,
1819     struct IRpcChannelBuffer* pRpcChannelBuffer,
1820     PRPC_MESSAGE pRpcMessage,
1821     DWORD* pdwStubPhase);
1822 HRESULT CALLBACK IShellBrowser_BrowseObject_Proxy(
1823     IShellBrowser* This,
1824     LPCITEMIDLIST pidl,
1825     UINT wFlags);
1826 void __RPC_STUB IShellBrowser_BrowseObject_Stub(
1827     struct IRpcStubBuffer* This,
1828     struct IRpcChannelBuffer* pRpcChannelBuffer,
1829     PRPC_MESSAGE pRpcMessage,
1830     DWORD* pdwStubPhase);
1831 HRESULT CALLBACK IShellBrowser_GetViewStateStream_Proxy(
1832     IShellBrowser* This,
1833     DWORD grfMode,
1834     IStream** ppStrm);
1835 void __RPC_STUB IShellBrowser_GetViewStateStream_Stub(
1836     struct IRpcStubBuffer* This,
1837     struct IRpcChannelBuffer* pRpcChannelBuffer,
1838     PRPC_MESSAGE pRpcMessage,
1839     DWORD* pdwStubPhase);
1840 HRESULT CALLBACK IShellBrowser_GetControlWindow_Proxy(
1841     IShellBrowser* This,
1842     UINT id,
1843     HWND* phwnd);
1844 void __RPC_STUB IShellBrowser_GetControlWindow_Stub(
1845     struct IRpcStubBuffer* This,
1846     struct IRpcChannelBuffer* pRpcChannelBuffer,
1847     PRPC_MESSAGE pRpcMessage,
1848     DWORD* pdwStubPhase);
1849 HRESULT CALLBACK IShellBrowser_QueryActiveShellView_Proxy(
1850     IShellBrowser* This,
1851     IShellView** ppshv);
1852 void __RPC_STUB IShellBrowser_QueryActiveShellView_Stub(
1853     struct IRpcStubBuffer* This,
1854     struct IRpcChannelBuffer* pRpcChannelBuffer,
1855     PRPC_MESSAGE pRpcMessage,
1856     DWORD* pdwStubPhase);
1857 HRESULT CALLBACK IShellBrowser_OnViewWindowActive_Proxy(
1858     IShellBrowser* This,
1859     IShellView* pshv);
1860 void __RPC_STUB IShellBrowser_OnViewWindowActive_Stub(
1861     struct IRpcStubBuffer* This,
1862     struct IRpcChannelBuffer* pRpcChannelBuffer,
1863     PRPC_MESSAGE pRpcMessage,
1864     DWORD* pdwStubPhase);
1865
1866 #endif  /* __IShellBrowser_INTERFACE_DEFINED__ */
1867
1868 #ifndef __IShellLinkA_FWD_DEFINED__
1869 #define __IShellLinkA_FWD_DEFINED__
1870 typedef struct IShellLinkA IShellLinkA;
1871 #endif
1872
1873 typedef enum {
1874     SLR_NO_UI = 0x1,
1875     SLR_ANY_MATCH = 0x2,
1876     SLR_UPDATE = 0x4,
1877     SLR_NOUPDATE = 0x8,
1878     SLR_NOSEARCH = 0x10,
1879     SLR_NOTRACK = 0x20,
1880     SLR_NOLINKINFO = 0x40,
1881     SLR_INVOKE_MSI = 0x80,
1882     SLR_NO_UI_WITH_MSG_PUMP = 0x101
1883 } SLR_FLAGS;
1884
1885 typedef enum {
1886     SLGP_SHORTPATH = 0x1,
1887     SLGP_UNCPRIORITY = 0x2,
1888     SLGP_RAWPATH = 0x4
1889 } SLGP_FLAGS;
1890
1891 /*****************************************************************************
1892  * IShellLinkA interface
1893  */
1894 #ifndef __IShellLinkA_INTERFACE_DEFINED__
1895 #define __IShellLinkA_INTERFACE_DEFINED__
1896
1897 DEFINE_GUID(IID_IShellLinkA, 0x000214ee, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
1898 #if defined(__cplusplus) && !defined(CINTERFACE)
1899 struct IShellLinkA : public IUnknown
1900 {
1901     virtual HRESULT STDMETHODCALLTYPE GetPath(
1902         LPSTR pszFile,
1903         int cch,
1904         WIN32_FIND_DATAA* pfd,
1905         DWORD fFlags) = 0;
1906
1907     virtual HRESULT STDMETHODCALLTYPE GetIDList(
1908         LPITEMIDLIST* ppidl) = 0;
1909
1910     virtual HRESULT STDMETHODCALLTYPE SetIDList(
1911         LPCITEMIDLIST pidl) = 0;
1912
1913     virtual HRESULT STDMETHODCALLTYPE GetDescription(
1914         LPSTR pszName,
1915         int cch) = 0;
1916
1917     virtual HRESULT STDMETHODCALLTYPE SetDescription(
1918         LPCSTR pszName) = 0;
1919
1920     virtual HRESULT STDMETHODCALLTYPE GetWorkingDirectory(
1921         LPSTR pszDir,
1922         int cch) = 0;
1923
1924     virtual HRESULT STDMETHODCALLTYPE SetWorkingDirectory(
1925         LPCSTR pszDir) = 0;
1926
1927     virtual HRESULT STDMETHODCALLTYPE GetArguments(
1928         LPSTR pszArgs,
1929         int cch) = 0;
1930
1931     virtual HRESULT STDMETHODCALLTYPE SetArguments(
1932         LPCSTR pszArgs) = 0;
1933
1934     virtual HRESULT STDMETHODCALLTYPE GetHotkey(
1935         WORD* pwHotkey) = 0;
1936
1937     virtual HRESULT STDMETHODCALLTYPE SetHotkey(
1938         WORD wHotkey) = 0;
1939
1940     virtual HRESULT STDMETHODCALLTYPE GetShowCmd(
1941         int* piShowCmd) = 0;
1942
1943     virtual HRESULT STDMETHODCALLTYPE SetShowCmd(
1944         int iShowCmd) = 0;
1945
1946     virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
1947         LPSTR pszIconPath,
1948         int cch,
1949         int* piIcon) = 0;
1950
1951     virtual HRESULT STDMETHODCALLTYPE SetIconLocation(
1952         LPCSTR pszIconPath,
1953         int iIcon) = 0;
1954
1955     virtual HRESULT STDMETHODCALLTYPE SetRelativePath(
1956         LPCSTR pszPathRel,
1957         DWORD dwReserved) = 0;
1958
1959     virtual HRESULT STDMETHODCALLTYPE Resolve(
1960         HWND hwnd,
1961         DWORD fFlags) = 0;
1962
1963     virtual HRESULT STDMETHODCALLTYPE SetPath(
1964         LPCSTR pszFile) = 0;
1965
1966 };
1967 #else
1968 typedef struct IShellLinkAVtbl IShellLinkAVtbl;
1969 struct IShellLinkA {
1970     const IShellLinkAVtbl* lpVtbl;
1971 };
1972 struct IShellLinkAVtbl {
1973     BEGIN_INTERFACE
1974
1975     /*** IUnknown methods ***/
1976     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1977         IShellLinkA* This,
1978         REFIID riid,
1979         void** ppvObject);
1980
1981     ULONG (STDMETHODCALLTYPE *AddRef)(
1982         IShellLinkA* This);
1983
1984     ULONG (STDMETHODCALLTYPE *Release)(
1985         IShellLinkA* This);
1986
1987     /*** IShellLinkA methods ***/
1988     HRESULT (STDMETHODCALLTYPE *GetPath)(
1989         IShellLinkA* This,
1990         LPSTR pszFile,
1991         int cch,
1992         WIN32_FIND_DATAA* pfd,
1993         DWORD fFlags);
1994
1995     HRESULT (STDMETHODCALLTYPE *GetIDList)(
1996         IShellLinkA* This,
1997         LPITEMIDLIST* ppidl);
1998
1999     HRESULT (STDMETHODCALLTYPE *SetIDList)(
2000         IShellLinkA* This,
2001         LPCITEMIDLIST pidl);
2002
2003     HRESULT (STDMETHODCALLTYPE *GetDescription)(
2004         IShellLinkA* This,
2005         LPSTR pszName,
2006         int cch);
2007
2008     HRESULT (STDMETHODCALLTYPE *SetDescription)(
2009         IShellLinkA* This,
2010         LPCSTR pszName);
2011
2012     HRESULT (STDMETHODCALLTYPE *GetWorkingDirectory)(
2013         IShellLinkA* This,
2014         LPSTR pszDir,
2015         int cch);
2016
2017     HRESULT (STDMETHODCALLTYPE *SetWorkingDirectory)(
2018         IShellLinkA* This,
2019         LPCSTR pszDir);
2020
2021     HRESULT (STDMETHODCALLTYPE *GetArguments)(
2022         IShellLinkA* This,
2023         LPSTR pszArgs,
2024         int cch);
2025
2026     HRESULT (STDMETHODCALLTYPE *SetArguments)(
2027         IShellLinkA* This,
2028         LPCSTR pszArgs);
2029
2030     HRESULT (STDMETHODCALLTYPE *GetHotkey)(
2031         IShellLinkA* This,
2032         WORD* pwHotkey);
2033
2034     HRESULT (STDMETHODCALLTYPE *SetHotkey)(
2035         IShellLinkA* This,
2036         WORD wHotkey);
2037
2038     HRESULT (STDMETHODCALLTYPE *GetShowCmd)(
2039         IShellLinkA* This,
2040         int* piShowCmd);
2041
2042     HRESULT (STDMETHODCALLTYPE *SetShowCmd)(
2043         IShellLinkA* This,
2044         int iShowCmd);
2045
2046     HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
2047         IShellLinkA* This,
2048         LPSTR pszIconPath,
2049         int cch,
2050         int* piIcon);
2051
2052     HRESULT (STDMETHODCALLTYPE *SetIconLocation)(
2053         IShellLinkA* This,
2054         LPCSTR pszIconPath,
2055         int iIcon);
2056
2057     HRESULT (STDMETHODCALLTYPE *SetRelativePath)(
2058         IShellLinkA* This,
2059         LPCSTR pszPathRel,
2060         DWORD dwReserved);
2061
2062     HRESULT (STDMETHODCALLTYPE *Resolve)(
2063         IShellLinkA* This,
2064         HWND hwnd,
2065         DWORD fFlags);
2066
2067     HRESULT (STDMETHODCALLTYPE *SetPath)(
2068         IShellLinkA* This,
2069         LPCSTR pszFile);
2070
2071     END_INTERFACE
2072 };
2073
2074 #ifdef COBJMACROS
2075 /*** IUnknown methods ***/
2076 #define IShellLinkA_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2077 #define IShellLinkA_AddRef(p) (p)->lpVtbl->AddRef(p)
2078 #define IShellLinkA_Release(p) (p)->lpVtbl->Release(p)
2079 /*** IShellLinkA methods ***/
2080 #define IShellLinkA_GetPath(p,a,b,c,d) (p)->lpVtbl->GetPath(p,a,b,c,d)
2081 #define IShellLinkA_GetIDList(p,a) (p)->lpVtbl->GetIDList(p,a)
2082 #define IShellLinkA_SetIDList(p,a) (p)->lpVtbl->SetIDList(p,a)
2083 #define IShellLinkA_GetDescription(p,a,b) (p)->lpVtbl->GetDescription(p,a,b)
2084 #define IShellLinkA_SetDescription(p,a) (p)->lpVtbl->SetDescription(p,a)
2085 #define IShellLinkA_GetWorkingDirectory(p,a,b) (p)->lpVtbl->GetWorkingDirectory(p,a,b)
2086 #define IShellLinkA_SetWorkingDirectory(p,a) (p)->lpVtbl->SetWorkingDirectory(p,a)
2087 #define IShellLinkA_GetArguments(p,a,b) (p)->lpVtbl->GetArguments(p,a,b)
2088 #define IShellLinkA_SetArguments(p,a) (p)->lpVtbl->SetArguments(p,a)
2089 #define IShellLinkA_GetHotkey(p,a) (p)->lpVtbl->GetHotkey(p,a)
2090 #define IShellLinkA_SetHotkey(p,a) (p)->lpVtbl->SetHotkey(p,a)
2091 #define IShellLinkA_GetShowCmd(p,a) (p)->lpVtbl->GetShowCmd(p,a)
2092 #define IShellLinkA_SetShowCmd(p,a) (p)->lpVtbl->SetShowCmd(p,a)
2093 #define IShellLinkA_GetIconLocation(p,a,b,c) (p)->lpVtbl->GetIconLocation(p,a,b,c)
2094 #define IShellLinkA_SetIconLocation(p,a,b) (p)->lpVtbl->SetIconLocation(p,a,b)
2095 #define IShellLinkA_SetRelativePath(p,a,b) (p)->lpVtbl->SetRelativePath(p,a,b)
2096 #define IShellLinkA_Resolve(p,a,b) (p)->lpVtbl->Resolve(p,a,b)
2097 #define IShellLinkA_SetPath(p,a) (p)->lpVtbl->SetPath(p,a)
2098 #endif
2099
2100 #endif
2101
2102 #define IShellLinkA_METHODS \
2103     /*** IUnknown methods ***/ \
2104     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
2105     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
2106     STDMETHOD_(ULONG,Release)(THIS) PURE; \
2107     /*** IShellLinkA methods ***/ \
2108     STDMETHOD_(HRESULT,GetPath)(THIS_ LPSTR pszFile, int cch, WIN32_FIND_DATAA* pfd, DWORD fFlags) PURE; \
2109     STDMETHOD_(HRESULT,GetIDList)(THIS_ LPITEMIDLIST* ppidl) PURE; \
2110     STDMETHOD_(HRESULT,SetIDList)(THIS_ LPCITEMIDLIST pidl) PURE; \
2111     STDMETHOD_(HRESULT,GetDescription)(THIS_ LPSTR pszName, int cch) PURE; \
2112     STDMETHOD_(HRESULT,SetDescription)(THIS_ LPCSTR pszName) PURE; \
2113     STDMETHOD_(HRESULT,GetWorkingDirectory)(THIS_ LPSTR pszDir, int cch) PURE; \
2114     STDMETHOD_(HRESULT,SetWorkingDirectory)(THIS_ LPCSTR pszDir) PURE; \
2115     STDMETHOD_(HRESULT,GetArguments)(THIS_ LPSTR pszArgs, int cch) PURE; \
2116     STDMETHOD_(HRESULT,SetArguments)(THIS_ LPCSTR pszArgs) PURE; \
2117     STDMETHOD_(HRESULT,GetHotkey)(THIS_ WORD* pwHotkey) PURE; \
2118     STDMETHOD_(HRESULT,SetHotkey)(THIS_ WORD wHotkey) PURE; \
2119     STDMETHOD_(HRESULT,GetShowCmd)(THIS_ int* piShowCmd) PURE; \
2120     STDMETHOD_(HRESULT,SetShowCmd)(THIS_ int iShowCmd) PURE; \
2121     STDMETHOD_(HRESULT,GetIconLocation)(THIS_ LPSTR pszIconPath, int cch, int* piIcon) PURE; \
2122     STDMETHOD_(HRESULT,SetIconLocation)(THIS_ LPCSTR pszIconPath, int iIcon) PURE; \
2123     STDMETHOD_(HRESULT,SetRelativePath)(THIS_ LPCSTR pszPathRel, DWORD dwReserved) PURE; \
2124     STDMETHOD_(HRESULT,Resolve)(THIS_ HWND hwnd, DWORD fFlags) PURE; \
2125     STDMETHOD_(HRESULT,SetPath)(THIS_ LPCSTR pszFile) PURE;
2126
2127 HRESULT CALLBACK IShellLinkA_GetPath_Proxy(
2128     IShellLinkA* This,
2129     LPSTR pszFile,
2130     int cch,
2131     WIN32_FIND_DATAA* pfd,
2132     DWORD fFlags);
2133 void __RPC_STUB IShellLinkA_GetPath_Stub(
2134     struct IRpcStubBuffer* This,
2135     struct IRpcChannelBuffer* pRpcChannelBuffer,
2136     PRPC_MESSAGE pRpcMessage,
2137     DWORD* pdwStubPhase);
2138 HRESULT CALLBACK IShellLinkA_GetIDList_Proxy(
2139     IShellLinkA* This,
2140     LPITEMIDLIST* ppidl);
2141 void __RPC_STUB IShellLinkA_GetIDList_Stub(
2142     struct IRpcStubBuffer* This,
2143     struct IRpcChannelBuffer* pRpcChannelBuffer,
2144     PRPC_MESSAGE pRpcMessage,
2145     DWORD* pdwStubPhase);
2146 HRESULT CALLBACK IShellLinkA_SetIDList_Proxy(
2147     IShellLinkA* This,
2148     LPCITEMIDLIST pidl);
2149 void __RPC_STUB IShellLinkA_SetIDList_Stub(
2150     struct IRpcStubBuffer* This,
2151     struct IRpcChannelBuffer* pRpcChannelBuffer,
2152     PRPC_MESSAGE pRpcMessage,
2153     DWORD* pdwStubPhase);
2154 HRESULT CALLBACK IShellLinkA_GetDescription_Proxy(
2155     IShellLinkA* This,
2156     LPSTR pszName,
2157     int cch);
2158 void __RPC_STUB IShellLinkA_GetDescription_Stub(
2159     struct IRpcStubBuffer* This,
2160     struct IRpcChannelBuffer* pRpcChannelBuffer,
2161     PRPC_MESSAGE pRpcMessage,
2162     DWORD* pdwStubPhase);
2163 HRESULT CALLBACK IShellLinkA_SetDescription_Proxy(
2164     IShellLinkA* This,
2165     LPCSTR pszName);
2166 void __RPC_STUB IShellLinkA_SetDescription_Stub(
2167     struct IRpcStubBuffer* This,
2168     struct IRpcChannelBuffer* pRpcChannelBuffer,
2169     PRPC_MESSAGE pRpcMessage,
2170     DWORD* pdwStubPhase);
2171 HRESULT CALLBACK IShellLinkA_GetWorkingDirectory_Proxy(
2172     IShellLinkA* This,
2173     LPSTR pszDir,
2174     int cch);
2175 void __RPC_STUB IShellLinkA_GetWorkingDirectory_Stub(
2176     struct IRpcStubBuffer* This,
2177     struct IRpcChannelBuffer* pRpcChannelBuffer,
2178     PRPC_MESSAGE pRpcMessage,
2179     DWORD* pdwStubPhase);
2180 HRESULT CALLBACK IShellLinkA_SetWorkingDirectory_Proxy(
2181     IShellLinkA* This,
2182     LPCSTR pszDir);
2183 void __RPC_STUB IShellLinkA_SetWorkingDirectory_Stub(
2184     struct IRpcStubBuffer* This,
2185     struct IRpcChannelBuffer* pRpcChannelBuffer,
2186     PRPC_MESSAGE pRpcMessage,
2187     DWORD* pdwStubPhase);
2188 HRESULT CALLBACK IShellLinkA_GetArguments_Proxy(
2189     IShellLinkA* This,
2190     LPSTR pszArgs,
2191     int cch);
2192 void __RPC_STUB IShellLinkA_GetArguments_Stub(
2193     struct IRpcStubBuffer* This,
2194     struct IRpcChannelBuffer* pRpcChannelBuffer,
2195     PRPC_MESSAGE pRpcMessage,
2196     DWORD* pdwStubPhase);
2197 HRESULT CALLBACK IShellLinkA_SetArguments_Proxy(
2198     IShellLinkA* This,
2199     LPCSTR pszArgs);
2200 void __RPC_STUB IShellLinkA_SetArguments_Stub(
2201     struct IRpcStubBuffer* This,
2202     struct IRpcChannelBuffer* pRpcChannelBuffer,
2203     PRPC_MESSAGE pRpcMessage,
2204     DWORD* pdwStubPhase);
2205 HRESULT CALLBACK IShellLinkA_GetHotkey_Proxy(
2206     IShellLinkA* This,
2207     WORD* pwHotkey);
2208 void __RPC_STUB IShellLinkA_GetHotkey_Stub(
2209     struct IRpcStubBuffer* This,
2210     struct IRpcChannelBuffer* pRpcChannelBuffer,
2211     PRPC_MESSAGE pRpcMessage,
2212     DWORD* pdwStubPhase);
2213 HRESULT CALLBACK IShellLinkA_SetHotkey_Proxy(
2214     IShellLinkA* This,
2215     WORD wHotkey);
2216 void __RPC_STUB IShellLinkA_SetHotkey_Stub(
2217     struct IRpcStubBuffer* This,
2218     struct IRpcChannelBuffer* pRpcChannelBuffer,
2219     PRPC_MESSAGE pRpcMessage,
2220     DWORD* pdwStubPhase);
2221 HRESULT CALLBACK IShellLinkA_GetShowCmd_Proxy(
2222     IShellLinkA* This,
2223     int* piShowCmd);
2224 void __RPC_STUB IShellLinkA_GetShowCmd_Stub(
2225     struct IRpcStubBuffer* This,
2226     struct IRpcChannelBuffer* pRpcChannelBuffer,
2227     PRPC_MESSAGE pRpcMessage,
2228     DWORD* pdwStubPhase);
2229 HRESULT CALLBACK IShellLinkA_SetShowCmd_Proxy(
2230     IShellLinkA* This,
2231     int iShowCmd);
2232 void __RPC_STUB IShellLinkA_SetShowCmd_Stub(
2233     struct IRpcStubBuffer* This,
2234     struct IRpcChannelBuffer* pRpcChannelBuffer,
2235     PRPC_MESSAGE pRpcMessage,
2236     DWORD* pdwStubPhase);
2237 HRESULT CALLBACK IShellLinkA_GetIconLocation_Proxy(
2238     IShellLinkA* This,
2239     LPSTR pszIconPath,
2240     int cch,
2241     int* piIcon);
2242 void __RPC_STUB IShellLinkA_GetIconLocation_Stub(
2243     struct IRpcStubBuffer* This,
2244     struct IRpcChannelBuffer* pRpcChannelBuffer,
2245     PRPC_MESSAGE pRpcMessage,
2246     DWORD* pdwStubPhase);
2247 HRESULT CALLBACK IShellLinkA_SetIconLocation_Proxy(
2248     IShellLinkA* This,
2249     LPCSTR pszIconPath,
2250     int iIcon);
2251 void __RPC_STUB IShellLinkA_SetIconLocation_Stub(
2252     struct IRpcStubBuffer* This,
2253     struct IRpcChannelBuffer* pRpcChannelBuffer,
2254     PRPC_MESSAGE pRpcMessage,
2255     DWORD* pdwStubPhase);
2256 HRESULT CALLBACK IShellLinkA_SetRelativePath_Proxy(
2257     IShellLinkA* This,
2258     LPCSTR pszPathRel,
2259     DWORD dwReserved);
2260 void __RPC_STUB IShellLinkA_SetRelativePath_Stub(
2261     struct IRpcStubBuffer* This,
2262     struct IRpcChannelBuffer* pRpcChannelBuffer,
2263     PRPC_MESSAGE pRpcMessage,
2264     DWORD* pdwStubPhase);
2265 HRESULT CALLBACK IShellLinkA_Resolve_Proxy(
2266     IShellLinkA* This,
2267     HWND hwnd,
2268     DWORD fFlags);
2269 void __RPC_STUB IShellLinkA_Resolve_Stub(
2270     struct IRpcStubBuffer* This,
2271     struct IRpcChannelBuffer* pRpcChannelBuffer,
2272     PRPC_MESSAGE pRpcMessage,
2273     DWORD* pdwStubPhase);
2274 HRESULT CALLBACK IShellLinkA_SetPath_Proxy(
2275     IShellLinkA* This,
2276     LPCSTR pszFile);
2277 void __RPC_STUB IShellLinkA_SetPath_Stub(
2278     struct IRpcStubBuffer* This,
2279     struct IRpcChannelBuffer* pRpcChannelBuffer,
2280     PRPC_MESSAGE pRpcMessage,
2281     DWORD* pdwStubPhase);
2282
2283 #endif  /* __IShellLinkA_INTERFACE_DEFINED__ */
2284
2285 #ifndef __IShellLinkW_FWD_DEFINED__
2286 #define __IShellLinkW_FWD_DEFINED__
2287 typedef struct IShellLinkW IShellLinkW;
2288 #endif
2289
2290 /*****************************************************************************
2291  * IShellLinkW interface
2292  */
2293 #ifndef __IShellLinkW_INTERFACE_DEFINED__
2294 #define __IShellLinkW_INTERFACE_DEFINED__
2295
2296 DEFINE_GUID(IID_IShellLinkW, 0x000214f9, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2297 #if defined(__cplusplus) && !defined(CINTERFACE)
2298 struct IShellLinkW : public IUnknown
2299 {
2300     virtual HRESULT STDMETHODCALLTYPE GetPath(
2301         LPWSTR pszFile,
2302         int cch,
2303         WIN32_FIND_DATAW* pfd,
2304         DWORD fFlags) = 0;
2305
2306     virtual HRESULT STDMETHODCALLTYPE GetIDList(
2307         LPITEMIDLIST* ppidl) = 0;
2308
2309     virtual HRESULT STDMETHODCALLTYPE SetIDList(
2310         LPCITEMIDLIST pidl) = 0;
2311
2312     virtual HRESULT STDMETHODCALLTYPE GetDescription(
2313         LPWSTR pszName,
2314         int cch) = 0;
2315
2316     virtual HRESULT STDMETHODCALLTYPE SetDescription(
2317         LPCWSTR pszName) = 0;
2318
2319     virtual HRESULT STDMETHODCALLTYPE GetWorkingDirectory(
2320         LPWSTR pszDir,
2321         int cch) = 0;
2322
2323     virtual HRESULT STDMETHODCALLTYPE SetWorkingDirectory(
2324         LPCWSTR pszDir) = 0;
2325
2326     virtual HRESULT STDMETHODCALLTYPE GetArguments(
2327         LPWSTR pszArgs,
2328         int cch) = 0;
2329
2330     virtual HRESULT STDMETHODCALLTYPE SetArguments(
2331         LPCWSTR pszArgs) = 0;
2332
2333     virtual HRESULT STDMETHODCALLTYPE GetHotkey(
2334         WORD* pwHotkey) = 0;
2335
2336     virtual HRESULT STDMETHODCALLTYPE SetHotkey(
2337         WORD wHotkey) = 0;
2338
2339     virtual HRESULT STDMETHODCALLTYPE GetShowCmd(
2340         int* piShowCmd) = 0;
2341
2342     virtual HRESULT STDMETHODCALLTYPE SetShowCmd(
2343         int iShowCmd) = 0;
2344
2345     virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
2346         LPWSTR pszIconPath,
2347         int cch,
2348         int* piIcon) = 0;
2349
2350     virtual HRESULT STDMETHODCALLTYPE SetIconLocation(
2351         LPCWSTR pszIconPath,
2352         int iIcon) = 0;
2353
2354     virtual HRESULT STDMETHODCALLTYPE SetRelativePath(
2355         LPCWSTR pszPathRel,
2356         DWORD dwReserved) = 0;
2357
2358     virtual HRESULT STDMETHODCALLTYPE Resolve(
2359         HWND hwnd,
2360         DWORD fFlags) = 0;
2361
2362     virtual HRESULT STDMETHODCALLTYPE SetPath(
2363         LPCWSTR pszFile) = 0;
2364
2365 };
2366 #else
2367 typedef struct IShellLinkWVtbl IShellLinkWVtbl;
2368 struct IShellLinkW {
2369     const IShellLinkWVtbl* lpVtbl;
2370 };
2371 struct IShellLinkWVtbl {
2372     BEGIN_INTERFACE
2373
2374     /*** IUnknown methods ***/
2375     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2376         IShellLinkW* This,
2377         REFIID riid,
2378         void** ppvObject);
2379
2380     ULONG (STDMETHODCALLTYPE *AddRef)(
2381         IShellLinkW* This);
2382
2383     ULONG (STDMETHODCALLTYPE *Release)(
2384         IShellLinkW* This);
2385
2386     /*** IShellLinkW methods ***/
2387     HRESULT (STDMETHODCALLTYPE *GetPath)(
2388         IShellLinkW* This,
2389         LPWSTR pszFile,
2390         int cch,
2391         WIN32_FIND_DATAW* pfd,
2392         DWORD fFlags);
2393
2394     HRESULT (STDMETHODCALLTYPE *GetIDList)(
2395         IShellLinkW* This,
2396         LPITEMIDLIST* ppidl);
2397
2398     HRESULT (STDMETHODCALLTYPE *SetIDList)(
2399         IShellLinkW* This,
2400         LPCITEMIDLIST pidl);
2401
2402     HRESULT (STDMETHODCALLTYPE *GetDescription)(
2403         IShellLinkW* This,
2404         LPWSTR pszName,
2405         int cch);
2406
2407     HRESULT (STDMETHODCALLTYPE *SetDescription)(
2408         IShellLinkW* This,
2409         LPCWSTR pszName);
2410
2411     HRESULT (STDMETHODCALLTYPE *GetWorkingDirectory)(
2412         IShellLinkW* This,
2413         LPWSTR pszDir,
2414         int cch);
2415
2416     HRESULT (STDMETHODCALLTYPE *SetWorkingDirectory)(
2417         IShellLinkW* This,
2418         LPCWSTR pszDir);
2419
2420     HRESULT (STDMETHODCALLTYPE *GetArguments)(
2421         IShellLinkW* This,
2422         LPWSTR pszArgs,
2423         int cch);
2424
2425     HRESULT (STDMETHODCALLTYPE *SetArguments)(
2426         IShellLinkW* This,
2427         LPCWSTR pszArgs);
2428
2429     HRESULT (STDMETHODCALLTYPE *GetHotkey)(
2430         IShellLinkW* This,
2431         WORD* pwHotkey);
2432
2433     HRESULT (STDMETHODCALLTYPE *SetHotkey)(
2434         IShellLinkW* This,
2435         WORD wHotkey);
2436
2437     HRESULT (STDMETHODCALLTYPE *GetShowCmd)(
2438         IShellLinkW* This,
2439         int* piShowCmd);
2440
2441     HRESULT (STDMETHODCALLTYPE *SetShowCmd)(
2442         IShellLinkW* This,
2443         int iShowCmd);
2444
2445     HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
2446         IShellLinkW* This,
2447         LPWSTR pszIconPath,
2448         int cch,
2449         int* piIcon);
2450
2451     HRESULT (STDMETHODCALLTYPE *SetIconLocation)(
2452         IShellLinkW* This,
2453         LPCWSTR pszIconPath,
2454         int iIcon);
2455
2456     HRESULT (STDMETHODCALLTYPE *SetRelativePath)(
2457         IShellLinkW* This,
2458         LPCWSTR pszPathRel,
2459         DWORD dwReserved);
2460
2461     HRESULT (STDMETHODCALLTYPE *Resolve)(
2462         IShellLinkW* This,
2463         HWND hwnd,
2464         DWORD fFlags);
2465
2466     HRESULT (STDMETHODCALLTYPE *SetPath)(
2467         IShellLinkW* This,
2468         LPCWSTR pszFile);
2469
2470     END_INTERFACE
2471 };
2472
2473 #ifdef COBJMACROS
2474 /*** IUnknown methods ***/
2475 #define IShellLinkW_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2476 #define IShellLinkW_AddRef(p) (p)->lpVtbl->AddRef(p)
2477 #define IShellLinkW_Release(p) (p)->lpVtbl->Release(p)
2478 /*** IShellLinkW methods ***/
2479 #define IShellLinkW_GetPath(p,a,b,c,d) (p)->lpVtbl->GetPath(p,a,b,c,d)
2480 #define IShellLinkW_GetIDList(p,a) (p)->lpVtbl->GetIDList(p,a)
2481 #define IShellLinkW_SetIDList(p,a) (p)->lpVtbl->SetIDList(p,a)
2482 #define IShellLinkW_GetDescription(p,a,b) (p)->lpVtbl->GetDescription(p,a,b)
2483 #define IShellLinkW_SetDescription(p,a) (p)->lpVtbl->SetDescription(p,a)
2484 #define IShellLinkW_GetWorkingDirectory(p,a,b) (p)->lpVtbl->GetWorkingDirectory(p,a,b)
2485 #define IShellLinkW_SetWorkingDirectory(p,a) (p)->lpVtbl->SetWorkingDirectory(p,a)
2486 #define IShellLinkW_GetArguments(p,a,b) (p)->lpVtbl->GetArguments(p,a,b)
2487 #define IShellLinkW_SetArguments(p,a) (p)->lpVtbl->SetArguments(p,a)
2488 #define IShellLinkW_GetHotkey(p,a) (p)->lpVtbl->GetHotkey(p,a)
2489 #define IShellLinkW_SetHotkey(p,a) (p)->lpVtbl->SetHotkey(p,a)
2490 #define IShellLinkW_GetShowCmd(p,a) (p)->lpVtbl->GetShowCmd(p,a)
2491 #define IShellLinkW_SetShowCmd(p,a) (p)->lpVtbl->SetShowCmd(p,a)
2492 #define IShellLinkW_GetIconLocation(p,a,b,c) (p)->lpVtbl->GetIconLocation(p,a,b,c)
2493 #define IShellLinkW_SetIconLocation(p,a,b) (p)->lpVtbl->SetIconLocation(p,a,b)
2494 #define IShellLinkW_SetRelativePath(p,a,b) (p)->lpVtbl->SetRelativePath(p,a,b)
2495 #define IShellLinkW_Resolve(p,a,b) (p)->lpVtbl->Resolve(p,a,b)
2496 #define IShellLinkW_SetPath(p,a) (p)->lpVtbl->SetPath(p,a)
2497 #endif
2498
2499 #endif
2500
2501 #define IShellLinkW_METHODS \
2502     /*** IUnknown methods ***/ \
2503     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
2504     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
2505     STDMETHOD_(ULONG,Release)(THIS) PURE; \
2506     /*** IShellLinkW methods ***/ \
2507     STDMETHOD_(HRESULT,GetPath)(THIS_ LPWSTR pszFile, int cch, WIN32_FIND_DATAW* pfd, DWORD fFlags) PURE; \
2508     STDMETHOD_(HRESULT,GetIDList)(THIS_ LPITEMIDLIST* ppidl) PURE; \
2509     STDMETHOD_(HRESULT,SetIDList)(THIS_ LPCITEMIDLIST pidl) PURE; \
2510     STDMETHOD_(HRESULT,GetDescription)(THIS_ LPWSTR pszName, int cch) PURE; \
2511     STDMETHOD_(HRESULT,SetDescription)(THIS_ LPCWSTR pszName) PURE; \
2512     STDMETHOD_(HRESULT,GetWorkingDirectory)(THIS_ LPWSTR pszDir, int cch) PURE; \
2513     STDMETHOD_(HRESULT,SetWorkingDirectory)(THIS_ LPCWSTR pszDir) PURE; \
2514     STDMETHOD_(HRESULT,GetArguments)(THIS_ LPWSTR pszArgs, int cch) PURE; \
2515     STDMETHOD_(HRESULT,SetArguments)(THIS_ LPCWSTR pszArgs) PURE; \
2516     STDMETHOD_(HRESULT,GetHotkey)(THIS_ WORD* pwHotkey) PURE; \
2517     STDMETHOD_(HRESULT,SetHotkey)(THIS_ WORD wHotkey) PURE; \
2518     STDMETHOD_(HRESULT,GetShowCmd)(THIS_ int* piShowCmd) PURE; \
2519     STDMETHOD_(HRESULT,SetShowCmd)(THIS_ int iShowCmd) PURE; \
2520     STDMETHOD_(HRESULT,GetIconLocation)(THIS_ LPWSTR pszIconPath, int cch, int* piIcon) PURE; \
2521     STDMETHOD_(HRESULT,SetIconLocation)(THIS_ LPCWSTR pszIconPath, int iIcon) PURE; \
2522     STDMETHOD_(HRESULT,SetRelativePath)(THIS_ LPCWSTR pszPathRel, DWORD dwReserved) PURE; \
2523     STDMETHOD_(HRESULT,Resolve)(THIS_ HWND hwnd, DWORD fFlags) PURE; \
2524     STDMETHOD_(HRESULT,SetPath)(THIS_ LPCWSTR pszFile) PURE;
2525
2526 HRESULT CALLBACK IShellLinkW_GetPath_Proxy(
2527     IShellLinkW* This,
2528     LPWSTR pszFile,
2529     int cch,
2530     WIN32_FIND_DATAW* pfd,
2531     DWORD fFlags);
2532 void __RPC_STUB IShellLinkW_GetPath_Stub(
2533     struct IRpcStubBuffer* This,
2534     struct IRpcChannelBuffer* pRpcChannelBuffer,
2535     PRPC_MESSAGE pRpcMessage,
2536     DWORD* pdwStubPhase);
2537 HRESULT CALLBACK IShellLinkW_GetIDList_Proxy(
2538     IShellLinkW* This,
2539     LPITEMIDLIST* ppidl);
2540 void __RPC_STUB IShellLinkW_GetIDList_Stub(
2541     struct IRpcStubBuffer* This,
2542     struct IRpcChannelBuffer* pRpcChannelBuffer,
2543     PRPC_MESSAGE pRpcMessage,
2544     DWORD* pdwStubPhase);
2545 HRESULT CALLBACK IShellLinkW_SetIDList_Proxy(
2546     IShellLinkW* This,
2547     LPCITEMIDLIST pidl);
2548 void __RPC_STUB IShellLinkW_SetIDList_Stub(
2549     struct IRpcStubBuffer* This,
2550     struct IRpcChannelBuffer* pRpcChannelBuffer,
2551     PRPC_MESSAGE pRpcMessage,
2552     DWORD* pdwStubPhase);
2553 HRESULT CALLBACK IShellLinkW_GetDescription_Proxy(
2554     IShellLinkW* This,
2555     LPWSTR pszName,
2556     int cch);
2557 void __RPC_STUB IShellLinkW_GetDescription_Stub(
2558     struct IRpcStubBuffer* This,
2559     struct IRpcChannelBuffer* pRpcChannelBuffer,
2560     PRPC_MESSAGE pRpcMessage,
2561     DWORD* pdwStubPhase);
2562 HRESULT CALLBACK IShellLinkW_SetDescription_Proxy(
2563     IShellLinkW* This,
2564     LPCWSTR pszName);
2565 void __RPC_STUB IShellLinkW_SetDescription_Stub(
2566     struct IRpcStubBuffer* This,
2567     struct IRpcChannelBuffer* pRpcChannelBuffer,
2568     PRPC_MESSAGE pRpcMessage,
2569     DWORD* pdwStubPhase);
2570 HRESULT CALLBACK IShellLinkW_GetWorkingDirectory_Proxy(
2571     IShellLinkW* This,
2572     LPWSTR pszDir,
2573     int cch);
2574 void __RPC_STUB IShellLinkW_GetWorkingDirectory_Stub(
2575     struct IRpcStubBuffer* This,
2576     struct IRpcChannelBuffer* pRpcChannelBuffer,
2577     PRPC_MESSAGE pRpcMessage,
2578     DWORD* pdwStubPhase);
2579 HRESULT CALLBACK IShellLinkW_SetWorkingDirectory_Proxy(
2580     IShellLinkW* This,
2581     LPCWSTR pszDir);
2582 void __RPC_STUB IShellLinkW_SetWorkingDirectory_Stub(
2583     struct IRpcStubBuffer* This,
2584     struct IRpcChannelBuffer* pRpcChannelBuffer,
2585     PRPC_MESSAGE pRpcMessage,
2586     DWORD* pdwStubPhase);
2587 HRESULT CALLBACK IShellLinkW_GetArguments_Proxy(
2588     IShellLinkW* This,
2589     LPWSTR pszArgs,
2590     int cch);
2591 void __RPC_STUB IShellLinkW_GetArguments_Stub(
2592     struct IRpcStubBuffer* This,
2593     struct IRpcChannelBuffer* pRpcChannelBuffer,
2594     PRPC_MESSAGE pRpcMessage,
2595     DWORD* pdwStubPhase);
2596 HRESULT CALLBACK IShellLinkW_SetArguments_Proxy(
2597     IShellLinkW* This,
2598     LPCWSTR pszArgs);
2599 void __RPC_STUB IShellLinkW_SetArguments_Stub(
2600     struct IRpcStubBuffer* This,
2601     struct IRpcChannelBuffer* pRpcChannelBuffer,
2602     PRPC_MESSAGE pRpcMessage,
2603     DWORD* pdwStubPhase);
2604 HRESULT CALLBACK IShellLinkW_GetHotkey_Proxy(
2605     IShellLinkW* This,
2606     WORD* pwHotkey);
2607 void __RPC_STUB IShellLinkW_GetHotkey_Stub(
2608     struct IRpcStubBuffer* This,
2609     struct IRpcChannelBuffer* pRpcChannelBuffer,
2610     PRPC_MESSAGE pRpcMessage,
2611     DWORD* pdwStubPhase);
2612 HRESULT CALLBACK IShellLinkW_SetHotkey_Proxy(
2613     IShellLinkW* This,
2614     WORD wHotkey);
2615 void __RPC_STUB IShellLinkW_SetHotkey_Stub(
2616     struct IRpcStubBuffer* This,
2617     struct IRpcChannelBuffer* pRpcChannelBuffer,
2618     PRPC_MESSAGE pRpcMessage,
2619     DWORD* pdwStubPhase);
2620 HRESULT CALLBACK IShellLinkW_GetShowCmd_Proxy(
2621     IShellLinkW* This,
2622     int* piShowCmd);
2623 void __RPC_STUB IShellLinkW_GetShowCmd_Stub(
2624     struct IRpcStubBuffer* This,
2625     struct IRpcChannelBuffer* pRpcChannelBuffer,
2626     PRPC_MESSAGE pRpcMessage,
2627     DWORD* pdwStubPhase);
2628 HRESULT CALLBACK IShellLinkW_SetShowCmd_Proxy(
2629     IShellLinkW* This,
2630     int iShowCmd);
2631 void __RPC_STUB IShellLinkW_SetShowCmd_Stub(
2632     struct IRpcStubBuffer* This,
2633     struct IRpcChannelBuffer* pRpcChannelBuffer,
2634     PRPC_MESSAGE pRpcMessage,
2635     DWORD* pdwStubPhase);
2636 HRESULT CALLBACK IShellLinkW_GetIconLocation_Proxy(
2637     IShellLinkW* This,
2638     LPWSTR pszIconPath,
2639     int cch,
2640     int* piIcon);
2641 void __RPC_STUB IShellLinkW_GetIconLocation_Stub(
2642     struct IRpcStubBuffer* This,
2643     struct IRpcChannelBuffer* pRpcChannelBuffer,
2644     PRPC_MESSAGE pRpcMessage,
2645     DWORD* pdwStubPhase);
2646 HRESULT CALLBACK IShellLinkW_SetIconLocation_Proxy(
2647     IShellLinkW* This,
2648     LPCWSTR pszIconPath,
2649     int iIcon);
2650 void __RPC_STUB IShellLinkW_SetIconLocation_Stub(
2651     struct IRpcStubBuffer* This,
2652     struct IRpcChannelBuffer* pRpcChannelBuffer,
2653     PRPC_MESSAGE pRpcMessage,
2654     DWORD* pdwStubPhase);
2655 HRESULT CALLBACK IShellLinkW_SetRelativePath_Proxy(
2656     IShellLinkW* This,
2657     LPCWSTR pszPathRel,
2658     DWORD dwReserved);
2659 void __RPC_STUB IShellLinkW_SetRelativePath_Stub(
2660     struct IRpcStubBuffer* This,
2661     struct IRpcChannelBuffer* pRpcChannelBuffer,
2662     PRPC_MESSAGE pRpcMessage,
2663     DWORD* pdwStubPhase);
2664 HRESULT CALLBACK IShellLinkW_Resolve_Proxy(
2665     IShellLinkW* This,
2666     HWND hwnd,
2667     DWORD fFlags);
2668 void __RPC_STUB IShellLinkW_Resolve_Stub(
2669     struct IRpcStubBuffer* This,
2670     struct IRpcChannelBuffer* pRpcChannelBuffer,
2671     PRPC_MESSAGE pRpcMessage,
2672     DWORD* pdwStubPhase);
2673 HRESULT CALLBACK IShellLinkW_SetPath_Proxy(
2674     IShellLinkW* This,
2675     LPCWSTR pszFile);
2676 void __RPC_STUB IShellLinkW_SetPath_Stub(
2677     struct IRpcStubBuffer* This,
2678     struct IRpcChannelBuffer* pRpcChannelBuffer,
2679     PRPC_MESSAGE pRpcMessage,
2680     DWORD* pdwStubPhase);
2681
2682 #endif  /* __IShellLinkW_INTERFACE_DEFINED__ */
2683
2684 #define IShellLink WINELIB_NAME_AW(IShellLink)
2685 #ifndef __IShellExtInit_FWD_DEFINED__
2686 #define __IShellExtInit_FWD_DEFINED__
2687 typedef struct IShellExtInit IShellExtInit;
2688 #endif
2689
2690 typedef IShellExtInit *LPSHELLEXTINIT;
2691
2692 /*****************************************************************************
2693  * IShellExtInit interface
2694  */
2695 #ifndef __IShellExtInit_INTERFACE_DEFINED__
2696 #define __IShellExtInit_INTERFACE_DEFINED__
2697
2698 DEFINE_GUID(IID_IShellExtInit, 0x000214e8, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2699 #if defined(__cplusplus) && !defined(CINTERFACE)
2700 struct IShellExtInit : public IUnknown
2701 {
2702     virtual HRESULT STDMETHODCALLTYPE Initialize(
2703         LPCITEMIDLIST pidlFolder,
2704         IDataObject* pdtobj,
2705         HKEY hkeyProgID) = 0;
2706
2707 };
2708 #else
2709 typedef struct IShellExtInitVtbl IShellExtInitVtbl;
2710 struct IShellExtInit {
2711     const IShellExtInitVtbl* lpVtbl;
2712 };
2713 struct IShellExtInitVtbl {
2714     BEGIN_INTERFACE
2715
2716     /*** IUnknown methods ***/
2717     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2718         IShellExtInit* This,
2719         REFIID riid,
2720         void** ppvObject);
2721
2722     ULONG (STDMETHODCALLTYPE *AddRef)(
2723         IShellExtInit* This);
2724
2725     ULONG (STDMETHODCALLTYPE *Release)(
2726         IShellExtInit* This);
2727
2728     /*** IShellExtInit methods ***/
2729     HRESULT (STDMETHODCALLTYPE *Initialize)(
2730         IShellExtInit* This,
2731         LPCITEMIDLIST pidlFolder,
2732         IDataObject* pdtobj,
2733         HKEY hkeyProgID);
2734
2735     END_INTERFACE
2736 };
2737
2738 #ifdef COBJMACROS
2739 /*** IUnknown methods ***/
2740 #define IShellExtInit_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2741 #define IShellExtInit_AddRef(p) (p)->lpVtbl->AddRef(p)
2742 #define IShellExtInit_Release(p) (p)->lpVtbl->Release(p)
2743 /*** IShellExtInit methods ***/
2744 #define IShellExtInit_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
2745 #endif
2746
2747 #endif
2748
2749 #define IShellExtInit_METHODS \
2750     /*** IUnknown methods ***/ \
2751     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
2752     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
2753     STDMETHOD_(ULONG,Release)(THIS) PURE; \
2754     /*** IShellExtInit methods ***/ \
2755     STDMETHOD_(HRESULT,Initialize)(THIS_ LPCITEMIDLIST pidlFolder, IDataObject* pdtobj, HKEY hkeyProgID) PURE;
2756
2757 HRESULT CALLBACK IShellExtInit_Initialize_Proxy(
2758     IShellExtInit* This,
2759     LPCITEMIDLIST pidlFolder,
2760     IDataObject* pdtobj,
2761     HKEY hkeyProgID);
2762 void __RPC_STUB IShellExtInit_Initialize_Stub(
2763     struct IRpcStubBuffer* This,
2764     struct IRpcChannelBuffer* pRpcChannelBuffer,
2765     PRPC_MESSAGE pRpcMessage,
2766     DWORD* pdwStubPhase);
2767
2768 #endif  /* __IShellExtInit_INTERFACE_DEFINED__ */
2769
2770 #ifndef __IPersistFolder3_FWD_DEFINED__
2771 #define __IPersistFolder3_FWD_DEFINED__
2772 typedef struct IPersistFolder3 IPersistFolder3;
2773 #endif
2774
2775 typedef struct {
2776     LPITEMIDLIST pidlTargetFolder;
2777     WCHAR szTargetParsingName[260];
2778     WCHAR szNetworkProvider[260];
2779     DWORD dwAttributes;
2780     int csidl;
2781 } PERSIST_FOLDER_TARGET_INFO;
2782
2783 /*****************************************************************************
2784  * IPersistFolder3 interface
2785  */
2786 #ifndef __IPersistFolder3_INTERFACE_DEFINED__
2787 #define __IPersistFolder3_INTERFACE_DEFINED__
2788
2789 DEFINE_GUID(IID_IPersistFolder3, 0xcef04fdf, 0xfe72, 0x11d2, 0x87,0xa5, 0x00,0xc0,0x4f,0x68,0x37,0xcf);
2790 #if defined(__cplusplus) && !defined(CINTERFACE)
2791 struct IPersistFolder3 : public IPersistFolder2
2792 {
2793     virtual HRESULT STDMETHODCALLTYPE InitializeEx(
2794         IBindCtx* pbc,
2795         LPCITEMIDLIST pidlRoot,
2796         const PERSIST_FOLDER_TARGET_INFO* ppfti) = 0;
2797
2798     virtual HRESULT STDMETHODCALLTYPE GetFolderTargetInfo(
2799         PERSIST_FOLDER_TARGET_INFO* ppfti) = 0;
2800
2801 };
2802 #else
2803 typedef struct IPersistFolder3Vtbl IPersistFolder3Vtbl;
2804 struct IPersistFolder3 {
2805     const IPersistFolder3Vtbl* lpVtbl;
2806 };
2807 struct IPersistFolder3Vtbl {
2808     BEGIN_INTERFACE
2809
2810     /*** IUnknown methods ***/
2811     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2812         IPersistFolder3* This,
2813         REFIID riid,
2814         void** ppvObject);
2815
2816     ULONG (STDMETHODCALLTYPE *AddRef)(
2817         IPersistFolder3* This);
2818
2819     ULONG (STDMETHODCALLTYPE *Release)(
2820         IPersistFolder3* This);
2821
2822     /*** IPersist methods ***/
2823     HRESULT (STDMETHODCALLTYPE *GetClassID)(
2824         IPersistFolder3* This,
2825         CLSID* pClassID);
2826
2827     /*** IPersistFolder methods ***/
2828     HRESULT (STDMETHODCALLTYPE *Initialize)(
2829         IPersistFolder3* This,
2830         LPCITEMIDLIST pidl);
2831
2832     /*** IPersistFolder2 methods ***/
2833     HRESULT (STDMETHODCALLTYPE *GetCurFolder)(
2834         IPersistFolder3* This,
2835         LPITEMIDLIST* ppidl);
2836
2837     /*** IPersistFolder3 methods ***/
2838     HRESULT (STDMETHODCALLTYPE *InitializeEx)(
2839         IPersistFolder3* This,
2840         IBindCtx* pbc,
2841         LPCITEMIDLIST pidlRoot,
2842         const PERSIST_FOLDER_TARGET_INFO* ppfti);
2843
2844     HRESULT (STDMETHODCALLTYPE *GetFolderTargetInfo)(
2845         IPersistFolder3* This,
2846         PERSIST_FOLDER_TARGET_INFO* ppfti);
2847
2848     END_INTERFACE
2849 };
2850
2851 #ifdef COBJMACROS
2852 /*** IUnknown methods ***/
2853 #define IPersistFolder3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2854 #define IPersistFolder3_AddRef(p) (p)->lpVtbl->AddRef(p)
2855 #define IPersistFolder3_Release(p) (p)->lpVtbl->Release(p)
2856 /*** IPersist methods ***/
2857 #define IPersistFolder3_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
2858 /*** IPersistFolder methods ***/
2859 #define IPersistFolder3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
2860 /*** IPersistFolder2 methods ***/
2861 #define IPersistFolder3_GetCurFolder(p,a) (p)->lpVtbl->GetCurFolder(p,a)
2862 /*** IPersistFolder3 methods ***/
2863 #define IPersistFolder3_InitializeEx(p,a,b,c) (p)->lpVtbl->InitializeEx(p,a,b,c)
2864 #define IPersistFolder3_GetFolderTargetInfo(p,a) (p)->lpVtbl->GetFolderTargetInfo(p,a)
2865 #endif
2866
2867 #endif
2868
2869 #define IPersistFolder3_METHODS \
2870     /*** IUnknown methods ***/ \
2871     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
2872     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
2873     STDMETHOD_(ULONG,Release)(THIS) PURE; \
2874     /*** IPersist methods ***/ \
2875     STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
2876     /*** IPersistFolder methods ***/ \
2877     STDMETHOD_(HRESULT,Initialize)(THIS_ LPCITEMIDLIST pidl) PURE; \
2878     /*** IPersistFolder2 methods ***/ \
2879     STDMETHOD_(HRESULT,GetCurFolder)(THIS_ LPITEMIDLIST* ppidl) PURE; \
2880     /*** IPersistFolder3 methods ***/ \
2881     STDMETHOD_(HRESULT,InitializeEx)(THIS_ IBindCtx* pbc, LPCITEMIDLIST pidlRoot, const PERSIST_FOLDER_TARGET_INFO* ppfti) PURE; \
2882     STDMETHOD_(HRESULT,GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO* ppfti) PURE;
2883
2884 HRESULT CALLBACK IPersistFolder3_InitializeEx_Proxy(
2885     IPersistFolder3* This,
2886     IBindCtx* pbc,
2887     LPCITEMIDLIST pidlRoot,
2888     const PERSIST_FOLDER_TARGET_INFO* ppfti);
2889 void __RPC_STUB IPersistFolder3_InitializeEx_Stub(
2890     struct IRpcStubBuffer* This,
2891     struct IRpcChannelBuffer* pRpcChannelBuffer,
2892     PRPC_MESSAGE pRpcMessage,
2893     DWORD* pdwStubPhase);
2894 HRESULT CALLBACK IPersistFolder3_GetFolderTargetInfo_Proxy(
2895     IPersistFolder3* This,
2896     PERSIST_FOLDER_TARGET_INFO* ppfti);
2897 void __RPC_STUB IPersistFolder3_GetFolderTargetInfo_Stub(
2898     struct IRpcStubBuffer* This,
2899     struct IRpcChannelBuffer* pRpcChannelBuffer,
2900     PRPC_MESSAGE pRpcMessage,
2901     DWORD* pdwStubPhase);
2902
2903 #endif  /* __IPersistFolder3_INTERFACE_DEFINED__ */
2904
2905 #ifndef __IExtractIconA_FWD_DEFINED__
2906 #define __IExtractIconA_FWD_DEFINED__
2907 typedef struct IExtractIconA IExtractIconA;
2908 #endif
2909
2910 #define GIL_OPENICON     0x0001
2911 #define GIL_FORSHELL     0x0002
2912 #define GIL_ASYNC        0x0020
2913 #define GIL_DEFAULTICON  0x0040
2914 #define GIL_FORSHORTCUT  0x0080
2915 #define GIL_SIMULATEDOC  0x0001
2916 #define GIL_PERINSTANCE  0x0002
2917 #define GIL_PERCLASS     0x0004
2918 #define GIL_NOTFILENAME  0x0008
2919 #define GIL_DONTCACHE    0x0010
2920 typedef IExtractIconA *LPEXTRACTICONA;
2921
2922 /*****************************************************************************
2923  * IExtractIconA interface
2924  */
2925 #ifndef __IExtractIconA_INTERFACE_DEFINED__
2926 #define __IExtractIconA_INTERFACE_DEFINED__
2927
2928 DEFINE_GUID(IID_IExtractIconA, 0x000214eb, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
2929 #if defined(__cplusplus) && !defined(CINTERFACE)
2930 struct IExtractIconA : public IUnknown
2931 {
2932     virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
2933         UINT uFlags,
2934         LPSTR szIconFile,
2935         UINT cchMax,
2936         INT* piIndex,
2937         UINT* pwFlags) = 0;
2938
2939     virtual HRESULT STDMETHODCALLTYPE Extract(
2940         LPCSTR pszFile,
2941         UINT nIconIndex,
2942         HICON* phiconLarge,
2943         HICON* phiconSmall,
2944         UINT nIconSize) = 0;
2945
2946 };
2947 #else
2948 typedef struct IExtractIconAVtbl IExtractIconAVtbl;
2949 struct IExtractIconA {
2950     const IExtractIconAVtbl* lpVtbl;
2951 };
2952 struct IExtractIconAVtbl {
2953     BEGIN_INTERFACE
2954
2955     /*** IUnknown methods ***/
2956     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2957         IExtractIconA* This,
2958         REFIID riid,
2959         void** ppvObject);
2960
2961     ULONG (STDMETHODCALLTYPE *AddRef)(
2962         IExtractIconA* This);
2963
2964     ULONG (STDMETHODCALLTYPE *Release)(
2965         IExtractIconA* This);
2966
2967     /*** IExtractIconA methods ***/
2968     HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
2969         IExtractIconA* This,
2970         UINT uFlags,
2971         LPSTR szIconFile,
2972         UINT cchMax,
2973         INT* piIndex,
2974         UINT* pwFlags);
2975
2976     HRESULT (STDMETHODCALLTYPE *Extract)(
2977         IExtractIconA* This,
2978         LPCSTR pszFile,
2979         UINT nIconIndex,
2980         HICON* phiconLarge,
2981         HICON* phiconSmall,
2982         UINT nIconSize);
2983
2984     END_INTERFACE
2985 };
2986
2987 #ifdef COBJMACROS
2988 /*** IUnknown methods ***/
2989 #define IExtractIconA_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
2990 #define IExtractIconA_AddRef(p) (p)->lpVtbl->AddRef(p)
2991 #define IExtractIconA_Release(p) (p)->lpVtbl->Release(p)
2992 /*** IExtractIconA methods ***/
2993 #define IExtractIconA_GetIconLocation(p,a,b,c,d,e) (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
2994 #define IExtractIconA_Extract(p,a,b,c,d,e) (p)->lpVtbl->Extract(p,a,b,c,d,e)
2995 #endif
2996
2997 #endif
2998
2999 #define IExtractIconA_METHODS \
3000     /*** IUnknown methods ***/ \
3001     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3002     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3003     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3004     /*** IExtractIconA methods ***/ \
3005     STDMETHOD_(HRESULT,GetIconLocation)(THIS_ UINT uFlags, LPSTR szIconFile, UINT cchMax, INT* piIndex, UINT* pwFlags) PURE; \
3006     STDMETHOD_(HRESULT,Extract)(THIS_ LPCSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) PURE;
3007
3008 HRESULT CALLBACK IExtractIconA_GetIconLocation_Proxy(
3009     IExtractIconA* This,
3010     UINT uFlags,
3011     LPSTR szIconFile,
3012     UINT cchMax,
3013     INT* piIndex,
3014     UINT* pwFlags);
3015 void __RPC_STUB IExtractIconA_GetIconLocation_Stub(
3016     struct IRpcStubBuffer* This,
3017     struct IRpcChannelBuffer* pRpcChannelBuffer,
3018     PRPC_MESSAGE pRpcMessage,
3019     DWORD* pdwStubPhase);
3020 HRESULT CALLBACK IExtractIconA_Extract_Proxy(
3021     IExtractIconA* This,
3022     LPCSTR pszFile,
3023     UINT nIconIndex,
3024     HICON* phiconLarge,
3025     HICON* phiconSmall,
3026     UINT nIconSize);
3027 void __RPC_STUB IExtractIconA_Extract_Stub(
3028     struct IRpcStubBuffer* This,
3029     struct IRpcChannelBuffer* pRpcChannelBuffer,
3030     PRPC_MESSAGE pRpcMessage,
3031     DWORD* pdwStubPhase);
3032
3033 #endif  /* __IExtractIconA_INTERFACE_DEFINED__ */
3034
3035 #ifndef __IExtractIconW_FWD_DEFINED__
3036 #define __IExtractIconW_FWD_DEFINED__
3037 typedef struct IExtractIconW IExtractIconW;
3038 #endif
3039
3040 typedef IExtractIconW *LPEXTRACTICONW;
3041
3042 /*****************************************************************************
3043  * IExtractIconW interface
3044  */
3045 #ifndef __IExtractIconW_INTERFACE_DEFINED__
3046 #define __IExtractIconW_INTERFACE_DEFINED__
3047
3048 DEFINE_GUID(IID_IExtractIconW, 0x000214fa, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3049 #if defined(__cplusplus) && !defined(CINTERFACE)
3050 struct IExtractIconW : public IUnknown
3051 {
3052     virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
3053         UINT uFlags,
3054         LPWSTR szIconFile,
3055         UINT cchMax,
3056         INT* piIndex,
3057         UINT* pwFlags) = 0;
3058
3059     virtual HRESULT STDMETHODCALLTYPE Extract(
3060         LPCWSTR pszFile,
3061         UINT nIconIndex,
3062         HICON* phiconLarge,
3063         HICON* phiconSmall,
3064         UINT nIconSize) = 0;
3065
3066 };
3067 #else
3068 typedef struct IExtractIconWVtbl IExtractIconWVtbl;
3069 struct IExtractIconW {
3070     const IExtractIconWVtbl* lpVtbl;
3071 };
3072 struct IExtractIconWVtbl {
3073     BEGIN_INTERFACE
3074
3075     /*** IUnknown methods ***/
3076     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3077         IExtractIconW* This,
3078         REFIID riid,
3079         void** ppvObject);
3080
3081     ULONG (STDMETHODCALLTYPE *AddRef)(
3082         IExtractIconW* This);
3083
3084     ULONG (STDMETHODCALLTYPE *Release)(
3085         IExtractIconW* This);
3086
3087     /*** IExtractIconW methods ***/
3088     HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
3089         IExtractIconW* This,
3090         UINT uFlags,
3091         LPWSTR szIconFile,
3092         UINT cchMax,
3093         INT* piIndex,
3094         UINT* pwFlags);
3095
3096     HRESULT (STDMETHODCALLTYPE *Extract)(
3097         IExtractIconW* This,
3098         LPCWSTR pszFile,
3099         UINT nIconIndex,
3100         HICON* phiconLarge,
3101         HICON* phiconSmall,
3102         UINT nIconSize);
3103
3104     END_INTERFACE
3105 };
3106
3107 #ifdef COBJMACROS
3108 /*** IUnknown methods ***/
3109 #define IExtractIconW_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3110 #define IExtractIconW_AddRef(p) (p)->lpVtbl->AddRef(p)
3111 #define IExtractIconW_Release(p) (p)->lpVtbl->Release(p)
3112 /*** IExtractIconW methods ***/
3113 #define IExtractIconW_GetIconLocation(p,a,b,c,d,e) (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
3114 #define IExtractIconW_Extract(p,a,b,c,d,e) (p)->lpVtbl->Extract(p,a,b,c,d,e)
3115 #endif
3116
3117 #endif
3118
3119 #define IExtractIconW_METHODS \
3120     /*** IUnknown methods ***/ \
3121     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3122     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3123     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3124     /*** IExtractIconW methods ***/ \
3125     STDMETHOD_(HRESULT,GetIconLocation)(THIS_ UINT uFlags, LPWSTR szIconFile, UINT cchMax, INT* piIndex, UINT* pwFlags) PURE; \
3126     STDMETHOD_(HRESULT,Extract)(THIS_ LPCWSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) PURE;
3127
3128 HRESULT CALLBACK IExtractIconW_GetIconLocation_Proxy(
3129     IExtractIconW* This,
3130     UINT uFlags,
3131     LPWSTR szIconFile,
3132     UINT cchMax,
3133     INT* piIndex,
3134     UINT* pwFlags);
3135 void __RPC_STUB IExtractIconW_GetIconLocation_Stub(
3136     struct IRpcStubBuffer* This,
3137     struct IRpcChannelBuffer* pRpcChannelBuffer,
3138     PRPC_MESSAGE pRpcMessage,
3139     DWORD* pdwStubPhase);
3140 HRESULT CALLBACK IExtractIconW_Extract_Proxy(
3141     IExtractIconW* This,
3142     LPCWSTR pszFile,
3143     UINT nIconIndex,
3144     HICON* phiconLarge,
3145     HICON* phiconSmall,
3146     UINT nIconSize);
3147 void __RPC_STUB IExtractIconW_Extract_Stub(
3148     struct IRpcStubBuffer* This,
3149     struct IRpcChannelBuffer* pRpcChannelBuffer,
3150     PRPC_MESSAGE pRpcMessage,
3151     DWORD* pdwStubPhase);
3152
3153 #endif  /* __IExtractIconW_INTERFACE_DEFINED__ */
3154
3155 #define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)
3156 #define IExtractIcon WINELIB_NAME_AW(IExtractIcon)
3157 #ifndef __ICommDlgBrowser_FWD_DEFINED__
3158 #define __ICommDlgBrowser_FWD_DEFINED__
3159 typedef struct ICommDlgBrowser ICommDlgBrowser;
3160 #endif
3161
3162 #define CDBOSC_SETFOCUS     0x00000000
3163 #define CDBOSC_KILLFOCUS    0x00000001
3164 #define CDBOSC_SELCHANGE    0x00000002
3165 #define CDBOSC_RENAME       0x00000003
3166 #define CDBOSC_STATECHANGE  0x00000004
3167 typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
3168
3169 /*****************************************************************************
3170  * ICommDlgBrowser interface
3171  */
3172 #ifndef __ICommDlgBrowser_INTERFACE_DEFINED__
3173 #define __ICommDlgBrowser_INTERFACE_DEFINED__
3174
3175 DEFINE_GUID(IID_ICommDlgBrowser, 0x000214f1, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3176 #if defined(__cplusplus) && !defined(CINTERFACE)
3177 struct ICommDlgBrowser : public IUnknown
3178 {
3179     virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand(
3180         IShellView* shv) = 0;
3181
3182     virtual HRESULT STDMETHODCALLTYPE OnStateChange(
3183         IShellView* shv,
3184         ULONG uChange) = 0;
3185
3186     virtual HRESULT STDMETHODCALLTYPE IncludeObject(
3187         IShellView* shv,
3188         LPCITEMIDLIST pidl) = 0;
3189
3190 };
3191 #else
3192 typedef struct ICommDlgBrowserVtbl ICommDlgBrowserVtbl;
3193 struct ICommDlgBrowser {
3194     const ICommDlgBrowserVtbl* lpVtbl;
3195 };
3196 struct ICommDlgBrowserVtbl {
3197     BEGIN_INTERFACE
3198
3199     /*** IUnknown methods ***/
3200     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3201         ICommDlgBrowser* This,
3202         REFIID riid,
3203         void** ppvObject);
3204
3205     ULONG (STDMETHODCALLTYPE *AddRef)(
3206         ICommDlgBrowser* This);
3207
3208     ULONG (STDMETHODCALLTYPE *Release)(
3209         ICommDlgBrowser* This);
3210
3211     /*** ICommDlgBrowser methods ***/
3212     HRESULT (STDMETHODCALLTYPE *OnDefaultCommand)(
3213         ICommDlgBrowser* This,
3214         IShellView* shv);
3215
3216     HRESULT (STDMETHODCALLTYPE *OnStateChange)(
3217         ICommDlgBrowser* This,
3218         IShellView* shv,
3219         ULONG uChange);
3220
3221     HRESULT (STDMETHODCALLTYPE *IncludeObject)(
3222         ICommDlgBrowser* This,
3223         IShellView* shv,
3224         LPCITEMIDLIST pidl);
3225
3226     END_INTERFACE
3227 };
3228
3229 #ifdef COBJMACROS
3230 /*** IUnknown methods ***/
3231 #define ICommDlgBrowser_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3232 #define ICommDlgBrowser_AddRef(p) (p)->lpVtbl->AddRef(p)
3233 #define ICommDlgBrowser_Release(p) (p)->lpVtbl->Release(p)
3234 /*** ICommDlgBrowser methods ***/
3235 #define ICommDlgBrowser_OnDefaultCommand(p,a) (p)->lpVtbl->OnDefaultCommand(p,a)
3236 #define ICommDlgBrowser_OnStateChange(p,a,b) (p)->lpVtbl->OnStateChange(p,a,b)
3237 #define ICommDlgBrowser_IncludeObject(p,a,b) (p)->lpVtbl->IncludeObject(p,a,b)
3238 #endif
3239
3240 #endif
3241
3242 #define ICommDlgBrowser_METHODS \
3243     /*** IUnknown methods ***/ \
3244     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3245     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3246     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3247     /*** ICommDlgBrowser methods ***/ \
3248     STDMETHOD_(HRESULT,OnDefaultCommand)(THIS_ IShellView* shv) PURE; \
3249     STDMETHOD_(HRESULT,OnStateChange)(THIS_ IShellView* shv, ULONG uChange) PURE; \
3250     STDMETHOD_(HRESULT,IncludeObject)(THIS_ IShellView* shv, LPCITEMIDLIST pidl) PURE;
3251
3252 HRESULT CALLBACK ICommDlgBrowser_OnDefaultCommand_Proxy(
3253     ICommDlgBrowser* This,
3254     IShellView* shv);
3255 void __RPC_STUB ICommDlgBrowser_OnDefaultCommand_Stub(
3256     struct IRpcStubBuffer* This,
3257     struct IRpcChannelBuffer* pRpcChannelBuffer,
3258     PRPC_MESSAGE pRpcMessage,
3259     DWORD* pdwStubPhase);
3260 HRESULT CALLBACK ICommDlgBrowser_OnStateChange_Proxy(
3261     ICommDlgBrowser* This,
3262     IShellView* shv,
3263     ULONG uChange);
3264 void __RPC_STUB ICommDlgBrowser_OnStateChange_Stub(
3265     struct IRpcStubBuffer* This,
3266     struct IRpcChannelBuffer* pRpcChannelBuffer,
3267     PRPC_MESSAGE pRpcMessage,
3268     DWORD* pdwStubPhase);
3269 HRESULT CALLBACK ICommDlgBrowser_IncludeObject_Proxy(
3270     ICommDlgBrowser* This,
3271     IShellView* shv,
3272     LPCITEMIDLIST pidl);
3273 void __RPC_STUB ICommDlgBrowser_IncludeObject_Stub(
3274     struct IRpcStubBuffer* This,
3275     struct IRpcChannelBuffer* pRpcChannelBuffer,
3276     PRPC_MESSAGE pRpcMessage,
3277     DWORD* pdwStubPhase);
3278
3279 #endif  /* __ICommDlgBrowser_INTERFACE_DEFINED__ */
3280
3281 #ifndef __IDockingWindowFrame_FWD_DEFINED__
3282 #define __IDockingWindowFrame_FWD_DEFINED__
3283 typedef struct IDockingWindowFrame IDockingWindowFrame;
3284 #endif
3285
3286 #define DWFRF_NORMAL           0x0000
3287 #define DWFRF_DELETECONFIGDATA 0x0001
3288 #define DWFAF_HIDDEN           0x0001
3289 /*****************************************************************************
3290  * IDockingWindowFrame interface
3291  */
3292 #ifndef __IDockingWindowFrame_INTERFACE_DEFINED__
3293 #define __IDockingWindowFrame_INTERFACE_DEFINED__
3294
3295 DEFINE_GUID(IID_IDockingWindowFrame, 0x47d2657a, 0x7b27, 0x11d0, 0x8c,0xa9, 0x00,0xa0,0xc9,0x2d,0xbf,0xe8);
3296 #if defined(__cplusplus) && !defined(CINTERFACE)
3297 struct IDockingWindowFrame : public IOleWindow
3298 {
3299     virtual HRESULT STDMETHODCALLTYPE AddToolbar(
3300         IUnknown* punkSrc,
3301         LPCWSTR pwszItem,
3302         DWORD dwAddFlags) = 0;
3303
3304     virtual HRESULT STDMETHODCALLTYPE RemoveToolbar(
3305         IUnknown* punkSrc,
3306         DWORD dwRemoveFlags) = 0;
3307
3308     virtual HRESULT STDMETHODCALLTYPE FindToolbar(
3309         LPCWSTR pwszItem,
3310         REFIID riid,
3311         LPVOID* ppvObj) = 0;
3312
3313 };
3314 #else
3315 typedef struct IDockingWindowFrameVtbl IDockingWindowFrameVtbl;
3316 struct IDockingWindowFrame {
3317     const IDockingWindowFrameVtbl* lpVtbl;
3318 };
3319 struct IDockingWindowFrameVtbl {
3320     BEGIN_INTERFACE
3321
3322     /*** IUnknown methods ***/
3323     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3324         IDockingWindowFrame* This,
3325         REFIID riid,
3326         void** ppvObject);
3327
3328     ULONG (STDMETHODCALLTYPE *AddRef)(
3329         IDockingWindowFrame* This);
3330
3331     ULONG (STDMETHODCALLTYPE *Release)(
3332         IDockingWindowFrame* This);
3333
3334     /*** IOleWindow methods ***/
3335     HRESULT (STDMETHODCALLTYPE *GetWindow)(
3336         IDockingWindowFrame* This,
3337         HWND* phwnd);
3338
3339     HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
3340         IDockingWindowFrame* This,
3341         BOOL fEnterMode);
3342
3343     /*** IDockingWindowFrame methods ***/
3344     HRESULT (STDMETHODCALLTYPE *AddToolbar)(
3345         IDockingWindowFrame* This,
3346         IUnknown* punkSrc,
3347         LPCWSTR pwszItem,
3348         DWORD dwAddFlags);
3349
3350     HRESULT (STDMETHODCALLTYPE *RemoveToolbar)(
3351         IDockingWindowFrame* This,
3352         IUnknown* punkSrc,
3353         DWORD dwRemoveFlags);
3354
3355     HRESULT (STDMETHODCALLTYPE *FindToolbar)(
3356         IDockingWindowFrame* This,
3357         LPCWSTR pwszItem,
3358         REFIID riid,
3359         LPVOID* ppvObj);
3360
3361     END_INTERFACE
3362 };
3363
3364 #ifdef COBJMACROS
3365 /*** IUnknown methods ***/
3366 #define IDockingWindowFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3367 #define IDockingWindowFrame_AddRef(p) (p)->lpVtbl->AddRef(p)
3368 #define IDockingWindowFrame_Release(p) (p)->lpVtbl->Release(p)
3369 /*** IOleWindow methods ***/
3370 #define IDockingWindowFrame_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
3371 #define IDockingWindowFrame_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
3372 /*** IDockingWindowFrame methods ***/
3373 #define IDockingWindowFrame_AddToolbar(p,a,b,c) (p)->lpVtbl->AddToolbar(p,a,b,c)
3374 #define IDockingWindowFrame_RemoveToolbar(p,a,b) (p)->lpVtbl->RemoveToolbar(p,a,b)
3375 #define IDockingWindowFrame_FindToolbar(p,a,b,c) (p)->lpVtbl->FindToolbar(p,a,b,c)
3376 #endif
3377
3378 #endif
3379
3380 #define IDockingWindowFrame_METHODS \
3381     /*** IUnknown methods ***/ \
3382     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3383     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3384     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3385     /*** IOleWindow methods ***/ \
3386     STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND* phwnd) PURE; \
3387     STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL fEnterMode) PURE; \
3388     /*** IDockingWindowFrame methods ***/ \
3389     STDMETHOD_(HRESULT,AddToolbar)(THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) PURE; \
3390     STDMETHOD_(HRESULT,RemoveToolbar)(THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE; \
3391     STDMETHOD_(HRESULT,FindToolbar)(THIS_ LPCWSTR pwszItem, REFIID riid, LPVOID* ppvObj) PURE;
3392
3393 HRESULT CALLBACK IDockingWindowFrame_AddToolbar_Proxy(
3394     IDockingWindowFrame* This,
3395     IUnknown* punkSrc,
3396     LPCWSTR pwszItem,
3397     DWORD dwAddFlags);
3398 void __RPC_STUB IDockingWindowFrame_AddToolbar_Stub(
3399     struct IRpcStubBuffer* This,
3400     struct IRpcChannelBuffer* pRpcChannelBuffer,
3401     PRPC_MESSAGE pRpcMessage,
3402     DWORD* pdwStubPhase);
3403 HRESULT CALLBACK IDockingWindowFrame_RemoveToolbar_Proxy(
3404     IDockingWindowFrame* This,
3405     IUnknown* punkSrc,
3406     DWORD dwRemoveFlags);
3407 void __RPC_STUB IDockingWindowFrame_RemoveToolbar_Stub(
3408     struct IRpcStubBuffer* This,
3409     struct IRpcChannelBuffer* pRpcChannelBuffer,
3410     PRPC_MESSAGE pRpcMessage,
3411     DWORD* pdwStubPhase);
3412 HRESULT CALLBACK IDockingWindowFrame_FindToolbar_Proxy(
3413     IDockingWindowFrame* This,
3414     LPCWSTR pwszItem,
3415     REFIID riid,
3416     LPVOID* ppvObj);
3417 void __RPC_STUB IDockingWindowFrame_FindToolbar_Stub(
3418     struct IRpcStubBuffer* This,
3419     struct IRpcChannelBuffer* pRpcChannelBuffer,
3420     PRPC_MESSAGE pRpcMessage,
3421     DWORD* pdwStubPhase);
3422
3423 #endif  /* __IDockingWindowFrame_INTERFACE_DEFINED__ */
3424
3425 #ifndef __IDragSourceHelper_FWD_DEFINED__
3426 #define __IDragSourceHelper_FWD_DEFINED__
3427 typedef struct IDragSourceHelper IDragSourceHelper;
3428 #endif
3429
3430 typedef struct {
3431     SIZE sizeDragImage;
3432     POINT ptOffset;
3433     HBITMAP hbmpDragImage;
3434     COLORREF crColorKey;
3435 } SHDRAGIMAGE, *LPSHDRAGIMAGE;
3436
3437 /*****************************************************************************
3438  * IDragSourceHelper interface
3439  */
3440 #ifndef __IDragSourceHelper_INTERFACE_DEFINED__
3441 #define __IDragSourceHelper_INTERFACE_DEFINED__
3442
3443 DEFINE_GUID(IID_IDragSourceHelper, 0xde5bf786, 0x477a, 0x11d2, 0x83,0x9d, 0x00,0xc0,0x4f,0xd9,0x18,0xd0);
3444 #if defined(__cplusplus) && !defined(CINTERFACE)
3445 struct IDragSourceHelper : public IUnknown
3446 {
3447     virtual HRESULT STDMETHODCALLTYPE InitializeFromBitmap(
3448         LPSHDRAGIMAGE pshdi,
3449         IDataObject* pDataObject) = 0;
3450
3451     virtual HRESULT STDMETHODCALLTYPE InitializeFromWindow(
3452         HWND hwnd,
3453         POINT* ppt,
3454         IDataObject* pDataObject) = 0;
3455
3456 };
3457 #else
3458 typedef struct IDragSourceHelperVtbl IDragSourceHelperVtbl;
3459 struct IDragSourceHelper {
3460     const IDragSourceHelperVtbl* lpVtbl;
3461 };
3462 struct IDragSourceHelperVtbl {
3463     BEGIN_INTERFACE
3464
3465     /*** IUnknown methods ***/
3466     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3467         IDragSourceHelper* This,
3468         REFIID riid,
3469         void** ppvObject);
3470
3471     ULONG (STDMETHODCALLTYPE *AddRef)(
3472         IDragSourceHelper* This);
3473
3474     ULONG (STDMETHODCALLTYPE *Release)(
3475         IDragSourceHelper* This);
3476
3477     /*** IDragSourceHelper methods ***/
3478     HRESULT (STDMETHODCALLTYPE *InitializeFromBitmap)(
3479         IDragSourceHelper* This,
3480         LPSHDRAGIMAGE pshdi,
3481         IDataObject* pDataObject);
3482
3483     HRESULT (STDMETHODCALLTYPE *InitializeFromWindow)(
3484         IDragSourceHelper* This,
3485         HWND hwnd,
3486         POINT* ppt,
3487         IDataObject* pDataObject);
3488
3489     END_INTERFACE
3490 };
3491
3492 #ifdef COBJMACROS
3493 /*** IUnknown methods ***/
3494 #define IDragSourceHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3495 #define IDragSourceHelper_AddRef(p) (p)->lpVtbl->AddRef(p)
3496 #define IDragSourceHelper_Release(p) (p)->lpVtbl->Release(p)
3497 /*** IDragSourceHelper methods ***/
3498 #define IDragSourceHelper_InitializeFromBitmap(p,a,b) (p)->lpVtbl->InitializeFromBitmap(p,a,b)
3499 #define IDragSourceHelper_InitializeFromWindow(p,a,b,c) (p)->lpVtbl->InitializeFromWindow(p,a,b,c)
3500 #endif
3501
3502 #endif
3503
3504 #define IDragSourceHelper_METHODS \
3505     /*** IUnknown methods ***/ \
3506     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3507     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3508     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3509     /*** IDragSourceHelper methods ***/ \
3510     STDMETHOD_(HRESULT,InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE; \
3511     STDMETHOD_(HRESULT,InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE;
3512
3513 HRESULT CALLBACK IDragSourceHelper_InitializeFromBitmap_Proxy(
3514     IDragSourceHelper* This,
3515     LPSHDRAGIMAGE pshdi,
3516     IDataObject* pDataObject);
3517 void __RPC_STUB IDragSourceHelper_InitializeFromBitmap_Stub(
3518     struct IRpcStubBuffer* This,
3519     struct IRpcChannelBuffer* pRpcChannelBuffer,
3520     PRPC_MESSAGE pRpcMessage,
3521     DWORD* pdwStubPhase);
3522 HRESULT CALLBACK IDragSourceHelper_InitializeFromWindow_Proxy(
3523     IDragSourceHelper* This,
3524     HWND hwnd,
3525     POINT* ppt,
3526     IDataObject* pDataObject);
3527 void __RPC_STUB IDragSourceHelper_InitializeFromWindow_Stub(
3528     struct IRpcStubBuffer* This,
3529     struct IRpcChannelBuffer* pRpcChannelBuffer,
3530     PRPC_MESSAGE pRpcMessage,
3531     DWORD* pdwStubPhase);
3532
3533 #endif  /* __IDragSourceHelper_INTERFACE_DEFINED__ */
3534
3535 #ifndef __IDropTargetHelper_FWD_DEFINED__
3536 #define __IDropTargetHelper_FWD_DEFINED__
3537 typedef struct IDropTargetHelper IDropTargetHelper;
3538 #endif
3539
3540 /*****************************************************************************
3541  * IDropTargetHelper interface
3542  */
3543 #ifndef __IDropTargetHelper_INTERFACE_DEFINED__
3544 #define __IDropTargetHelper_INTERFACE_DEFINED__
3545
3546 DEFINE_GUID(IID_IDropTargetHelper, 0x4657278b, 0x411b, 0x11d2, 0x83,0x9a, 0x00,0xc0,0x4f,0xd9,0x18,0xd0);
3547 #if defined(__cplusplus) && !defined(CINTERFACE)
3548 struct IDropTargetHelper : public IUnknown
3549 {
3550     virtual HRESULT STDMETHODCALLTYPE DragEnter(
3551         HWND hwndTarget,
3552         IDataObject* pDataObject,
3553         POINT* ppt,
3554         DWORD dwEffect) = 0;
3555
3556     virtual HRESULT STDMETHODCALLTYPE DragLeave(
3557         ) = 0;
3558
3559     virtual HRESULT STDMETHODCALLTYPE DragOver(
3560         POINT* ppt,
3561         DWORD dwEffect) = 0;
3562
3563     virtual HRESULT STDMETHODCALLTYPE Drop(
3564         IDataObject* pDataObject,
3565         POINT* ppt,
3566         DWORD dwEffect) = 0;
3567
3568     virtual HRESULT STDMETHODCALLTYPE Show(
3569         BOOL fShow) = 0;
3570
3571 };
3572 #else
3573 typedef struct IDropTargetHelperVtbl IDropTargetHelperVtbl;
3574 struct IDropTargetHelper {
3575     const IDropTargetHelperVtbl* lpVtbl;
3576 };
3577 struct IDropTargetHelperVtbl {
3578     BEGIN_INTERFACE
3579
3580     /*** IUnknown methods ***/
3581     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3582         IDropTargetHelper* This,
3583         REFIID riid,
3584         void** ppvObject);
3585
3586     ULONG (STDMETHODCALLTYPE *AddRef)(
3587         IDropTargetHelper* This);
3588
3589     ULONG (STDMETHODCALLTYPE *Release)(
3590         IDropTargetHelper* This);
3591
3592     /*** IDropTargetHelper methods ***/
3593     HRESULT (STDMETHODCALLTYPE *DragEnter)(
3594         IDropTargetHelper* This,
3595         HWND hwndTarget,
3596         IDataObject* pDataObject,
3597         POINT* ppt,
3598         DWORD dwEffect);
3599
3600     HRESULT (STDMETHODCALLTYPE *DragLeave)(
3601         IDropTargetHelper* This);
3602
3603     HRESULT (STDMETHODCALLTYPE *DragOver)(
3604         IDropTargetHelper* This,
3605         POINT* ppt,
3606         DWORD dwEffect);
3607
3608     HRESULT (STDMETHODCALLTYPE *Drop)(
3609         IDropTargetHelper* This,
3610         IDataObject* pDataObject,
3611         POINT* ppt,
3612         DWORD dwEffect);
3613
3614     HRESULT (STDMETHODCALLTYPE *Show)(
3615         IDropTargetHelper* This,
3616         BOOL fShow);
3617
3618     END_INTERFACE
3619 };
3620
3621 #ifdef COBJMACROS
3622 /*** IUnknown methods ***/
3623 #define IDropTargetHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3624 #define IDropTargetHelper_AddRef(p) (p)->lpVtbl->AddRef(p)
3625 #define IDropTargetHelper_Release(p) (p)->lpVtbl->Release(p)
3626 /*** IDropTargetHelper methods ***/
3627 #define IDropTargetHelper_DragEnter(p,a,b,c,d) (p)->lpVtbl->DragEnter(p,a,b,c,d)
3628 #define IDropTargetHelper_DragLeave(p) (p)->lpVtbl->DragLeave(p)
3629 #define IDropTargetHelper_DragOver(p,a,b) (p)->lpVtbl->DragOver(p,a,b)
3630 #define IDropTargetHelper_Drop(p,a,b,c) (p)->lpVtbl->Drop(p,a,b,c)
3631 #define IDropTargetHelper_Show(p,a) (p)->lpVtbl->Show(p,a)
3632 #endif
3633
3634 #endif
3635
3636 #define IDropTargetHelper_METHODS \
3637     /*** IUnknown methods ***/ \
3638     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3639     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3640     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3641     /*** IDropTargetHelper methods ***/ \
3642     STDMETHOD_(HRESULT,DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; \
3643     STDMETHOD_(HRESULT,DragLeave)(THIS) PURE; \
3644     STDMETHOD_(HRESULT,DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE; \
3645     STDMETHOD_(HRESULT,Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; \
3646     STDMETHOD_(HRESULT,Show)(THIS_ BOOL fShow) PURE;
3647
3648 HRESULT CALLBACK IDropTargetHelper_DragEnter_Proxy(
3649     IDropTargetHelper* This,
3650     HWND hwndTarget,
3651     IDataObject* pDataObject,
3652     POINT* ppt,
3653     DWORD dwEffect);
3654 void __RPC_STUB IDropTargetHelper_DragEnter_Stub(
3655     struct IRpcStubBuffer* This,
3656     struct IRpcChannelBuffer* pRpcChannelBuffer,
3657     PRPC_MESSAGE pRpcMessage,
3658     DWORD* pdwStubPhase);
3659 HRESULT CALLBACK IDropTargetHelper_DragLeave_Proxy(
3660     IDropTargetHelper* This);
3661 void __RPC_STUB IDropTargetHelper_DragLeave_Stub(
3662     struct IRpcStubBuffer* This,
3663     struct IRpcChannelBuffer* pRpcChannelBuffer,
3664     PRPC_MESSAGE pRpcMessage,
3665     DWORD* pdwStubPhase);
3666 HRESULT CALLBACK IDropTargetHelper_DragOver_Proxy(
3667     IDropTargetHelper* This,
3668     POINT* ppt,
3669     DWORD dwEffect);
3670 void __RPC_STUB IDropTargetHelper_DragOver_Stub(
3671     struct IRpcStubBuffer* This,
3672     struct IRpcChannelBuffer* pRpcChannelBuffer,
3673     PRPC_MESSAGE pRpcMessage,
3674     DWORD* pdwStubPhase);
3675 HRESULT CALLBACK IDropTargetHelper_Drop_Proxy(
3676     IDropTargetHelper* This,
3677     IDataObject* pDataObject,
3678     POINT* ppt,
3679     DWORD dwEffect);
3680 void __RPC_STUB IDropTargetHelper_Drop_Stub(
3681     struct IRpcStubBuffer* This,
3682     struct IRpcChannelBuffer* pRpcChannelBuffer,
3683     PRPC_MESSAGE pRpcMessage,
3684     DWORD* pdwStubPhase);
3685 HRESULT CALLBACK IDropTargetHelper_Show_Proxy(
3686     IDropTargetHelper* This,
3687     BOOL fShow);
3688 void __RPC_STUB IDropTargetHelper_Show_Stub(
3689     struct IRpcStubBuffer* This,
3690     struct IRpcChannelBuffer* pRpcChannelBuffer,
3691     PRPC_MESSAGE pRpcMessage,
3692     DWORD* pdwStubPhase);
3693
3694 #endif  /* __IDropTargetHelper_INTERFACE_DEFINED__ */
3695
3696 #ifndef __IContextMenu_FWD_DEFINED__
3697 #define __IContextMenu_FWD_DEFINED__
3698 typedef struct IContextMenu IContextMenu;
3699 #endif
3700
3701 #define CMF_NORMAL        0x00000000
3702 #define CMF_DEFAULTONLY   0x00000001
3703 #define CMF_VERBSONLY     0x00000002
3704 #define CMF_EXPLORE       0x00000004
3705 #define CMF_NOVERBS       0x00000008
3706 #define CMF_CANRENAME     0x00000010
3707 #define CMF_NODEFAULT     0x00000020
3708 #define CMF_INCLUDESTATIC 0x00000040
3709 #define CMF_EXTENDEDVERBS 0x00000100
3710 #define CMF_RESERVED      0xffff0000
3711 #define GCS_VERBA         0x00000000
3712 #define GCS_HELPTEXTA     0x00000001
3713 #define GCS_VALIDATEA     0x00000002
3714 #define GCS_VERBW         0x00000004
3715 #define GCS_HELPTEXTW     0x00000005
3716 #define GCS_VALIDATEW     0x00000006
3717 #define GCS_UNICODE       0x00000004
3718 #define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)
3719 #define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)
3720 #define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)
3721 #define CMDSTR_NEWFOLDERA   "NewFolder"
3722 #define CMDSTR_VIEWLISTA    "ViewList"
3723 #define CMDSTR_VIEWDETAILSA "ViewDetails"
3724 #if defined(__GNUC__)
3725 # define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }
3726 # define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }
3727 # define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }
3728 #elif defined(_MSC_VER)
3729 # define CMDSTR_NEWFOLDERW   L"NewFolder"
3730 # define CMDSTR_VIEWLISTW    L"ViewList"
3731 # define CMDSTR_VIEWDETAILSW L"ViewDetails"
3732 #else
3733 static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};
3734 static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};
3735 static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};
3736 #endif
3737 #define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)
3738 #define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)
3739 #define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)
3740 #define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY
3741 #define CMIC_MASK_ICON           SEE_MASK_ICON
3742 #define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI
3743 #define CMIC_MASK_UNICODE        SEE_MASK_UNICODE
3744 #define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE
3745 #define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME
3746 #define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM
3747 #define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE
3748 #define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK
3749 #define CMIC_MASK_SHIFT_DOWN     0x10000000
3750 #define CMIC_MASK_PTINVOKE       0x20000000
3751 #define CMIC_MASK_CONTROL_DOWN   0x40000000
3752 #define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE
3753 #define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS
3754 typedef IContextMenu *LPCONTEXTMENU;
3755
3756 typedef struct tagCMINVOKECOMMANDINFO {
3757     DWORD cbSize;
3758     DWORD fMask;
3759     HWND hwnd;
3760     LPCSTR lpVerb;
3761     LPCSTR lpParameters;
3762     LPCSTR lpDirectory;
3763     INT nShow;
3764     DWORD dwHotKey;
3765     HANDLE hIcon;
3766 } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
3767
3768 typedef struct tagCMInvokeCommandInfoEx {
3769     DWORD cbSize;
3770     DWORD fMask;
3771     HWND hwnd;
3772     LPCSTR lpVerb;
3773     LPCSTR lpParameters;
3774     LPCSTR lpDirectory;
3775     INT nShow;
3776     DWORD dwHotKey;
3777     HANDLE hIcon;
3778     LPCSTR lpTitle;
3779     LPCWSTR lpVerbW;
3780     LPCWSTR lpParametersW;
3781     LPCWSTR lpDirectoryW;
3782     LPCWSTR lpTitleW;
3783     POINT ptInvoke;
3784 } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
3785
3786 /*****************************************************************************
3787  * IContextMenu interface
3788  */
3789 #ifndef __IContextMenu_INTERFACE_DEFINED__
3790 #define __IContextMenu_INTERFACE_DEFINED__
3791
3792 DEFINE_GUID(IID_IContextMenu, 0x000214e4, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3793 #if defined(__cplusplus) && !defined(CINTERFACE)
3794 struct IContextMenu : public IUnknown
3795 {
3796     virtual HRESULT STDMETHODCALLTYPE QueryContextMenu(
3797         HMENU hmenu,
3798         UINT indexMenu,
3799         UINT idCmdFirst,
3800         UINT idCmdLast,
3801         UINT uFlags) = 0;
3802
3803     virtual HRESULT STDMETHODCALLTYPE InvokeCommand(
3804         LPCMINVOKECOMMANDINFO lpici) = 0;
3805
3806     virtual HRESULT STDMETHODCALLTYPE GetCommandString(
3807         UINT idCmd,
3808         UINT uType,
3809         UINT* pwReserved,
3810         LPSTR pszName,
3811         UINT cchMax) = 0;
3812
3813 };
3814 #else
3815 typedef struct IContextMenuVtbl IContextMenuVtbl;
3816 struct IContextMenu {
3817     const IContextMenuVtbl* lpVtbl;
3818 };
3819 struct IContextMenuVtbl {
3820     BEGIN_INTERFACE
3821
3822     /*** IUnknown methods ***/
3823     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3824         IContextMenu* This,
3825         REFIID riid,
3826         void** ppvObject);
3827
3828     ULONG (STDMETHODCALLTYPE *AddRef)(
3829         IContextMenu* This);
3830
3831     ULONG (STDMETHODCALLTYPE *Release)(
3832         IContextMenu* This);
3833
3834     /*** IContextMenu methods ***/
3835     HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
3836         IContextMenu* This,
3837         HMENU hmenu,
3838         UINT indexMenu,
3839         UINT idCmdFirst,
3840         UINT idCmdLast,
3841         UINT uFlags);
3842
3843     HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
3844         IContextMenu* This,
3845         LPCMINVOKECOMMANDINFO lpici);
3846
3847     HRESULT (STDMETHODCALLTYPE *GetCommandString)(
3848         IContextMenu* This,
3849         UINT idCmd,
3850         UINT uType,
3851         UINT* pwReserved,
3852         LPSTR pszName,
3853         UINT cchMax);
3854
3855     END_INTERFACE
3856 };
3857
3858 #ifdef COBJMACROS
3859 /*** IUnknown methods ***/
3860 #define IContextMenu_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3861 #define IContextMenu_AddRef(p) (p)->lpVtbl->AddRef(p)
3862 #define IContextMenu_Release(p) (p)->lpVtbl->Release(p)
3863 /*** IContextMenu methods ***/
3864 #define IContextMenu_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
3865 #define IContextMenu_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
3866 #define IContextMenu_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
3867 #endif
3868
3869 #endif
3870
3871 #define IContextMenu_METHODS \
3872     /*** IUnknown methods ***/ \
3873     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
3874     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
3875     STDMETHOD_(ULONG,Release)(THIS) PURE; \
3876     /*** IContextMenu methods ***/ \
3877     STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
3878     STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
3879     STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE;
3880
3881 HRESULT CALLBACK IContextMenu_QueryContextMenu_Proxy(
3882     IContextMenu* This,
3883     HMENU hmenu,
3884     UINT indexMenu,
3885     UINT idCmdFirst,
3886     UINT idCmdLast,
3887     UINT uFlags);
3888 void __RPC_STUB IContextMenu_QueryContextMenu_Stub(
3889     struct IRpcStubBuffer* This,
3890     struct IRpcChannelBuffer* pRpcChannelBuffer,
3891     PRPC_MESSAGE pRpcMessage,
3892     DWORD* pdwStubPhase);
3893 HRESULT CALLBACK IContextMenu_InvokeCommand_Proxy(
3894     IContextMenu* This,
3895     LPCMINVOKECOMMANDINFO lpici);
3896 void __RPC_STUB IContextMenu_InvokeCommand_Stub(
3897     struct IRpcStubBuffer* This,
3898     struct IRpcChannelBuffer* pRpcChannelBuffer,
3899     PRPC_MESSAGE pRpcMessage,
3900     DWORD* pdwStubPhase);
3901 HRESULT CALLBACK IContextMenu_GetCommandString_Proxy(
3902     IContextMenu* This,
3903     UINT idCmd,
3904     UINT uType,
3905     UINT* pwReserved,
3906     LPSTR pszName,
3907     UINT cchMax);
3908 void __RPC_STUB IContextMenu_GetCommandString_Stub(
3909     struct IRpcStubBuffer* This,
3910     struct IRpcChannelBuffer* pRpcChannelBuffer,
3911     PRPC_MESSAGE pRpcMessage,
3912     DWORD* pdwStubPhase);
3913
3914 #endif  /* __IContextMenu_INTERFACE_DEFINED__ */
3915
3916 #ifndef __IContextMenu2_FWD_DEFINED__
3917 #define __IContextMenu2_FWD_DEFINED__
3918 typedef struct IContextMenu2 IContextMenu2;
3919 #endif
3920
3921 typedef IContextMenu2 *LPCONTEXTMENU2;
3922
3923 /*****************************************************************************
3924  * IContextMenu2 interface
3925  */
3926 #ifndef __IContextMenu2_INTERFACE_DEFINED__
3927 #define __IContextMenu2_INTERFACE_DEFINED__
3928
3929 DEFINE_GUID(IID_IContextMenu2, 0x000214f4, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
3930 #if defined(__cplusplus) && !defined(CINTERFACE)
3931 struct IContextMenu2 : public IContextMenu
3932 {
3933     virtual HRESULT STDMETHODCALLTYPE HandleMenuMsg(
3934         UINT uMsg,
3935         WPARAM wParam,
3936         LPARAM lParam) = 0;
3937
3938 };
3939 #else
3940 typedef struct IContextMenu2Vtbl IContextMenu2Vtbl;
3941 struct IContextMenu2 {
3942     const IContextMenu2Vtbl* lpVtbl;
3943 };
3944 struct IContextMenu2Vtbl {
3945     BEGIN_INTERFACE
3946
3947     /*** IUnknown methods ***/
3948     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
3949         IContextMenu2* This,
3950         REFIID riid,
3951         void** ppvObject);
3952
3953     ULONG (STDMETHODCALLTYPE *AddRef)(
3954         IContextMenu2* This);
3955
3956     ULONG (STDMETHODCALLTYPE *Release)(
3957         IContextMenu2* This);
3958
3959     /*** IContextMenu methods ***/
3960     HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
3961         IContextMenu2* This,
3962         HMENU hmenu,
3963         UINT indexMenu,
3964         UINT idCmdFirst,
3965         UINT idCmdLast,
3966         UINT uFlags);
3967
3968     HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
3969         IContextMenu2* This,
3970         LPCMINVOKECOMMANDINFO lpici);
3971
3972     HRESULT (STDMETHODCALLTYPE *GetCommandString)(
3973         IContextMenu2* This,
3974         UINT idCmd,
3975         UINT uType,
3976         UINT* pwReserved,
3977         LPSTR pszName,
3978         UINT cchMax);
3979
3980     /*** IContextMenu2 methods ***/
3981     HRESULT (STDMETHODCALLTYPE *HandleMenuMsg)(
3982         IContextMenu2* This,
3983         UINT uMsg,
3984         WPARAM wParam,
3985         LPARAM lParam);
3986
3987     END_INTERFACE
3988 };
3989
3990 #ifdef COBJMACROS
3991 /*** IUnknown methods ***/
3992 #define IContextMenu2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
3993 #define IContextMenu2_AddRef(p) (p)->lpVtbl->AddRef(p)
3994 #define IContextMenu2_Release(p) (p)->lpVtbl->Release(p)
3995 /*** IContextMenu methods ***/
3996 #define IContextMenu2_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
3997 #define IContextMenu2_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
3998 #define IContextMenu2_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
3999 /*** IContextMenu2 methods ***/
4000 #define IContextMenu2_HandleMenuMsg(p,a,b,c) (p)->lpVtbl->HandleMenuMsg(p,a,b,c)
4001 #endif
4002
4003 #endif
4004
4005 #define IContextMenu2_METHODS \
4006     /*** IUnknown methods ***/ \
4007     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
4008     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
4009     STDMETHOD_(ULONG,Release)(THIS) PURE; \
4010     /*** IContextMenu methods ***/ \
4011     STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
4012     STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
4013     STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE; \
4014     /*** IContextMenu2 methods ***/ \
4015     STDMETHOD_(HRESULT,HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
4016
4017 HRESULT CALLBACK IContextMenu2_HandleMenuMsg_Proxy(
4018     IContextMenu2* This,
4019     UINT uMsg,
4020     WPARAM wParam,
4021     LPARAM lParam);
4022 void __RPC_STUB IContextMenu2_HandleMenuMsg_Stub(
4023     struct IRpcStubBuffer* This,
4024     struct IRpcChannelBuffer* pRpcChannelBuffer,
4025     PRPC_MESSAGE pRpcMessage,
4026     DWORD* pdwStubPhase);
4027
4028 #endif  /* __IContextMenu2_INTERFACE_DEFINED__ */
4029
4030 #ifndef __IContextMenu3_FWD_DEFINED__
4031 #define __IContextMenu3_FWD_DEFINED__
4032 typedef struct IContextMenu3 IContextMenu3;
4033 #endif
4034
4035 typedef IContextMenu3 *LPCONTEXTMENU3;
4036
4037 /*****************************************************************************
4038  * IContextMenu3 interface
4039  */
4040 #ifndef __IContextMenu3_INTERFACE_DEFINED__
4041 #define __IContextMenu3_INTERFACE_DEFINED__
4042
4043 DEFINE_GUID(IID_IContextMenu3, 0xbcfce0a0, 0xec17, 0x11d0, 0x8d,0x10, 0x00,0xa0,0xc9,0x0f,0x27,0x19);
4044 #if defined(__cplusplus) && !defined(CINTERFACE)
4045 struct IContextMenu3 : public IContextMenu2
4046 {
4047     virtual HRESULT STDMETHODCALLTYPE HandleMenuMsg2(
4048         UINT uMsg,
4049         WPARAM wParam,
4050         LPARAM lParam,
4051         LRESULT* plResult) = 0;
4052
4053 };
4054 #else
4055 typedef struct IContextMenu3Vtbl IContextMenu3Vtbl;
4056 struct IContextMenu3 {
4057     const IContextMenu3Vtbl* lpVtbl;
4058 };
4059 struct IContextMenu3Vtbl {
4060     BEGIN_INTERFACE
4061
4062     /*** IUnknown methods ***/
4063     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4064         IContextMenu3* This,
4065         REFIID riid,
4066         void** ppvObject);
4067
4068     ULONG (STDMETHODCALLTYPE *AddRef)(
4069         IContextMenu3* This);
4070
4071     ULONG (STDMETHODCALLTYPE *Release)(
4072         IContextMenu3* This);
4073
4074     /*** IContextMenu methods ***/
4075     HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
4076         IContextMenu3* This,
4077         HMENU hmenu,
4078         UINT indexMenu,
4079         UINT idCmdFirst,
4080         UINT idCmdLast,
4081         UINT uFlags);
4082
4083     HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
4084         IContextMenu3* This,
4085         LPCMINVOKECOMMANDINFO lpici);
4086
4087     HRESULT (STDMETHODCALLTYPE *GetCommandString)(
4088         IContextMenu3* This,
4089         UINT idCmd,
4090         UINT uType,
4091         UINT* pwReserved,
4092         LPSTR pszName,
4093         UINT cchMax);
4094
4095     /*** IContextMenu2 methods ***/
4096     HRESULT (STDMETHODCALLTYPE *HandleMenuMsg)(
4097         IContextMenu3* This,
4098         UINT uMsg,
4099         WPARAM wParam,
4100         LPARAM lParam);
4101
4102     /*** IContextMenu3 methods ***/
4103     HRESULT (STDMETHODCALLTYPE *HandleMenuMsg2)(
4104         IContextMenu3* This,
4105         UINT uMsg,
4106         WPARAM wParam,
4107         LPARAM lParam,
4108         LRESULT* plResult);
4109
4110     END_INTERFACE
4111 };
4112
4113 #ifdef COBJMACROS
4114 /*** IUnknown methods ***/
4115 #define IContextMenu3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4116 #define IContextMenu3_AddRef(p) (p)->lpVtbl->AddRef(p)
4117 #define IContextMenu3_Release(p) (p)->lpVtbl->Release(p)
4118 /*** IContextMenu methods ***/
4119 #define IContextMenu3_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
4120 #define IContextMenu3_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
4121 #define IContextMenu3_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
4122 /*** IContextMenu2 methods ***/
4123 #define IContextMenu3_HandleMenuMsg(p,a,b,c) (p)->lpVtbl->HandleMenuMsg(p,a,b,c)
4124 /*** IContextMenu3 methods ***/
4125 #define IContextMenu3_HandleMenuMsg2(p,a,b,c,d) (p)->lpVtbl->HandleMenuMsg2(p,a,b,c,d)
4126 #endif
4127
4128 #endif
4129
4130 #define IContextMenu3_METHODS \
4131     /*** IUnknown methods ***/ \
4132     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
4133     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
4134     STDMETHOD_(ULONG,Release)(THIS) PURE; \
4135     /*** IContextMenu methods ***/ \
4136     STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
4137     STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
4138     STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE; \
4139     /*** IContextMenu2 methods ***/ \
4140     STDMETHOD_(HRESULT,HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; \
4141     /*** IContextMenu3 methods ***/ \
4142     STDMETHOD_(HRESULT,HandleMenuMsg2)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plResult) PURE;
4143
4144 HRESULT CALLBACK IContextMenu3_HandleMenuMsg2_Proxy(
4145     IContextMenu3* This,
4146     UINT uMsg,
4147     WPARAM wParam,
4148     LPARAM lParam,
4149     LRESULT* plResult);
4150 void __RPC_STUB IContextMenu3_HandleMenuMsg2_Stub(
4151     struct IRpcStubBuffer* This,
4152     struct IRpcChannelBuffer* pRpcChannelBuffer,
4153     PRPC_MESSAGE pRpcMessage,
4154     DWORD* pdwStubPhase);
4155
4156 #endif  /* __IContextMenu3_INTERFACE_DEFINED__ */
4157
4158 #ifndef __IShellExecuteHookA_FWD_DEFINED__
4159 #define __IShellExecuteHookA_FWD_DEFINED__
4160 typedef struct IShellExecuteHookA IShellExecuteHookA;
4161 #endif
4162
4163 struct _SHELLEXECUTEINFOA;
4164 /*****************************************************************************
4165  * IShellExecuteHookA interface
4166  */
4167 #ifndef __IShellExecuteHookA_INTERFACE_DEFINED__
4168 #define __IShellExecuteHookA_INTERFACE_DEFINED__
4169
4170 DEFINE_GUID(IID_IShellExecuteHookA, 0x000214f5, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4171 #if defined(__cplusplus) && !defined(CINTERFACE)
4172 struct IShellExecuteHookA : public IUnknown
4173 {
4174     virtual HRESULT STDMETHODCALLTYPE Execute(
4175         struct _SHELLEXECUTEINFOA* pei) = 0;
4176
4177 };
4178 #else
4179 typedef struct IShellExecuteHookAVtbl IShellExecuteHookAVtbl;
4180 struct IShellExecuteHookA {
4181     const IShellExecuteHookAVtbl* lpVtbl;
4182 };
4183 struct IShellExecuteHookAVtbl {
4184     BEGIN_INTERFACE
4185
4186     /*** IUnknown methods ***/
4187     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4188         IShellExecuteHookA* This,
4189         REFIID riid,
4190         void** ppvObject);
4191
4192     ULONG (STDMETHODCALLTYPE *AddRef)(
4193         IShellExecuteHookA* This);
4194
4195     ULONG (STDMETHODCALLTYPE *Release)(
4196         IShellExecuteHookA* This);
4197
4198     /*** IShellExecuteHookA methods ***/
4199     HRESULT (STDMETHODCALLTYPE *Execute)(
4200         IShellExecuteHookA* This,
4201         struct _SHELLEXECUTEINFOA* pei);
4202
4203     END_INTERFACE
4204 };
4205
4206 #ifdef COBJMACROS
4207 /*** IUnknown methods ***/
4208 #define IShellExecuteHookA_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4209 #define IShellExecuteHookA_AddRef(p) (p)->lpVtbl->AddRef(p)
4210 #define IShellExecuteHookA_Release(p) (p)->lpVtbl->Release(p)
4211 /*** IShellExecuteHookA methods ***/
4212 #define IShellExecuteHookA_Execute(p,a) (p)->lpVtbl->Execute(p,a)
4213 #endif
4214
4215 #endif
4216
4217 #define IShellExecuteHookA_METHODS \
4218     /*** IUnknown methods ***/ \
4219     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
4220     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
4221     STDMETHOD_(ULONG,Release)(THIS) PURE; \
4222     /*** IShellExecuteHookA methods ***/ \
4223     STDMETHOD_(HRESULT,Execute)(THIS_ struct _SHELLEXECUTEINFOA* pei) PURE;
4224
4225 HRESULT CALLBACK IShellExecuteHookA_Execute_Proxy(
4226     IShellExecuteHookA* This,
4227     struct _SHELLEXECUTEINFOA* pei);
4228 void __RPC_STUB IShellExecuteHookA_Execute_Stub(
4229     struct IRpcStubBuffer* This,
4230     struct IRpcChannelBuffer* pRpcChannelBuffer,
4231     PRPC_MESSAGE pRpcMessage,
4232     DWORD* pdwStubPhase);
4233
4234 #endif  /* __IShellExecuteHookA_INTERFACE_DEFINED__ */
4235
4236 #ifndef __IShellExecuteHookW_FWD_DEFINED__
4237 #define __IShellExecuteHookW_FWD_DEFINED__
4238 typedef struct IShellExecuteHookW IShellExecuteHookW;
4239 #endif
4240
4241 struct _SHELLEXECUTEINFOW;
4242 /*****************************************************************************
4243  * IShellExecuteHookW interface
4244  */
4245 #ifndef __IShellExecuteHookW_INTERFACE_DEFINED__
4246 #define __IShellExecuteHookW_INTERFACE_DEFINED__
4247
4248 DEFINE_GUID(IID_IShellExecuteHookW, 0x000214fb, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
4249 #if defined(__cplusplus) && !defined(CINTERFACE)
4250 struct IShellExecuteHookW : public IUnknown
4251 {
4252     virtual HRESULT STDMETHODCALLTYPE Execute(
4253         struct _SHELLEXECUTEINFOW* pei) = 0;
4254
4255 };
4256 #else
4257 typedef struct IShellExecuteHookWVtbl IShellExecuteHookWVtbl;
4258 struct IShellExecuteHookW {
4259     const IShellExecuteHookWVtbl* lpVtbl;
4260 };
4261 struct IShellExecuteHookWVtbl {
4262     BEGIN_INTERFACE
4263
4264     /*** IUnknown methods ***/
4265     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
4266         IShellExecuteHookW* This,
4267         REFIID riid,
4268         void** ppvObject);
4269
4270     ULONG (STDMETHODCALLTYPE *AddRef)(
4271         IShellExecuteHookW* This);
4272
4273     ULONG (STDMETHODCALLTYPE *Release)(
4274         IShellExecuteHookW* This);
4275
4276     /*** IShellExecuteHookW methods ***/
4277     HRESULT (STDMETHODCALLTYPE *Execute)(
4278         IShellExecuteHookW* This,
4279         struct _SHELLEXECUTEINFOW* pei);
4280
4281     END_INTERFACE
4282 };
4283
4284 #ifdef COBJMACROS
4285 /*** IUnknown methods ***/
4286 #define IShellExecuteHookW_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
4287 #define IShellExecuteHookW_AddRef(p) (p)->lpVtbl->AddRef(p)
4288 #define IShellExecuteHookW_Release(p) (p)->lpVtbl->Release(p)
4289 /*** IShellExecuteHookW methods ***/
4290 #define IShellExecuteHookW_Execute(p,a) (p)->lpVtbl->Execute(p,a)
4291 #endif
4292
4293 #endif
4294
4295 #define IShellExecuteHookW_METHODS \
4296     /*** IUnknown methods ***/ \
4297     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
4298     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
4299     STDMETHOD_(ULONG,Release)(THIS) PURE; \
4300     /*** IShellExecuteHookW methods ***/ \
4301     STDMETHOD_(HRESULT,Execute)(THIS_ struct _SHELLEXECUTEINFOW* pei) PURE;
4302
4303 HRESULT CALLBACK IShellExecuteHookW_Execute_Proxy(
4304     IShellExecuteHookW* This,
4305     struct _SHELLEXECUTEINFOW* pei);
4306 void __RPC_STUB IShellExecuteHookW_Execute_Stub(
4307     struct IRpcStubBuffer* This,
4308     struct IRpcChannelBuffer* pRpcChannelBuffer,
4309     PRPC_MESSAGE pRpcMessage,
4310     DWORD* pdwStubPhase);
4311
4312 #endif  /* __IShellExecuteHookW_INTERFACE_DEFINED__ */
4313
4314 #ifdef __cplusplus
4315 }
4316 #endif
4317 #endif /* __WIDL_SHOBJIDL_H */