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_IShellFolder2
},
39 { FARAWY
, &IID_IShellFolder
},
43 ID_NAME(CLSID_CopyToMenu
),
45 { 0x0, &IID_IContextMenu3
},
46 { 0x0, &IID_IContextMenu2
},
47 { 0x0, &IID_IContextMenu
},
48 { 0x0, &IID_IUnknown
},
49 { 0x4, &IID_IShellExtInit
},
50 { 0x8, &IID_IObjectWithSite
},
51 { 0x10, &IID_IFolderFilter
},
55 ID_NAME(CLSID_DeskMovr
),
57 { 0x0, &IID_IUnknown
},
58 { 0x70, &IID_IDeskMovr
},
59 { 0x74, &IID_IOleObject
},
60 { 0x78, &IID_IPersistPropertyBag
},
61 { 0x80, &IID_IOleInPlaceActiveObject
},
62 { 0x84, &IID_IViewObjectEx
},
63 { 0x84, &IID_IViewObject2
},
64 { 0x84, &IID_IViewObject
},
65 { 0x88, &IID_IOleWindow
},
66 { 0x88, &IID_IOleInPlaceObject
},
67 { 0x88, &IID_IOleInPlaceObjectWindowless
},
71 ID_NAME(CLSID_DragDropHelper
),
73 { 0x0, &IID_IDragSourceHelper
},
74 { 0x0, &IID_IUnknown
},
75 { 0x4, &IID_IDropTargetHelper
},
79 ID_NAME(CLSID_FadeTask
),
81 { 0x0, &IID_IUnknown
},
85 ID_NAME(CLSID_FileSearchBand
),
87 { 0x0, &IID_IFileSearchBand
},
88 { 0x0, &IID_IDispatch
},
89 { 0x0, &IID_IUnknown
},
90 { 0x4, &IID_IObjectWithSite
},
91 { 0x8, &IID_IPersistStream
},
92 { 0x8, &IID_IPersist
},
93 { 0xc, &IID_IDeskBand
},
94 { 0xc, &IID_IDockingWindow
},
95 { 0xc, &IID_IOleWindow
},
96 { 0x10, &IID_IInputObject
},
97 { 0x18, &IID_IOleInPlaceSite
},
101 ID_NAME(CLSID_FolderItem
),
103 //{ 0x0, &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
104 { 0x0, &IID_FolderItem2
},
105 { 0x0, &IID_FolderItem
},
106 { 0x0, &IID_IDispatch
},
107 { 0x0, &IID_IUnknown
},
108 { 0x4, &IID_IPersistFolder2
},
109 { 0x4, &IID_IPersistFolder
},
110 { 0x4, &IID_IPersist
},
111 { 0x8, &IID_IObjectSafety
},
115 ID_NAME(CLSID_FolderItemsFDF
),
117 { 0x0, &IID_FolderItems3
},
118 //{ 0x0, &IID_FolderItems2 }, ????
119 { 0x0, &IID_FolderItems
},
120 { 0x0, &IID_IDispatch
},
121 { 0x0, &IID_IUnknown
},
122 { 0x4, &IID_IPersistFolder
},
123 { 0x8, &IID_IObjectSafety
},
127 ID_NAME(CLSID_FolderShortcut
),
129 { 0x0, &IID_IShellFolder2
},
130 { 0x0, &IID_IShellFolder
},
131 { 0x0, &IID_IUnknown
},
132 { 0x4, &IID_IPersistFolder3
},
133 { 0x4, &IID_IPersistFolder2
},
134 { 0x4, &IID_IPersistFolder
},
135 { 0x4, &IID_IPersist
},
136 { 0x8, &IID_IShellLinkA
},
137 { 0xc, &IID_IShellLinkW
},
138 { 0x10, &IID_IPersistFile
},
139 { 0x14, &IID_IExtractIconW
},
140 { 0x18, &IID_IQueryInfo
},
141 { 0x20, &IID_IPersistStream
},
142 { 0x20, &IID_IPersistStreamInit
},
143 { 0x24, &IID_IPersistPropertyBag
},
144 { 0x28, &IID_IBrowserFrameOptions
},
148 ID_NAME(CLSID_FolderViewHost
),
150 { 0x0, &IID_IFolderViewHost
},
151 { 0x0, &IID_IUnknown
},
152 { 0x4, &IID_IServiceProvider
},
153 { 0x8, &IID_IOleWindow
},
154 { 0xc, &IID_IFolderView
},
155 { 0x10, &IID_IObjectWithSite
},
159 ID_NAME(CLSID_ISFBand
),
161 { -0xac, &IID_IDeskBand
},
162 { -0xac, &IID_IDockingWindow
},
163 { -0xac, &IID_IOleWindow
},
164 { -0xa8, &IID_IObjectWithSite
},
165 { -0xa0, &IID_IInputObject
},
166 { -0x9c, &IID_IPersistStream
},
167 { -0x9c, &IID_IPersist
},
168 { -0x98, &IID_IOleCommandTarget
},
169 { -0x94, &IID_IServiceProvider
},
170 { -0x78, &IID_IWinEventHandler
},
171 { -0x74, &IID_IShellChangeNotify
},
172 { -0x70, &IID_IDropTarget
},
173 { -0x4, &IID_IContextMenu
},
174 { 0x0, &IID_IShellFolderBand
},
175 { 0x0, &IID_IUnknown
},
176 { 0x94, &IID_IFolderBandPriv
},
180 ID_NAME(CLSID_MenuBand
),
182 { -0x30, &IID_IDeskBand
},
183 { -0x30, &IID_IDockingWindow
},
184 { -0x30, &IID_IOleWindow
},
185 { -0x2c, &IID_IObjectWithSite
},
186 { -0x24, &IID_IInputObject
},
187 { -0x20, &IID_IPersistStream
},
188 { -0x20, &IID_IPersist
},
189 { -0x1c, &IID_IOleCommandTarget
},
190 { -0x18, &IID_IServiceProvider
},
191 { 0x0, &IID_IMenuPopup
},
192 { 0x0, &IID_IDeskBar
},
193 { 0x0, &IID_IUnknown
},
194 { 0x4, &IID_IMenuBand
},
195 { 0x8, &IID_IShellMenu2
},
196 { 0x8, &IID_IShellMenu
},
197 { 0xc, &IID_IWinEventHandler
},
198 { 0x10, &IID_IShellMenuAcc
},
202 ID_NAME(CLSID_MenuBandSite
),
204 { 0x0, &IID_IBandSite
},
205 { 0x0, &IID_IUnknown
},
206 { 0x4, &IID_IDeskBarClient
},
207 { 0x4, &IID_IOleWindow
},
208 { 0x8, &IID_IOleCommandTarget
},
209 { 0xc, &IID_IInputObject
},
210 { 0x10, &IID_IInputObjectSite
},
211 { 0x14, &IID_IWinEventHandler
},
212 { 0x18, &IID_IServiceProvider
},
216 ID_NAME(CLSID_MenuDeskBar
),
218 { -0x48, &IID_IOleCommandTarget
},
219 { -0x44, &IID_IServiceProvider
},
220 { -0x40, &IID_IDeskBar
},
221 { -0x40, &IID_IOleWindow
},
222 { -0x3c, &IID_IInputObjectSite
},
223 { -0x38, &IID_IInputObject
},
224 { 0x0, &IID_IMenuPopup
},
225 { 0x0, &IID_IUnknown
},
226 { 0x4, &IID_IObjectWithSite
},
227 { 0x8, &IID_IBanneredBar
},
228 { 0xc, &IID_IInitializeObject
},
231 #if 0 // This is registered to shell32, but can't be instanciated
233 ID_NAME(CLSID_MenuToolbarBase
),
235 { 0x0, &IID_IUnknown
},
240 ID_NAME(CLSID_MergedFolder
),
242 { -0x8, &IID_IShellFolder2
},
243 { -0x4, &IID_IStorage
},
244 { 0x0, &IID_IAugmentedShellFolder2
},
245 { 0x0, &IID_IAugmentedShellFolder
},
246 { 0x0, &IID_IShellFolder
},
247 { 0x0, &IID_IUnknown
},
248 { 0x4, &IID_IShellService
},
249 { 0x8, &IID_ITranslateShellChangeNotify
},
250 { 0xc, &IID_IPersistFolder2
},
251 { 0xc, &IID_IPersistFolder
},
252 { 0xc, &IID_IPersist
},
253 { 0x10, &IID_IPersistPropertyBag
},
257 ID_NAME(CLSID_MoveToMenu
),
259 { 0x0, &IID_IContextMenu3
},
260 { 0x0, &IID_IContextMenu2
},
261 { 0x0, &IID_IContextMenu
},
262 { 0x0, &IID_IUnknown
},
263 { 0x4, &IID_IShellExtInit
},
264 { 0x8, &IID_IObjectWithSite
},
265 { 0x10, &IID_IFolderFilter
},
269 ID_NAME(CLSID_MyComputer
),
271 { 0x0, &IID_IUnknown
},
272 { 0x10, &IID_IPersistFolder2
},
273 { 0x10, &IID_IPersistFolder
},
274 { 0x10, &IID_IPersist
},
275 { FARAWY
, &IID_IShellFolder2
},
276 { FARAWY
, &IID_IShellFolder
},
280 ID_NAME(CLSID_MyDocuments
),
282 { -0x4, &IID_IPersistFolder
},
283 { -0x4, &IID_IPersist
},
284 { 0x0, &IID_IShellFolder2
},
285 { 0x0, &IID_IShellFolder
},
286 { 0x0, &IID_IUnknown
},
287 { FARAWY
, &IID_IShellIcon
},
288 { FARAWY
, &IID_IPersistFolder3
},
289 { FARAWY
, &IID_IPersistFolder2
},
290 { FARAWY
, &IID_IStorage
},
291 { FARAWY
, &IID_IContextMenuCB
},
292 { FARAWY
, &IID_IOleCommandTarget
},
296 ID_NAME(CLSID_NetworkPlaces
),
298 { 0x0, &IID_IUnknown
},
299 { 0x10, &IID_IPersistFolder3
},
300 { 0x10, &IID_IPersistFolder2
},
301 { 0x10, &IID_IPersistFolder
},
302 { 0x10, &IID_IPersist
},
303 { FARAWY
, &IID_IShellFolder2
},
304 { FARAWY
, &IID_IShellFolder
},
308 ID_NAME(CLSID_NewMenu
),
310 { -0xc, &IID_IObjectWithSite
},
311 { -0x4, &IID_IContextMenu3
},
312 { -0x4, &IID_IContextMenu2
},
313 { -0x4, &IID_IContextMenu
},
314 { 0x0, &IID_IShellExtInit
},
315 { 0x0, &IID_IUnknown
},
319 ID_NAME(CLSID_PersonalStartMenu
),
321 { -0x30, &IID_IDeskBand
},
322 { -0x30, &IID_IDockingWindow
},
323 { -0x30, &IID_IOleWindow
},
324 { -0x2c, &IID_IObjectWithSite
},
325 { -0x24, &IID_IInputObject
},
326 { -0x20, &IID_IPersistStream
},
327 { -0x20, &IID_IPersist
},
328 { -0x1c, &IID_IOleCommandTarget
},
329 { -0x18, &IID_IServiceProvider
},
330 { 0x0, &IID_IMenuPopup
},
331 { 0x0, &IID_IDeskBar
},
332 { 0x0, &IID_IUnknown
},
333 { 0x4, &IID_IMenuBand
},
334 { 0x8, &IID_IShellMenu2
},
335 { 0x8, &IID_IShellMenu
},
336 { 0xc, &IID_IWinEventHandler
},
337 { 0x10, &IID_IShellMenuAcc
},
341 ID_NAME(CLSID_Printers
),
343 { 0x0, &IID_IShellFolder2
},
344 { 0x0, &IID_IShellFolder
},
345 { 0x0, &IID_IUnknown
},
346 { 0x4, &IID_IPersistFolder2
},
347 { 0x4, &IID_IPersistFolder
},
348 { 0x4, &IID_IPersist
},
349 { 0x8, &IID_IContextMenuCB
},
353 ID_NAME(CLSID_QueryAssociations
),
355 { 0x0, &IID_IUnknown
},
356 { 0x8, &IID_IQueryAssociations
},
360 ID_NAME(CLSID_QuickLinks
),
362 { -0xac, &IID_IDeskBand
},
363 { -0xac, &IID_IDockingWindow
},
364 { -0xac, &IID_IOleWindow
},
365 { -0xa8, &IID_IObjectWithSite
},
366 { -0xa0, &IID_IInputObject
},
367 { -0x9c, &IID_IPersistStream
},
368 { -0x9c, &IID_IPersist
},
369 { -0x98, &IID_IOleCommandTarget
},
370 { -0x94, &IID_IServiceProvider
},
371 { -0x78, &IID_IWinEventHandler
},
372 { -0x74, &IID_IShellChangeNotify
},
373 { -0x70, &IID_IDropTarget
},
374 { -0x4, &IID_IContextMenu
},
375 { 0x0, &IID_IShellFolderBand
},
376 { 0x0, &IID_IUnknown
},
377 { 0x94, &IID_IFolderBandPriv
},
381 ID_NAME(CLSID_RecycleBin
),
383 { 0x0, &IID_IPersistFolder2
},
384 { 0x0, &IID_IPersistFolder
},
385 //{ 0x0, &IID_IPersist },
386 { 0x0, &IID_IUnknown
},
387 { 0x4, &IID_IShellFolder2
},
388 { 0x4, &IID_IShellFolder
},
389 { 0x8, &IID_IContextMenu
},
390 { 0xc, &IID_IShellPropSheetExt
},
391 { 0x10, &IID_IShellExtInit
},
395 ID_NAME(CLSID_SendToMenu
),
397 { -0x4, &IID_IContextMenu3
},
398 { -0x4, &IID_IContextMenu2
},
399 { -0x4, &IID_IContextMenu
},
400 { 0x0, &IID_IShellExtInit
},
401 { 0x0, &IID_IUnknown
},
402 { 0x4, &IID_IOleWindow
},
406 ID_NAME(CLSID_Shell
),
408 { 0x0, &IID_IShellDispatch4
},
409 { 0x0, &IID_IShellDispatch3
},
410 { 0x0, &IID_IShellDispatch2
},
411 { 0x0, &IID_IShellDispatch
},
412 { 0x0, &IID_IDispatch
},
413 { 0x0, &IID_IUnknown
},
414 { 0x4, &IID_IObjectSafety
},
415 { 0x20, &IID_IObjectWithSite
},
419 ID_NAME(CLSID_ShellDesktop
),
421 { -0x8, &CLSID_ShellDesktop
},
422 { -0x8, &IID_IObjectWithSite
},
423 { 0x0, &IID_IUnknown
},
424 { 0x4, &IID_IStorage
},
425 { 0x8, &IID_IPersistFolder2
},
426 { 0x8, &IID_IPersistFolder
},
427 { 0x8, &IID_IPersist
},
428 { 0xc, &IID_IShellIcon
},
429 { 0x14, &IID_IContextMenuCB
},
430 { 0x18, &IID_ITranslateShellChangeNotify
},
431 { 0x20, &IID_IOleCommandTarget
},
432 { FARAWY
, &IID_IShellFolder2
},
433 { FARAWY
, &IID_IShellFolder
},
437 ID_NAME(CLSID_ShellFSFolder
),
439 { 0x0, &IID_IUnknown
},
440 { 0xc, &IID_IShellFolder2
},
441 { 0xc, &IID_IShellFolder
},
442 { 0x10, &IID_IShellIcon
},
443 { 0x18, &IID_IPersistFolder3
},
444 { 0x18, &IID_IPersistFolder2
},
445 { 0x18, &IID_IPersistFolder
},
446 { 0x18, &IID_IPersist
},
447 { 0x1c, &IID_IStorage
},
448 { 0x2c, &IID_IContextMenuCB
},
449 { 0x34, &IID_IOleCommandTarget
},
453 ID_NAME(CLSID_ShellFldSetExt
),
455 { 0x0, &IID_IShellPropSheetExt
},
456 { 0x0, &IID_IUnknown
},
457 { 0x4, &IID_IShellExtInit
},
458 { 0x8, &IID_IObjectWithSite
},
462 ID_NAME(CLSID_ShellFolderView
),
464 { 0x0, &IID_IShellFolderViewDual2
},
465 { 0x0, &IID_IShellFolderViewDual
},
466 { 0x0, &IID_IDispatch
},
467 { 0x0, &IID_IUnknown
},
468 { 0x4, &IID_IShellService
},
469 { 0x8, &IID_IServiceProvider
},
470 { 0xc, &IID_IObjectSafety
},
471 { 0x14, &IID_IObjectWithSite
},
475 ID_NAME(CLSID_ShellFolderViewOC
),
477 { 0x0, &IID_IFolderViewOC
},
478 { 0x0, &IID_IDispatch
},
479 { 0x0, &IID_IUnknown
},
480 { 0x8, &IID_IObjectSafety
},
481 { 0x88, &IID_IPersistStreamInit
},
482 { 0x88, &IID_IPersist
},
483 { 0x90, &IID_IOleObject
},
484 { 0x94, &IID_IOleInPlaceActiveObject
},
485 { 0x98, &IID_IOleInPlaceObjectWindowless
},
486 { 0x98, &IID_IOleInPlaceObject
},
487 { 0x98, &IID_IOleWindow
},
491 ID_NAME(CLSID_ShellItem
),
493 { 0x0, &IID_IShellItem
},
494 { 0x0, &IID_IUnknown
},
495 { 0x4, &IID_IPersistIDList
},
499 ID_NAME(CLSID_ShellLink
),
501 { 0x0, &IID_IShellLinkA
},
502 { 0x0, &IID_IUnknown
},
503 { 0x4, &IID_IShellLinkW
},
504 { 0x8, &IID_IPersistStream
},
505 { 0xc, &IID_IPersistFile
},
506 { 0x10, &IID_IShellExtInit
},
507 { 0x14, &IID_IContextMenu3
},
508 { 0x14, &IID_IContextMenu2
},
509 { 0x14, &IID_IContextMenu
},
510 { 0x18, &IID_IDropTarget
},
511 { 0x1c, &IID_IQueryInfo
},
512 { 0x24, &IID_IExtractIconA
},
513 { 0x28, &IID_IExtractIconW
},
514 { 0x2c, &IID_IExtractImage2
},
515 { 0x2c, &IID_IExtractImage
},
516 { 0x30, &IID_IPersistPropertyBag
},
517 { 0x34, &IID_IServiceProvider
},
518 { 0x3c, &IID_IObjectWithSite
},
521 #if 0 // Apparently we can only get this through Folder.Items().GetLink
523 ID_NAME(CLSID_ShellLinkObject
),
525 { 0x0, &IID_IUnknown
},
530 ID_NAME(CLSID_StartMenu
),
532 { -0x48, &IID_IOleCommandTarget
},
533 { -0x44, &IID_IServiceProvider
},
534 { -0x40, &IID_IDeskBar
},
535 { -0x40, &IID_IOleWindow
},
536 { -0x3c, &IID_IInputObjectSite
},
537 { -0x38, &IID_IInputObject
},
538 { 0x0, &IID_IMenuPopup
},
539 { 0x0, &IID_IUnknown
},
540 { 0x4, &IID_IObjectWithSite
},
541 { 0x8, &IID_IBanneredBar
},
542 { 0xc, &IID_IInitializeObject
},
546 ID_NAME(CLSID_StartMenuPin
),
548 { 0x0, &IID_IShellExtInit
},
549 { 0x0, &IID_IUnknown
},
550 { 0x4, &IID_IContextMenu
},
551 { 0xc, &IID_IObjectWithSite
},
555 ID_NAME(CLSID_TrackShellMenu
),
557 { 0x0, &IID_ITrackShellMenu
},
558 { 0x0, &IID_IShellMenu
},
559 { 0x0, &IID_IUnknown
},
560 { 0x4, &IID_IShellMenu2
},
561 { 0x8, &IID_IObjectWithSite
},
562 { 0xc, &IID_IServiceProvider
},
566 static const INT ExpectedInterfaceCount
= RTL_NUMBER_OF(ExpectedInterfaces
);
570 TestClasses(L
"shell32", ExpectedInterfaces
, ExpectedInterfaceCount
);