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 */ 7 8 #include "com_apitest.h" 9 10 #define NDEBUG 11 #include <debug.h> 12 13 static const CLASS_AND_INTERFACES ExpectedInterfaces[] = 14 { 15 { 16 ID_NAME(CLSID_CDBurn), 17 { 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_IDriveFolderExtOld }, 31 { 0x34, &IID_INamespaceWalkCB }, 32 { 0x3c, &IID_IServiceProvider }, 33 { 0x40, &IID_ITransferAdviseSinkPriv }, 34 { 0x44, &IID_IQueryCancelAutoPlay }, 35 } 36 }, 37 { 38 ID_NAME(CLSID_ControlPanel), 39 { 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 }, 47 } 48 }, 49 { 50 ID_NAME(CLSID_CopyToMenu), 51 { 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 }, 59 } 60 }, 61 { 62 ID_NAME(CLSID_DeskMovr), 63 { 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 }, 77 } 78 }, 79 { 80 ID_NAME(CLSID_DragDropHelper), 81 { 82 { 0x0, &IID_IDragSourceHelper }, 83 { 0x0, &IID_IUnknown }, 84 { 0x4, &IID_IDropTargetHelper }, 85 } 86 }, 87 { 88 ID_NAME(CLSID_FadeTask), 89 { 90 { 0x0, &IID_IUnknown }, 91 } 92 }, 93 { 94 ID_NAME(CLSID_FileSearchBand), 95 { 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 }, 109 } 110 }, 111 { 112 ID_NAME(CLSID_FolderItem), 113 { 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 }, 124 } 125 }, 126 { 127 ID_NAME(CLSID_FolderItemsFDF), 128 { 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 }, 136 } 137 }, 138 { 139 ID_NAME(CLSID_FolderShortcut), 140 { 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 }, 157 } 158 }, 159 { 160 ID_NAME(CLSID_FolderViewHost), 161 { 162 { 0x0, &IID_IFolderViewHost }, 163 { 0x0, &IID_IUnknown }, 164 { 0x4, &IID_IServiceProvider }, 165 { 0x8, &IID_IOleWindow }, 166 { 0xc, &IID_IFolderView }, 167 { 0x10, &IID_IObjectWithSite }, 168 } 169 }, 170 { 171 ID_NAME(CLSID_ISFBand), 172 { 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 }, 189 } 190 }, 191 { 192 ID_NAME(CLSID_MenuBand), 193 { 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 }, 211 } 212 }, 213 { 214 ID_NAME(CLSID_MenuBandSite), 215 { 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 }, 225 } 226 }, 227 { 228 ID_NAME(CLSID_MenuDeskBar), 229 { 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 }, 241 } 242 }, 243 #if 0 // This is registered to shell32, but can't be instanciated 244 { 245 ID_NAME(CLSID_MenuToolbarBase), 246 { 247 { 0x0, &IID_IUnknown }, 248 } 249 }, 250 #endif 251 { 252 ID_NAME(CLSID_MergedFolder), 253 { 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 }, 269 } 270 }, 271 { 272 ID_NAME(CLSID_MoveToMenu), 273 { 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 }, 281 } 282 }, 283 { 284 ID_NAME(CLSID_MyComputer), 285 { 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 }, 294 } 295 }, 296 { 297 ID_NAME(CLSID_MyDocuments), 298 { 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 }, 313 } 314 }, 315 { 316 ID_NAME(CLSID_NetworkPlaces), 317 { 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 }, 327 } 328 }, 329 { 330 ID_NAME(CLSID_NewMenu), 331 { 332 { -0xc, &IID_IObjectWithSite }, 333 { -0x4, &IID_IContextMenu3 }, 334 { -0x4, &IID_IContextMenu2 }, 335 { -0x4, &IID_IContextMenu }, 336 { 0x0, &IID_IShellExtInit }, 337 { 0x0, &IID_IUnknown }, 338 } 339 }, 340 { 341 ID_NAME(CLSID_PersonalStartMenu), 342 { 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 }, 360 } 361 }, 362 { 363 ID_NAME(CLSID_Printers), 364 { 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 }, 375 } 376 }, 377 { 378 ID_NAME(CLSID_QueryAssociations), 379 { 380 { 0x0, &IID_IAssociationArrayOld }, 381 { 0x0, &IID_IUnknown }, 382 { 0x4, &IID_IAssociationArrayInitialize }, 383 { 0x8, &IID_IQueryAssociations }, 384 } 385 }, 386 { 387 ID_NAME(CLSID_QuickLinks), 388 { 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 }, 405 } 406 }, 407 { 408 ID_NAME(CLSID_RecycleBin), 409 { 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 }, 419 } 420 }, 421 { 422 ID_NAME(CLSID_SendToMenu), 423 { 424 { -0x4, &IID_IContextMenu3 }, 425 { -0x4, &IID_IContextMenu2 }, 426 { -0x4, &IID_IContextMenu }, 427 { 0x0, &IID_IShellExtInit }, 428 { 0x0, &IID_IUnknown }, 429 { 0x4, &IID_IOleWindow }, 430 } 431 }, 432 { 433 ID_NAME(CLSID_Shell), 434 { 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 }, 443 } 444 }, 445 { 446 ID_NAME(CLSID_ShellDesktop), 447 { 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 }, 463 } 464 }, 465 { 466 ID_NAME(CLSID_ShellFSFolder), 467 { 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 }, 483 } 484 }, 485 { 486 ID_NAME(CLSID_ShellFldSetExt), 487 { 488 { 0x0, &IID_IShellPropSheetExt }, 489 { 0x0, &IID_IUnknown }, 490 { 0x4, &IID_IShellExtInit }, 491 { 0x8, &IID_IObjectWithSite }, 492 } 493 }, 494 { 495 ID_NAME(CLSID_ShellFolderView), 496 { 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 }, 506 } 507 }, 508 { 509 ID_NAME(CLSID_ShellFolderViewOC), 510 { 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 }, 526 } 527 }, 528 { 529 ID_NAME(CLSID_ShellItem), 530 { 531 { 0x0, &IID_IShellItem }, 532 { 0x0, &IID_IUnknown }, 533 { 0x4, &IID_IPersistIDList }, 534 { 0x8, &IID_IParentAndItem }, 535 } 536 }, 537 { 538 ID_NAME(CLSID_ShellLink), 539 { 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 }, 562 } 563 }, 564 #if 0 // Apparently we can only get this through Folder.Items().GetLink 565 { 566 ID_NAME(CLSID_ShellLinkObject), 567 { 568 { 0x0, &IID_IUnknown }, 569 } 570 }, 571 #endif 572 { 573 ID_NAME(CLSID_StartMenu), 574 { 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 }, 586 } 587 }, 588 { 589 ID_NAME(CLSID_StartMenuPin), 590 { 591 { 0x0, &IID_IShellExtInit }, 592 { 0x0, &IID_IUnknown }, 593 { 0x4, &IID_IContextMenu }, 594 { 0xc, &IID_IObjectWithSite }, 595 } 596 }, 597 { 598 ID_NAME(CLSID_Thumbnail), 599 { 600 { 0x0, &IID_IUnknown }, 601 { 0x4, &IID_IParentAndItem }, 602 { 0x8, &IID_IObjectWithSite }, 603 }, 604 }, 605 { 606 ID_NAME(CLSID_TrackShellMenu), 607 { 608 { 0x0, &IID_ITrackShellMenu }, 609 { 0x0, &IID_IShellMenu }, 610 { 0x0, &IID_IUnknown }, 611 { 0x4, &IID_IShellMenu2 }, 612 { 0x8, &IID_IObjectWithSite }, 613 { 0xc, &IID_IServiceProvider }, 614 } 615 }, 616 { 617 ID_NAME(CLSID_UserNotification), 618 { 619 { 0x0, &IID_IUserNotification }, 620 { 0x0, &IID_IUnknown }, 621 // { 0x4, &IID_IUserNotification2 }, // On Vista+ 622 } 623 }, 624 }; 625 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces); 626 627 START_TEST(shell32) 628 { 629 TestClasses(L"shell32", ExpectedInterfaces, ExpectedInterfaceCount); 630 } 631