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_FolderItem),
123         {
124             //{    0x0,   &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
125             {    0x0,       &IID_FolderItem2 },
126             {    0x0,           &IID_FolderItem },
127             {    0x0,               &IID_IDispatch },
128             {    0x0,                   &IID_IUnknown },
129             {    0x4,   &IID_IPersistFolder2 },
130             {    0x4,       &IID_IPersistFolder },
131             {    0x4,           &IID_IPersist },
132             {    0x8,   &IID_IObjectSafety },
133             {   0x10,   &IID_IParentAndItem },
134         }
135     },
136     {
137         ID_NAME(CLSID_FolderItemsFDF),
138         {
139             {    0x0,   &IID_FolderItems3 },
140             //{    0x0,       &IID_FolderItems2 }, ????
141             {    0x0,           &IID_FolderItems },
142             {    0x0,               &IID_IDispatch },
143             {    0x0,                   &IID_IUnknown },
144             {    0x4,   &IID_IPersistFolder },
145             {    0x8,   &IID_IObjectSafety },
146         }
147     },
148     {
149         ID_NAME(CLSID_FolderShortcut),
150         {
151             {    0x0,   &IID_IShellFolder2 },
152             {    0x0,       &IID_IShellFolder },
153             {    0x0,           &IID_IUnknown },
154             {    0x4,   &IID_IPersistFolder3 },
155             {    0x4,       &IID_IPersistFolder2 },
156             {    0x4,           &IID_IPersistFolder },
157             {    0x4,               &IID_IPersist },
158             {    0x8,   &IID_IShellLinkA },
159             {    0xc,   &IID_IShellLinkW },
160             {   0x10,   &IID_IPersistFile },
161             {   0x14,   &IID_IExtractIconW },
162             {   0x18,   &IID_IQueryInfo },
163             {   0x20,   &IID_IPersistStream },
164             {   0x20,   &IID_IPersistStreamInit },
165             {   0x24,   &IID_IPersistPropertyBag },
166             {   0x28,   &IID_IBrowserFrameOptions },
167         }
168     },
169     {
170         ID_NAME(CLSID_FolderViewHost),
171         {
172             {    0x0,   &IID_IFolderViewHost },
173             {    0x0,       &IID_IUnknown },
174             {    0x4,   &IID_IServiceProvider },
175             {    0x8,   &IID_IOleWindow },
176             {    0xc,   &IID_IFolderView },
177             {   0x10,   &IID_IObjectWithSite },
178         }
179     },
180     {
181         ID_NAME(CLSID_ISFBand),
182         {
183             {  -0xac,   &IID_IDeskBand },
184             {  -0xac,       &IID_IDockingWindow },
185             {  -0xac,           &IID_IOleWindow },
186             {  -0xa8,   &IID_IObjectWithSite },
187             {  -0xa0,   &IID_IInputObject },
188             {  -0x9c,   &IID_IPersistStream },
189             {  -0x9c,       &IID_IPersist },
190             {  -0x98,   &IID_IOleCommandTarget },
191             {  -0x94,   &IID_IServiceProvider },
192             {  -0x78,   &IID_IWinEventHandler },
193             {  -0x74,   &IID_IShellChangeNotify },
194             {  -0x70,   &IID_IDropTarget },
195             {   -0x4,   &IID_IContextMenu },
196             {    0x0,   &IID_IShellFolderBand },
197             {    0x0,       &IID_IUnknown },
198             {   0x94,   &IID_IFolderBandPriv },
199         }
200     },
201     {
202         ID_NAME(CLSID_MenuBand),
203         {
204             {  -0x30,   &IID_IDeskBand },
205             {  -0x30,       &IID_IDockingWindow },
206             {  -0x30,           &IID_IOleWindow },
207             {  -0x2c,   &IID_IObjectWithSite },
208             {  -0x24,   &IID_IInputObject },
209             {  -0x20,   &IID_IPersistStream },
210             {  -0x20,       &IID_IPersist },
211             {  -0x1c,   &IID_IOleCommandTarget },
212             {  -0x18,   &IID_IServiceProvider },
213             {    0x0,   &IID_IMenuPopup },
214             {    0x0,       &IID_IDeskBar },
215             {    0x0,           &IID_IUnknown },
216             {    0x4,   &IID_IMenuBand },
217             {    0x8,   &IID_IShellMenu2 },
218             {    0x8,       &IID_IShellMenu },
219             {    0xc,   &IID_IWinEventHandler },
220             {   0x10,   &IID_IShellMenuAcc },
221         }
222     },
223     {
224         ID_NAME(CLSID_MenuBandSite),
225         {
226             {    0x0,   &IID_IBandSite },
227             {    0x0,       &IID_IUnknown },
228             {    0x4,   &IID_IDeskBarClient },
229             {    0x4,       &IID_IOleWindow },
230             {    0x8,   &IID_IOleCommandTarget },
231             {    0xc,   &IID_IInputObject },
232             {   0x10,   &IID_IInputObjectSite },
233             {   0x14,   &IID_IWinEventHandler },
234             {   0x18,   &IID_IServiceProvider },
235         }
236     },
237     {
238         ID_NAME(CLSID_MenuDeskBar),
239         {
240             {  -0x48,   &IID_IOleCommandTarget },
241             {  -0x44,   &IID_IServiceProvider },
242             {  -0x40,   &IID_IDeskBar },
243             {  -0x40,       &IID_IOleWindow },
244             {  -0x3c,   &IID_IInputObjectSite },
245             {  -0x38,   &IID_IInputObject },
246             {    0x0,   &IID_IMenuPopup },
247             {    0x0,           &IID_IUnknown },
248             {    0x4,   &IID_IObjectWithSite },
249             {    0x8,   &IID_IBanneredBar },
250             {    0xc,   &IID_IInitializeObject },
251         }
252     },
253 #if 0 // This is registered to shell32, but can't be instanciated
254     {
255         ID_NAME(CLSID_MenuToolbarBase),
256         {
257             {    0x0,   &IID_IUnknown },
258         }
259     },
260 #endif
261     {
262         ID_NAME(CLSID_MergedFolder),
263         {
264             {   -0x8,   &IID_IShellFolder2 },
265             {   -0x4,   &IID_IStorage },
266             {    0x0,   &IID_IAugmentedShellFolder2 },
267             {    0x0,       &IID_IAugmentedShellFolder },
268             {    0x0,           &IID_IShellFolder },
269             {    0x0,               &IID_IUnknown },
270             {    0x4,   &IID_IShellService },
271             {    0x8,   &IID_ITranslateShellChangeNotify },
272             {    0xc,   &IID_IPersistFolder2 },
273             {    0xc,       &IID_IPersistFolder },
274             {    0xc,           &IID_IPersist },
275             {   0x10,   &IID_IPersistPropertyBag },
276             {   0x14,   &IID_IShellIconOverlay },
277             {   0x18,   &IID_ICompositeFolder },
278             {   0x1c,   &IID_IItemNameLimits },
279         }
280     },
281     {
282         ID_NAME(CLSID_MoveToMenu),
283         {
284             {    0x0,   &IID_IContextMenu3 },
285             {    0x0,       &IID_IContextMenu2 },
286             {    0x0,           &IID_IContextMenu },
287             {    0x0,               &IID_IUnknown },
288             {    0x4,   &IID_IShellExtInit },
289             {    0x8,   &IID_IObjectWithSite },
290             {   0x10,   &IID_IFolderFilter },
291         }
292     },
293     {
294         ID_NAME(CLSID_MyComputer),
295         {
296             {    0x0,   &IID_IUnknown },
297             {   0x10,   &IID_IPersistFolder2 },
298             {   0x10,       &IID_IPersistFolder },
299             {   0x10,           &IID_IPersist },
300             {   0x10,           &IID_IPersistFreeThreadedObject },
301             { FARAWY,   &IID_IShellIconOverlay },
302             { FARAWY,   &IID_IShellFolder2 },
303             { FARAWY,       &IID_IShellFolder },
304         }
305     },
306     {
307         ID_NAME(CLSID_MyDocuments),
308         {
309             {   -0x4,   &IID_IPersistFolder },
310             {   -0x4,       &IID_IPersist },
311             {    0x0,   &IID_IShellFolder2 },
312             {    0x0,       &IID_IShellFolder },
313             {    0x0,           &IID_IUnknown },
314             {    0x4,   &IID_IShellIconOverlay },
315             { FARAWY,   &IID_IShellIcon },
316             { FARAWY,   &IID_IPersistFolder3 },
317             { FARAWY,       &IID_IPersistFolder2 },
318             { FARAWY,   &IID_IStorage },
319             { FARAWY,   &IID_IContextMenuCB },
320             { FARAWY,   &IID_IOleCommandTarget },
321             { FARAWY,   &IID_IItemNameLimits },
322             { FARAWY,   &IID_IPropertySetStorage },
323         }
324     },
325     {
326         ID_NAME(CLSID_NetworkPlaces),
327         {
328             {    0x0,   &IID_IUnknown },
329             {   0x10,   &IID_IPersistFolder3 },
330             {   0x10,       &IID_IPersistFolder2 },
331             {   0x10,           &IID_IPersistFolder },
332             {   0x10,               &IID_IPersist },
333             {   0x10,               &IID_IPersistFreeThreadedObject },
334             { FARAWY,   &IID_IShellIconOverlay },
335             { FARAWY,   &IID_IShellFolder2 },
336             { FARAWY,       &IID_IShellFolder },
337         }
338     },
339     {
340         ID_NAME(CLSID_NewMenu),
341         {
342             {   -0xc,   &IID_IObjectWithSite },
343             {   -0x4,   &IID_IContextMenu3 },
344             {   -0x4,       &IID_IContextMenu2 },
345             {   -0x4,           &IID_IContextMenu },
346             {    0x0,   &IID_IShellExtInit },
347             {    0x0,       &IID_IUnknown },
348         }
349     },
350     {
351         ID_NAME(CLSID_PersonalStartMenu),
352         {
353             {  -0x30,   &IID_IDeskBand },
354             {  -0x30,       &IID_IDockingWindow },
355             {  -0x30,           &IID_IOleWindow },
356             {  -0x2c,   &IID_IObjectWithSite },
357             {  -0x24,   &IID_IInputObject },
358             {  -0x20,   &IID_IPersistStream },
359             {  -0x20,       &IID_IPersist },
360             {  -0x1c,   &IID_IOleCommandTarget },
361             {  -0x18,   &IID_IServiceProvider },
362             {    0x0,   &IID_IMenuPopup },
363             {    0x0,       &IID_IDeskBar },
364             {    0x0,           &IID_IUnknown },
365             {    0x4,   &IID_IMenuBand },
366             {    0x8,   &IID_IShellMenu2 },
367             {    0x8,       &IID_IShellMenu },
368             {    0xc,   &IID_IWinEventHandler },
369             {   0x10,   &IID_IShellMenuAcc },
370         }
371     },
372     {
373         ID_NAME(CLSID_Printers),
374         {
375             {   -0xc,   &IID_IRemoteComputer },
376             {   -0x4,   &IID_IFolderNotify },
377             {    0x0,   &IID_IShellFolder2 },
378             {    0x0,       &IID_IShellFolder },
379             {    0x0,           &IID_IUnknown },
380             {    0x4,   &IID_IPersistFolder2 },
381             {    0x4,       &IID_IPersistFolder },
382             {    0x4,           &IID_IPersist },
383             {    0x8,   &IID_IContextMenuCB },
384             {    0xc,   &IID_IShellIconOverlay },
385         }
386     },
387     {
388         ID_NAME(CLSID_QueryAssociations),
389         {
390             {    0x0,   &IID_IAssociationArrayOld },
391             {    0x0,       &IID_IUnknown },
392             {    0x4,   &IID_IAssociationArrayInitialize },
393             {    0x8,   &IID_IQueryAssociations },
394         }
395     },
396     {
397         ID_NAME(CLSID_QuickLinks),
398         {
399             {  -0xac,   &IID_IDeskBand },
400             {  -0xac,       &IID_IDockingWindow },
401             {  -0xac,           &IID_IOleWindow },
402             {  -0xa8,   &IID_IObjectWithSite },
403             {  -0xa0,   &IID_IInputObject },
404             {  -0x9c,   &IID_IPersistStream },
405             {  -0x9c,       &IID_IPersist },
406             {  -0x98,   &IID_IOleCommandTarget },
407             {  -0x94,   &IID_IServiceProvider },
408             {  -0x78,   &IID_IWinEventHandler },
409             {  -0x74,   &IID_IShellChangeNotify },
410             {  -0x70,   &IID_IDropTarget },
411             {   -0x4,   &IID_IContextMenu },
412             {    0x0,   &IID_IShellFolderBand },
413             {    0x0,       &IID_IUnknown },
414             {   0x94,   &IID_IFolderBandPriv },
415         }
416     },
417     {
418         ID_NAME(CLSID_RecycleBin),
419         {
420             {    0x0,   &IID_IPersistFolder2 },
421             {    0x0,       &IID_IPersistFolder },
422             //{    0x0,           &IID_IPersist },
423             {    0x0,           &IID_IUnknown },
424             {    0x4,   &IID_IShellFolder2 },
425             {    0x4,       &IID_IShellFolder },
426             {    0x8,   &IID_IContextMenu },
427             {    0xc,   &IID_IShellPropSheetExt },
428             {   0x10,   &IID_IShellExtInit },
429         }
430     },
431     {
432         ID_NAME(CLSID_SendToMenu),
433         {
434             {   -0x4,   &IID_IContextMenu3 },
435             {   -0x4,       &IID_IContextMenu2 },
436             {   -0x4,           &IID_IContextMenu },
437             {    0x0,   &IID_IShellExtInit },
438             {    0x0,       &IID_IUnknown },
439             {    0x4,   &IID_IOleWindow },
440         }
441     },
442     {
443         ID_NAME(CLSID_Shell),
444         {
445             {    0x0,   &IID_IShellDispatch4 },
446             {    0x0,       &IID_IShellDispatch3 },
447             {    0x0,           &IID_IShellDispatch2 },
448             {    0x0,               &IID_IShellDispatch },
449             {    0x0,                   &IID_IDispatch },
450             {    0x0,                       &IID_IUnknown },
451             {    0x4,   &IID_IObjectSafety },
452             {   0x20,   &IID_IObjectWithSite },
453         }
454     },
455     {
456         ID_NAME(CLSID_ShellDesktop),
457         {
458             {   -0x8,   &CLSID_ShellDesktop },
459             {   -0x8,       &IID_IObjectWithSite },
460             {    0x0,   &IID_IUnknown },
461             {    0x4,   &IID_IStorage },
462             {    0x8,   &IID_IPersistFolder2 },
463             {    0x8,       &IID_IPersistFolder },
464             {    0x8,           &IID_IPersist },
465             {    0xc,   &IID_IShellIcon },
466             {   0x14,   &IID_IContextMenuCB },
467             {   0x18,   &IID_ITranslateShellChangeNotify },
468             {   0x1c,   &IID_IItemNameLimits },
469             {   0x20,   &IID_IOleCommandTarget },
470             { FARAWY,   &IID_IShellIconOverlay },
471             { FARAWY,   &IID_IShellFolder2 },
472             { FARAWY,       &IID_IShellFolder },
473         }
474     },
475     {
476         ID_NAME(CLSID_ShellFSFolder),
477         {
478             {    0x0,   &IID_IUnknown },
479             {    0xc,   &IID_IShellFolder2 },
480             {    0xc,       &IID_IShellFolder },
481             {   0x10,   &IID_IShellIcon },
482             {   0x14,   &IID_IShellIconOverlay },
483             {   0x18,   &IID_IPersistFolder3 },
484             {   0x18,       &IID_IPersistFolder2 },
485             {   0x18,           &IID_IPersistFolder },
486             {   0x18,               &IID_IPersist },
487             {   0x18,               &IID_IPersistFreeThreadedObject },
488             {   0x1c,   &IID_IStorage },
489             {   0x24,   &IID_IPropertySetStorage },
490             {   0x28,   &IID_IItemNameLimits },
491             {   0x2c,   &IID_IContextMenuCB },
492             {   0x34,   &IID_IOleCommandTarget },
493         }
494     },
495     {
496         ID_NAME(CLSID_ShellFldSetExt),
497         {
498             {    0x0,   &IID_IShellPropSheetExt },
499             {    0x0,       &IID_IUnknown },
500             {    0x4,   &IID_IShellExtInit },
501             {    0x8,   &IID_IObjectWithSite },
502         }
503     },
504     {
505         ID_NAME(CLSID_ShellFolderView),
506         {
507             {    0x0,   &IID_IShellFolderViewDual2 },
508             {    0x0,       &IID_IShellFolderViewDual },
509             {    0x0,           &IID_IDispatch },
510             {    0x0,               &IID_IUnknown },
511             {    0x4,   &IID_IShellService },
512             {    0x8,   &IID_IServiceProvider },
513             {    0xc,   &IID_IObjectSafety },
514             {   0x14,   &IID_IObjectWithSite },
515             {   0x1c,   &IID_IConnectionPointContainer },
516         }
517     },
518     {
519         ID_NAME(CLSID_ShellFolderViewOC),
520         {
521             {    0x0,   &IID_IFolderViewOC },
522             {    0x0,       &IID_IDispatch },
523             {    0x0,           &IID_IUnknown },
524             {    0x4,   &IID_IProvideClassInfo2 },
525             {    0x4,       &IID_IProvideClassInfo },
526             {    0x8,   &IID_IObjectSafety },
527             {   0x10,   &IID_IConnectionPointContainer },
528             {   0x88,   &IID_IPersistStreamInit },
529             {   0x88,       &IID_IPersist },
530             {   0x8c,   &IID_IOleControl },
531             {   0x90,   &IID_IOleObject },
532             {   0x94,   &IID_IOleInPlaceActiveObject },
533             {   0x98,   &IID_IOleInPlaceObjectWindowless },
534             {   0x98,       &IID_IOleInPlaceObject },
535             {   0x98,           &IID_IOleWindow },
536         }
537     },
538     {
539         ID_NAME(CLSID_ShellItem),
540         {
541             {    0x0,   &IID_IShellItem },
542             {    0x0,       &IID_IUnknown },
543             {    0x4,   &IID_IPersistIDList },
544             {    0x8,   &IID_IParentAndItem },
545         }
546     },
547     {
548         ID_NAME(CLSID_ShellLink),
549         {
550             {    0x0,   &IID_IShellLinkA },
551             {    0x0,       &IID_IUnknown },
552             {    0x4,   &IID_IShellLinkW },
553             {    0x8,   &IID_IPersistStream },
554             {    0xc,   &IID_IPersistFile },
555             {   0x10,   &IID_IShellExtInit },
556             {   0x14,   &IID_IContextMenu3 },
557             {   0x14,       &IID_IContextMenu2 },
558             {   0x14,           &IID_IContextMenu },
559             {   0x18,   &IID_IDropTarget },
560             {   0x1c,   &IID_IQueryInfo },
561             {   0x20,   &IID_IShellLinkDataList },
562             {   0x24,   &IID_IExtractIconA },
563             {   0x28,   &IID_IExtractIconW },
564             {   0x2c,   &IID_IExtractImage2 },
565             {   0x2c,       &IID_IExtractImage },
566             {   0x30,   &IID_IPersistPropertyBag },
567             {   0x34,   &IID_IServiceProvider },
568             {   0x38,   &IID_IFilter },
569             {   0x3c,   &IID_IObjectWithSite },
570             {   0x44,   &IID_ICustomizeInfoTip },
571             { FARAWY,   &IID_ISLTracker },
572         }
573     },
574 #if 0 // Apparently we can only get this through Folder.Items().GetLink
575     {
576         ID_NAME(CLSID_ShellLinkObject),
577         {
578             {    0x0,       &IID_IUnknown },
579         }
580     },
581 #endif
582     {
583         ID_NAME(CLSID_StartMenu),
584         {
585             {  -0x48,   &IID_IOleCommandTarget },
586             {  -0x44,   &IID_IServiceProvider },
587             {  -0x40,   &IID_IDeskBar },
588             {  -0x40,       &IID_IOleWindow },
589             {  -0x3c,   &IID_IInputObjectSite },
590             {  -0x38,   &IID_IInputObject },
591             {    0x0,   &IID_IMenuPopup },
592             {    0x0,       &IID_IUnknown },
593             {    0x4,   &IID_IObjectWithSite },
594             {    0x8,   &IID_IBanneredBar },
595             {    0xc,   &IID_IInitializeObject },
596         }
597     },
598     {
599         ID_NAME(CLSID_StartMenuPin),
600         {
601             {    0x0,   &IID_IShellExtInit },
602             {    0x0,       &IID_IUnknown },
603             {    0x4,   &IID_IContextMenu },
604             {    0xc,   &IID_IObjectWithSite },
605         }
606     },
607     {
608         ID_NAME(CLSID_Thumbnail),
609         {
610             {    0x0,   &IID_IUnknown },
611             {    0x4,   &IID_IParentAndItem },
612             {    0x8,   &IID_IObjectWithSite },
613         },
614     },
615     {
616         ID_NAME(CLSID_TrackShellMenu),
617         {
618             {    0x0,   &IID_ITrackShellMenu },
619             {    0x0,       &IID_IShellMenu },
620             {    0x0,           &IID_IUnknown },
621             {    0x4,   &IID_IShellMenu2 },
622             {    0x8,   &IID_IObjectWithSite },
623             {    0xc,   &IID_IServiceProvider },
624         }
625     },
626     {
627         ID_NAME(CLSID_UserNotification),
628         {
629             {    0x0,   &IID_IUserNotification },
630             {    0x0,       &IID_IUnknown },
631 //          {    0x4,   &IID_IUserNotification2 },  // On Vista+
632         }
633     },
634 };
635 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces);
636 
637 START_TEST(shell32)
638 {
639     TestClasses(L"shell32", ExpectedInterfaces, ExpectedInterfaceCount);
640 }
641