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