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 { 0x18, &IID_IDropTarget
},
24 { 0x1c, &IID_IPersistFile
},
25 { 0x20, &IID_IOleCommandTarget
},
26 { 0x24, &IID_ICDBurn
},
27 { 0x2c, &IID_IPersistPropertyBag
},
28 { 0x3c, &IID_IServiceProvider
},
32 ID_NAME(CLSID_ControlPanel
),
34 { 0x0, &IID_IUnknown
},
35 { 0x10, &IID_IPersistFolder2
},
36 { 0x10, &IID_IPersistFolder
},
37 { 0x10, &IID_IPersist
},
38 { FARAWY
, &IID_IShellIconOverlay
},
39 { FARAWY
, &IID_IShellFolder2
},
40 { FARAWY
, &IID_IShellFolder
},
44 ID_NAME(CLSID_CopyToMenu
),
46 { 0x0, &IID_IContextMenu3
},
47 { 0x0, &IID_IContextMenu2
},
48 { 0x0, &IID_IContextMenu
},
49 { 0x0, &IID_IUnknown
},
50 { 0x4, &IID_IShellExtInit
},
51 { 0x8, &IID_IObjectWithSite
},
52 { 0x10, &IID_IFolderFilter
},
56 ID_NAME(CLSID_DeskMovr
),
58 { 0x0, &IID_IUnknown
},
59 { 0x70, &IID_IDeskMovr
},
60 { 0x74, &IID_IOleObject
},
61 { 0x78, &IID_IPersistPropertyBag
},
62 { 0x80, &IID_IOleInPlaceActiveObject
},
63 { 0x84, &IID_IViewObjectEx
},
64 { 0x84, &IID_IViewObject2
},
65 { 0x84, &IID_IViewObject
},
66 { 0x88, &IID_IOleWindow
},
67 { 0x88, &IID_IOleInPlaceObject
},
68 { 0x88, &IID_IOleInPlaceObjectWindowless
},
72 ID_NAME(CLSID_DragDropHelper
),
74 { 0x0, &IID_IDragSourceHelper
},
75 { 0x0, &IID_IUnknown
},
76 { 0x4, &IID_IDropTargetHelper
},
80 ID_NAME(CLSID_FadeTask
),
82 { 0x0, &IID_IUnknown
},
86 ID_NAME(CLSID_FileSearchBand
),
88 { 0x0, &IID_IFileSearchBand
},
89 { 0x0, &IID_IDispatch
},
90 { 0x0, &IID_IUnknown
},
91 { 0x4, &IID_IObjectWithSite
},
92 { 0x8, &IID_IPersistStream
},
93 { 0x8, &IID_IPersist
},
94 { 0xc, &IID_IDeskBand
},
95 { 0xc, &IID_IDockingWindow
},
96 { 0xc, &IID_IOleWindow
},
97 { 0x10, &IID_IInputObject
},
98 { 0x18, &IID_IOleInPlaceSite
},
102 ID_NAME(CLSID_FolderItem
),
104 //{ 0x0, &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
105 { 0x0, &IID_FolderItem2
},
106 { 0x0, &IID_FolderItem
},
107 { 0x0, &IID_IDispatch
},
108 { 0x0, &IID_IUnknown
},
109 { 0x4, &IID_IPersistFolder2
},
110 { 0x4, &IID_IPersistFolder
},
111 { 0x4, &IID_IPersist
},
112 { 0x8, &IID_IObjectSafety
},
116 ID_NAME(CLSID_FolderItemsFDF
),
118 { 0x0, &IID_FolderItems3
},
119 //{ 0x0, &IID_FolderItems2 }, ????
120 { 0x0, &IID_FolderItems
},
121 { 0x0, &IID_IDispatch
},
122 { 0x0, &IID_IUnknown
},
123 { 0x4, &IID_IPersistFolder
},
124 { 0x8, &IID_IObjectSafety
},
128 ID_NAME(CLSID_FolderShortcut
),
130 { 0x0, &IID_IShellFolder2
},
131 { 0x0, &IID_IShellFolder
},
132 { 0x0, &IID_IUnknown
},
133 { 0x4, &IID_IPersistFolder3
},
134 { 0x4, &IID_IPersistFolder2
},
135 { 0x4, &IID_IPersistFolder
},
136 { 0x4, &IID_IPersist
},
137 { 0x8, &IID_IShellLinkA
},
138 { 0xc, &IID_IShellLinkW
},
139 { 0x10, &IID_IPersistFile
},
140 { 0x14, &IID_IExtractIconW
},
141 { 0x18, &IID_IQueryInfo
},
142 { 0x20, &IID_IPersistStream
},
143 { 0x20, &IID_IPersistStreamInit
},
144 { 0x24, &IID_IPersistPropertyBag
},
145 { 0x28, &IID_IBrowserFrameOptions
},
149 ID_NAME(CLSID_FolderViewHost
),
151 { 0x0, &IID_IFolderViewHost
},
152 { 0x0, &IID_IUnknown
},
153 { 0x4, &IID_IServiceProvider
},
154 { 0x8, &IID_IOleWindow
},
155 { 0xc, &IID_IFolderView
},
156 { 0x10, &IID_IObjectWithSite
},
160 ID_NAME(CLSID_ISFBand
),
162 { -0xac, &IID_IDeskBand
},
163 { -0xac, &IID_IDockingWindow
},
164 { -0xac, &IID_IOleWindow
},
165 { -0xa8, &IID_IObjectWithSite
},
166 { -0xa0, &IID_IInputObject
},
167 { -0x9c, &IID_IPersistStream
},
168 { -0x9c, &IID_IPersist
},
169 { -0x98, &IID_IOleCommandTarget
},
170 { -0x94, &IID_IServiceProvider
},
171 { -0x78, &IID_IWinEventHandler
},
172 { -0x74, &IID_IShellChangeNotify
},
173 { -0x70, &IID_IDropTarget
},
174 { -0x4, &IID_IContextMenu
},
175 { 0x0, &IID_IShellFolderBand
},
176 { 0x0, &IID_IUnknown
},
177 { 0x94, &IID_IFolderBandPriv
},
181 ID_NAME(CLSID_MenuBand
),
183 { -0x30, &IID_IDeskBand
},
184 { -0x30, &IID_IDockingWindow
},
185 { -0x30, &IID_IOleWindow
},
186 { -0x2c, &IID_IObjectWithSite
},
187 { -0x24, &IID_IInputObject
},
188 { -0x20, &IID_IPersistStream
},
189 { -0x20, &IID_IPersist
},
190 { -0x1c, &IID_IOleCommandTarget
},
191 { -0x18, &IID_IServiceProvider
},
192 { 0x0, &IID_IMenuPopup
},
193 { 0x0, &IID_IDeskBar
},
194 { 0x0, &IID_IUnknown
},
195 { 0x4, &IID_IMenuBand
},
196 { 0x8, &IID_IShellMenu2
},
197 { 0x8, &IID_IShellMenu
},
198 { 0xc, &IID_IWinEventHandler
},
199 { 0x10, &IID_IShellMenuAcc
},
203 ID_NAME(CLSID_MenuBandSite
),
205 { 0x0, &IID_IBandSite
},
206 { 0x0, &IID_IUnknown
},
207 { 0x4, &IID_IDeskBarClient
},
208 { 0x4, &IID_IOleWindow
},
209 { 0x8, &IID_IOleCommandTarget
},
210 { 0xc, &IID_IInputObject
},
211 { 0x10, &IID_IInputObjectSite
},
212 { 0x14, &IID_IWinEventHandler
},
213 { 0x18, &IID_IServiceProvider
},
217 ID_NAME(CLSID_MenuDeskBar
),
219 { -0x48, &IID_IOleCommandTarget
},
220 { -0x44, &IID_IServiceProvider
},
221 { -0x40, &IID_IDeskBar
},
222 { -0x40, &IID_IOleWindow
},
223 { -0x3c, &IID_IInputObjectSite
},
224 { -0x38, &IID_IInputObject
},
225 { 0x0, &IID_IMenuPopup
},
226 { 0x0, &IID_IUnknown
},
227 { 0x4, &IID_IObjectWithSite
},
228 { 0x8, &IID_IBanneredBar
},
229 { 0xc, &IID_IInitializeObject
},
232 #if 0 // This is registered to shell32, but can't be instanciated
234 ID_NAME(CLSID_MenuToolbarBase
),
236 { 0x0, &IID_IUnknown
},
241 ID_NAME(CLSID_MergedFolder
),
243 { -0x8, &IID_IShellFolder2
},
244 { -0x4, &IID_IStorage
},
245 { 0x0, &IID_IAugmentedShellFolder2
},
246 { 0x0, &IID_IAugmentedShellFolder
},
247 { 0x0, &IID_IShellFolder
},
248 { 0x0, &IID_IUnknown
},
249 { 0x4, &IID_IShellService
},
250 { 0x8, &IID_ITranslateShellChangeNotify
},
251 { 0xc, &IID_IPersistFolder2
},
252 { 0xc, &IID_IPersistFolder
},
253 { 0xc, &IID_IPersist
},
254 { 0x10, &IID_IPersistPropertyBag
},
255 { 0x14, &IID_IShellIconOverlay
},
259 ID_NAME(CLSID_MoveToMenu
),
261 { 0x0, &IID_IContextMenu3
},
262 { 0x0, &IID_IContextMenu2
},
263 { 0x0, &IID_IContextMenu
},
264 { 0x0, &IID_IUnknown
},
265 { 0x4, &IID_IShellExtInit
},
266 { 0x8, &IID_IObjectWithSite
},
267 { 0x10, &IID_IFolderFilter
},
271 ID_NAME(CLSID_MyComputer
),
273 { 0x0, &IID_IUnknown
},
274 { 0x10, &IID_IPersistFolder2
},
275 { 0x10, &IID_IPersistFolder
},
276 { 0x10, &IID_IPersist
},
277 { 0x10, &IID_IPersistFreeThreadedObject
},
278 { FARAWY
, &IID_IShellIconOverlay
},
279 { FARAWY
, &IID_IShellFolder2
},
280 { FARAWY
, &IID_IShellFolder
},
284 ID_NAME(CLSID_MyDocuments
),
286 { -0x4, &IID_IPersistFolder
},
287 { -0x4, &IID_IPersist
},
288 { 0x0, &IID_IShellFolder2
},
289 { 0x0, &IID_IShellFolder
},
290 { 0x0, &IID_IUnknown
},
291 { 0x4, &IID_IShellIconOverlay
},
292 { FARAWY
, &IID_IShellIcon
},
293 { FARAWY
, &IID_IPersistFolder3
},
294 { FARAWY
, &IID_IPersistFolder2
},
295 { FARAWY
, &IID_IStorage
},
296 { FARAWY
, &IID_IContextMenuCB
},
297 { FARAWY
, &IID_IOleCommandTarget
},
301 ID_NAME(CLSID_NetworkPlaces
),
303 { 0x0, &IID_IUnknown
},
304 { 0x10, &IID_IPersistFolder3
},
305 { 0x10, &IID_IPersistFolder2
},
306 { 0x10, &IID_IPersistFolder
},
307 { 0x10, &IID_IPersist
},
308 { 0x10, &IID_IPersistFreeThreadedObject
},
309 { FARAWY
, &IID_IShellIconOverlay
},
310 { FARAWY
, &IID_IShellFolder2
},
311 { FARAWY
, &IID_IShellFolder
},
315 ID_NAME(CLSID_NewMenu
),
317 { -0xc, &IID_IObjectWithSite
},
318 { -0x4, &IID_IContextMenu3
},
319 { -0x4, &IID_IContextMenu2
},
320 { -0x4, &IID_IContextMenu
},
321 { 0x0, &IID_IShellExtInit
},
322 { 0x0, &IID_IUnknown
},
326 ID_NAME(CLSID_PersonalStartMenu
),
328 { -0x30, &IID_IDeskBand
},
329 { -0x30, &IID_IDockingWindow
},
330 { -0x30, &IID_IOleWindow
},
331 { -0x2c, &IID_IObjectWithSite
},
332 { -0x24, &IID_IInputObject
},
333 { -0x20, &IID_IPersistStream
},
334 { -0x20, &IID_IPersist
},
335 { -0x1c, &IID_IOleCommandTarget
},
336 { -0x18, &IID_IServiceProvider
},
337 { 0x0, &IID_IMenuPopup
},
338 { 0x0, &IID_IDeskBar
},
339 { 0x0, &IID_IUnknown
},
340 { 0x4, &IID_IMenuBand
},
341 { 0x8, &IID_IShellMenu2
},
342 { 0x8, &IID_IShellMenu
},
343 { 0xc, &IID_IWinEventHandler
},
344 { 0x10, &IID_IShellMenuAcc
},
348 ID_NAME(CLSID_Printers
),
350 { -0xc, &IID_IRemoteComputer
},
351 { 0x0, &IID_IShellFolder2
},
352 { 0x0, &IID_IShellFolder
},
353 { 0x0, &IID_IUnknown
},
354 { 0x4, &IID_IPersistFolder2
},
355 { 0x4, &IID_IPersistFolder
},
356 { 0x4, &IID_IPersist
},
357 { 0x8, &IID_IContextMenuCB
},
358 { 0xc, &IID_IShellIconOverlay
},
362 ID_NAME(CLSID_QueryAssociations
),
364 { 0x0, &IID_IUnknown
},
365 { 0x8, &IID_IQueryAssociations
},
369 ID_NAME(CLSID_QuickLinks
),
371 { -0xac, &IID_IDeskBand
},
372 { -0xac, &IID_IDockingWindow
},
373 { -0xac, &IID_IOleWindow
},
374 { -0xa8, &IID_IObjectWithSite
},
375 { -0xa0, &IID_IInputObject
},
376 { -0x9c, &IID_IPersistStream
},
377 { -0x9c, &IID_IPersist
},
378 { -0x98, &IID_IOleCommandTarget
},
379 { -0x94, &IID_IServiceProvider
},
380 { -0x78, &IID_IWinEventHandler
},
381 { -0x74, &IID_IShellChangeNotify
},
382 { -0x70, &IID_IDropTarget
},
383 { -0x4, &IID_IContextMenu
},
384 { 0x0, &IID_IShellFolderBand
},
385 { 0x0, &IID_IUnknown
},
386 { 0x94, &IID_IFolderBandPriv
},
390 ID_NAME(CLSID_RecycleBin
),
392 { 0x0, &IID_IPersistFolder2
},
393 { 0x0, &IID_IPersistFolder
},
394 //{ 0x0, &IID_IPersist },
395 { 0x0, &IID_IUnknown
},
396 { 0x4, &IID_IShellFolder2
},
397 { 0x4, &IID_IShellFolder
},
398 { 0x8, &IID_IContextMenu
},
399 { 0xc, &IID_IShellPropSheetExt
},
400 { 0x10, &IID_IShellExtInit
},
404 ID_NAME(CLSID_SendToMenu
),
406 { -0x4, &IID_IContextMenu3
},
407 { -0x4, &IID_IContextMenu2
},
408 { -0x4, &IID_IContextMenu
},
409 { 0x0, &IID_IShellExtInit
},
410 { 0x0, &IID_IUnknown
},
411 { 0x4, &IID_IOleWindow
},
415 ID_NAME(CLSID_Shell
),
417 { 0x0, &IID_IShellDispatch4
},
418 { 0x0, &IID_IShellDispatch3
},
419 { 0x0, &IID_IShellDispatch2
},
420 { 0x0, &IID_IShellDispatch
},
421 { 0x0, &IID_IDispatch
},
422 { 0x0, &IID_IUnknown
},
423 { 0x4, &IID_IObjectSafety
},
424 { 0x20, &IID_IObjectWithSite
},
428 ID_NAME(CLSID_ShellDesktop
),
430 { -0x8, &CLSID_ShellDesktop
},
431 { -0x8, &IID_IObjectWithSite
},
432 { 0x0, &IID_IUnknown
},
433 { 0x4, &IID_IStorage
},
434 { 0x8, &IID_IPersistFolder2
},
435 { 0x8, &IID_IPersistFolder
},
436 { 0x8, &IID_IPersist
},
437 { 0xc, &IID_IShellIcon
},
438 { 0x14, &IID_IContextMenuCB
},
439 { 0x18, &IID_ITranslateShellChangeNotify
},
440 { 0x20, &IID_IOleCommandTarget
},
441 { FARAWY
, &IID_IShellIconOverlay
},
442 { FARAWY
, &IID_IShellFolder2
},
443 { FARAWY
, &IID_IShellFolder
},
447 ID_NAME(CLSID_ShellFSFolder
),
449 { 0x0, &IID_IUnknown
},
450 { 0xc, &IID_IShellFolder2
},
451 { 0xc, &IID_IShellFolder
},
452 { 0x10, &IID_IShellIcon
},
453 { 0x14, &IID_IShellIconOverlay
},
454 { 0x18, &IID_IPersistFolder3
},
455 { 0x18, &IID_IPersistFolder2
},
456 { 0x18, &IID_IPersistFolder
},
457 { 0x18, &IID_IPersist
},
458 { 0x18, &IID_IPersistFreeThreadedObject
},
459 { 0x1c, &IID_IStorage
},
460 { 0x2c, &IID_IContextMenuCB
},
461 { 0x34, &IID_IOleCommandTarget
},
465 ID_NAME(CLSID_ShellFldSetExt
),
467 { 0x0, &IID_IShellPropSheetExt
},
468 { 0x0, &IID_IUnknown
},
469 { 0x4, &IID_IShellExtInit
},
470 { 0x8, &IID_IObjectWithSite
},
474 ID_NAME(CLSID_ShellFolderView
),
476 { 0x0, &IID_IShellFolderViewDual2
},
477 { 0x0, &IID_IShellFolderViewDual
},
478 { 0x0, &IID_IDispatch
},
479 { 0x0, &IID_IUnknown
},
480 { 0x4, &IID_IShellService
},
481 { 0x8, &IID_IServiceProvider
},
482 { 0xc, &IID_IObjectSafety
},
483 { 0x14, &IID_IObjectWithSite
},
487 ID_NAME(CLSID_ShellFolderViewOC
),
489 { 0x0, &IID_IFolderViewOC
},
490 { 0x0, &IID_IDispatch
},
491 { 0x0, &IID_IUnknown
},
492 { 0x8, &IID_IObjectSafety
},
493 { 0x88, &IID_IPersistStreamInit
},
494 { 0x88, &IID_IPersist
},
495 { 0x90, &IID_IOleObject
},
496 { 0x94, &IID_IOleInPlaceActiveObject
},
497 { 0x98, &IID_IOleInPlaceObjectWindowless
},
498 { 0x98, &IID_IOleInPlaceObject
},
499 { 0x98, &IID_IOleWindow
},
503 ID_NAME(CLSID_ShellItem
),
505 { 0x0, &IID_IShellItem
},
506 { 0x0, &IID_IUnknown
},
507 { 0x4, &IID_IPersistIDList
},
511 ID_NAME(CLSID_ShellLink
),
513 { 0x0, &IID_IShellLinkA
},
514 { 0x0, &IID_IUnknown
},
515 { 0x4, &IID_IShellLinkW
},
516 { 0x8, &IID_IPersistStream
},
517 { 0xc, &IID_IPersistFile
},
518 { 0x10, &IID_IShellExtInit
},
519 { 0x14, &IID_IContextMenu3
},
520 { 0x14, &IID_IContextMenu2
},
521 { 0x14, &IID_IContextMenu
},
522 { 0x18, &IID_IDropTarget
},
523 { 0x1c, &IID_IQueryInfo
},
524 { 0x20, &IID_IShellLinkDataList
},
525 { 0x24, &IID_IExtractIconA
},
526 { 0x28, &IID_IExtractIconW
},
527 { 0x2c, &IID_IExtractImage2
},
528 { 0x2c, &IID_IExtractImage
},
529 { 0x30, &IID_IPersistPropertyBag
},
530 { 0x34, &IID_IServiceProvider
},
531 { 0x3c, &IID_IObjectWithSite
},
534 #if 0 // Apparently we can only get this through Folder.Items().GetLink
536 ID_NAME(CLSID_ShellLinkObject
),
538 { 0x0, &IID_IUnknown
},
543 ID_NAME(CLSID_StartMenu
),
545 { -0x48, &IID_IOleCommandTarget
},
546 { -0x44, &IID_IServiceProvider
},
547 { -0x40, &IID_IDeskBar
},
548 { -0x40, &IID_IOleWindow
},
549 { -0x3c, &IID_IInputObjectSite
},
550 { -0x38, &IID_IInputObject
},
551 { 0x0, &IID_IMenuPopup
},
552 { 0x0, &IID_IUnknown
},
553 { 0x4, &IID_IObjectWithSite
},
554 { 0x8, &IID_IBanneredBar
},
555 { 0xc, &IID_IInitializeObject
},
559 ID_NAME(CLSID_StartMenuPin
),
561 { 0x0, &IID_IShellExtInit
},
562 { 0x0, &IID_IUnknown
},
563 { 0x4, &IID_IContextMenu
},
564 { 0xc, &IID_IObjectWithSite
},
568 ID_NAME(CLSID_TrackShellMenu
),
570 { 0x0, &IID_ITrackShellMenu
},
571 { 0x0, &IID_IShellMenu
},
572 { 0x0, &IID_IUnknown
},
573 { 0x4, &IID_IShellMenu2
},
574 { 0x8, &IID_IObjectWithSite
},
575 { 0xc, &IID_IServiceProvider
},
579 static const INT ExpectedInterfaceCount
= RTL_NUMBER_OF(ExpectedInterfaces
);
583 TestClasses(L
"shell32", ExpectedInterfaces
, ExpectedInterfaceCount
);