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>
8 #include "com_apitest.h"
13 static const CLASS_AND_INTERFACES ExpectedInterfaces
[] =
16 ID_NAME(CLSID_CDBurn
),
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_IDriveFolderExt
},
31 { 0x34, &IID_INamespaceWalkCB
},
32 { 0x3c, &IID_IServiceProvider
},
33 { 0x40, &IID_ITransferAdviseSinkPriv
},
34 { 0x44, &IID_IQueryCancelAutoPlay
},
38 ID_NAME(CLSID_ControlPanel
),
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
},
50 ID_NAME(CLSID_CopyToMenu
),
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
},
62 ID_NAME(CLSID_DeskMovr
),
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
},
80 ID_NAME(CLSID_DragDropHelper
),
82 { 0x0, &IID_IDragSourceHelper
},
83 { 0x0, &IID_IUnknown
},
84 { 0x4, &IID_IDropTargetHelper
},
88 ID_NAME(CLSID_FadeTask
),
90 { 0x0, &IID_IUnknown
},
94 ID_NAME(CLSID_FileSearchBand
),
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
},
112 ID_NAME(CLSID_FolderItem
),
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
},
127 ID_NAME(CLSID_FolderItemsFDF
),
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
},
139 ID_NAME(CLSID_FolderShortcut
),
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
},
160 ID_NAME(CLSID_FolderViewHost
),
162 { 0x0, &IID_IFolderViewHost
},
163 { 0x0, &IID_IUnknown
},
164 { 0x4, &IID_IServiceProvider
},
165 { 0x8, &IID_IOleWindow
},
166 { 0xc, &IID_IFolderView
},
167 { 0x10, &IID_IObjectWithSite
},
171 ID_NAME(CLSID_ISFBand
),
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
},
192 ID_NAME(CLSID_MenuBand
),
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
},
214 ID_NAME(CLSID_MenuBandSite
),
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
},
228 ID_NAME(CLSID_MenuDeskBar
),
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
},
243 #if 0 // This is registered to shell32, but can't be instanciated
245 ID_NAME(CLSID_MenuToolbarBase
),
247 { 0x0, &IID_IUnknown
},
252 ID_NAME(CLSID_MergedFolder
),
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
},
272 ID_NAME(CLSID_MoveToMenu
),
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
},
284 ID_NAME(CLSID_MyComputer
),
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
},
297 ID_NAME(CLSID_MyDocuments
),
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
},
316 ID_NAME(CLSID_NetworkPlaces
),
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
},
330 ID_NAME(CLSID_NewMenu
),
332 { -0xc, &IID_IObjectWithSite
},
333 { -0x4, &IID_IContextMenu3
},
334 { -0x4, &IID_IContextMenu2
},
335 { -0x4, &IID_IContextMenu
},
336 { 0x0, &IID_IShellExtInit
},
337 { 0x0, &IID_IUnknown
},
341 ID_NAME(CLSID_PersonalStartMenu
),
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
},
363 ID_NAME(CLSID_Printers
),
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
},
378 ID_NAME(CLSID_QueryAssociations
),
380 { 0x0, &IID_IAssociationArrayOld
},
381 { 0x0, &IID_IUnknown
},
382 { 0x4, &IID_IAssociationArrayInitialize
},
383 { 0x8, &IID_IQueryAssociations
},
387 ID_NAME(CLSID_QuickLinks
),
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
},
408 ID_NAME(CLSID_RecycleBin
),
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
},
422 ID_NAME(CLSID_SendToMenu
),
424 { -0x4, &IID_IContextMenu3
},
425 { -0x4, &IID_IContextMenu2
},
426 { -0x4, &IID_IContextMenu
},
427 { 0x0, &IID_IShellExtInit
},
428 { 0x0, &IID_IUnknown
},
429 { 0x4, &IID_IOleWindow
},
433 ID_NAME(CLSID_Shell
),
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
},
446 ID_NAME(CLSID_ShellDesktop
),
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
},
466 ID_NAME(CLSID_ShellFSFolder
),
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
},
486 ID_NAME(CLSID_ShellFldSetExt
),
488 { 0x0, &IID_IShellPropSheetExt
},
489 { 0x0, &IID_IUnknown
},
490 { 0x4, &IID_IShellExtInit
},
491 { 0x8, &IID_IObjectWithSite
},
495 ID_NAME(CLSID_ShellFolderView
),
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
},
509 ID_NAME(CLSID_ShellFolderViewOC
),
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
},
529 ID_NAME(CLSID_ShellItem
),
531 { 0x0, &IID_IShellItem
},
532 { 0x0, &IID_IUnknown
},
533 { 0x4, &IID_IPersistIDList
},
534 { 0x8, &IID_IParentAndItem
},
538 ID_NAME(CLSID_ShellLink
),
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
},
564 #if 0 // Apparently we can only get this through Folder.Items().GetLink
566 ID_NAME(CLSID_ShellLinkObject
),
568 { 0x0, &IID_IUnknown
},
573 ID_NAME(CLSID_StartMenu
),
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
},
589 ID_NAME(CLSID_StartMenuPin
),
591 { 0x0, &IID_IShellExtInit
},
592 { 0x0, &IID_IUnknown
},
593 { 0x4, &IID_IContextMenu
},
594 { 0xc, &IID_IObjectWithSite
},
598 ID_NAME(CLSID_Thumbnail
),
600 { 0x0, &IID_IUnknown
},
601 { 0x4, &IID_IParentAndItem
},
602 { 0x8, &IID_IObjectWithSite
},
606 ID_NAME(CLSID_TrackShellMenu
),
608 { 0x0, &IID_ITrackShellMenu
},
609 { 0x0, &IID_IShellMenu
},
610 { 0x0, &IID_IUnknown
},
611 { 0x4, &IID_IShellMenu2
},
612 { 0x8, &IID_IObjectWithSite
},
613 { 0xc, &IID_IServiceProvider
},
617 static const INT ExpectedInterfaceCount
= RTL_NUMBER_OF(ExpectedInterfaces
);
621 TestClasses(L
"shell32", ExpectedInterfaces
, ExpectedInterfaceCount
);