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