1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPLv2+ - See COPYING in the top level directory
4  * PURPOSE:         COM interface test for shell32 classes
5  * PROGRAMMER:      Thomas Faber <thomas.faber@reactos.org>
6  */
7 
8 #include "com_apitest.h"
9 
10 #define NDEBUG
11 #include <debug.h>
12 
13 static const CLASS_AND_INTERFACES ExpectedInterfaces[] =
14 {
15     {
16         ID_NAME(CLSID_ActiveDesktop),
17         {
18             {    0x0,   &IID_IActiveDesktop },
19             {    0x0,       &IID_IUnknown },
20             {    0x4,   &IID_IActiveDesktopP },
21             {    0x8,   &IID_IADesktopP2 },
22             {    0xc,   &IID_IPropertyBag },
23         }
24     },
25     {
26         ID_NAME(CLSID_CDBurn),
27         {
28             {    0x0,   &IID_IObjectWithSite },
29             {    0x0,       &IID_IUnknown },
30             {    0x8,   &IID_IShellExtInit },
31             {    0xc,   &IID_IContextMenu },
32             {   0x10,   &IID_IShellPropSheetExt },
33             {   0x14,   &IID_IDiscMasterProgressEvents },
34             {   0x18,   &IID_IDropTarget },
35             {   0x1c,   &IID_IPersistFile },
36             {   0x20,   &IID_IOleCommandTarget },
37             {   0x24,   &IID_ICDBurn },
38             {   0x28,   &IID_ICDBurnPriv },
39             {   0x2c,   &IID_IPersistPropertyBag },
40             {   0x30,   &IID_IDriveFolderExtOld },
41             {   0x34,   &IID_INamespaceWalkCB },
42             {   0x3c,   &IID_IServiceProvider },
43             {   0x40,   &IID_ITransferAdviseSinkPriv },
44             {   0x44,   &IID_IQueryCancelAutoPlay },
45         }
46     },
47     {
48         ID_NAME(CLSID_ControlPanel),
49         {
50             {    0x0,   &IID_IUnknown },
51             {   0x10,   &IID_IPersistFolder2 },
52             {   0x10,       &IID_IPersistFolder },
53             {   0x10,           &IID_IPersist },
54             { FARAWY,   &IID_IShellIconOverlay },
55             { FARAWY,   &IID_IShellFolder2 },
56             { FARAWY,       &IID_IShellFolder },
57         }
58     },
59     {
60         ID_NAME(CLSID_CopyToMenu),
61         {
62             {    0x0,   &IID_IContextMenu3 },
63             {    0x0,       &IID_IContextMenu2 },
64             {    0x0,           &IID_IContextMenu },
65             {    0x0,               &IID_IUnknown },
66             {    0x4,   &IID_IShellExtInit },
67             {    0x8,   &IID_IObjectWithSite },
68             {   0x10,   &IID_IFolderFilter },
69         }
70     },
71     {
72         ID_NAME(CLSID_DeskMovr),
73         {
74             {    0x0,   &IID_IUnknown },
75             {   0x70,   &IID_IDeskMovr },
76             {   0x74,   &IID_IOleObject },
77             {   0x78,   &IID_IPersistPropertyBag },
78             {   0x7c,   &IID_IOleControl },
79             {   0x80,   &IID_IOleInPlaceActiveObject },
80             {   0x84,   &IID_IViewObjectEx },
81             {   0x84,       &IID_IViewObject2 },
82             {   0x84,           &IID_IViewObject },
83             {   0x88,   &IID_IOleWindow },
84             {   0x88,       &IID_IOleInPlaceObject },
85             {   0x88,           &IID_IOleInPlaceObjectWindowless },
86             {   0x8c,   &IID_IQuickActivate },
87         }
88     },
89     {
90         ID_NAME(CLSID_DragDropHelper),
91         {
92             {    0x0,   &IID_IDragSourceHelper },
93             {    0x0,       &IID_IUnknown },
94             {    0x4,   &IID_IDropTargetHelper },
95         }
96     },
97     {
98         ID_NAME(CLSID_FadeTask),
99         {
100             {    0x0,   &IID_IUnknown },
101         }
102     },
103     {
104         ID_NAME(CLSID_FileSearchBand),
105         {
106             {    0x0,   &IID_IFileSearchBand },
107             {    0x0,       &IID_IDispatch },
108             {    0x0,           &IID_IUnknown },
109             {    0x4,   &IID_IObjectWithSite },
110             {    0x8,   &IID_IPersistStream },
111             {    0x8,       &IID_IPersist },
112             {    0xc,   &IID_IDeskBand },
113             {    0xc,       &IID_IDockingWindow },
114             {    0xc,           &IID_IOleWindow },
115             {   0x10,   &IID_IInputObject },
116             {   0x14,   &IID_IOleClientSite },
117             {   0x18,   &IID_IOleInPlaceSite },
118             {   0x1c,   &IID_IOleControlSite },
119         }
120     },
121     {
122         ID_NAME(CLSID_FindFolder),
123         {
124             {    0x0,   &IID_IShellFolder2 },
125             {    0x0,       &IID_IShellFolder },
126             {    0x0,           &IID_IUnknown },
127             {    0x4,   &IID_IShellIcon },
128             {    0x8,   &IID_IShellIconOverlay },
129             {    0xc,   &IID_IPersistFolder2 },
130             {    0xc,       &IID_IPersistFolder },
131             {    0xc,           &IID_IPersist },
132         }
133     },
134     {
135         ID_NAME(CLSID_FolderItem),
136         {
137             //{    0x0,   &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
138             {    0x0,       &IID_FolderItem2 },
139             {    0x0,           &IID_FolderItem },
140             {    0x0,               &IID_IDispatch },
141             {    0x0,                   &IID_IUnknown },
142             {    0x4,   &IID_IPersistFolder2 },
143             {    0x4,       &IID_IPersistFolder },
144             {    0x4,           &IID_IPersist },
145             {    0x8,   &IID_IObjectSafety },
146             {   0x10,   &IID_IParentAndItem },
147         }
148     },
149     {
150         ID_NAME(CLSID_FolderItemsFDF),
151         {
152             {    0x0,   &IID_FolderItems3 },
153             //{    0x0,       &IID_FolderItems2 }, ????
154             {    0x0,           &IID_FolderItems },
155             {    0x0,               &IID_IDispatch },
156             {    0x0,                   &IID_IUnknown },
157             {    0x4,   &IID_IPersistFolder },
158             {    0x8,   &IID_IObjectSafety },
159         }
160     },
161     {
162         ID_NAME(CLSID_FolderShortcut),
163         {
164             {    0x0,   &IID_IShellFolder2 },
165             {    0x0,       &IID_IShellFolder },
166             {    0x0,           &IID_IUnknown },
167             {    0x4,   &IID_IPersistFolder3 },
168             {    0x4,       &IID_IPersistFolder2 },
169             {    0x4,           &IID_IPersistFolder },
170             {    0x4,               &IID_IPersist },
171             {    0x8,   &IID_IShellLinkA },
172             {    0xc,   &IID_IShellLinkW },
173             {   0x10,   &IID_IPersistFile },
174             {   0x14,   &IID_IExtractIconW },
175             {   0x18,   &IID_IQueryInfo },
176             {   0x20,   &IID_IPersistStream },
177             {   0x20,   &IID_IPersistStreamInit },
178             {   0x24,   &IID_IPersistPropertyBag },
179             {   0x28,   &IID_IBrowserFrameOptions },
180         }
181     },
182     {
183         ID_NAME(CLSID_FolderViewHost),
184         {
185             {    0x0,   &IID_IFolderViewHost },
186             {    0x0,       &IID_IUnknown },
187             {    0x4,   &IID_IServiceProvider },
188             {    0x8,   &IID_IOleWindow },
189             {    0xc,   &IID_IFolderView },
190             {   0x10,   &IID_IObjectWithSite },
191         }
192     },
193     {
194         ID_NAME(CLSID_ISFBand),
195         {
196             {  -0xac,   &IID_IDeskBand },
197             {  -0xac,       &IID_IDockingWindow },
198             {  -0xac,           &IID_IOleWindow },
199             {  -0xa8,   &IID_IObjectWithSite },
200             {  -0xa0,   &IID_IInputObject },
201             {  -0x9c,   &IID_IPersistStream },
202             {  -0x9c,       &IID_IPersist },
203             {  -0x98,   &IID_IOleCommandTarget },
204             {  -0x94,   &IID_IServiceProvider },
205             {  -0x78,   &IID_IWinEventHandler },
206             {  -0x74,   &IID_IShellChangeNotify },
207             {  -0x70,   &IID_IDropTarget },
208             {   -0x4,   &IID_IContextMenu },
209             {    0x0,   &IID_IShellFolderBand },
210             {    0x0,       &IID_IUnknown },
211             {   0x94,   &IID_IFolderBandPriv },
212         }
213     },
214     {
215         ID_NAME(CLSID_MenuBand),
216         {
217             {  -0x30,   &IID_IDeskBand },
218             {  -0x30,       &IID_IDockingWindow },
219             {  -0x30,           &IID_IOleWindow },
220             {  -0x2c,   &IID_IObjectWithSite },
221             {  -0x24,   &IID_IInputObject },
222             {  -0x20,   &IID_IPersistStream },
223             {  -0x20,       &IID_IPersist },
224             {  -0x1c,   &IID_IOleCommandTarget },
225             {  -0x18,   &IID_IServiceProvider },
226             {    0x0,   &IID_IMenuPopup },
227             {    0x0,       &IID_IDeskBar },
228             {    0x0,           &IID_IUnknown },
229             {    0x4,   &IID_IMenuBand },
230             {    0x8,   &IID_IShellMenu2 },
231             {    0x8,       &IID_IShellMenu },
232             {    0xc,   &IID_IWinEventHandler },
233             {   0x10,   &IID_IShellMenuAcc },
234         }
235     },
236     {
237         ID_NAME(CLSID_MenuBandSite),
238         {
239             {    0x0,   &IID_IBandSite },
240             {    0x0,       &IID_IUnknown },
241             {    0x4,   &IID_IDeskBarClient },
242             {    0x4,       &IID_IOleWindow },
243             {    0x8,   &IID_IOleCommandTarget },
244             {    0xc,   &IID_IInputObject },
245             {   0x10,   &IID_IInputObjectSite },
246             {   0x14,   &IID_IWinEventHandler },
247             {   0x18,   &IID_IServiceProvider },
248         }
249     },
250     {
251         ID_NAME(CLSID_MenuDeskBar),
252         {
253             {  -0x48,   &IID_IOleCommandTarget },
254             {  -0x44,   &IID_IServiceProvider },
255             {  -0x40,   &IID_IDeskBar },
256             {  -0x40,       &IID_IOleWindow },
257             {  -0x3c,   &IID_IInputObjectSite },
258             {  -0x38,   &IID_IInputObject },
259             {    0x0,   &IID_IMenuPopup },
260             {    0x0,           &IID_IUnknown },
261             {    0x4,   &IID_IObjectWithSite },
262             {    0x8,   &IID_IBanneredBar },
263             {    0xc,   &IID_IInitializeObject },
264         }
265     },
266 #if 0 // This is registered to shell32, but can't be instanciated
267     {
268         ID_NAME(CLSID_MenuToolbarBase),
269         {
270             {    0x0,   &IID_IUnknown },
271         }
272     },
273 #endif
274     {
275         ID_NAME(CLSID_MergedFolder),
276         {
277             {   -0x8,   &IID_IShellFolder2 },
278             {   -0x4,   &IID_IStorage },
279             {    0x0,   &IID_IAugmentedShellFolder2 },
280             {    0x0,       &IID_IAugmentedShellFolder },
281             {    0x0,           &IID_IShellFolder },
282             {    0x0,               &IID_IUnknown },
283             {    0x4,   &IID_IShellService },
284             {    0x8,   &IID_ITranslateShellChangeNotify },
285             {    0xc,   &IID_IPersistFolder2 },
286             {    0xc,       &IID_IPersistFolder },
287             {    0xc,           &IID_IPersist },
288             {   0x10,   &IID_IPersistPropertyBag },
289             {   0x14,   &IID_IShellIconOverlay },
290             {   0x18,   &IID_ICompositeFolder },
291             {   0x1c,   &IID_IItemNameLimits },
292         }
293     },
294     {
295         ID_NAME(CLSID_MoveToMenu),
296         {
297             {    0x0,   &IID_IContextMenu3 },
298             {    0x0,       &IID_IContextMenu2 },
299             {    0x0,           &IID_IContextMenu },
300             {    0x0,               &IID_IUnknown },
301             {    0x4,   &IID_IShellExtInit },
302             {    0x8,   &IID_IObjectWithSite },
303             {   0x10,   &IID_IFolderFilter },
304         }
305     },
306     {
307         ID_NAME(CLSID_MyComputer),
308         {
309             {    0x0,   &IID_IUnknown },
310             {   0x10,   &IID_IPersistFolder2 },
311             {   0x10,       &IID_IPersistFolder },
312             {   0x10,           &IID_IPersist },
313             {   0x10,           &IID_IPersistFreeThreadedObject },
314             { FARAWY,   &IID_IShellIconOverlay },
315             { FARAWY,   &IID_IShellFolder2 },
316             { FARAWY,       &IID_IShellFolder },
317         }
318     },
319     {
320         ID_NAME(CLSID_MyDocuments),
321         {
322             {   -0x4,   &IID_IPersistFolder },
323             {   -0x4,       &IID_IPersist },
324             {    0x0,   &IID_IShellFolder2 },
325             {    0x0,       &IID_IShellFolder },
326             {    0x0,           &IID_IUnknown },
327             {    0x4,   &IID_IShellIconOverlay },
328             { FARAWY,   &IID_IShellIcon },
329             { FARAWY,   &IID_IPersistFolder3 },
330             { FARAWY,       &IID_IPersistFolder2 },
331             { FARAWY,   &IID_IStorage },
332             { FARAWY,   &IID_IContextMenuCB },
333             { FARAWY,   &IID_IOleCommandTarget },
334             { FARAWY,   &IID_IItemNameLimits },
335             { FARAWY,   &IID_IPropertySetStorage },
336         }
337     },
338     {
339         ID_NAME(CLSID_NetworkPlaces),
340         {
341             {    0x0,   &IID_IUnknown },
342             {   0x10,   &IID_IPersistFolder3 },
343             {   0x10,       &IID_IPersistFolder2 },
344             {   0x10,           &IID_IPersistFolder },
345             {   0x10,               &IID_IPersist },
346             {   0x10,               &IID_IPersistFreeThreadedObject },
347             { FARAWY,   &IID_IShellIconOverlay },
348             { FARAWY,   &IID_IShellFolder2 },
349             { FARAWY,       &IID_IShellFolder },
350         }
351     },
352     {
353         ID_NAME(CLSID_NewMenu),
354         {
355             {   -0xc,   &IID_IObjectWithSite },
356             {   -0x4,   &IID_IContextMenu3 },
357             {   -0x4,       &IID_IContextMenu2 },
358             {   -0x4,           &IID_IContextMenu },
359             {    0x0,   &IID_IShellExtInit },
360             {    0x0,       &IID_IUnknown },
361         }
362     },
363     {
364         ID_NAME(CLSID_PersonalStartMenu),
365         {
366             {  -0x30,   &IID_IDeskBand },
367             {  -0x30,       &IID_IDockingWindow },
368             {  -0x30,           &IID_IOleWindow },
369             {  -0x2c,   &IID_IObjectWithSite },
370             {  -0x24,   &IID_IInputObject },
371             {  -0x20,   &IID_IPersistStream },
372             {  -0x20,       &IID_IPersist },
373             {  -0x1c,   &IID_IOleCommandTarget },
374             {  -0x18,   &IID_IServiceProvider },
375             {    0x0,   &IID_IMenuPopup },
376             {    0x0,       &IID_IDeskBar },
377             {    0x0,           &IID_IUnknown },
378             {    0x4,   &IID_IMenuBand },
379             {    0x8,   &IID_IShellMenu2 },
380             {    0x8,       &IID_IShellMenu },
381             {    0xc,   &IID_IWinEventHandler },
382             {   0x10,   &IID_IShellMenuAcc },
383         }
384     },
385     {
386         ID_NAME(CLSID_Printers),
387         {
388             {   -0xc,   &IID_IRemoteComputer },
389             {   -0x4,   &IID_IFolderNotify },
390             {    0x0,   &IID_IShellFolder2 },
391             {    0x0,       &IID_IShellFolder },
392             {    0x0,           &IID_IUnknown },
393             {    0x4,   &IID_IPersistFolder2 },
394             {    0x4,       &IID_IPersistFolder },
395             {    0x4,           &IID_IPersist },
396             {    0x8,   &IID_IContextMenuCB },
397             {    0xc,   &IID_IShellIconOverlay },
398         }
399     },
400     {
401         ID_NAME(CLSID_QueryAssociations),
402         {
403             {    0x0,   &IID_IAssociationArrayOld },
404             {    0x0,       &IID_IUnknown },
405             {    0x4,   &IID_IAssociationArrayInitialize },
406             {    0x8,   &IID_IQueryAssociations },
407         }
408     },
409     {
410         ID_NAME(CLSID_QuickLinks),
411         {
412             {  -0xac,   &IID_IDeskBand },
413             {  -0xac,       &IID_IDockingWindow },
414             {  -0xac,           &IID_IOleWindow },
415             {  -0xa8,   &IID_IObjectWithSite },
416             {  -0xa0,   &IID_IInputObject },
417             {  -0x9c,   &IID_IPersistStream },
418             {  -0x9c,       &IID_IPersist },
419             {  -0x98,   &IID_IOleCommandTarget },
420             {  -0x94,   &IID_IServiceProvider },
421             {  -0x78,   &IID_IWinEventHandler },
422             {  -0x74,   &IID_IShellChangeNotify },
423             {  -0x70,   &IID_IDropTarget },
424             {   -0x4,   &IID_IContextMenu },
425             {    0x0,   &IID_IShellFolderBand },
426             {    0x0,       &IID_IUnknown },
427             {   0x94,   &IID_IFolderBandPriv },
428         }
429     },
430     {
431         ID_NAME(CLSID_RecycleBin),
432         {
433             {    0x0,   &IID_IPersistFolder2 },
434             {    0x0,       &IID_IPersistFolder },
435             //{    0x0,           &IID_IPersist },
436             {    0x0,           &IID_IUnknown },
437             {    0x4,   &IID_IShellFolder2 },
438             {    0x4,       &IID_IShellFolder },
439             {    0x8,   &IID_IContextMenu },
440             {    0xc,   &IID_IShellPropSheetExt },
441             {   0x10,   &IID_IShellExtInit },
442         }
443     },
444     {
445         ID_NAME(CLSID_SendToMenu),
446         {
447             {   -0x4,   &IID_IContextMenu3 },
448             {   -0x4,       &IID_IContextMenu2 },
449             {   -0x4,           &IID_IContextMenu },
450             {    0x0,   &IID_IShellExtInit },
451             {    0x0,       &IID_IUnknown },
452             {    0x4,   &IID_IOleWindow },
453         }
454     },
455     {
456         ID_NAME(CLSID_Shell),
457         {
458             {    0x0,   &IID_IShellDispatch4 },
459             {    0x0,       &IID_IShellDispatch3 },
460             {    0x0,           &IID_IShellDispatch2 },
461             {    0x0,               &IID_IShellDispatch },
462             {    0x0,                   &IID_IDispatch },
463             {    0x0,                       &IID_IUnknown },
464             {    0x4,   &IID_IObjectSafety },
465             {   0x20,   &IID_IObjectWithSite },
466         }
467     },
468     {
469         ID_NAME(CLSID_ShellDesktop),
470         {
471             {   -0x8,   &CLSID_ShellDesktop },
472             {   -0x8,       &IID_IObjectWithSite },
473             {    0x0,   &IID_IUnknown },
474             {    0x4,   &IID_IStorage },
475             {    0x8,   &IID_IPersistFolder2 },
476             {    0x8,       &IID_IPersistFolder },
477             {    0x8,           &IID_IPersist },
478             {    0xc,   &IID_IShellIcon },
479             {   0x14,   &IID_IContextMenuCB },
480             {   0x18,   &IID_ITranslateShellChangeNotify },
481             {   0x1c,   &IID_IItemNameLimits },
482             {   0x20,   &IID_IOleCommandTarget },
483             { FARAWY,   &IID_IShellIconOverlay },
484             { FARAWY,   &IID_IShellFolder2 },
485             { FARAWY,       &IID_IShellFolder },
486         }
487     },
488     {
489         ID_NAME(CLSID_ShellFSFolder),
490         {
491             {    0x0,   &IID_IUnknown },
492             {    0xc,   &IID_IShellFolder2 },
493             {    0xc,       &IID_IShellFolder },
494             {   0x10,   &IID_IShellIcon },
495             {   0x14,   &IID_IShellIconOverlay },
496             {   0x18,   &IID_IPersistFolder3 },
497             {   0x18,       &IID_IPersistFolder2 },
498             {   0x18,           &IID_IPersistFolder },
499             {   0x18,               &IID_IPersist },
500             {   0x18,               &IID_IPersistFreeThreadedObject },
501             {   0x1c,   &IID_IStorage },
502             {   0x24,   &IID_IPropertySetStorage },
503             {   0x28,   &IID_IItemNameLimits },
504             {   0x2c,   &IID_IContextMenuCB },
505             {   0x34,   &IID_IOleCommandTarget },
506         }
507     },
508     {
509         ID_NAME(CLSID_ShellFldSetExt),
510         {
511             {    0x0,   &IID_IShellPropSheetExt },
512             {    0x0,       &IID_IUnknown },
513             {    0x4,   &IID_IShellExtInit },
514             {    0x8,   &IID_IObjectWithSite },
515         }
516     },
517     {
518         ID_NAME(CLSID_ShellFolderView),
519         {
520             {    0x0,   &IID_IShellFolderViewDual2 },
521             {    0x0,       &IID_IShellFolderViewDual },
522             {    0x0,           &IID_IDispatch },
523             {    0x0,               &IID_IUnknown },
524             {    0x4,   &IID_IShellService },
525             {    0x8,   &IID_IServiceProvider },
526             {    0xc,   &IID_IObjectSafety },
527             {   0x14,   &IID_IObjectWithSite },
528             {   0x1c,   &IID_IConnectionPointContainer },
529         }
530     },
531     {
532         ID_NAME(CLSID_ShellFolderViewOC),
533         {
534             {    0x0,   &IID_IFolderViewOC },
535             {    0x0,       &IID_IDispatch },
536             {    0x0,           &IID_IUnknown },
537             {    0x4,   &IID_IProvideClassInfo2 },
538             {    0x4,       &IID_IProvideClassInfo },
539             {    0x8,   &IID_IObjectSafety },
540             {   0x10,   &IID_IConnectionPointContainer },
541             {   0x88,   &IID_IPersistStreamInit },
542             {   0x88,       &IID_IPersist },
543             {   0x8c,   &IID_IOleControl },
544             {   0x90,   &IID_IOleObject },
545             {   0x94,   &IID_IOleInPlaceActiveObject },
546             {   0x98,   &IID_IOleInPlaceObjectWindowless },
547             {   0x98,       &IID_IOleInPlaceObject },
548             {   0x98,           &IID_IOleWindow },
549         }
550     },
551     {
552         ID_NAME(CLSID_ShellItem),
553         {
554             {    0x0,   &IID_IShellItem },
555             {    0x0,       &IID_IUnknown },
556             {    0x4,   &IID_IPersistIDList },
557             {    0x8,   &IID_IParentAndItem },
558         }
559     },
560     {
561         ID_NAME(CLSID_ShellLink),
562         {
563             {    0x0,   &IID_IShellLinkA },
564             {    0x0,       &IID_IUnknown },
565             {    0x4,   &IID_IShellLinkW },
566             {    0x8,   &IID_IPersistStream },
567             {    0xc,   &IID_IPersistFile },
568             {   0x10,   &IID_IShellExtInit },
569             {   0x14,   &IID_IContextMenu3 },
570             {   0x14,       &IID_IContextMenu2 },
571             {   0x14,           &IID_IContextMenu },
572             {   0x18,   &IID_IDropTarget },
573             {   0x1c,   &IID_IQueryInfo },
574             {   0x20,   &IID_IShellLinkDataList },
575             {   0x24,   &IID_IExtractIconA },
576             {   0x28,   &IID_IExtractIconW },
577             {   0x2c,   &IID_IExtractImage2 },
578             {   0x2c,       &IID_IExtractImage },
579             {   0x30,   &IID_IPersistPropertyBag },
580             {   0x34,   &IID_IServiceProvider },
581             {   0x38,   &IID_IFilter },
582             {   0x3c,   &IID_IObjectWithSite },
583             {   0x44,   &IID_ICustomizeInfoTip },
584             { FARAWY,   &IID_ISLTracker },
585         }
586     },
587 #if 0 // Apparently we can only get this through Folder.Items().GetLink
588     {
589         ID_NAME(CLSID_ShellLinkObject),
590         {
591             {    0x0,       &IID_IUnknown },
592         }
593     },
594 #endif
595     {
596         ID_NAME(CLSID_StartMenu),
597         {
598             {  -0x48,   &IID_IOleCommandTarget },
599             {  -0x44,   &IID_IServiceProvider },
600             {  -0x40,   &IID_IDeskBar },
601             {  -0x40,       &IID_IOleWindow },
602             {  -0x3c,   &IID_IInputObjectSite },
603             {  -0x38,   &IID_IInputObject },
604             {    0x0,   &IID_IMenuPopup },
605             {    0x0,       &IID_IUnknown },
606             {    0x4,   &IID_IObjectWithSite },
607             {    0x8,   &IID_IBanneredBar },
608             {    0xc,   &IID_IInitializeObject },
609         }
610     },
611     {
612         ID_NAME(CLSID_StartMenuPin),
613         {
614             {    0x0,   &IID_IShellExtInit },
615             {    0x0,       &IID_IUnknown },
616             {    0x4,   &IID_IContextMenu },
617             {    0xc,   &IID_IObjectWithSite },
618         }
619     },
620     {
621         ID_NAME(CLSID_Thumbnail),
622         {
623             {    0x0,   &IID_IUnknown },
624             {    0x4,   &IID_IParentAndItem },
625             {    0x8,   &IID_IObjectWithSite },
626         },
627     },
628     {
629         ID_NAME(CLSID_TrackShellMenu),
630         {
631             {    0x0,   &IID_ITrackShellMenu },
632             {    0x0,       &IID_IShellMenu },
633             {    0x0,           &IID_IUnknown },
634             {    0x4,   &IID_IShellMenu2 },
635             {    0x8,   &IID_IObjectWithSite },
636             {    0xc,   &IID_IServiceProvider },
637         }
638     },
639     {
640         ID_NAME(CLSID_UserNotification),
641         {
642             {    0x0,   &IID_IUserNotification },
643             {    0x0,       &IID_IUnknown },
644 //          {    0x4,   &IID_IUserNotification2 },  // On Vista+
645         }
646     },
647 };
648 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces);
649 
650 START_TEST(shell32)
651 {
652     TestClasses(L"shell32", ExpectedInterfaces, ExpectedInterfaceCount);
653 }
654