Reactos
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 * Carl Bialorucki <carl.bialorucki@reactos.org>
7 */
8
9#include "com_apitest.h"
10
11#define NDEBUG
12#include <debug.h>
13
14static const CLASS_AND_INTERFACES ExpectedInterfaces[] =
15{
16 {
17 ID_NAME(CLSID_ACLCustomMRU, NTDDI_WIN7, NTDDI_MAX),
18 {
19 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
20 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
21 { NTDDI_WIN7, NTDDI_MAX, &IID_IACList },
22 { NTDDI_WIN7, NTDDI_MAX, &IID_IACLCustomMRU },
23 },
24 },
25 {
26 ID_NAME(CLSID_ACLHistory, NTDDI_WIN7, NTDDI_MAX),
27 {
28 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
29 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
30 },
31 },
32 {
33 ID_NAME(CLSID_ACLMRU, NTDDI_WIN7, NTDDI_MAX),
34 {
35 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
36 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
37 { NTDDI_WIN7, NTDDI_MAX, &IID_IACList },
38 { NTDDI_WIN7, NTDDI_MAX, &IID_IACLCustomMRU },
39 },
40 },
41 {
42 ID_NAME(CLSID_ACLMulti, NTDDI_WIN7, NTDDI_MAX),
43 {
44 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
45 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
46 { NTDDI_WIN7, NTDDI_MAX, &IID_IObjMgr },
47 { NTDDI_WIN7, NTDDI_MAX, &IID_IACList },
48 { NTDDI_WIN7, NTDDI_MAX, &IID_IPersist },
49 { NTDDI_WIN7, NTDDI_MAX, &IID_IPersistFolder },
50 }
51 },
52 {
53 ID_NAME(CLSID_ACListISF, NTDDI_WIN7, NTDDI_MAX),
54 {
55 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
56 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
57 { NTDDI_WIN7, NTDDI_MAX, &IID_IACList2 },
58 { NTDDI_WIN7, NTDDI_MAX, &IID_IACList },
59 { NTDDI_WIN7, NTDDI_MAX, &IID_ICurrentWorkingDirectory },
60 { NTDDI_WIN7, NTDDI_MAX, &IID_IPersistFolder },
61 { NTDDI_WIN7, NTDDI_MAX, &IID_IPersistIDList },
62 }
63 },
64 {
65 ID_NAME(CLSID_ActiveDesktop, NTDDI_MIN, NTDDI_MAX),
66 {
67 { NTDDI_MIN, NTDDI_MAX, &IID_IActiveDesktop },
68 { NTDDI_MIN, NTDDI_MAX, &IID_IActiveDesktopP },
69 { NTDDI_MIN, NTDDI_MAX, &IID_IADesktopP2 },
70 { NTDDI_MIN, NTDDI_MAX, &IID_IPropertyBag },
71 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
72 }
73 },
74 {
75 ID_NAME(CLSID_AutoComplete, NTDDI_WIN7, NTDDI_MAX),
76 {
77 { NTDDI_WIN7, NTDDI_MAX, &IID_IAutoComplete2 },
78 { NTDDI_WIN7, NTDDI_MAX, &IID_IAutoComplete },
79 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
80 { NTDDI_WIN7, NTDDI_MAX, &IID_IAutoCompleteDropDown },
81 { NTDDI_WIN7, NTDDI_MAX, &IID_IEnumString },
82 { NTDDI_WIN7, NTDDI_MAX, &IID_IAccessible },
83 { NTDDI_WIN7, NTDDI_MAX, &IID_IDispatch },
84 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellService },
85 }
86 },
87 {
88 ID_NAME(CLSID_BackgroundTaskScheduler, NTDDI_WIN7, NTDDI_VISTASP4),
89 {
90 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellTaskScheduler },
91 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
92 { NTDDI_WIN7, NTDDI_MAX, &IID_IMarshal },
93 }
94 },
95 {
96 ID_NAME(CLSID_BandProxy, NTDDI_WIN7, NTDDI_MAX),
97 {
98 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
99 { NTDDI_WIN7, NTDDI_MAX, &IID_IObjectWithSite },
100 { NTDDI_WIN7, NTDDI_MAX, &IID_IServiceProvider },
101 }
102 },
103 {
104 ID_NAME(CLSID_CDBurn, NTDDI_MIN, NTDDI_MAX),
105 {
106 { NTDDI_MIN, NTDDI_WS03SP4, &IID_ICDBurnPriv },
107 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDiscMasterProgressEvents },
108 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDriveFolderExtOld },
109 { NTDDI_MIN, NTDDI_WS03SP4, &IID_ITransferAdviseSinkPriv },
110
111 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IOleCommandTarget },
112
113 { NTDDI_MIN, NTDDI_MAX, &IID_ICDBurn },
114 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
115 { NTDDI_MIN, NTDDI_MAX, &IID_IDropTarget },
116 { NTDDI_MIN, NTDDI_MAX, &IID_INamespaceWalkCB },
117 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
118 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFile },
119 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistPropertyBag },
120 { NTDDI_MIN, NTDDI_MAX, &IID_IQueryCancelAutoPlay },
121 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
122 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
123 { NTDDI_MIN, NTDDI_MAX, &IID_IShellPropSheetExt },
124 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
125
126 { NTDDI_VISTA, NTDDI_MAX, &IID_IDriveFolderExt },
127 }
128 },
129 {
130 ID_NAME(CLSID_ControlPanel, NTDDI_MIN, NTDDI_MAX),
131 {
132 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
133 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
134 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
135 { NTDDI_MIN, NTDDI_MAX, &IID_IShellIconOverlay },
136 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
137 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
138 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
139
140 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IAliasRegistrationCallback },
141 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IControlPanelEnumerator },
142 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IRegItemCustomEnumerator },
143
144 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ITransferProvider },
145
146 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IRegItemFolder },
147
148 { NTDDI_VISTA, NTDDI_MAX, &IID_IBackReferencedObject },
149 { NTDDI_VISTA, NTDDI_MAX, &IID_IContextMenuCB },
150 { NTDDI_VISTA, NTDDI_MAX, &IID_IDelegateHostItemContainer },
151 { NTDDI_VISTA, NTDDI_MAX, &IID_IFolderType },
152 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithBackReferences },
153 { NTDDI_VISTA, NTDDI_MAX, &IID_IRegItemCustomAttributes },
154
155 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellIcon },
156 { NTDDI_WIN7, NTDDI_MAX, &IID_IStorage },
157 }
158 },
159 {
160 ID_NAME(CLSID_CopyToMenu, NTDDI_MIN, NTDDI_MAX),
161 {
162 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu2 },
163 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu3 },
164
165 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
166 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderFilter },
167 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
168 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
169 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
170 }
171 },
172 {
173 ID_NAME(CLSID_CRegTreeOptions, NTDDI_WIN7, NTDDI_MAX),
174 {
175 { NTDDI_WIN7, NTDDI_WIN7SP1, &IID_IRegTreeOptions },
176
177 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
178 { NTDDI_WIN7, NTDDI_MAX, &IID_IObjectWithSite },
179 }
180 },
181 {
182 ID_NAME(CLSID_DeskMovr, NTDDI_MIN, NTDDI_WS03SP4),
183 {
184 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
185 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDeskMovr },
186 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleObject },
187 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistPropertyBag },
188 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleControl },
189 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleInPlaceActiveObject },
190 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleWindow },
191 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleInPlaceObject },
192 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleInPlaceObjectWindowless },
193 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IQuickActivate },
194 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IViewObjectEx },
195 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IViewObject2 },
196 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IViewObject },
197 }
198 },
199 {
200 ID_NAME(CLSID_DragDropHelper, NTDDI_MIN, NTDDI_MAX),
201 {
202 { NTDDI_MIN, NTDDI_MAX, &IID_IDragSourceHelper },
203 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
204 { NTDDI_MIN, NTDDI_MAX, &IID_IDropTargetHelper },
205 }
206 },
207 {
208 ID_NAME(CLSID_FadeTask, NTDDI_MIN, NTDDI_MAX),
209 {
210 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
211 }
212 },
213 {
214 ID_NAME(CLSID_FileSearchBand, NTDDI_MIN, NTDDI_WS03SP4),
215 {
216 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
217 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleClientSite },
218 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleControlSite },
219 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleInPlaceSite },
220 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleWindow },
221 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDockingWindow },
222 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDeskBand },
223 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IInputObject },
224 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IObjectWithSite },
225 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IFileSearchBand },
226 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDispatch },
227 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersist },
228 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistStream },
229 }
230 },
231 {
232 ID_NAME(CLSID_FindFolder, NTDDI_MIN, NTDDI_WS03SP4),
233 {
234 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellFolder2 },
235 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellFolder },
236 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
237 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellIcon },
238 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellIconOverlay },
239 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFolder2 },
240 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFolder },
241 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersist },
242 }
243 },
244 {
245 ID_NAME(CLSID_FolderItem, NTDDI_MIN, NTDDI_MAX),
246 {
247 { NTDDI_MIN, NTDDI_MAX, &IID_FolderItem2 },
248 { NTDDI_MIN, NTDDI_MAX, &IID_FolderItem },
249 { NTDDI_MIN, NTDDI_MAX, &IID_IDispatch },
250 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
251 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
252 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
253 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
254 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectSafety },
255 { NTDDI_MIN, NTDDI_MAX, &IID_IParentAndItem },
256 }
257 },
258 {
259 ID_NAME(CLSID_FolderItemsFDF, NTDDI_MIN, NTDDI_MAX),
260 {
261 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IObjectSafety },
262
263 { NTDDI_MIN, NTDDI_MAX, &IID_FolderItems3 },
264 { NTDDI_MIN, NTDDI_MAX, &IID_FolderItems },
265 { NTDDI_MIN, NTDDI_MAX, &IID_IDispatch },
266 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
267 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
268
269 { NTDDI_VISTA, NTDDI_MAX, &IID_IPersist },
270 }
271 },
272 {
273 ID_NAME(CLSID_FolderShortcut, NTDDI_MIN, NTDDI_MAX),
274 {
275 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
276 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
277 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
278 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder3 },
279 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
280 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
281 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
282 { NTDDI_MIN, NTDDI_MAX, &IID_IShellLinkA },
283 { NTDDI_MIN, NTDDI_MAX, &IID_IShellLinkW },
284 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFile },
285 { NTDDI_MIN, NTDDI_MAX, &IID_IExtractIconW },
286 { NTDDI_MIN, NTDDI_MAX, &IID_IQueryInfo },
287 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStream },
288 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStreamInit },
289 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistPropertyBag },
290 { NTDDI_MIN, NTDDI_MAX, &IID_IBrowserFrameOptions },
291
292 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IFolderWithSearchRoot },
293 { NTDDI_VISTA, NTDDI_MAX, &IID_IShellIconOverlay },
294 }
295 },
296 {
297 ID_NAME(CLSID_FolderViewHost, NTDDI_MIN, NTDDI_MAX),
298 {
299 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IFolderView },
300
301 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderViewHost },
302 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
303 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
304 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
305 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
306
307 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IShellBrowserService4 },
308
309 { NTDDI_VISTA, NTDDI_MAX, &IID_IShellBrowser },
310 { NTDDI_VISTA, NTDDI_MAX, &IID_IExplorerBrowser },
311 { NTDDI_VISTA, NTDDI_MAX, &IID_ICommDlgBrowser3 },
312 { NTDDI_VISTA, NTDDI_MAX, &IID_ICommDlgBrowser2 },
313 { NTDDI_VISTA, NTDDI_MAX, &IID_ICommDlgBrowser },
314 { NTDDI_VISTA, NTDDI_MAX, &IID_IOleInPlaceUIWindow },
315 { NTDDI_VISTA, NTDDI_MAX, &IID_IConnectionPointContainer },
316 { NTDDI_VISTA, NTDDI_MAX, &IID_IPersistHistory },
317 { NTDDI_VISTA, NTDDI_MAX, &IID_IPersist },
318 { NTDDI_VISTA, NTDDI_MAX, &IID_IInputObject },
319 { NTDDI_VISTA, NTDDI_MAX, &IID_IFolderFilterSite },
320 { NTDDI_VISTA, NTDDI_MAX, &IID_IUrlHistoryNotify },
321 { NTDDI_VISTA, NTDDI_MAX, &IID_IOleCommandTarget },
322 { NTDDI_VISTA, NTDDI_MAX, &IID_INamespaceWalkCB2 },
323 { NTDDI_VISTA, NTDDI_MAX, &IID_INamespaceWalkCB },
324
325 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellBrowserService },
326 }
327 },
328 {
329 ID_NAME(CLSID_ISFBand, NTDDI_MIN, NTDDI_MAX),
330 {
331 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBand },
332 { NTDDI_MIN, NTDDI_MAX, &IID_IDockingWindow },
333 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
334 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
335 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObject },
336 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStream },
337 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
338 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
339 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
340 { NTDDI_MIN, NTDDI_MAX, &IID_IWinEventHandler },
341 { NTDDI_MIN, NTDDI_MAX, &IID_IShellChangeNotify },
342 { NTDDI_MIN, NTDDI_MAX, &IID_IDropTarget },
343 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
344 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolderBand },
345 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
346 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderBandPriv },
347 }
348 },
349 {
350 ID_NAME(CLSID_MenuBand, NTDDI_MIN, NTDDI_MAX),
351 {
352 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellMenuAcc },
353
354 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBand },
355 { NTDDI_MIN, NTDDI_MAX, &IID_IDockingWindow },
356 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
357 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
358 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObject },
359 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStream },
360 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
361 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
362 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
363 { NTDDI_MIN, NTDDI_MAX, &IID_IMenuPopup },
364 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBar },
365 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
366 { NTDDI_MIN, NTDDI_MAX, &IID_IMenuBand },
367 { NTDDI_MIN, NTDDI_MAX, &IID_IShellMenu2 },
368 { NTDDI_MIN, NTDDI_MAX, &IID_IShellMenu },
369 { NTDDI_MIN, NTDDI_MAX, &IID_IWinEventHandler },
370 }
371 },
372 {
373 ID_NAME(CLSID_MenuBandSite, NTDDI_MIN, NTDDI_MAX),
374 {
375 { NTDDI_MIN, NTDDI_MAX, &IID_IBandSite },
376 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
377 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBarClient },
378 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
379 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
380 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObject },
381 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObjectSite },
382 { NTDDI_MIN, NTDDI_MAX, &IID_IWinEventHandler },
383 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
384 }
385 },
386 {
387 ID_NAME(CLSID_MenuDeskBar, NTDDI_MIN, NTDDI_MAX),
388 {
389 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
390 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
391 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBar },
392 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
393 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObjectSite },
394 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObject },
395 { NTDDI_MIN, NTDDI_MAX, &IID_IMenuPopup },
396 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
397 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
398 { NTDDI_MIN, NTDDI_MAX, &IID_IBanneredBar },
399 { NTDDI_MIN, NTDDI_MAX, &IID_IInitializeObject },
400 }
401 },
402#if 0 // This is registered to shell32, but can't be instantiated
403 {
404 ID_NAME(CLSID_MenuToolbarBase, NTDDI_MIN, NTDDI_WS03SP4),
405 {
406 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
407 }
408 },
409#endif
410 {
411 ID_NAME(CLSID_MergedFolder, NTDDI_MIN, NTDDI_MAX),
412 {
413 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistPropertyBag },
414 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellIconOverlay },
415 { NTDDI_MIN, NTDDI_WS03SP4, &IID_ICompositeFolder },
416 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IItemNameLimits },
417 { NTDDI_MIN, NTDDI_WS03SP4, &IID_ITranslateShellChangeNotify },
418 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IAugmentedShellFolder2 },
419 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IAugmentedShellFolder },
420
421 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
422 { NTDDI_MIN, NTDDI_MAX, &IID_IStorage },
423 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
424 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
425 { NTDDI_MIN, NTDDI_MAX, &IID_IShellService },
426 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
427 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
428 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
429
430 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_ITranslateShellChangeNotify },
431
432 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ILocalizableItemParent },
433
434 { NTDDI_VISTA, NTDDI_MAX, &IID_IFolderType },
435 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithBackReferences },
436 }
437 },
438 {
439 ID_NAME(CLSID_MoveToMenu, NTDDI_MIN, NTDDI_MAX),
440 {
441 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu3 },
442 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu2 },
443
444 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
445 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
446 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
447 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
448 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderFilter },
449 }
450 },
451 {
452 ID_NAME(CLSID_MruLongList, NTDDI_VISTA, NTDDI_WINBLUE),
453 {
454 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IMruDataList },
455
456 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IUnknown },
457 }
458 },
459 {
460 ID_NAME(CLSID_MruPidlList, NTDDI_VISTA, NTDDI_WINBLUE),
461 {
462 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IUnknown },
463 }
464 },
465 {
466 ID_NAME(CLSID_MyComputer, NTDDI_MIN, NTDDI_WINBLUE),
467 {
468 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFreeThreadedObject },
469
470 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IUnknown },
471 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IPersistFolder2 },
472 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IPersistFolder },
473 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IPersist },
474 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IShellIconOverlay },
475 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IShellFolder2 },
476 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IShellFolder },
477
478 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IFolderWithSearchRoot },
479
480 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IFolderProperties },
481 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ITransferProvider },
482
483 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IItemNameLimits },
484 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IContextMenuCB },
485 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_INewItemAdvisor },
486 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IObjectWithBackReferences },
487 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IRegItemFolder },
488 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IDelegateHostItemContainer },
489 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IBackReferencedObject },
490
491 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellIcon },
492 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IStorage },
493
494 { NTDDI_WIN8, NTDDI_WINBLUE, &IID_IObjectWithSite },
495 { NTDDI_WIN8, NTDDI_WINBLUE, &IID_IPersistPropertyBag },
496 }
497 },
498 {
499 ID_NAME(CLSID_MyDocuments, NTDDI_MIN, NTDDI_MAX),
500 {
501 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPropertySetStorage },
502
503 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
504 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
505 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
506 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
507 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
508 { NTDDI_MIN, NTDDI_MAX, &IID_IShellIconOverlay },
509 { NTDDI_MIN, NTDDI_MAX, &IID_IShellIcon },
510 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder3 },
511 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
512 { NTDDI_MIN, NTDDI_MAX, &IID_IStorage },
513 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenuCB },
514 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
515 { NTDDI_MIN, NTDDI_MAX, &IID_IItemNameLimits },
516
517 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IAliasRegistrationCallback },
518
519 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ILocalizableItemParent },
520
521 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithSite },
522 { NTDDI_VISTA, NTDDI_MAX, &IID_IPersistPropertyBag },
523 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithBackReferences },
524 { NTDDI_VISTA, NTDDI_MAX, &IID_IRemoteComputer },
525 { NTDDI_VISTA, NTDDI_MAX, &IID_IFolderType },
526 { NTDDI_VISTA, NTDDI_MAX, &IID_IBackReferencedObject },
527
528 { NTDDI_WIN7, NTDDI_MAX, &IID_IParentAndItem },
529 }
530 },
531 {
532 ID_NAME(CLSID_NetworkPlaces, NTDDI_MIN, NTDDI_MAX),
533 {
534 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFreeThreadedObject },
535
536 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
537 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder3 },
538 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
539 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
540 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
541 { NTDDI_MIN, NTDDI_MAX, &IID_IShellIconOverlay },
542 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
543 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
544
545 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IFolderWithSearchRoot },
546
547 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ITransferProvider },
548
549 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IRegItemFolder },
550
551 { NTDDI_VISTA, NTDDI_MAX, &IID_IContextMenuCB },
552 { NTDDI_VISTA, NTDDI_MAX, &IID_INewItemAdvisor },
553 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithBackReferences },
554 { NTDDI_VISTA, NTDDI_MAX, &IID_IBackReferencedObject },
555 { NTDDI_VISTA, NTDDI_MAX, &IID_IDelegateHostItemContainer },
556
557 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellIcon},
558 { NTDDI_WIN7, NTDDI_MAX, &IID_IStorage},
559
560 { NTDDI_WIN8, NTDDI_MAX, &IID_IObjectWithSite},
561 }
562 },
563 {
564 ID_NAME(CLSID_NewMenu, NTDDI_MIN, NTDDI_MAX),
565 {
566 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
567 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu3 },
568 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu2 },
569 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
570 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
571 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
572 }
573 },
574 {
575 ID_NAME(CLSID_PersonalStartMenu, NTDDI_MIN, NTDDI_WINBLUE),
576 {
577 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDeskBand },
578 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDockingWindow },
579 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleWindow },
580 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IInputObject },
581 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistStream },
582 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersist },
583 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleCommandTarget },
584 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IServiceProvider },
585 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IMenuPopup },
586 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDeskBar },
587 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IMenuBand },
588 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellMenu2 },
589 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellMenu },
590 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IWinEventHandler },
591 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellMenuAcc },
592
593 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IObjectWithSite },
594 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IUnknown },
595
596 { NTDDI_VISTA, NTDDI_WINBLUE, &IID_IShellItemFilter },
597 }
598 },
599 {
600 ID_NAME(CLSID_Printers, NTDDI_MIN, NTDDI_VISTASP4),
601 {
602 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IRemoteComputer },
603 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IFolderNotify },
604 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellFolder2 },
605 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellFolder },
606 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IUnknown },
607 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistFolder2 },
608 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistFolder },
609 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersist },
610 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenuCB },
611 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellIconOverlay },
612
613 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IObjectWithBackReferences },
614 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IResolveShellLink },
615 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IFolderType },
616 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IRegItemFolder },
617 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_ITransferProvider },
618 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IDelegateHostItemContainer },
619 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IBackReferencedObject },
620 }
621 },
622 {
623 ID_NAME(CLSID_ProgressDialog, NTDDI_VISTA, NTDDI_MAX),
624 {
625 { NTDDI_VISTA, NTDDI_MAX, &IID_IProgressDialog },
626 { NTDDI_VISTA, NTDDI_MAX, &IID_IUnknown },
627 { NTDDI_VISTA, NTDDI_MAX, &IID_IOleWindow },
628 { NTDDI_VISTA, NTDDI_MAX, &IID_IActionProgressDialog },
629 { NTDDI_VISTA, NTDDI_MAX, &IID_IActionProgress },
630 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithSite },
631 },
632 L"Both"
633 },
634 {
635 ID_NAME(CLSID_QueryAssociations, NTDDI_MIN, NTDDI_WINBLUE),
636 {
637 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IAssociationArrayOld },
638 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IAssociationArrayInitialize },
639
640 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IQueryAssociations },
641 { NTDDI_MIN, NTDDI_WINBLUE, &IID_IUnknown },
642
643 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IAssociationArray },
644 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IObjectWithAssociationList },
645 }
646 },
647 {
648 ID_NAME(CLSID_QuickLinks, NTDDI_MIN, NTDDI_MAX),
649 {
650 { NTDDI_MIN, NTDDI_MAX, &IID_IDeskBand },
651 { NTDDI_MIN, NTDDI_MAX, &IID_IDockingWindow },
652 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
653 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
654 { NTDDI_MIN, NTDDI_MAX, &IID_IInputObject },
655 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStream },
656 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
657 { NTDDI_MIN, NTDDI_MAX, &IID_IOleCommandTarget },
658 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
659 { NTDDI_MIN, NTDDI_MAX, &IID_IWinEventHandler },
660 { NTDDI_MIN, NTDDI_MAX, &IID_IShellChangeNotify },
661 { NTDDI_MIN, NTDDI_MAX, &IID_IDropTarget },
662 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
663 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolderBand },
664 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
665 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderBandPriv },
666 }
667 },
668 {
669 ID_NAME(CLSID_RecycleBin, NTDDI_MIN, NTDDI_MAX),
670 {
671 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu },
672
673 { NTDDI_MIN, NTDDI_MAX, &IID_IShellPropSheetExt },
674 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
675 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder2 },
676 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistFolder },
677 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder2 },
678 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolder },
679 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
680
681 { NTDDI_VISTA, NTDDI_MAX, &IID_IPersist },
682 { NTDDI_VISTA, NTDDI_MAX, &IID_IContextMenuCB },
683 { NTDDI_VISTA, NTDDI_MAX, &IID_IFolderType },
684 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithBackReferences },
685
686 { NTDDI_WIN7, NTDDI_MAX, &IID_IShellIconOverlay },
687 }
688 },
689 {
690 ID_NAME(CLSID_SearchBand, NTDDI_WIN8, NTDDI_MAX),
691 {
692 { NTDDI_WIN8, NTDDI_MAX, &IID_IContextMenu },
693 { NTDDI_WIN8, NTDDI_MAX, &IID_IUnknown },
694 { NTDDI_WIN8, NTDDI_MAX, &IID_IShellExtInit },
695 { NTDDI_WIN8, NTDDI_MAX, &IID_IPersistPropertyBag },
696 { NTDDI_WIN8, NTDDI_MAX, &IID_IPersist },
697 { NTDDI_WIN8, NTDDI_MAX, &IID_IShellFolder },
698 }
699 },
700 {
701 ID_NAME(CLSID_SendToMenu, NTDDI_MIN, NTDDI_MAX),
702 {
703 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu3 },
704 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu2 },
705 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
706 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
707 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
708 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
709
710 { NTDDI_VISTA, NTDDI_MAX, &IID_IObjectWithSite },
711 { NTDDI_VISTA, NTDDI_MAX, &IID_IServiceProvider },
712
713 { NTDDI_WIN7, NTDDI_MAX, &IID_INamespaceWalkCB2 },
714 { NTDDI_WIN7, NTDDI_MAX, &IID_INamespaceWalkCB },
715 { NTDDI_WIN7, NTDDI_MAX, &IID_IMarshal },
716 }
717 },
718 {
719 ID_NAME(CLSID_SharedTaskScheduler, NTDDI_WIN7, NTDDI_WINBLUE),
720 {
721 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellTaskScheduler },
722 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IUnknown },
723 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IMarshal},
724 }
725 },
726 {
727 ID_NAME(CLSID_Shell, NTDDI_MIN, NTDDI_MAX),
728 {
729 { NTDDI_MIN, NTDDI_MAX, &IID_IShellDispatch4 },
730 { NTDDI_MIN, NTDDI_MAX, &IID_IShellDispatch3 },
731 { NTDDI_MIN, NTDDI_MAX, &IID_IShellDispatch2 },
732 { NTDDI_MIN, NTDDI_MAX, &IID_IShellDispatch },
733 { NTDDI_MIN, NTDDI_MAX, &IID_IDispatch },
734 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
735 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectSafety },
736 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
737
738 { NTDDI_VISTA, NTDDI_MAX, &IID_IShellDispatch5 },
739
740 { NTDDI_WIN8, NTDDI_MAX, &IID_IShellDispatch6 },
741 }
742 },
743 {
744 /* CLSID_ShellDesktop is also registered to shell32 on Windows Vista, 7, and 8.1,
745 * but instantiating it crashes the test on CoUninitialize. */
746 ID_NAME(CLSID_ShellDesktop, NTDDI_MIN, NTDDI_WS03SP4),
747 {
748 { NTDDI_MIN, NTDDI_WS03SP4, &CLSID_ShellDesktop },
749 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IObjectWithSite },
750 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
751 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IStorage },
752 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFolder2 },
753 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFolder },
754 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersist },
755 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellIcon },
756 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IContextMenuCB },
757 { NTDDI_MIN, NTDDI_WS03SP4, &IID_ITranslateShellChangeNotify },
758 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IItemNameLimits },
759 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleCommandTarget },
760 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellIconOverlay },
761 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellFolder2 },
762 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IShellFolder },
763 }
764 },
765 {
766 /* CLSID_ShellFSFolder is also registered to shell32 on
767 * Windows 8.1, but instantiating it crashes the test on CoUninitialize. */
768 ID_NAME(CLSID_ShellFSFolder, NTDDI_MIN, NTDDI_WIN7SP1),
769 {
770 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPersistFreeThreadedObject },
771 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IPropertySetStorage },
772
773 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IUnknown },
774 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IShellFolder2 },
775 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IShellFolder },
776 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IShellIcon },
777 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IShellIconOverlay },
778 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IPersistFolder3 },
779 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IPersistFolder2 },
780 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IPersistFolder },
781 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IPersist },
782 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IStorage },
783 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IItemNameLimits },
784 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IContextMenuCB },
785 { NTDDI_MIN, NTDDI_WIN7SP1, &IID_IOleCommandTarget },
786
787 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IAliasRegistrationCallback },
788
789 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IObjectWithSite },
790 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_ILocalizableItemParent },
791 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IPersistPropertyBag },
792 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IObjectWithBackReferences },
793 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IRemoteComputer },
794 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IFolderType },
795 { NTDDI_VISTA, NTDDI_WIN7SP1, &IID_IBackReferencedObject },
796
797 { NTDDI_WIN7, NTDDI_WIN7SP1, &IID_IParentAndItem },
798 }
799 },
800 {
801 ID_NAME(CLSID_ShellFldSetExt, NTDDI_MIN, NTDDI_MAX),
802 {
803 { NTDDI_MIN, NTDDI_MAX, &IID_IShellPropSheetExt },
804 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
805 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
806 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
807 }
808 },
809 {
810 ID_NAME(CLSID_ShellFolderView, NTDDI_MIN, NTDDI_MAX),
811 {
812 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolderViewDual2 },
813 { NTDDI_MIN, NTDDI_MAX, &IID_IShellFolderViewDual },
814 { NTDDI_MIN, NTDDI_MAX, &IID_IDispatch },
815 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
816 { NTDDI_MIN, NTDDI_MAX, &IID_IShellService },
817 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
818 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectSafety },
819 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
820 { NTDDI_MIN, NTDDI_MAX, &IID_IConnectionPointContainer },
821
822 { NTDDI_VISTA, NTDDI_MAX, &IID_IShellFolderViewDual3 },
823 }
824 },
825 {
826 ID_NAME(CLSID_ShellFolderViewOC, NTDDI_MIN, NTDDI_MAX),
827 {
828 { NTDDI_MIN, NTDDI_MAX, &IID_IFolderViewOC },
829 { NTDDI_MIN, NTDDI_MAX, &IID_IDispatch },
830 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
831 { NTDDI_MIN, NTDDI_MAX, &IID_IProvideClassInfo2 },
832 { NTDDI_MIN, NTDDI_MAX, &IID_IProvideClassInfo },
833 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectSafety },
834 { NTDDI_MIN, NTDDI_MAX, &IID_IConnectionPointContainer },
835 { NTDDI_MIN, NTDDI_MAX, &IID_IPersistStreamInit },
836 { NTDDI_MIN, NTDDI_MAX, &IID_IPersist },
837 { NTDDI_MIN, NTDDI_MAX, &IID_IOleControl },
838 { NTDDI_MIN, NTDDI_MAX, &IID_IOleObject },
839 { NTDDI_MIN, NTDDI_MAX, &IID_IOleInPlaceActiveObject },
840 { NTDDI_MIN, NTDDI_MAX, &IID_IOleInPlaceObjectWindowless },
841 { NTDDI_MIN, NTDDI_MAX, &IID_IOleInPlaceObject },
842 { NTDDI_MIN, NTDDI_MAX, &IID_IOleWindow },
843 }
844 },
845 /* CLSID_ShellItem has two entries because the threading model changed between versions. */
846 {
847 ID_NAME(CLSID_ShellItem, NTDDI_MIN, NTDDI_VISTASP4),
848 {
849 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellItem },
850 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IUnknown },
851 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistIDList },
852 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IParentAndItem },
853
854 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IShellItem2 },
855 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IMarshal },
856 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPersistStream },
857 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPersist },
858 }
859 },
860 {
861 ID_NAME(CLSID_ShellItem, NTDDI_WIN7, NTDDI_WINBLUE),
862 {
863 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IMarshal },
864 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellItem2 },
865 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellItem },
866 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersistIDList },
867 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IUnknown },
868 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IParentAndItem },
869 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersistStream },
870 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersist },
871 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IObjectWithBackReferences },
872 },
873 L"Both",
874 },
875 /* CLSID_ShellLink has two entries because the threading model changed between versions. */
876 {
877 ID_NAME(CLSID_ShellLink, NTDDI_MIN, NTDDI_VISTASP4),
878 {
879 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellLinkA },
880 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IUnknown },
881 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellLinkW },
882 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistStream },
883 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistFile },
884 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellExtInit },
885 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu3 },
886 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu2 },
887 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IContextMenu },
888 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IDropTarget },
889 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IQueryInfo },
890 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IShellLinkDataList },
891 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IExtractIconA },
892 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IExtractIconW },
893 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IExtractImage2 },
894 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IExtractImage },
895 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IPersistPropertyBag },
896 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IServiceProvider },
897 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IFilter },
898 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IObjectWithSite },
899 { NTDDI_MIN, NTDDI_VISTASP4, &IID_ICustomizeInfoTip },
900 { NTDDI_MIN, NTDDI_VISTASP4, &IID_ISLTracker },
901
902 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPersist },
903 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPropertyStore },
904 { NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPropertyBag },
905 }
906 },
907 {
908 ID_NAME(CLSID_ShellLink, NTDDI_WIN7, NTDDI_WINBLUE),
909 {
910 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IMarshal },
911 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellLinkA },
912 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellLinkW },
913 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersistStream },
914 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersistFile },
915 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersist },
916 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellExtInit },
917 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IContextMenu3 },
918 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IContextMenu2 },
919 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IContextMenu },
920 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IDropTarget },
921 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IQueryInfo },
922 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellLinkDataList },
923 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IExtractIconA },
924 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IExtractIconW },
925 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IUnknown },
926 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IExtractImage2 },
927 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IExtractImage },
928 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPersistPropertyBag },
929 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IServiceProvider },
930 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IObjectWithSite },
931 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPropertyStore },
932 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_ICustomizeInfoTip },
933 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_ISLTracker },
934 },
935 L"Both",
936 },
937#if 0 // Apparently we can only get this through Folder.Items().GetLink
938 {
939 ID_NAME(CLSID_ShellLinkObject, NTDDI_MIN, NTDDI_VISTASP4),
940 {
941 { NTDDI_MIN, NTDDI_VISTASP4, &IID_IUnknown },
942 }
943 },
944#endif
945 {
946 ID_NAME(CLSID_ShellSearchExt, NTDDI_WIN7, NTDDI_MAX),
947 {
948 { NTDDI_WIN7, NTDDI_MAX, &IID_IContextMenu },
949 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
950 { NTDDI_WIN7, NTDDI_MAX, &IID_IObjectWithSite },
951 }
952 },
953 {
954 ID_NAME(CLSID_ShellTaskScheduler, NTDDI_WIN7, NTDDI_WINBLUE),
955 {
956 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IShellTaskScheduler },
957 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IUnknown },
958 { NTDDI_WIN7, NTDDI_WINBLUE, &IID_IMarshal},
959 },
960 },
961 {
962 /* CLSID_StartMenu is also registered to shell32 on Windows Vista,
963 * but it crashes the test on CoUninitialize. */
964 ID_NAME(CLSID_StartMenu, NTDDI_MIN, NTDDI_WS03SP4),
965 {
966 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleCommandTarget },
967 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IServiceProvider },
968 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IDeskBar },
969 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IOleWindow },
970 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IInputObjectSite },
971 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IInputObject },
972 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IMenuPopup },
973 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IUnknown },
974 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IObjectWithSite },
975 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IBanneredBar },
976 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IInitializeObject },
977 }
978 },
979 {
980 ID_NAME(CLSID_StartMenuPin, NTDDI_MIN, NTDDI_MAX),
981 {
982 { NTDDI_MIN, NTDDI_MAX, &IID_IShellExtInit },
983 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
984 { NTDDI_MIN, NTDDI_MAX, &IID_IContextMenu },
985 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
986
987 {NTDDI_VISTA, NTDDI_VISTASP4, &IID_IPinnedListOld},
988
989 {NTDDI_WIN7, NTDDI_WINBLUE, &IID_IPinnedList},
990 }
991 },
992 {
993 ID_NAME(CLSID_Thumbnail, NTDDI_MIN, NTDDI_MAX),
994 {
995 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
996 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
997
998 { NTDDI_MIN, NTDDI_WS03SP4, &IID_IParentAndItem },
999 },
1000 },
1001 {
1002 ID_NAME(CLSID_TrackShellMenu, NTDDI_MIN, NTDDI_MAX),
1003 {
1004 { NTDDI_MIN, NTDDI_MAX, &IID_ITrackShellMenu },
1005 { NTDDI_MIN, NTDDI_MAX, &IID_IShellMenu },
1006 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
1007 { NTDDI_MIN, NTDDI_MAX, &IID_IShellMenu2 },
1008 { NTDDI_MIN, NTDDI_MAX, &IID_IObjectWithSite },
1009 { NTDDI_MIN, NTDDI_MAX, &IID_IServiceProvider },
1010 }
1011 },
1012 {
1013 ID_NAME(CLSID_UserAssist, NTDDI_WIN7, NTDDI_MAX),
1014 {
1015 { NTDDI_WIN7, NTDDI_MAX, &IID_IUnknown },
1016 },
1017 L"Both"
1018 },
1019 {
1020 ID_NAME(CLSID_UserNotification, NTDDI_MIN, NTDDI_MAX),
1021 {
1022 { NTDDI_MIN, NTDDI_MAX, &IID_IUserNotification },
1023 { NTDDI_MIN, NTDDI_MAX, &IID_IUnknown },
1024
1025 {NTDDI_VISTA, NTDDI_MAX, &IID_IUserNotification2 },
1026 }
1027 },
1028};
1029
1030START_TEST(shell32)
1031{
1032 TestClasses(L"shell32", ExpectedInterfaces, RTL_NUMBER_OF(ExpectedInterfaces));
1033}