1 /* 2 * Copyright 1999, 2000 Juergen Schmied 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #ifndef __WINE_UNDOCSHELL_H 20 #define __WINE_UNDOCSHELL_H 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif /* defined(__cplusplus) */ 25 26 #if (NTDDI_VERSION < NTDDI_LONGHORN) 27 #define DBIMF_NOGRIPPER 0x0800 28 #define DBIMF_ALWAYSGRIPPER 0x1000 29 #define DBIMF_NOMARGINS 0x2000 30 #endif // NTDDI_LONGHORN 31 32 #if defined (_SHELLAPI_H) || defined (_INC_SHELLAPI) 33 34 /**************************************************************************** 35 * Taskbar interface WM_COPYDATA structures 36 * See http://www.geoffchappell.com/studies/windows/shell/shell32/api/shlnot/copydata.htm 37 */ 38 /* Data structure for Shell_NotifyIcon messages */ 39 typedef struct _TRAYNOTIFYDATAW 40 { 41 DWORD dwSignature; 42 DWORD dwMessage; 43 NOTIFYICONDATAW nid; // Always use the latest NOTIFYICONDATAW structure version. 44 } TRAYNOTIFYDATAW, *PTRAYNOTIFYDATAW; 45 // Note: One could also introduce TRAYNOTIFYDATAA 46 47 #define NI_NOTIFY_SIG 0x34753423 /* TRAYNOTIFYDATA */ 48 49 #endif /* defined (_SHELLAPI_H) || defined (_INC_SHELLAPI) */ 50 51 /**************************************************************************** 52 * Taskbar WM_COMMAND identifiers 53 */ 54 #define TWM_DOEXITWINDOWS (WM_USER + 342) 55 #define TWM_CYCLEFOCUS (WM_USER + 348) 56 57 /**************************************************************************** 58 * ProgMan messages 59 */ 60 #define WM_PROGMAN_OPENSHELLSETTINGS (WM_USER + 22) /* wParam specifies the dialog (and tab page) */ 61 #define WM_PROGMAN_SAVESTATE (WM_USER + 77) 62 63 /**************************************************************************** 64 * IDList Functions 65 */ 66 BOOL WINAPI ILGetDisplayName( 67 LPCITEMIDLIST pidl, 68 LPVOID path); 69 70 /* type parameter for ILGetDisplayNameEx() */ 71 #define ILGDN_FORPARSING 0 72 #define ILGDN_NORMAL 1 73 #define ILGDN_INFOLDER 2 74 75 BOOL WINAPI ILGetDisplayNameEx( 76 LPSHELLFOLDER psf, 77 LPCITEMIDLIST pidl, 78 LPVOID path, 79 DWORD type); 80 81 LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl); 82 void WINAPI ILGlobalFree(LPITEMIDLIST pidl); 83 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath); //FIXME 84 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath); 85 86 HRESULT WINAPI SHILCreateFromPathA ( 87 LPCSTR path, 88 LPITEMIDLIST * ppidl, 89 DWORD *attributes); 90 91 HRESULT WINAPI SHILCreateFromPathW ( 92 LPCWSTR path, 93 LPITEMIDLIST * ppidl, 94 DWORD *attributes); 95 96 HRESULT WINAPI SHInvokeCommand( 97 HWND hWnd, 98 IShellFolder* lpFolder, 99 LPCITEMIDLIST lpApidl, 100 LPCSTR lpVerb); 101 HRESULT WINAPI SHInvokeCommandOnContextMenu( 102 _In_opt_ HWND hWnd, 103 _In_opt_ IUnknown* pUnk, 104 _In_ IContextMenu* pCM, 105 _In_ UINT fCMIC, 106 _In_opt_ LPCSTR pszVerb); 107 BOOL WINAPI IContextMenu_Invoke( 108 _In_ IContextMenu *pContextMenu, 109 _In_ HWND hwnd, 110 _In_ LPCSTR lpVerb, 111 _In_ UINT uFlags); 112 113 /* 114 string functions 115 */ 116 BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*); 117 BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*); 118 119 /**************************************************************************** 120 * SHChangeNotifyRegister API 121 */ 122 #define SHCNRF_InterruptLevel 0x0001 123 #define SHCNRF_ShellLevel 0x0002 124 #define SHCNRF_RecursiveInterrupt 0x1000 /* Must be combined with SHCNRF_InterruptLevel */ 125 #define SHCNRF_NewDelivery 0x8000 /* Messages use shared memory */ 126 127 /**************************************************************************** 128 * SHChangeNotify 129 */ 130 131 typedef struct _SHCNF_PRINTJOB_INFO 132 { 133 DWORD JobId; 134 // More info,,, 135 } SHCNF_PRINTJOB_INFO, *PSHCNF_PRINTJOB_INFO; 136 137 // 138 // Add missing types for print job notifications. 139 // 140 #define SHCNF_PRINTJOBA 0x0004 141 #define SHCNF_PRINTJOBW 0x0007 142 143 HRESULT WINAPI SHUpdateRecycleBinIcon(void); 144 145 /**************************************************************************** 146 * Shell Common Dialogs 147 */ 148 149 /* RunFileDlg flags */ 150 #define RFF_NOBROWSE 0x01 /* Removes the browse button */ 151 #define RFF_NODEFAULT 0x02 /* No default item selected */ 152 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name */ 153 #define RFF_NOLABEL 0x08 /* Removes the edit box label */ 154 #define RFF_NOSEPARATEMEM 0x20 /* Removes the Separate Memory Space check box (Windows NT only) */ 155 156 /* RunFileFlg notification value and structure */ 157 #define RFN_VALIDATE (-510) 158 #if 0 // Deprecated ANSI structure 159 typedef struct _NMRUNFILEDLGA 160 { 161 NMHDR hdr; 162 LPCSTR lpFile; 163 LPCSTR lpDirectory; 164 UINT nShow; 165 } NMRUNFILEDLGA, *PNMRUNFILEDLGA, *LPNMRUNFILEDLGA; 166 #endif 167 typedef struct _NMRUNFILEDLGW 168 { 169 NMHDR hdr; 170 LPCWSTR lpFile; 171 LPCWSTR lpDirectory; 172 UINT nShow; 173 } NMRUNFILEDLGW, *PNMRUNFILEDLGW, *LPNMRUNFILEDLGW; 174 175 typedef NMRUNFILEDLGW NMRUNFILEDLG; 176 typedef PNMRUNFILEDLGW PNMRUNFILEDLG; 177 typedef LPNMRUNFILEDLGW LPNMRUNFILEDLG; 178 179 /* RunFileDlg notification return values */ 180 #define RF_OK 0x00 181 #define RF_CANCEL 0x01 182 #define RF_RETRY 0x02 183 184 void WINAPI RunFileDlg( 185 HWND hWndOwner, 186 HICON hIcon, 187 LPCWSTR lpstrDirectory, 188 LPCWSTR lpstrTitle, 189 LPCWSTR lpstrDescription, 190 UINT uFlags); 191 192 int WINAPI LogoffWindowsDialog(HWND hWndOwner); 193 void WINAPI ExitWindowsDialog(HWND hWndOwner); 194 195 BOOL WINAPI SHFindComputer( 196 LPCITEMIDLIST pidlRoot, 197 LPCITEMIDLIST pidlSavedSearch); 198 199 void WINAPI SHHandleDiskFull(HWND hwndOwner, 200 UINT uDrive); 201 202 int WINAPI SHOutOfMemoryMessageBox( 203 HWND hwndOwner, 204 LPCSTR lpCaption, 205 UINT uType); 206 207 DWORD WINAPI SHNetConnectionDialog( 208 HWND hwndOwner, 209 LPCWSTR lpstrRemoteName, 210 DWORD dwType); 211 212 BOOL WINAPI SHIsTempDisplayMode(VOID); 213 214 /**************************************************************************** 215 * Cabinet Window Messages 216 */ 217 218 #define CWM_SETPATH (WM_USER + 2) 219 #define CWM_WANTIDLE (WM_USER + 3) 220 #define CWM_GETSETCURRENTINFO (WM_USER + 4) 221 #define CWM_SELECTITEM (WM_USER + 5) 222 #define CWM_SELECTITEMSTR (WM_USER + 6) 223 #define CWM_GETISHELLBROWSER (WM_USER + 7) 224 #define CWM_TESTPATH (WM_USER + 9) 225 #define CWM_STATECHANGE (WM_USER + 10) 226 #define CWM_GETPATH (WM_USER + 12) 227 228 #define WM_GETISHELLBROWSER CWM_GETISHELLBROWSER 229 230 /* CWM_TESTPATH types */ 231 #define CWTP_ISEQUAL 0 232 #define CWTP_ISCHILD 1 233 234 /* CWM_TESTPATH structure */ 235 typedef struct 236 { 237 DWORD dwType; 238 ITEMIDLIST idl; 239 } CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT; 240 241 /**************************************************************************** 242 * System Imagelist Routines 243 */ 244 245 int WINAPI Shell_GetCachedImageIndexA( 246 LPCSTR lpszFileName, 247 int nIconIndex, 248 UINT bSimulateDoc); 249 250 BOOL WINAPI Shell_GetImageLists( 251 HIMAGELIST *lphimlLarge, 252 HIMAGELIST *lphimlSmall); 253 254 HICON WINAPI SHGetFileIcon( 255 DWORD dwReserved, 256 LPCSTR lpszPath, 257 DWORD dwFileAttributes, 258 UINT uFlags); 259 260 BOOL WINAPI FileIconInit(BOOL bFullInit); 261 262 WORD WINAPI 263 ExtractIconResInfoA( 264 _In_ HANDLE hHandle, 265 _In_ LPCSTR lpFileName, 266 _In_ WORD wIndex, 267 _Out_ LPWORD lpSize, 268 _Out_ LPHANDLE lpIcon); 269 270 WORD WINAPI 271 ExtractIconResInfoW( 272 _In_ HANDLE hHandle, 273 _In_ LPCWSTR lpFileName, 274 _In_ WORD wIndex, 275 _Out_ LPWORD lpSize, 276 _Out_ LPHANDLE lpIcon); 277 278 /**************************************************************************** 279 * File Menu Routines 280 */ 281 282 /* FileMenu_Create nSelHeight constants */ 283 #define FM_DEFAULT_SELHEIGHT -1 284 #define FM_FULL_SELHEIGHT 0 285 286 /* FileMenu_Create flags */ 287 #define FMF_SMALL_ICONS 0x00 288 #define FMF_LARGE_ICONS 0x08 289 #define FMF_NO_COLUMN_BREAK 0x10 290 291 HMENU WINAPI FileMenu_Create( 292 COLORREF crBorderColor, 293 int nBorderWidth, 294 HBITMAP hBorderBmp, 295 int nSelHeight, 296 UINT uFlags); 297 298 void WINAPI FileMenu_Destroy(HMENU hMenu); 299 300 /* FileMenu_AppendItem constants */ 301 #define FM_SEPARATOR (LPCSTR)1 302 #define FM_BLANK_ICON -1 303 #define FM_DEFAULT_HEIGHT 0 304 305 BOOL WINAPI FileMenu_AppendItem( 306 HMENU hMenu, 307 LPCSTR lpszText, 308 UINT uID, 309 int iIcon, 310 HMENU hMenuPopup, 311 int nItemHeight); 312 313 /* FileMenu_InsertUsingPidl flags */ 314 #define FMF_NO_EMPTY_ITEM 0x01 315 #define FMF_NO_PROGRAM_GROUPS 0x04 316 317 /* FileMenu_InsertUsingPidl callback function */ 318 typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile); 319 320 int WINAPI FileMenu_InsertUsingPidl( 321 HMENU hMenu, 322 UINT uID, 323 LPCITEMIDLIST pidl, 324 UINT uFlags, 325 UINT uEnumFlags, 326 LPFNFMCALLBACK lpfnCallback); 327 328 int WINAPI FileMenu_ReplaceUsingPidl( 329 HMENU hMenu, 330 UINT uID, 331 LPCITEMIDLIST pidl, 332 UINT uEnumFlags, 333 LPFNFMCALLBACK lpfnCallback); 334 335 void WINAPI FileMenu_Invalidate(HMENU hMenu); 336 337 HMENU WINAPI FileMenu_FindSubMenuByPidl( 338 HMENU hMenu, 339 LPCITEMIDLIST pidl); 340 341 BOOL WINAPI FileMenu_TrackPopupMenuEx( 342 HMENU hMenu, 343 UINT uFlags, 344 int x, 345 int y, 346 HWND hWnd, 347 LPTPMPARAMS lptpm); 348 349 BOOL WINAPI FileMenu_GetLastSelectedItemPidls( 350 UINT uReserved, 351 LPCITEMIDLIST *ppidlFolder, 352 LPCITEMIDLIST *ppidlItem); 353 354 LRESULT WINAPI FileMenu_MeasureItem( 355 HWND hWnd, 356 LPMEASUREITEMSTRUCT lpmis); 357 358 LRESULT WINAPI FileMenu_DrawItem( 359 HWND hWnd, 360 LPDRAWITEMSTRUCT lpdis); 361 362 BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu); 363 364 void WINAPI FileMenu_AbortInitMenu(void); 365 366 LRESULT WINAPI FileMenu_HandleMenuChar( 367 HMENU hMenu, 368 WPARAM wParam); 369 370 BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu); 371 372 BOOL WINAPI FileMenu_DeleteItemByCmd( 373 HMENU hMenu, 374 UINT uID); 375 376 BOOL WINAPI FileMenu_DeleteItemByIndex( 377 HMENU hMenu, 378 UINT uPos); 379 380 BOOL WINAPI FileMenu_DeleteMenuItemByFirstID( 381 HMENU hMenu, 382 UINT uID); 383 384 BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu); 385 386 BOOL WINAPI FileMenu_EnableItemByCmd( 387 HMENU hMenu, 388 UINT uID, 389 BOOL bEnable); 390 391 DWORD WINAPI FileMenu_GetItemExtent( 392 HMENU hMenu, 393 UINT uPos); 394 395 int WINAPI FileMenu_AppendFilesForPidl( 396 HMENU hMenu, 397 LPCITEMIDLIST pidl, 398 BOOL bAddSeparator); 399 400 int WINAPI FileMenu_AddFilesForPidl( 401 HMENU hMenu, 402 UINT uReserved, 403 UINT uID, 404 LPCITEMIDLIST pidl, 405 UINT uFlags, 406 UINT uEnumFlags, 407 LPFNFMCALLBACK lpfnCallback); 408 409 /**************************************************************************** 410 * Drag And Drop Routines 411 */ 412 413 HRESULT WINAPI SHRegisterDragDrop( 414 HWND hWnd, 415 LPDROPTARGET lpDropTarget); 416 417 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd); 418 419 BOOL WINAPI DAD_DragEnter(HWND hWnd); 420 421 BOOL WINAPI DAD_SetDragImageFromListView( 422 HWND hWnd, 423 POINT pt); 424 425 BOOL WINAPI DAD_ShowDragImage(BOOL bShow); 426 427 /**************************************************************************** 428 * Path Manipulation Routines 429 */ 430 431 BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2); 432 433 LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile); 434 435 LPVOID WINAPI PathAddBackslashAW(LPVOID path); 436 437 LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive); 438 439 LPVOID WINAPI PathFindExtensionAW(LPCVOID path); 440 441 LPVOID WINAPI PathFindFileNameAW(LPCVOID path); 442 443 LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath, DWORD void1, DWORD void2); 444 445 LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath); 446 447 BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath); 448 449 void WINAPI PathRemoveBlanksAW(LPVOID lpszPath); 450 451 VOID WINAPI PathQuoteSpacesAW(LPVOID path); 452 453 void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath); 454 455 BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath); 456 457 BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath); 458 459 BOOL WINAPI PathIsRootAW(LPCVOID x); 460 461 BOOL WINAPI PathIsExeAW(LPCVOID lpszPath); 462 463 BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath); 464 465 BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath); 466 467 BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec); 468 469 BOOL WINAPI PathMakeUniqueNameAW( 470 LPVOID lpszBuffer, 471 DWORD dwBuffSize, 472 LPCVOID lpszShortName, 473 LPCVOID lpszLongName, 474 LPCVOID lpszPathName); 475 476 BOOL WINAPI PathYetAnotherMakeUniqueName( 477 LPWSTR lpszBuffer, 478 LPCWSTR lpszPathName, 479 LPCWSTR lpszShortName, 480 LPCWSTR lpszLongName); 481 482 VOID WINAPI PathQualifyA(LPSTR pszPath); 483 VOID WINAPI PathQualifyW(LPWSTR pszPath); 484 VOID WINAPI PathQualifyAW(LPVOID path); 485 486 /* PathResolve flags */ 487 #define PRF_CHECKEXISTANCE 0x01 488 #define PRF_EXECUTABLE 0x02 489 #define PRF_QUALIFYONPATH 0x04 490 #define PRF_WINDOWS31 0x08 491 492 BOOL WINAPI PathResolveA(LPSTR path, LPCSTR *dirs, DWORD flags); 493 BOOL WINAPI PathResolveW(LPWSTR path, LPCWSTR *dirs, DWORD flags); 494 BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags); 495 496 VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath); 497 498 /* PathProcessCommand flags */ 499 #define PPCF_QUOTEPATH 0x01 /* implies PPCF_INCLUDEARGS */ 500 #define PPCF_INCLUDEARGS 0x02 501 //#define PPCF_NODIRECTORIES 0x10 move to shlobj 502 #define PPCF_DONTRESOLVE 0x20 503 #define PPCF_PATHISRELATIVE 0x40 504 505 HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff, 506 DWORD dwBuffSize, DWORD dwFlags); 507 508 void WINAPI PathStripPathAW(LPVOID lpszPath); 509 510 BOOL WINAPI PathStripToRootAW(LPVOID lpszPath); 511 512 void WINAPI PathRemoveArgsAW(LPVOID lpszPath); 513 514 void WINAPI PathRemoveExtensionAW(LPVOID lpszPath); 515 516 int WINAPI PathParseIconLocationAW(LPVOID lpszPath); 517 518 BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2); 519 520 BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs); 521 522 BOOL WINAPI PathIsEqualOrSubFolder(_In_ LPCWSTR pszFile1OrCSIDL, _In_ LPCWSTR pszFile2); 523 524 BOOL WINAPI PathIsTemporaryA(_In_ LPCSTR Str); 525 BOOL WINAPI PathIsTemporaryW(_In_ LPCWSTR Str); 526 527 /**************************************************************************** 528 * Shell File Operations error codes - SHFileOperationA/W 529 */ 530 531 /* Error codes could be pre-Win32 */ 532 #define DE_SAMEFILE 0x71 533 #define DE_MANYSRC1DEST 0x72 534 #define DE_DIFFDIR 0x73 535 #define DE_ROOTDIR 0x74 536 #define DE_OPCANCELLED 0x75 537 #define DE_DESTSUBTREE 0x76 538 #define DE_ACCESSDENIEDSRC 0x78 539 #define DE_PATHTOODEEP 0x79 540 #define DE_MANYDEST 0x7A 541 #define DE_INVALIDFILES 0x7C 542 #define DE_DESTSAMETREE 0x7D 543 #define DE_FLDDESTISFILE 0x7E 544 #define DE_FILEDESTISFLD 0x80 545 #define DE_FILENAMETOOLONG 0x81 546 #define DE_DEST_IS_CDROM 0x82 547 #define DE_DEST_IS_DVD 0x83 548 #define DE_DEST_IS_CDRECORD 0x84 549 #define DE_FILE_TOO_LARGE 0x85 550 #define DE_SRC_IS_CDROM 0x86 551 #define DE_SRC_IS_DVD 0x87 552 #define DE_SRC_IS_CDRECORD 0x88 553 // #define DE_ERROR_MAX 554 #define ERRORONDEST 0x10000 555 556 /**************************************************************************** 557 * Shell settings 558 */ 559 560 typedef struct _REGSHELLSTATE 561 { 562 DWORD dwSize; 563 SHELLSTATE ss; 564 } REGSHELLSTATE, *PREGSHELLSTATE; 565 #define REGSHELLSTATE_SIZE 0x24 566 #define REGSHELLSTATE_VERSION 0xD 567 C_ASSERT(sizeof(REGSHELLSTATE) == REGSHELLSTATE_SIZE); 568 569 /**************************************************************************** 570 * Shell Namespace Routines 571 */ 572 573 /* Generic structure used by several messages */ 574 typedef struct 575 { 576 DWORD dwReserved; 577 DWORD dwReserved2; 578 LPCITEMIDLIST pidl; 579 LPDWORD lpdwUser; 580 } SFVCBINFO, * LPSFVCBINFO; 581 typedef const SFVCBINFO * LPCSFVCBINFO; 582 583 /* SFVCB_SELECTIONCHANGED structure */ 584 typedef struct 585 { 586 UINT uOldState; 587 UINT uNewState; 588 LPCITEMIDLIST pidl; 589 LPDWORD lpdwUser; 590 } SFVSELECTSTATE, * LPSFVSELECTSTATE; 591 typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE; 592 593 /* SFVCB_COPYHOOKCALLBACK structure */ 594 typedef struct 595 { 596 HWND hwnd; 597 UINT wFunc; 598 UINT wFlags; 599 LPCSTR pszSrcFile; 600 DWORD dwSrcAttribs; 601 LPCSTR pszDestFile; 602 DWORD dwDestAttribs; 603 } SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO; 604 typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO; 605 606 /* SFVCB_GETDETAILSOF structure */ 607 typedef struct 608 { 609 LPCITEMIDLIST pidl; 610 int fmt; 611 int cx; 612 STRRET lpText; 613 } SFVCOLUMNINFO, * LPSFVCOLUMNINFO; 614 615 /**************************************************************************** 616 * Misc Stuff 617 */ 618 619 BOOL WINAPI 620 RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf); 621 622 /* SHWaitForFileToOpen flags */ 623 #define SHWFF_ADD 0x01 624 #define SHWFF_REMOVE 0x02 625 #define SHWFF_WAIT 0x04 626 627 BOOL WINAPI SHWaitForFileToOpen( 628 LPCITEMIDLIST pidl, 629 DWORD dwFlags, 630 DWORD dwTimeout); 631 632 WORD WINAPI ArrangeWindows( 633 HWND hwndParent, 634 DWORD dwReserved, 635 LPCRECT lpRect, 636 WORD cKids, 637 CONST HWND * lpKids); 638 639 /* Flags for ShellExecCmdLine */ 640 #define SECL_NO_UI 0x2 641 #define SECL_LOG_USAGE 0x8 642 #define SECL_USE_IDLIST 0x10 643 #define SECL_ALLOW_NONEXE 0x20 644 #define SECL_RUNAS 0x40 645 646 HRESULT WINAPI ShellExecCmdLine( 647 HWND hwnd, 648 LPCWSTR pwszCommand, 649 LPCWSTR pwszStartDir, 650 int nShow, 651 LPVOID pUnused, 652 DWORD dwSeclFlags); 653 654 HINSTANCE WINAPI 655 RealShellExecuteA( 656 _In_opt_ HWND hwnd, 657 _In_opt_ LPCSTR lpOperation, 658 _In_opt_ LPCSTR lpFile, 659 _In_opt_ LPCSTR lpParameters, 660 _In_opt_ LPCSTR lpDirectory, 661 _In_opt_ LPSTR lpReturn, 662 _In_opt_ LPCSTR lpTitle, 663 _In_opt_ LPVOID lpReserved, 664 _In_ INT nCmdShow, 665 _Out_opt_ PHANDLE lphProcess); 666 667 HINSTANCE WINAPI 668 RealShellExecuteW( 669 _In_opt_ HWND hwnd, 670 _In_opt_ LPCWSTR lpOperation, 671 _In_opt_ LPCWSTR lpFile, 672 _In_opt_ LPCWSTR lpParameters, 673 _In_opt_ LPCWSTR lpDirectory, 674 _In_opt_ LPWSTR lpReturn, 675 _In_opt_ LPCWSTR lpTitle, 676 _In_opt_ LPVOID lpReserved, 677 _In_ INT nCmdShow, 678 _Out_opt_ PHANDLE lphProcess); 679 680 HINSTANCE WINAPI 681 RealShellExecuteExA( 682 _In_opt_ HWND hwnd, 683 _In_opt_ LPCSTR lpOperation, 684 _In_opt_ LPCSTR lpFile, 685 _In_opt_ LPCSTR lpParameters, 686 _In_opt_ LPCSTR lpDirectory, 687 _In_opt_ LPSTR lpReturn, 688 _In_opt_ LPCSTR lpTitle, 689 _In_opt_ LPVOID lpReserved, 690 _In_ INT nCmdShow, 691 _Out_opt_ PHANDLE lphProcess, 692 _In_ DWORD dwFlags); 693 694 HINSTANCE WINAPI 695 RealShellExecuteExW( 696 _In_opt_ HWND hwnd, 697 _In_opt_ LPCWSTR lpOperation, 698 _In_opt_ LPCWSTR lpFile, 699 _In_opt_ LPCWSTR lpParameters, 700 _In_opt_ LPCWSTR lpDirectory, 701 _In_opt_ LPWSTR lpReturn, 702 _In_opt_ LPCWSTR lpTitle, 703 _In_opt_ LPVOID lpReserved, 704 _In_ INT nCmdShow, 705 _Out_opt_ PHANDLE lphProcess, 706 _In_ DWORD dwFlags); 707 708 /* RegisterShellHook types */ 709 #define RSH_DEREGISTER 0 710 #define RSH_REGISTER 1 711 #define RSH_REGISTER_PROGMAN 2 712 #define RSH_REGISTER_TASKMAN 3 713 714 BOOL WINAPI RegisterShellHook( 715 HWND hWnd, 716 DWORD dwType); 717 718 /* SHCreateDefClassObject callback function */ 719 typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)( 720 LPUNKNOWN pUnkOuter, 721 REFIID riidObject, 722 LPVOID *ppvObject); 723 724 HRESULT WINAPI SHCreateDefClassObject( 725 REFIID riidFactory, 726 LPVOID *ppvFactory, 727 LPFNCDCOCALLBACK lpfnCallback, 728 LPDWORD lpdwUsage, 729 REFIID riidObject); 730 731 void WINAPI SHFreeUnusedLibraries(void); 732 733 /* SHCreateLinks flags */ 734 #define SHCLF_PREFIXNAME 0x01 735 #define SHCLF_CREATEONDESKTOP 0x02 736 737 HRESULT WINAPI SHCreateLinks( 738 HWND hWnd, 739 LPCSTR lpszDir, 740 LPDATAOBJECT lpDataObject, 741 UINT uFlags, 742 LPITEMIDLIST *lppidlLinks); 743 744 VOID WINAPI CheckEscapesA(LPSTR string, DWORD len); 745 VOID WINAPI CheckEscapesW(LPWSTR string, DWORD len); 746 747 /* policy functions */ 748 BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey); 749 750 #define CSIDL_FOLDER_MASK 0x00ff 751 752 /* Utility functions */ 753 #include <stdio.h> 754 755 #define SMC_EXEC 4 756 INT WINAPI Shell_GetCachedImageIndex(LPCWSTR szPath, INT nIndex, UINT bSimulateDoc); 757 758 HRESULT WINAPI SHCreatePropertyBag(_In_ REFIID riid, _Out_ void **ppvObj); 759 HRESULT WINAPI SHLimitInputCombo(HWND hWnd, IShellFolder *psf); 760 HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv); 761 762 BOOL WINAPI GUIDFromStringA( 763 _In_ PCSTR psz, 764 _Out_ LPGUID pguid); 765 BOOL WINAPI GUIDFromStringW( 766 _In_ PCWSTR psz, 767 _Out_ LPGUID pguid); 768 769 LPSTR WINAPI SheRemoveQuotesA(LPSTR psz); 770 LPWSTR WINAPI SheRemoveQuotesW(LPWSTR psz); 771 772 /* Flags for Int64ToString and LargeIntegerToString */ 773 #define FMT_USE_NUMDIGITS 0x01 774 #define FMT_USE_LEADZERO 0x02 775 #define FMT_USE_GROUPING 0x04 776 #define FMT_USE_DECIMAL 0x08 777 #define FMT_USE_THOUSAND 0x10 778 #define FMT_USE_NEGNUMBER 0x20 779 780 INT WINAPI 781 Int64ToString( 782 _In_ LONGLONG llValue, 783 _Out_writes_z_(cchOut) LPWSTR pszOut, 784 _In_ UINT cchOut, 785 _In_ BOOL bUseFormat, 786 _In_opt_ const NUMBERFMTW *pNumberFormat, 787 _In_ DWORD dwNumberFlags); 788 789 INT WINAPI 790 LargeIntegerToString( 791 _In_ const LARGE_INTEGER *pLargeInt, 792 _Out_writes_z_(cchOut) LPWSTR pszOut, 793 _In_ UINT cchOut, 794 _In_ BOOL bUseFormat, 795 _In_opt_ const NUMBERFMTW *pNumberFormat, 796 _In_ DWORD dwNumberFlags); 797 798 LPWSTR WINAPI 799 ShortSizeFormatW( 800 _In_ DWORD dwNumber, 801 _Out_writes_(0x8FFF) LPWSTR pszBuffer); 802 803 BOOL WINAPI SHOpenEffectiveToken(_Out_ LPHANDLE phToken); 804 DWORD WINAPI SHGetUserSessionId(_In_opt_ HANDLE hToken); 805 806 typedef HRESULT (CALLBACK *PRIVILEGED_FUNCTION)(LPARAM lParam); 807 808 HRESULT WINAPI 809 SHInvokePrivilegedFunctionW( 810 _In_z_ LPCWSTR pszName, 811 _In_ PRIVILEGED_FUNCTION fn, 812 _In_opt_ LPARAM lParam); 813 814 BOOL WINAPI 815 SHTestTokenPrivilegeW(_In_opt_ HANDLE hToken, _In_z_ LPCWSTR lpName); 816 BOOL WINAPI IsSuspendAllowed(VOID); 817 818 BOOL WINAPI 819 Activate_RunDLL( 820 _In_ HWND hwnd, 821 _In_ HINSTANCE hinst, 822 _In_ LPCWSTR cmdline, 823 _In_ INT cmdshow); 824 825 BOOL WINAPI SHSettingsChanged(LPCVOID unused, LPCWSTR pszKey); 826 827 /***************************************************************************** 828 * Shell32 resources 829 */ 830 // these resources are in shell32.dll 831 #define IDB_GOBUTTON_NORMAL 0x0e6 832 #define IDB_GOBUTTON_HOT 0x0e7 833 834 // band ids in internet toolbar 835 #define ITBBID_MENUBAND 1 836 #define ITBBID_BRANDBAND 5 837 #define ITBBID_TOOLSBAND 2 838 #define ITBBID_ADDRESSBAND 4 839 840 // commands in the CGID_PrivCITCommands command group handled by the internet toolbar 841 // there seems to be some support for hiding the menubar and an auto hide feature that are 842 // unavailable in the UI 843 #define ITID_TEXTLABELS 3 844 #define ITID_TOOLBARBANDSHOWN 4 845 #define ITID_ADDRESSBANDSHOWN 5 846 #define ITID_LINKSBANDSHOWN 6 847 #define ITID_MENUBANDSHOWN 12 848 #define ITID_AUTOHIDEENABLED 13 849 #define ITID_CUSTOMIZEENABLED 20 850 #define ITID_TOOLBARLOCKED 27 851 852 // commands in the CGID_BrandCmdGroup command group handled by the brand band 853 #define BBID_STARTANIMATION 1 854 #define BBID_STOPANIMATION 2 855 856 // undocumented flags for IShellMenu::SetShellFolder 857 #define SMSET_UNKNOWN08 0x08 858 #define SMSET_UNKNOWN10 0x10 859 860 // explorer tray commands 861 #define TRAYCMD_STARTMENU 305 862 #define TRAYCMD_RUN_DIALOG 401 863 #define TRAYCMD_LOGOFF_DIALOG 402 864 #define TRAYCMD_CASCADE 403 865 #define TRAYCMD_TILE_H 404 866 #define TRAYCMD_TILE_V 405 867 #define TRAYCMD_TOGGLE_DESKTOP 407 868 #define TRAYCMD_DATE_AND_TIME 408 869 #define TRAYCMD_TASKBAR_PROPERTIES 413 870 #define TRAYCMD_MINIMIZE_ALL 415 871 #define TRAYCMD_RESTORE_ALL 416 872 #define TRAYCMD_SHOW_DESKTOP 419 873 #define TRAYCMD_SHOW_TASK_MGR 420 874 #define TRAYCMD_CUSTOMIZE_TASKBAR 421 875 #define TRAYCMD_LOCK_TASKBAR 424 876 #define TRAYCMD_HELP_AND_SUPPORT 503 877 #define TRAYCMD_CONTROL_PANEL 505 878 #define TRAYCMD_SHUTDOWN_DIALOG 506 879 #define TRAYCMD_PRINTERS_AND_FAXES 510 880 #define TRAYCMD_LOCK_DESKTOP 517 881 #define TRAYCMD_SWITCH_USER_DIALOG 5000 882 #define TRAYCMD_SEARCH_FILES 41093 883 #define TRAYCMD_SEARCH_COMPUTERS 41094 884 885 // Explorer Tray Application Bar Data Message Commands 886 #define TABDMC_APPBAR 0 887 #define TABDMC_NOTIFY 1 888 #define TABDMC_LOADINPROC 2 889 890 void WINAPI ShellDDEInit(BOOL bInit); 891 DWORD WINAPI WinList_Init(void); 892 893 IStream* WINAPI SHGetViewStream(LPCITEMIDLIST, DWORD, LPCTSTR, LPCTSTR, LPCTSTR); 894 895 HRESULT WINAPI SHCreateSessionKey(REGSAM samDesired, PHKEY phKey); 896 897 LONG WINAPI SHRegQueryValueExA( 898 HKEY hkey, 899 LPCSTR lpValueName, 900 LPDWORD lpReserved, 901 LPDWORD lpType, 902 LPBYTE lpData, 903 LPDWORD lpcbData); 904 LONG WINAPI SHRegQueryValueExW( 905 HKEY hkey, 906 LPCWSTR pszValue, 907 LPDWORD pdwReserved, 908 LPDWORD pdwType, 909 LPVOID pvData, 910 LPDWORD pcbData); 911 #ifdef UNICODE 912 #define SHRegQueryValueEx SHRegQueryValueExW 913 #else 914 #define SHRegQueryValueEx SHRegQueryValueExA 915 #endif 916 917 HRESULT WINAPI 918 CopyStreamUI( 919 _In_ IStream *pSrc, 920 _Out_ IStream *pDst, 921 _Inout_opt_ IProgressDialog *pProgress, 922 _In_opt_ DWORDLONG dwlSize); 923 924 /***************************************************************************** 925 * INVALID_FILETITLE_CHARACTERS 926 */ 927 928 #define INVALID_FILETITLE_CHARACTERSA "\\/:*?\"<>|" 929 #define INVALID_FILETITLE_CHARACTERSW L"\\/:*?\"<>|" 930 931 #ifdef UNICODE 932 #define INVALID_FILETITLE_CHARACTERS INVALID_FILETITLE_CHARACTERSW 933 #else 934 #define INVALID_FILETITLE_CHARACTERS INVALID_FILETITLE_CHARACTERSA 935 #endif 936 937 /***************************************************************************** 938 * Shell Link 939 */ 940 #include <pshpack1.h> 941 942 typedef struct tagSHELL_LINK_HEADER 943 { 944 /* The size of this structure (always 0x0000004C) */ 945 DWORD dwSize; 946 /* CLSID = class identifier (always 00021401-0000-0000-C000-000000000046) */ 947 CLSID clsid; 948 /* Flags (SHELL_LINK_DATA_FLAGS) */ 949 DWORD dwFlags; 950 /* Informations about the link target: */ 951 DWORD dwFileAttributes; 952 FILETIME ftCreationTime; 953 FILETIME ftLastAccessTime; 954 FILETIME ftLastWriteTime; 955 DWORD nFileSizeLow; /* only the least significant 32 bits */ 956 /* The index of an icon (signed?) */ 957 DWORD nIconIndex; 958 /* The expected window state of an application launched by the link */ 959 DWORD nShowCommand; 960 /* The keystrokes used to launch the application */ 961 WORD wHotKey; 962 /* Reserved (must be zero) */ 963 WORD wReserved1; 964 DWORD dwReserved2; 965 DWORD dwReserved3; 966 } SHELL_LINK_HEADER, *LPSHELL_LINK_HEADER; 967 968 /***************************************************************************** 969 * SHELL_LINK_INFOA/W 970 * If cbHeaderSize == 0x0000001C then use SHELL_LINK_INFOA 971 * If cbHeaderSize >= 0x00000024 then use SHELL_LINK_INFOW 972 */ 973 typedef struct tagSHELL_LINK_INFOA 974 { 975 /* Size of the link info data */ 976 DWORD cbSize; 977 /* Size of this structure (ANSI: = 0x0000001C) */ 978 DWORD cbHeaderSize; 979 /* Specifies which fields are present/populated (SLI_*) */ 980 DWORD dwFlags; 981 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */ 982 DWORD cbVolumeIDOffset; 983 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */ 984 DWORD cbLocalBasePathOffset; 985 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */ 986 DWORD cbCommonNetworkRelativeLinkOffset; 987 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */ 988 DWORD cbCommonPathSuffixOffset; 989 } SHELL_LINK_INFOA, *LPSHELL_LINK_INFOA; 990 991 typedef struct tagSHELL_LINK_INFOW 992 { 993 /* Size of the link info data */ 994 DWORD cbSize; 995 /* Size of this structure (Unicode: >= 0x00000024) */ 996 DWORD cbHeaderSize; 997 /* Specifies which fields are present/populated (SLI_*) */ 998 DWORD dwFlags; 999 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */ 1000 DWORD cbVolumeIDOffset; 1001 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */ 1002 DWORD cbLocalBasePathOffset; 1003 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */ 1004 DWORD cbCommonNetworkRelativeLinkOffset; 1005 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */ 1006 DWORD cbCommonPathSuffixOffset; 1007 /* Offset of the LocalBasePathUnicode field (Unicode, NULL-terminated string) */ 1008 DWORD cbLocalBasePathUnicodeOffset; 1009 /* Offset of the CommonPathSuffixUnicode field (Unicode, NULL-terminated string) */ 1010 DWORD cbCommonPathSuffixUnicodeOffset; 1011 } SHELL_LINK_INFOW, *LPSHELL_LINK_INFOW; 1012 1013 /* VolumeID, LocalBasePath, LocalBasePathUnicode(cbHeaderSize >= 0x24) are present */ 1014 #define SLI_VALID_LOCAL 0x00000001 1015 /* CommonNetworkRelativeLink is present */ 1016 #define SLI_VALID_NETWORK 0x00000002 1017 1018 /***************************************************************************** 1019 * SHELL_LINK_INFO_VOLUME_IDA/W 1020 * If cbVolumeLabelOffset != 0x00000014 (should be 0x00000010) then use 1021 * SHELL_LINK_INFO_VOLUME_IDA 1022 * If cbVolumeLabelOffset == 0x00000014 then use SHELL_LINK_INFO_VOLUME_IDW 1023 */ 1024 typedef struct tagSHELL_LINK_INFO_VOLUME_IDA 1025 { 1026 /* Size of the VolumeID field (> 0x00000010) */ 1027 DWORD cbSize; 1028 /* Drive type of the drive the link target is stored on (DRIVE_*) */ 1029 DWORD dwDriveType; 1030 /* Serial number of the volume the link target is stored on */ 1031 DWORD nDriveSerialNumber; 1032 /* Offset of the volume label (ANSI, NULL-terminated string). 1033 Must be != 0x00000014 (see tagSHELL_LINK_INFO_VOLUME_IDW) */ 1034 DWORD cbVolumeLabelOffset; 1035 } SHELL_LINK_INFO_VOLUME_IDA, *LPSHELL_LINK_INFO_VOLUME_IDA; 1036 1037 typedef struct tagSHELL_LINK_INFO_VOLUME_IDW 1038 { 1039 /* Size of the VolumeID field (> 0x00000010) */ 1040 DWORD cbSize; 1041 /* Drive type of the drive the link target is stored on (DRIVE_*) */ 1042 DWORD dwDriveType; 1043 /* Serial number of the volume the link target is stored on */ 1044 DWORD nDriveSerialNumber; 1045 /* Offset of the volume label (ANSI, NULL-terminated string). 1046 If the value of this field is 0x00000014, ignore it and use 1047 cbVolumeLabelUnicodeOffset! */ 1048 DWORD cbVolumeLabelOffset; 1049 /* Offset of the volume label (Unicode, NULL-terminated string). 1050 If the value of the VolumeLabelOffset field is not 0x00000014, 1051 this field must be ignored (==> it doesn't exists ==> ANSI). */ 1052 DWORD cbVolumeLabelUnicodeOffset; 1053 } SHELL_LINK_INFO_VOLUME_IDW, *LPSHELL_LINK_INFO_VOLUME_IDW; 1054 1055 /***************************************************************************** 1056 * SHELL_LINK_INFO_CNR_LINKA/W (CNR = Common Network Relative) 1057 * If cbNetNameOffset == 0x00000014 then use SHELL_LINK_INFO_CNR_LINKA 1058 * If cbNetNameOffset > 0x00000014 then use SHELL_LINK_INFO_CNR_LINKW 1059 */ 1060 typedef struct tagSHELL_LINK_INFO_CNR_LINKA 1061 { 1062 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */ 1063 DWORD cbSize; 1064 /* Specifies which fields are present/populated (SLI_CNR_*) */ 1065 DWORD dwFlags; 1066 /* Offset of the NetName field (ANSI, NULL–terminated string) */ 1067 DWORD cbNetNameOffset; 1068 /* Offset of the DeviceName field (ANSI, NULL–terminated string) */ 1069 DWORD cbDeviceNameOffset; 1070 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */ 1071 DWORD dwNetworkProviderType; 1072 } SHELL_LINK_INFO_CNR_LINKA, *LPSHELL_LINK_INFO_CNR_LINKA; 1073 1074 typedef struct tagSHELL_LINK_INFO_CNR_LINKW 1075 { 1076 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */ 1077 DWORD cbSize; 1078 /* Specifies which fields are present/populated (SLI_CNR_*) */ 1079 DWORD dwFlags; 1080 /* Offset of the NetName field (ANSI, NULL–terminated string) */ 1081 DWORD cbNetNameOffset; 1082 /* Offset of the DeviceName field (ANSI, NULL–terminated string) */ 1083 DWORD cbDeviceNameOffset; 1084 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */ 1085 DWORD dwNetworkProviderType; 1086 /* Offset of the NetNameUnicode field (Unicode, NULL–terminated string) */ 1087 DWORD cbNetNameUnicodeOffset; 1088 /* Offset of the DeviceNameUnicode field (Unicode, NULL–terminated string) */ 1089 DWORD cbDeviceNameUnicodeOffset; 1090 } SHELL_LINK_INFO_CNR_LINKW, *LPSHELL_LINK_INFO_CNR_LINKW; 1091 1092 /* DeviceName is present */ 1093 #define SLI_CNR_VALID_DEVICE 0x00000001 1094 /* NetworkProviderType is present */ 1095 #define SLI_CNR_VALID_NET_TYPE 0x00000002 1096 1097 /***************************************************************************** 1098 * Shell Link Extra Data (IShellLinkDataList) 1099 */ 1100 typedef struct tagEXP_TRACKER 1101 { 1102 /* .cbSize = 0x00000060, .dwSignature = 0xa0000003 */ 1103 DATABLOCK_HEADER dbh; 1104 /* Length >= 0x00000058 */ 1105 DWORD nLength; 1106 /* Must be 0x00000000 */ 1107 DWORD nVersion; 1108 /* NetBIOS name (ANSI, unused bytes are set to zero) */ 1109 CHAR szMachineID[16]; /* "variable" >= 16 (?) */ 1110 /* Some GUIDs for the Link Tracking service (from the FS?) */ 1111 GUID guidDroidVolume; 1112 GUID guidDroidObject; 1113 GUID guidDroidBirthVolume; 1114 GUID guidDroidBirthObject; 1115 } EXP_TRACKER, *LPEXP_TRACKER; 1116 1117 typedef struct tagEXP_SHIM 1118 { 1119 /* .cbSize >= 0x00000088, .dwSignature = 0xa0000008 */ 1120 DATABLOCK_HEADER dbh; 1121 /* Name of a shim layer to apply (Unicode, unused bytes are set to zero) */ 1122 WCHAR szwLayerName[64]; /* "variable" >= 64 */ 1123 } EXP_SHIM, *LPEXP_SHIM; 1124 1125 typedef struct tagEXP_KNOWN_FOLDER 1126 { 1127 /* .cbSize = 0x0000001c, .dwSignature = 0xa000000b */ 1128 DATABLOCK_HEADER dbh; 1129 /* A GUID value that identifies a known folder */ 1130 GUID guidKnownFolder; 1131 /* Specifies the location of the ItemID of the first child 1132 segment of the IDList specified by guidKnownFolder */ 1133 DWORD cbOffset; 1134 } EXP_KNOWN_FOLDER, *LPEXP_KNOWN_FOLDER; 1135 1136 typedef struct tagEXP_VISTA_ID_LIST 1137 { 1138 /* .cbSize >= 0x0000000a, .dwSignature = 0xa000000c */ 1139 DATABLOCK_HEADER dbh; 1140 /* Specifies an alternate IDList that can be used instead 1141 of the "normal" IDList (SLDF_HAS_ID_LIST) */ 1142 /* LPITEMIDLIST pIDList; (variable) */ 1143 } EXP_VISTA_ID_LIST, *LPEXP_VISTA_ID_LIST; 1144 1145 #define EXP_TRACKER_SIG 0xa0000003 1146 #define EXP_SHIM_SIG 0xa0000008 1147 #define EXP_KNOWN_FOLDER_SIG 0xa000000b 1148 #define EXP_VISTA_ID_LIST_SIG 0xa000000c 1149 1150 /* Not compatible yet */ 1151 typedef struct SFVM_CUSTOMVIEWINFO_DATA 1152 { 1153 ULONG cbSize; 1154 HBITMAP hbmBack; 1155 COLORREF clrText; 1156 COLORREF clrTextBack; 1157 } SFVM_CUSTOMVIEWINFO_DATA, *LPSFVM_CUSTOMVIEWINFO_DATA; 1158 1159 #include <poppack.h> 1160 1161 #ifdef __cplusplus 1162 } /* extern "C" */ 1163 #endif /* defined(__cplusplus) */ 1164 1165 #endif /* __WINE_UNDOCSHELL_H */ 1166