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 <thfabba@gmx.de>
8 #include "com_apitest.h"
13 static const CLASS_AND_INTERFACES ExpectedInterfaces
[] =
16 ID_NAME(CLSID_CopyToMenu
),
18 { 0x0, &IID_IContextMenu3
},
19 { 0x0, &IID_IContextMenu2
},
20 { 0x0, &IID_IContextMenu
},
21 { 0x0, &IID_IUnknown
},
22 { 0x4, &IID_IShellExtInit
},
23 { 0x8, &IID_IObjectWithSite
},
24 { 0x10, &IID_IFolderFilter
},
28 ID_NAME(CLSID_DeskMovr
),
30 { 0x0, &IID_IUnknown
},
31 { 0x70, &IID_IDeskMovr
},
32 { 0x74, &IID_IOleObject
},
33 { 0x78, &IID_IPersistPropertyBag
},
34 { 0x80, &IID_IOleInPlaceActiveObject
},
35 { 0x84, &IID_IViewObjectEx
},
36 { 0x84, &IID_IViewObject2
},
37 { 0x84, &IID_IViewObject
},
38 { 0x88, &IID_IOleWindow
},
39 { 0x88, &IID_IOleInPlaceObject
},
40 { 0x88, &IID_IOleInPlaceObjectWindowless
},
44 ID_NAME(CLSID_DragDropHelper
),
46 { 0x0, &IID_IDragSourceHelper
},
47 { 0x0, &IID_IUnknown
},
48 { 0x4, &IID_IDropTargetHelper
},
52 ID_NAME(CLSID_FadeTask
),
54 { 0x0, &IID_IUnknown
},
58 ID_NAME(CLSID_FileSearchBand
),
60 { 0x0, &IID_IFileSearchBand
},
61 { 0x0, &IID_IDispatch
},
62 { 0x0, &IID_IUnknown
},
63 { 0x4, &IID_IObjectWithSite
},
64 { 0x8, &IID_IPersistStream
},
65 { 0x8, &IID_IPersist
},
66 { 0xc, &IID_IDeskBand
},
67 { 0xc, &IID_IDockingWindow
},
68 { 0xc, &IID_IOleWindow
},
69 { 0x10, &IID_IInputObject
},
70 { 0x18, &IID_IOleInPlaceSite
},
74 ID_NAME(CLSID_FolderItem
),
76 //{ 0x0, &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference
77 { 0x0, &IID_FolderItem2
},
78 { 0x0, &IID_FolderItem
},
79 { 0x0, &IID_IDispatch
},
80 { 0x0, &IID_IUnknown
},
81 { 0x4, &IID_IPersistFolder2
},
82 { 0x4, &IID_IPersistFolder
},
83 { 0x4, &IID_IPersist
},
84 { 0x8, &IID_IObjectSafety
},
88 ID_NAME(CLSID_FolderItemsFDF
),
90 { 0x0, &IID_FolderItems3
},
91 //{ 0x0, &IID_FolderItems2 }, ????
92 { 0x0, &IID_FolderItems
},
93 { 0x0, &IID_IDispatch
},
94 { 0x0, &IID_IUnknown
},
95 { 0x4, &IID_IPersistFolder
},
96 { 0x8, &IID_IObjectSafety
},
100 ID_NAME(CLSID_FolderShortcut
),
102 { 0x0, &IID_IShellFolder2
},
103 { 0x0, &IID_IShellFolder
},
104 { 0x0, &IID_IUnknown
},
105 { 0x4, &IID_IPersistFolder3
},
106 { 0x4, &IID_IPersistFolder2
},
107 { 0x4, &IID_IPersistFolder
},
108 { 0x4, &IID_IPersist
},
109 { 0x8, &IID_IShellLinkA
},
110 { 0xc, &IID_IShellLinkW
},
111 { 0x10, &IID_IPersistFile
},
112 { 0x14, &IID_IExtractIconW
},
113 { 0x18, &IID_IQueryInfo
},
114 { 0x20, &IID_IPersistStream
},
115 { 0x20, &IID_IPersistStreamInit
},
116 { 0x24, &IID_IPersistPropertyBag
},
117 { 0x28, &IID_IBrowserFrameOptions
},
121 ID_NAME(CLSID_FolderViewHost
),
123 { 0x0, &IID_IUnknown
},
124 { 0x4, &IID_IServiceProvider
},
125 { 0x8, &IID_IOleWindow
},
126 { 0xc, &IID_IFolderView
},
127 { 0x10, &IID_IObjectWithSite
},
131 ID_NAME(CLSID_ISFBand
),
133 { -0xac, &IID_IDeskBand
},
134 { -0xac, &IID_IDockingWindow
},
135 { -0xac, &IID_IOleWindow
},
136 { -0xa8, &IID_IObjectWithSite
},
137 { -0xa0, &IID_IInputObject
},
138 { -0x9c, &IID_IPersistStream
},
139 { -0x9c, &IID_IPersist
},
140 { -0x98, &IID_IOleCommandTarget
},
141 { -0x94, &IID_IServiceProvider
},
142 { -0x78, &IID_IWinEventHandler
},
143 { -0x74, &IID_IShellChangeNotify
},
144 { -0x70, &IID_IDropTarget
},
145 { -0x4, &IID_IContextMenu
},
146 { 0x0, &IID_IShellFolderBand
},
147 { 0x0, &IID_IUnknown
},
148 { 0x94, &IID_IFolderBandPriv
},
152 ID_NAME(CLSID_MenuBand
),
154 { -0x30, &IID_IDeskBand
},
155 { -0x30, &IID_IDockingWindow
},
156 { -0x30, &IID_IOleWindow
},
157 { -0x2c, &IID_IObjectWithSite
},
158 { -0x24, &IID_IInputObject
},
159 { -0x20, &IID_IPersistStream
},
160 { -0x20, &IID_IPersist
},
161 { -0x1c, &IID_IOleCommandTarget
},
162 { -0x18, &IID_IServiceProvider
},
163 { 0x0, &IID_IMenuPopup
},
164 { 0x0, &IID_IDeskBar
},
165 { 0x0, &IID_IUnknown
},
166 { 0x4, &IID_IMenuBand
},
167 { 0x8, &IID_IShellMenu2
},
168 { 0x8, &IID_IShellMenu
},
169 { 0xc, &IID_IWinEventHandler
},
170 { 0x10, &IID_IShellMenuAcc
},
174 ID_NAME(CLSID_MenuBandSite
),
176 { 0x0, &IID_IBandSite
},
177 { 0x0, &IID_IUnknown
},
178 { 0x4, &IID_IDeskBarClient
},
179 { 0x4, &IID_IOleWindow
},
180 { 0x8, &IID_IOleCommandTarget
},
181 { 0xc, &IID_IInputObject
},
182 { 0x10, &IID_IInputObjectSite
},
183 { 0x14, &IID_IWinEventHandler
},
184 { 0x18, &IID_IServiceProvider
},
188 ID_NAME(CLSID_MenuDeskBar
),
190 { -0x48, &IID_IOleCommandTarget
},
191 { -0x44, &IID_IServiceProvider
},
192 { -0x40, &IID_IDeskBar
},
193 { -0x40, &IID_IOleWindow
},
194 { -0x3c, &IID_IInputObjectSite
},
195 { -0x38, &IID_IInputObject
},
196 { 0x0, &IID_IMenuPopup
},
197 { 0x0, &IID_IUnknown
},
198 { 0x4, &IID_IObjectWithSite
},
199 { 0x8, &IID_IBanneredBar
},
200 { 0xc, &IID_IInitializeObject
},
203 #if 0 // This is registered to shell32, but can't be instanciated
205 ID_NAME(CLSID_MenuToolbarBase
),
207 { 0x0, &IID_IUnknown
},
212 ID_NAME(CLSID_MoveToMenu
),
214 { 0x0, &IID_IContextMenu3
},
215 { 0x0, &IID_IContextMenu2
},
216 { 0x0, &IID_IContextMenu
},
217 { 0x0, &IID_IUnknown
},
218 { 0x4, &IID_IShellExtInit
},
219 { 0x8, &IID_IObjectWithSite
},
220 { 0x10, &IID_IFolderFilter
},
224 ID_NAME(CLSID_NewMenu
),
226 { -0xc, &IID_IObjectWithSite
},
227 { -0x4, &IID_IContextMenu3
},
228 { -0x4, &IID_IContextMenu2
},
229 { -0x4, &IID_IContextMenu
},
230 { 0x0, &IID_IShellExtInit
},
231 { 0x0, &IID_IUnknown
},
235 ID_NAME(CLSID_PersonalStartMenu
),
237 { -0x30, &IID_IDeskBand
},
238 { -0x30, &IID_IDockingWindow
},
239 { -0x30, &IID_IOleWindow
},
240 { -0x2c, &IID_IObjectWithSite
},
241 { -0x24, &IID_IInputObject
},
242 { -0x20, &IID_IPersistStream
},
243 { -0x20, &IID_IPersist
},
244 { -0x1c, &IID_IOleCommandTarget
},
245 { -0x18, &IID_IServiceProvider
},
246 { 0x0, &IID_IMenuPopup
},
247 { 0x0, &IID_IDeskBar
},
248 { 0x0, &IID_IUnknown
},
249 { 0x4, &IID_IMenuBand
},
250 { 0x8, &IID_IShellMenu2
},
251 { 0x8, &IID_IShellMenu
},
252 { 0xc, &IID_IWinEventHandler
},
253 { 0x10, &IID_IShellMenuAcc
},
257 ID_NAME(CLSID_QuickLinks
),
259 { -0xac, &IID_IDeskBand
},
260 { -0xac, &IID_IDockingWindow
},
261 { -0xac, &IID_IOleWindow
},
262 { -0xa8, &IID_IObjectWithSite
},
263 { -0xa0, &IID_IInputObject
},
264 { -0x9c, &IID_IPersistStream
},
265 { -0x9c, &IID_IPersist
},
266 { -0x98, &IID_IOleCommandTarget
},
267 { -0x94, &IID_IServiceProvider
},
268 { -0x78, &IID_IWinEventHandler
},
269 { -0x74, &IID_IShellChangeNotify
},
270 { -0x70, &IID_IDropTarget
},
271 { -0x4, &IID_IContextMenu
},
272 { 0x0, &IID_IShellFolderBand
},
273 { 0x0, &IID_IUnknown
},
274 { 0x94, &IID_IFolderBandPriv
},
278 ID_NAME(CLSID_SendToMenu
),
280 { -0x4, &IID_IContextMenu3
},
281 { -0x4, &IID_IContextMenu2
},
282 { -0x4, &IID_IContextMenu
},
283 { 0x0, &IID_IShellExtInit
},
284 { 0x0, &IID_IUnknown
},
285 { 0x4, &IID_IOleWindow
},
289 ID_NAME(CLSID_Shell
),
291 { 0x0, &IID_IShellDispatch4
},
292 { 0x0, &IID_IShellDispatch3
},
293 { 0x0, &IID_IShellDispatch2
},
294 { 0x0, &IID_IShellDispatch
},
295 { 0x0, &IID_IDispatch
},
296 { 0x0, &IID_IUnknown
},
297 { 0x4, &IID_IObjectSafety
},
298 { 0x20, &IID_IObjectWithSite
},
302 ID_NAME(CLSID_ShellDesktop
),
304 { -0x8, &CLSID_ShellDesktop
},
305 { -0x8, &IID_IObjectWithSite
},
306 { 0x0, &IID_IUnknown
},
307 { 0x8, &IID_IPersistFolder2
},
308 { 0x8, &IID_IPersistFolder
},
309 { 0x8, &IID_IPersist
},
310 { 0xc, &IID_IShellIcon
},
311 { 0x14, &IID_IContextMenuCB
},
312 { 0x20, &IID_IOleCommandTarget
},
313 { FARAWY
, &IID_IShellFolder2
},
314 { FARAWY
, &IID_IShellFolder
},
318 ID_NAME(CLSID_ShellFSFolder
),
320 { 0x0, &IID_IUnknown
},
321 { 0xc, &IID_IShellFolder2
},
322 { 0xc, &IID_IShellFolder
},
323 { 0x10, &IID_IShellIcon
},
324 { 0x18, &IID_IPersistFolder3
},
325 { 0x18, &IID_IPersistFolder2
},
326 { 0x18, &IID_IPersistFolder
},
327 { 0x18, &IID_IPersist
},
328 { 0x2c, &IID_IContextMenuCB
},
329 { 0x34, &IID_IOleCommandTarget
},
333 ID_NAME(CLSID_ShellFldSetExt
),
335 { 0x0, &IID_IShellPropSheetExt
},
336 { 0x0, &IID_IUnknown
},
337 { 0x4, &IID_IShellExtInit
},
338 { 0x8, &IID_IObjectWithSite
},
342 ID_NAME(CLSID_ShellFolderView
),
344 { 0x0, &IID_IShellFolderViewDual2
},
345 { 0x0, &IID_IShellFolderViewDual
},
346 { 0x0, &IID_IDispatch
},
347 { 0x0, &IID_IUnknown
},
348 { 0x4, &IID_IShellService
},
349 { 0x8, &IID_IServiceProvider
},
350 { 0xc, &IID_IObjectSafety
},
351 { 0x14, &IID_IObjectWithSite
},
355 ID_NAME(CLSID_ShellFolderViewOC
),
357 { 0x0, &IID_IFolderViewOC
},
358 { 0x0, &IID_IDispatch
},
359 { 0x0, &IID_IUnknown
},
360 { 0x8, &IID_IObjectSafety
},
361 { 0x88, &IID_IPersistStreamInit
},
362 { 0x88, &IID_IPersist
},
363 { 0x90, &IID_IOleObject
},
364 { 0x94, &IID_IOleInPlaceActiveObject
},
365 { 0x98, &IID_IOleInPlaceObjectWindowless
},
366 { 0x98, &IID_IOleInPlaceObject
},
367 { 0x98, &IID_IOleWindow
},
371 ID_NAME(CLSID_ShellItem
),
373 { 0x0, &IID_IShellItem
},
374 { 0x0, &IID_IUnknown
},
375 { 0x4, &IID_IPersistIDList
},
379 ID_NAME(CLSID_ShellLink
),
381 { 0x0, &IID_IShellLinkA
},
382 { 0x0, &IID_IUnknown
},
383 { 0x4, &IID_IShellLinkW
},
384 { 0x8, &IID_IPersistStream
},
385 { 0xc, &IID_IPersistFile
},
386 { 0x10, &IID_IShellExtInit
},
387 { 0x14, &IID_IContextMenu3
},
388 { 0x14, &IID_IContextMenu2
},
389 { 0x14, &IID_IContextMenu
},
390 { 0x18, &IID_IDropTarget
},
391 { 0x1c, &IID_IQueryInfo
},
392 { 0x24, &IID_IExtractIconA
},
393 { 0x28, &IID_IExtractIconW
},
394 { 0x2c, &IID_IExtractImage2
},
395 { 0x2c, &IID_IExtractImage
},
396 { 0x30, &IID_IPersistPropertyBag
},
397 { 0x34, &IID_IServiceProvider
},
398 { 0x3c, &IID_IObjectWithSite
},
401 #if 0 // Apparently we can only get this through Folder.Items().GetLink
403 ID_NAME(CLSID_ShellLinkObject
),
405 { 0x0, &IID_IUnknown
},
410 ID_NAME(CLSID_StartMenu
),
412 { -0x48, &IID_IOleCommandTarget
},
413 { -0x44, &IID_IServiceProvider
},
414 { -0x40, &IID_IDeskBar
},
415 { -0x40, &IID_IOleWindow
},
416 { -0x3c, &IID_IInputObjectSite
},
417 { -0x38, &IID_IInputObject
},
418 { 0x0, &IID_IMenuPopup
},
419 { 0x0, &IID_IUnknown
},
420 { 0x4, &IID_IObjectWithSite
},
421 { 0x8, &IID_IBanneredBar
},
422 { 0xc, &IID_IInitializeObject
},
426 ID_NAME(CLSID_StartMenuPin
),
428 { 0x0, &IID_IShellExtInit
},
429 { 0x0, &IID_IUnknown
},
430 { 0x4, &IID_IContextMenu
},
431 { 0xc, &IID_IObjectWithSite
},
435 ID_NAME(CLSID_TrackShellMenu
),
437 { 0x0, &IID_ITrackShellMenu
},
438 { 0x0, &IID_IShellMenu
},
439 { 0x0, &IID_IUnknown
},
440 { 0x4, &IID_IShellMenu2
},
441 { 0x8, &IID_IObjectWithSite
},
442 { 0xc, &IID_IServiceProvider
},
446 static const INT ExpectedInterfaceCount
= RTL_NUMBER_OF(ExpectedInterfaces
);
450 TestClasses(L
"shell32", ExpectedInterfaces
, ExpectedInterfaceCount
);