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_ActiveDesktop), 17 { 18 { 0x0, &IID_IActiveDesktop }, 19 { 0x0, &IID_IUnknown }, 20 { 0x4, &IID_IActiveDesktopP }, 21 { 0x8, &IID_IADesktopP2 }, 22 { 0xc, &IID_IPropertyBag }, 23 } 24 }, 25 { 26 ID_NAME(CLSID_CDBurn), 27 { 28 { 0x0, &IID_IObjectWithSite }, 29 { 0x0, &IID_IUnknown }, 30 { 0x8, &IID_IShellExtInit }, 31 { 0xc, &IID_IContextMenu }, 32 { 0x10, &IID_IShellPropSheetExt }, 33 { 0x14, &IID_IDiscMasterProgressEvents }, 34 { 0x18, &IID_IDropTarget }, 35 { 0x1c, &IID_IPersistFile }, 36 { 0x20, &IID_IOleCommandTarget }, 37 { 0x24, &IID_ICDBurn }, 38 { 0x28, &IID_ICDBurnPriv }, 39 { 0x2c, &IID_IPersistPropertyBag }, 40 { 0x30, &IID_IDriveFolderExtOld }, 41 { 0x34, &IID_INamespaceWalkCB }, 42 { 0x3c, &IID_IServiceProvider }, 43 { 0x40, &IID_ITransferAdviseSinkPriv }, 44 { 0x44, &IID_IQueryCancelAutoPlay }, 45 } 46 }, 47 { 48 ID_NAME(CLSID_ControlPanel), 49 { 50 { 0x0, &IID_IUnknown }, 51 { 0x10, &IID_IPersistFolder2 }, 52 { 0x10, &IID_IPersistFolder }, 53 { 0x10, &IID_IPersist }, 54 { FARAWY, &IID_IShellIconOverlay }, 55 { FARAWY, &IID_IShellFolder2 }, 56 { FARAWY, &IID_IShellFolder }, 57 } 58 }, 59 { 60 ID_NAME(CLSID_CopyToMenu), 61 { 62 { 0x0, &IID_IContextMenu3 }, 63 { 0x0, &IID_IContextMenu2 }, 64 { 0x0, &IID_IContextMenu }, 65 { 0x0, &IID_IUnknown }, 66 { 0x4, &IID_IShellExtInit }, 67 { 0x8, &IID_IObjectWithSite }, 68 { 0x10, &IID_IFolderFilter }, 69 } 70 }, 71 { 72 ID_NAME(CLSID_DeskMovr), 73 { 74 { 0x0, &IID_IUnknown }, 75 { 0x70, &IID_IDeskMovr }, 76 { 0x74, &IID_IOleObject }, 77 { 0x78, &IID_IPersistPropertyBag }, 78 { 0x7c, &IID_IOleControl }, 79 { 0x80, &IID_IOleInPlaceActiveObject }, 80 { 0x84, &IID_IViewObjectEx }, 81 { 0x84, &IID_IViewObject2 }, 82 { 0x84, &IID_IViewObject }, 83 { 0x88, &IID_IOleWindow }, 84 { 0x88, &IID_IOleInPlaceObject }, 85 { 0x88, &IID_IOleInPlaceObjectWindowless }, 86 { 0x8c, &IID_IQuickActivate }, 87 } 88 }, 89 { 90 ID_NAME(CLSID_DragDropHelper), 91 { 92 { 0x0, &IID_IDragSourceHelper }, 93 { 0x0, &IID_IUnknown }, 94 { 0x4, &IID_IDropTargetHelper }, 95 } 96 }, 97 { 98 ID_NAME(CLSID_FadeTask), 99 { 100 { 0x0, &IID_IUnknown }, 101 } 102 }, 103 { 104 ID_NAME(CLSID_FileSearchBand), 105 { 106 { 0x0, &IID_IFileSearchBand }, 107 { 0x0, &IID_IDispatch }, 108 { 0x0, &IID_IUnknown }, 109 { 0x4, &IID_IObjectWithSite }, 110 { 0x8, &IID_IPersistStream }, 111 { 0x8, &IID_IPersist }, 112 { 0xc, &IID_IDeskBand }, 113 { 0xc, &IID_IDockingWindow }, 114 { 0xc, &IID_IOleWindow }, 115 { 0x10, &IID_IInputObject }, 116 { 0x14, &IID_IOleClientSite }, 117 { 0x18, &IID_IOleInPlaceSite }, 118 { 0x1c, &IID_IOleControlSite }, 119 } 120 }, 121 { 122 ID_NAME(CLSID_FolderItem), 123 { 124 //{ 0x0, &CLSID_ShellFolderItem }, // broken QueryInterface that doesn't add a reference 125 { 0x0, &IID_FolderItem2 }, 126 { 0x0, &IID_FolderItem }, 127 { 0x0, &IID_IDispatch }, 128 { 0x0, &IID_IUnknown }, 129 { 0x4, &IID_IPersistFolder2 }, 130 { 0x4, &IID_IPersistFolder }, 131 { 0x4, &IID_IPersist }, 132 { 0x8, &IID_IObjectSafety }, 133 { 0x10, &IID_IParentAndItem }, 134 } 135 }, 136 { 137 ID_NAME(CLSID_FolderItemsFDF), 138 { 139 { 0x0, &IID_FolderItems3 }, 140 //{ 0x0, &IID_FolderItems2 }, ???? 141 { 0x0, &IID_FolderItems }, 142 { 0x0, &IID_IDispatch }, 143 { 0x0, &IID_IUnknown }, 144 { 0x4, &IID_IPersistFolder }, 145 { 0x8, &IID_IObjectSafety }, 146 } 147 }, 148 { 149 ID_NAME(CLSID_FolderShortcut), 150 { 151 { 0x0, &IID_IShellFolder2 }, 152 { 0x0, &IID_IShellFolder }, 153 { 0x0, &IID_IUnknown }, 154 { 0x4, &IID_IPersistFolder3 }, 155 { 0x4, &IID_IPersistFolder2 }, 156 { 0x4, &IID_IPersistFolder }, 157 { 0x4, &IID_IPersist }, 158 { 0x8, &IID_IShellLinkA }, 159 { 0xc, &IID_IShellLinkW }, 160 { 0x10, &IID_IPersistFile }, 161 { 0x14, &IID_IExtractIconW }, 162 { 0x18, &IID_IQueryInfo }, 163 { 0x20, &IID_IPersistStream }, 164 { 0x20, &IID_IPersistStreamInit }, 165 { 0x24, &IID_IPersistPropertyBag }, 166 { 0x28, &IID_IBrowserFrameOptions }, 167 } 168 }, 169 { 170 ID_NAME(CLSID_FolderViewHost), 171 { 172 { 0x0, &IID_IFolderViewHost }, 173 { 0x0, &IID_IUnknown }, 174 { 0x4, &IID_IServiceProvider }, 175 { 0x8, &IID_IOleWindow }, 176 { 0xc, &IID_IFolderView }, 177 { 0x10, &IID_IObjectWithSite }, 178 } 179 }, 180 { 181 ID_NAME(CLSID_ISFBand), 182 { 183 { -0xac, &IID_IDeskBand }, 184 { -0xac, &IID_IDockingWindow }, 185 { -0xac, &IID_IOleWindow }, 186 { -0xa8, &IID_IObjectWithSite }, 187 { -0xa0, &IID_IInputObject }, 188 { -0x9c, &IID_IPersistStream }, 189 { -0x9c, &IID_IPersist }, 190 { -0x98, &IID_IOleCommandTarget }, 191 { -0x94, &IID_IServiceProvider }, 192 { -0x78, &IID_IWinEventHandler }, 193 { -0x74, &IID_IShellChangeNotify }, 194 { -0x70, &IID_IDropTarget }, 195 { -0x4, &IID_IContextMenu }, 196 { 0x0, &IID_IShellFolderBand }, 197 { 0x0, &IID_IUnknown }, 198 { 0x94, &IID_IFolderBandPriv }, 199 } 200 }, 201 { 202 ID_NAME(CLSID_MenuBand), 203 { 204 { -0x30, &IID_IDeskBand }, 205 { -0x30, &IID_IDockingWindow }, 206 { -0x30, &IID_IOleWindow }, 207 { -0x2c, &IID_IObjectWithSite }, 208 { -0x24, &IID_IInputObject }, 209 { -0x20, &IID_IPersistStream }, 210 { -0x20, &IID_IPersist }, 211 { -0x1c, &IID_IOleCommandTarget }, 212 { -0x18, &IID_IServiceProvider }, 213 { 0x0, &IID_IMenuPopup }, 214 { 0x0, &IID_IDeskBar }, 215 { 0x0, &IID_IUnknown }, 216 { 0x4, &IID_IMenuBand }, 217 { 0x8, &IID_IShellMenu2 }, 218 { 0x8, &IID_IShellMenu }, 219 { 0xc, &IID_IWinEventHandler }, 220 { 0x10, &IID_IShellMenuAcc }, 221 } 222 }, 223 { 224 ID_NAME(CLSID_MenuBandSite), 225 { 226 { 0x0, &IID_IBandSite }, 227 { 0x0, &IID_IUnknown }, 228 { 0x4, &IID_IDeskBarClient }, 229 { 0x4, &IID_IOleWindow }, 230 { 0x8, &IID_IOleCommandTarget }, 231 { 0xc, &IID_IInputObject }, 232 { 0x10, &IID_IInputObjectSite }, 233 { 0x14, &IID_IWinEventHandler }, 234 { 0x18, &IID_IServiceProvider }, 235 } 236 }, 237 { 238 ID_NAME(CLSID_MenuDeskBar), 239 { 240 { -0x48, &IID_IOleCommandTarget }, 241 { -0x44, &IID_IServiceProvider }, 242 { -0x40, &IID_IDeskBar }, 243 { -0x40, &IID_IOleWindow }, 244 { -0x3c, &IID_IInputObjectSite }, 245 { -0x38, &IID_IInputObject }, 246 { 0x0, &IID_IMenuPopup }, 247 { 0x0, &IID_IUnknown }, 248 { 0x4, &IID_IObjectWithSite }, 249 { 0x8, &IID_IBanneredBar }, 250 { 0xc, &IID_IInitializeObject }, 251 } 252 }, 253 #if 0 // This is registered to shell32, but can't be instanciated 254 { 255 ID_NAME(CLSID_MenuToolbarBase), 256 { 257 { 0x0, &IID_IUnknown }, 258 } 259 }, 260 #endif 261 { 262 ID_NAME(CLSID_MergedFolder), 263 { 264 { -0x8, &IID_IShellFolder2 }, 265 { -0x4, &IID_IStorage }, 266 { 0x0, &IID_IAugmentedShellFolder2 }, 267 { 0x0, &IID_IAugmentedShellFolder }, 268 { 0x0, &IID_IShellFolder }, 269 { 0x0, &IID_IUnknown }, 270 { 0x4, &IID_IShellService }, 271 { 0x8, &IID_ITranslateShellChangeNotify }, 272 { 0xc, &IID_IPersistFolder2 }, 273 { 0xc, &IID_IPersistFolder }, 274 { 0xc, &IID_IPersist }, 275 { 0x10, &IID_IPersistPropertyBag }, 276 { 0x14, &IID_IShellIconOverlay }, 277 { 0x18, &IID_ICompositeFolder }, 278 { 0x1c, &IID_IItemNameLimits }, 279 } 280 }, 281 { 282 ID_NAME(CLSID_MoveToMenu), 283 { 284 { 0x0, &IID_IContextMenu3 }, 285 { 0x0, &IID_IContextMenu2 }, 286 { 0x0, &IID_IContextMenu }, 287 { 0x0, &IID_IUnknown }, 288 { 0x4, &IID_IShellExtInit }, 289 { 0x8, &IID_IObjectWithSite }, 290 { 0x10, &IID_IFolderFilter }, 291 } 292 }, 293 { 294 ID_NAME(CLSID_MyComputer), 295 { 296 { 0x0, &IID_IUnknown }, 297 { 0x10, &IID_IPersistFolder2 }, 298 { 0x10, &IID_IPersistFolder }, 299 { 0x10, &IID_IPersist }, 300 { 0x10, &IID_IPersistFreeThreadedObject }, 301 { FARAWY, &IID_IShellIconOverlay }, 302 { FARAWY, &IID_IShellFolder2 }, 303 { FARAWY, &IID_IShellFolder }, 304 } 305 }, 306 { 307 ID_NAME(CLSID_MyDocuments), 308 { 309 { -0x4, &IID_IPersistFolder }, 310 { -0x4, &IID_IPersist }, 311 { 0x0, &IID_IShellFolder2 }, 312 { 0x0, &IID_IShellFolder }, 313 { 0x0, &IID_IUnknown }, 314 { 0x4, &IID_IShellIconOverlay }, 315 { FARAWY, &IID_IShellIcon }, 316 { FARAWY, &IID_IPersistFolder3 }, 317 { FARAWY, &IID_IPersistFolder2 }, 318 { FARAWY, &IID_IStorage }, 319 { FARAWY, &IID_IContextMenuCB }, 320 { FARAWY, &IID_IOleCommandTarget }, 321 { FARAWY, &IID_IItemNameLimits }, 322 { FARAWY, &IID_IPropertySetStorage }, 323 } 324 }, 325 { 326 ID_NAME(CLSID_NetworkPlaces), 327 { 328 { 0x0, &IID_IUnknown }, 329 { 0x10, &IID_IPersistFolder3 }, 330 { 0x10, &IID_IPersistFolder2 }, 331 { 0x10, &IID_IPersistFolder }, 332 { 0x10, &IID_IPersist }, 333 { 0x10, &IID_IPersistFreeThreadedObject }, 334 { FARAWY, &IID_IShellIconOverlay }, 335 { FARAWY, &IID_IShellFolder2 }, 336 { FARAWY, &IID_IShellFolder }, 337 } 338 }, 339 { 340 ID_NAME(CLSID_NewMenu), 341 { 342 { -0xc, &IID_IObjectWithSite }, 343 { -0x4, &IID_IContextMenu3 }, 344 { -0x4, &IID_IContextMenu2 }, 345 { -0x4, &IID_IContextMenu }, 346 { 0x0, &IID_IShellExtInit }, 347 { 0x0, &IID_IUnknown }, 348 } 349 }, 350 { 351 ID_NAME(CLSID_PersonalStartMenu), 352 { 353 { -0x30, &IID_IDeskBand }, 354 { -0x30, &IID_IDockingWindow }, 355 { -0x30, &IID_IOleWindow }, 356 { -0x2c, &IID_IObjectWithSite }, 357 { -0x24, &IID_IInputObject }, 358 { -0x20, &IID_IPersistStream }, 359 { -0x20, &IID_IPersist }, 360 { -0x1c, &IID_IOleCommandTarget }, 361 { -0x18, &IID_IServiceProvider }, 362 { 0x0, &IID_IMenuPopup }, 363 { 0x0, &IID_IDeskBar }, 364 { 0x0, &IID_IUnknown }, 365 { 0x4, &IID_IMenuBand }, 366 { 0x8, &IID_IShellMenu2 }, 367 { 0x8, &IID_IShellMenu }, 368 { 0xc, &IID_IWinEventHandler }, 369 { 0x10, &IID_IShellMenuAcc }, 370 } 371 }, 372 { 373 ID_NAME(CLSID_Printers), 374 { 375 { -0xc, &IID_IRemoteComputer }, 376 { -0x4, &IID_IFolderNotify }, 377 { 0x0, &IID_IShellFolder2 }, 378 { 0x0, &IID_IShellFolder }, 379 { 0x0, &IID_IUnknown }, 380 { 0x4, &IID_IPersistFolder2 }, 381 { 0x4, &IID_IPersistFolder }, 382 { 0x4, &IID_IPersist }, 383 { 0x8, &IID_IContextMenuCB }, 384 { 0xc, &IID_IShellIconOverlay }, 385 } 386 }, 387 { 388 ID_NAME(CLSID_QueryAssociations), 389 { 390 { 0x0, &IID_IAssociationArrayOld }, 391 { 0x0, &IID_IUnknown }, 392 { 0x4, &IID_IAssociationArrayInitialize }, 393 { 0x8, &IID_IQueryAssociations }, 394 } 395 }, 396 { 397 ID_NAME(CLSID_QuickLinks), 398 { 399 { -0xac, &IID_IDeskBand }, 400 { -0xac, &IID_IDockingWindow }, 401 { -0xac, &IID_IOleWindow }, 402 { -0xa8, &IID_IObjectWithSite }, 403 { -0xa0, &IID_IInputObject }, 404 { -0x9c, &IID_IPersistStream }, 405 { -0x9c, &IID_IPersist }, 406 { -0x98, &IID_IOleCommandTarget }, 407 { -0x94, &IID_IServiceProvider }, 408 { -0x78, &IID_IWinEventHandler }, 409 { -0x74, &IID_IShellChangeNotify }, 410 { -0x70, &IID_IDropTarget }, 411 { -0x4, &IID_IContextMenu }, 412 { 0x0, &IID_IShellFolderBand }, 413 { 0x0, &IID_IUnknown }, 414 { 0x94, &IID_IFolderBandPriv }, 415 } 416 }, 417 { 418 ID_NAME(CLSID_RecycleBin), 419 { 420 { 0x0, &IID_IPersistFolder2 }, 421 { 0x0, &IID_IPersistFolder }, 422 //{ 0x0, &IID_IPersist }, 423 { 0x0, &IID_IUnknown }, 424 { 0x4, &IID_IShellFolder2 }, 425 { 0x4, &IID_IShellFolder }, 426 { 0x8, &IID_IContextMenu }, 427 { 0xc, &IID_IShellPropSheetExt }, 428 { 0x10, &IID_IShellExtInit }, 429 } 430 }, 431 { 432 ID_NAME(CLSID_SendToMenu), 433 { 434 { -0x4, &IID_IContextMenu3 }, 435 { -0x4, &IID_IContextMenu2 }, 436 { -0x4, &IID_IContextMenu }, 437 { 0x0, &IID_IShellExtInit }, 438 { 0x0, &IID_IUnknown }, 439 { 0x4, &IID_IOleWindow }, 440 } 441 }, 442 { 443 ID_NAME(CLSID_Shell), 444 { 445 { 0x0, &IID_IShellDispatch4 }, 446 { 0x0, &IID_IShellDispatch3 }, 447 { 0x0, &IID_IShellDispatch2 }, 448 { 0x0, &IID_IShellDispatch }, 449 { 0x0, &IID_IDispatch }, 450 { 0x0, &IID_IUnknown }, 451 { 0x4, &IID_IObjectSafety }, 452 { 0x20, &IID_IObjectWithSite }, 453 } 454 }, 455 { 456 ID_NAME(CLSID_ShellDesktop), 457 { 458 { -0x8, &CLSID_ShellDesktop }, 459 { -0x8, &IID_IObjectWithSite }, 460 { 0x0, &IID_IUnknown }, 461 { 0x4, &IID_IStorage }, 462 { 0x8, &IID_IPersistFolder2 }, 463 { 0x8, &IID_IPersistFolder }, 464 { 0x8, &IID_IPersist }, 465 { 0xc, &IID_IShellIcon }, 466 { 0x14, &IID_IContextMenuCB }, 467 { 0x18, &IID_ITranslateShellChangeNotify }, 468 { 0x1c, &IID_IItemNameLimits }, 469 { 0x20, &IID_IOleCommandTarget }, 470 { FARAWY, &IID_IShellIconOverlay }, 471 { FARAWY, &IID_IShellFolder2 }, 472 { FARAWY, &IID_IShellFolder }, 473 } 474 }, 475 { 476 ID_NAME(CLSID_ShellFSFolder), 477 { 478 { 0x0, &IID_IUnknown }, 479 { 0xc, &IID_IShellFolder2 }, 480 { 0xc, &IID_IShellFolder }, 481 { 0x10, &IID_IShellIcon }, 482 { 0x14, &IID_IShellIconOverlay }, 483 { 0x18, &IID_IPersistFolder3 }, 484 { 0x18, &IID_IPersistFolder2 }, 485 { 0x18, &IID_IPersistFolder }, 486 { 0x18, &IID_IPersist }, 487 { 0x18, &IID_IPersistFreeThreadedObject }, 488 { 0x1c, &IID_IStorage }, 489 { 0x24, &IID_IPropertySetStorage }, 490 { 0x28, &IID_IItemNameLimits }, 491 { 0x2c, &IID_IContextMenuCB }, 492 { 0x34, &IID_IOleCommandTarget }, 493 } 494 }, 495 { 496 ID_NAME(CLSID_ShellFldSetExt), 497 { 498 { 0x0, &IID_IShellPropSheetExt }, 499 { 0x0, &IID_IUnknown }, 500 { 0x4, &IID_IShellExtInit }, 501 { 0x8, &IID_IObjectWithSite }, 502 } 503 }, 504 { 505 ID_NAME(CLSID_ShellFolderView), 506 { 507 { 0x0, &IID_IShellFolderViewDual2 }, 508 { 0x0, &IID_IShellFolderViewDual }, 509 { 0x0, &IID_IDispatch }, 510 { 0x0, &IID_IUnknown }, 511 { 0x4, &IID_IShellService }, 512 { 0x8, &IID_IServiceProvider }, 513 { 0xc, &IID_IObjectSafety }, 514 { 0x14, &IID_IObjectWithSite }, 515 { 0x1c, &IID_IConnectionPointContainer }, 516 } 517 }, 518 { 519 ID_NAME(CLSID_ShellFolderViewOC), 520 { 521 { 0x0, &IID_IFolderViewOC }, 522 { 0x0, &IID_IDispatch }, 523 { 0x0, &IID_IUnknown }, 524 { 0x4, &IID_IProvideClassInfo2 }, 525 { 0x4, &IID_IProvideClassInfo }, 526 { 0x8, &IID_IObjectSafety }, 527 { 0x10, &IID_IConnectionPointContainer }, 528 { 0x88, &IID_IPersistStreamInit }, 529 { 0x88, &IID_IPersist }, 530 { 0x8c, &IID_IOleControl }, 531 { 0x90, &IID_IOleObject }, 532 { 0x94, &IID_IOleInPlaceActiveObject }, 533 { 0x98, &IID_IOleInPlaceObjectWindowless }, 534 { 0x98, &IID_IOleInPlaceObject }, 535 { 0x98, &IID_IOleWindow }, 536 } 537 }, 538 { 539 ID_NAME(CLSID_ShellItem), 540 { 541 { 0x0, &IID_IShellItem }, 542 { 0x0, &IID_IUnknown }, 543 { 0x4, &IID_IPersistIDList }, 544 { 0x8, &IID_IParentAndItem }, 545 } 546 }, 547 { 548 ID_NAME(CLSID_ShellLink), 549 { 550 { 0x0, &IID_IShellLinkA }, 551 { 0x0, &IID_IUnknown }, 552 { 0x4, &IID_IShellLinkW }, 553 { 0x8, &IID_IPersistStream }, 554 { 0xc, &IID_IPersistFile }, 555 { 0x10, &IID_IShellExtInit }, 556 { 0x14, &IID_IContextMenu3 }, 557 { 0x14, &IID_IContextMenu2 }, 558 { 0x14, &IID_IContextMenu }, 559 { 0x18, &IID_IDropTarget }, 560 { 0x1c, &IID_IQueryInfo }, 561 { 0x20, &IID_IShellLinkDataList }, 562 { 0x24, &IID_IExtractIconA }, 563 { 0x28, &IID_IExtractIconW }, 564 { 0x2c, &IID_IExtractImage2 }, 565 { 0x2c, &IID_IExtractImage }, 566 { 0x30, &IID_IPersistPropertyBag }, 567 { 0x34, &IID_IServiceProvider }, 568 { 0x38, &IID_IFilter }, 569 { 0x3c, &IID_IObjectWithSite }, 570 { 0x44, &IID_ICustomizeInfoTip }, 571 { FARAWY, &IID_ISLTracker }, 572 } 573 }, 574 #if 0 // Apparently we can only get this through Folder.Items().GetLink 575 { 576 ID_NAME(CLSID_ShellLinkObject), 577 { 578 { 0x0, &IID_IUnknown }, 579 } 580 }, 581 #endif 582 { 583 ID_NAME(CLSID_StartMenu), 584 { 585 { -0x48, &IID_IOleCommandTarget }, 586 { -0x44, &IID_IServiceProvider }, 587 { -0x40, &IID_IDeskBar }, 588 { -0x40, &IID_IOleWindow }, 589 { -0x3c, &IID_IInputObjectSite }, 590 { -0x38, &IID_IInputObject }, 591 { 0x0, &IID_IMenuPopup }, 592 { 0x0, &IID_IUnknown }, 593 { 0x4, &IID_IObjectWithSite }, 594 { 0x8, &IID_IBanneredBar }, 595 { 0xc, &IID_IInitializeObject }, 596 } 597 }, 598 { 599 ID_NAME(CLSID_StartMenuPin), 600 { 601 { 0x0, &IID_IShellExtInit }, 602 { 0x0, &IID_IUnknown }, 603 { 0x4, &IID_IContextMenu }, 604 { 0xc, &IID_IObjectWithSite }, 605 } 606 }, 607 { 608 ID_NAME(CLSID_Thumbnail), 609 { 610 { 0x0, &IID_IUnknown }, 611 { 0x4, &IID_IParentAndItem }, 612 { 0x8, &IID_IObjectWithSite }, 613 }, 614 }, 615 { 616 ID_NAME(CLSID_TrackShellMenu), 617 { 618 { 0x0, &IID_ITrackShellMenu }, 619 { 0x0, &IID_IShellMenu }, 620 { 0x0, &IID_IUnknown }, 621 { 0x4, &IID_IShellMenu2 }, 622 { 0x8, &IID_IObjectWithSite }, 623 { 0xc, &IID_IServiceProvider }, 624 } 625 }, 626 { 627 ID_NAME(CLSID_UserNotification), 628 { 629 { 0x0, &IID_IUserNotification }, 630 { 0x0, &IID_IUnknown }, 631 // { 0x4, &IID_IUserNotification2 }, // On Vista+ 632 } 633 }, 634 }; 635 static const INT ExpectedInterfaceCount = RTL_NUMBER_OF(ExpectedInterfaces); 636 637 START_TEST(shell32) 638 { 639 TestClasses(L"shell32", ExpectedInterfaces, ExpectedInterfaceCount); 640 } 641