[CRT] Massively improve performance of rand_s
[reactos.git] / modules / rostests / apitests / com / shell32.c
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 }