2 * Copyright 1999, 2000 Juergen Schmied
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.
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.
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
19 #ifndef __WINE_UNDOCSHELL_H
20 #define __WINE_UNDOCSHELL_H
24 #endif /* defined(__cplusplus) */
26 /****************************************************************************
29 BOOL WINAPI
ILGetDisplayName(
33 /* type parameter for ILGetDisplayNameEx() */
34 #define ILGDN_FORPARSING 0
35 #define ILGDN_NORMAL 1
36 #define ILGDN_INFOLDER 2
38 BOOL WINAPI
ILGetDisplayNameEx(
44 LPITEMIDLIST WINAPI
ILGlobalClone(LPCITEMIDLIST pidl
);
45 void WINAPI
ILGlobalFree(LPITEMIDLIST pidl
);
46 LPITEMIDLIST WINAPI
SHSimpleIDListFromPathA (LPCSTR lpszPath
); //FIXME
47 LPITEMIDLIST WINAPI
SHSimpleIDListFromPathW (LPCWSTR lpszPath
);
49 HRESULT WINAPI
SHILCreateFromPathA (
54 HRESULT WINAPI
SHILCreateFromPathW (
62 BOOL WINAPI
StrRetToStrNA(LPSTR
,DWORD
,LPSTRRET
,const ITEMIDLIST
*);
63 BOOL WINAPI
StrRetToStrNW(LPWSTR
,DWORD
,LPSTRRET
,const ITEMIDLIST
*);
66 /****************************************************************************
67 * SHChangeNotifyRegister API
69 #define SHCNRF_InterruptLevel 0x0001
70 #define SHCNRF_ShellLevel 0x0002
71 #define SHCNRF_RecursiveInterrupt 0x1000 /* Must be combined with SHCNRF_InterruptLevel */
72 #define SHCNRF_NewDelivery 0x8000 /* Messages use shared memory */
75 /****************************************************************************
76 * Shell Common Dialogs
79 /* RunFileDlg flags */
80 #define RFF_NOBROWSE 0x01
81 #define RFF_NODEFAULT 0x02
82 #define RFF_CALCDIRECTORY 0x04
83 #define RFF_NOLABEL 0x08
84 #define RFF_NOSEPARATEMEM 0x20 /* NT only */
86 #define DE_SAMEFILE 0x71
87 #define DE_DESTSAMETREE 0x7D
89 /* RunFileFlg notification structure */
96 } NM_RUNFILEDLG
, * LPNM_RUNFILEDLG
;
98 /* RunFileDlg notification return values */
100 #define RF_CANCEL 0x01
101 #define RF_RETRY 0x02
103 void WINAPI
RunFileDlg(
106 LPCWSTR lpstrDirectory
,
108 LPCWSTR lpstrDescription
,
111 void WINAPI
ExitWindowsDialog(HWND hwndOwner
);
113 BOOL WINAPI
SHFindComputer(
114 LPCITEMIDLIST pidlRoot
,
115 LPCITEMIDLIST pidlSavedSearch
);
117 void WINAPI
SHHandleDiskFull(HWND hwndOwner
,
120 int WINAPI
SHOutOfMemoryMessageBox(
125 DWORD WINAPI
SHNetConnectionDialog(
127 LPCWSTR lpstrRemoteName
,
130 /****************************************************************************
131 * Cabinet Window Messages
134 #define CWM_SETPATH (WM_USER + 2)
135 #define CWM_WANTIDLE (WM_USER + 3)
136 #define CWM_GETSETCURRENTINFO (WM_USER + 4)
137 #define CWM_SELECTITEM (WM_USER + 5)
138 #define CWM_SELECTITEMSTR (WM_USER + 6)
139 #define CWM_GETISHELLBROWSER (WM_USER + 7)
140 #define CWM_TESTPATH (WM_USER + 9)
141 #define CWM_STATECHANGE (WM_USER + 10)
142 #define CWM_GETPATH (WM_USER + 12)
144 #define WM_GETISHELLBROWSER CWM_GETISHELLBROWSER
146 /* CWM_TESTPATH types */
147 #define CWTP_ISEQUAL 0
148 #define CWTP_ISCHILD 1
150 /* CWM_TESTPATH structure */
155 } CWTESTPATHSTRUCT
,* LPCWTESTPATHSTRUCT
;
157 /****************************************************************************
158 * System Imagelist Routines
161 int WINAPI
Shell_GetCachedImageIndexA(
166 BOOL WINAPI
Shell_GetImageLists(
167 HIMAGELIST
*lphimlLarge
,
168 HIMAGELIST
*lphimlSmall
);
170 HICON WINAPI
SHGetFileIcon(
173 DWORD dwFileAttributes
,
176 BOOL WINAPI
FileIconInit(BOOL bFullInit
);
178 /****************************************************************************
181 /* FileMenu_Create nSelHeight constants */
182 #define FM_DEFAULT_SELHEIGHT -1
183 #define FM_FULL_SELHEIGHT 0
185 /* FileMenu_Create flags */
186 #define FMF_SMALL_ICONS 0x00
187 #define FMF_LARGE_ICONS 0x08
188 #define FMF_NO_COLUMN_BREAK 0x10
190 HMENU WINAPI
FileMenu_Create(
191 COLORREF crBorderColor
,
197 void WINAPI
FileMenu_Destroy(HMENU hMenu
);
199 /* FileMenu_AppendItem constants */
200 #define FM_SEPARATOR (LPCSTR)1
201 #define FM_BLANK_ICON -1
202 #define FM_DEFAULT_HEIGHT 0
204 BOOL WINAPI
FileMenu_AppendItem(
212 /* FileMenu_InsertUsingPidl flags */
213 #define FMF_NO_EMPTY_ITEM 0x01
214 #define FMF_NO_PROGRAM_GROUPS 0x04
216 /* FileMenu_InsertUsingPidl callback function */
217 typedef void (CALLBACK
*LPFNFMCALLBACK
)(LPCITEMIDLIST pidlFolder
, LPCITEMIDLIST pidlFile
);
219 int WINAPI
FileMenu_InsertUsingPidl(
225 LPFNFMCALLBACK lpfnCallback
);
227 int WINAPI
FileMenu_ReplaceUsingPidl(
232 LPFNFMCALLBACK lpfnCallback
);
234 void WINAPI
FileMenu_Invalidate(HMENU hMenu
);
236 HMENU WINAPI
FileMenu_FindSubMenuByPidl(
240 BOOL WINAPI
FileMenu_TrackPopupMenuEx(
248 BOOL WINAPI
FileMenu_GetLastSelectedItemPidls(
250 LPCITEMIDLIST
*ppidlFolder
,
251 LPCITEMIDLIST
*ppidlItem
);
253 LRESULT WINAPI
FileMenu_MeasureItem(
255 LPMEASUREITEMSTRUCT lpmis
);
257 LRESULT WINAPI
FileMenu_DrawItem(
259 LPDRAWITEMSTRUCT lpdis
);
261 BOOL WINAPI
FileMenu_InitMenuPopup(HMENU hMenu
);
263 void WINAPI
FileMenu_AbortInitMenu(void);
265 LRESULT WINAPI
FileMenu_HandleMenuChar(
269 BOOL WINAPI
FileMenu_DeleteAllItems(HMENU hMenu
);
271 BOOL WINAPI
FileMenu_DeleteItemByCmd(
275 BOOL WINAPI
FileMenu_DeleteItemByIndex(
279 BOOL WINAPI
FileMenu_DeleteMenuItemByFirstID(
283 BOOL WINAPI
FileMenu_DeleteSeparator(HMENU hMenu
);
285 BOOL WINAPI
FileMenu_EnableItemByCmd(
290 DWORD WINAPI
FileMenu_GetItemExtent(
294 int WINAPI
FileMenu_AppendFilesForPidl(
299 int WINAPI
FileMenu_AddFilesForPidl(
306 LPFNFMCALLBACK lpfnCallback
);
308 /****************************************************************************
309 * Drag And Drop Routines
312 HRESULT WINAPI
SHRegisterDragDrop(
314 LPDROPTARGET lpDropTarget
);
316 HRESULT WINAPI
SHRevokeDragDrop(HWND hWnd
);
318 BOOL WINAPI
DAD_DragEnter(HWND hWnd
);
320 BOOL WINAPI
DAD_SetDragImageFromListView(
324 BOOL WINAPI
DAD_ShowDragImage(BOOL bShow
);
326 /****************************************************************************
327 * Path Manipulation Routines
330 BOOL WINAPI
PathAppendAW(LPVOID lpszPath1
, LPCVOID lpszPath2
);
332 LPVOID WINAPI
PathCombineAW(LPVOID szDest
, LPCVOID lpszDir
, LPCVOID lpszFile
);
334 LPVOID WINAPI
PathAddBackslashAW(LPVOID path
);
336 LPVOID WINAPI
PathBuildRootAW(LPVOID lpszPath
, int drive
);
338 LPVOID WINAPI
PathFindExtensionAW(LPCVOID path
);
340 LPVOID WINAPI
PathFindFileNameAW(LPCVOID path
);
342 LPVOID WINAPI
PathGetExtensionAW(LPCVOID lpszPath
, DWORD void1
, DWORD void2
);
344 LPVOID WINAPI
PathGetArgsAW(LPVOID lpszPath
);
346 BOOL WINAPI
PathRemoveFileSpecAW(LPVOID lpszPath
);
348 void WINAPI
PathRemoveBlanksAW(LPVOID lpszPath
);
350 VOID WINAPI
PathQuoteSpacesAW(LPVOID path
);
352 void WINAPI
PathUnquoteSpacesAW(LPVOID lpszPath
);
354 BOOL WINAPI
PathIsUNCAW(LPCVOID lpszPath
);
356 BOOL WINAPI
PathIsRelativeAW(LPCVOID lpszPath
);
358 BOOL WINAPI
PathIsRootAW(LPCVOID x
);
360 BOOL WINAPI
PathIsExeAW(LPCVOID lpszPath
);
362 BOOL WINAPI
PathIsDirectoryAW(LPCVOID lpszPath
);
364 BOOL WINAPI
PathFileExistsAW(LPCVOID lpszPath
);
366 BOOL WINAPI
PathMatchSpecAW(LPVOID lpszPath
, LPVOID lpszSpec
);
368 BOOL WINAPI
PathMakeUniqueNameAW(
371 LPCVOID lpszShortName
,
372 LPCVOID lpszLongName
,
373 LPCVOID lpszPathName
);
375 BOOL WINAPI
PathYetAnotherMakeUniqueName(
377 LPCWSTR lpszPathName
,
378 LPCWSTR lpszShortName
,
379 LPCWSTR lpszLongName
);
381 BOOL WINAPI
PathQualifyAW(LPCVOID path
);
384 /* PathResolve flags */
385 #define PRF_CHECKEXISTANCE 0x01
386 #define PRF_EXECUTABLE 0x02
387 #define PRF_QUALIFYONPATH 0x04
388 #define PRF_WINDOWS31 0x08
390 BOOL WINAPI
PathResolveAW(LPVOID lpszPath
, LPCVOID
*alpszPaths
, DWORD dwFlags
);
392 VOID WINAPI
PathSetDlgItemPathAW(HWND hDlg
, int nIDDlgItem
, LPCVOID lpszPath
);
394 /* PathProcessCommand flags */
395 #define PPCF_QUOTEPATH 0x01 /* implies PPCF_INCLUDEARGS */
396 #define PPCF_INCLUDEARGS 0x02
397 //#define PPCF_NODIRECTORIES 0x10 move to shlobj
398 #define PPCF_DONTRESOLVE 0x20
399 #define PPCF_PATHISRELATIVE 0x40
401 HRESULT WINAPI
PathProcessCommandAW(LPCVOID lpszPath
, LPVOID lpszBuff
,
402 DWORD dwBuffSize
, DWORD dwFlags
);
404 void WINAPI
PathStripPathAW(LPVOID lpszPath
);
406 BOOL WINAPI
PathStripToRootAW(LPVOID lpszPath
);
408 void WINAPI
PathRemoveArgsAW(LPVOID lpszPath
);
410 void WINAPI
PathRemoveExtensionAW(LPVOID lpszPath
);
412 int WINAPI
PathParseIconLocationAW(LPVOID lpszPath
);
414 BOOL WINAPI
PathIsSameRootAW(LPCVOID lpszPath1
, LPCVOID lpszPath2
);
416 BOOL WINAPI
PathFindOnPathAW(LPVOID sFile
, LPCVOID
*sOtherDirs
);
418 /****************************************************************************
419 * Shell Namespace Routines
422 /* Generic structure used by several messages */
429 } SFVCBINFO
, * LPSFVCBINFO
;
430 typedef const SFVCBINFO
* LPCSFVCBINFO
;
432 /* SFVCB_SELECTIONCHANGED structure */
439 } SFVSELECTSTATE
, * LPSFVSELECTSTATE
;
440 typedef const SFVSELECTSTATE
* LPCSFVSELECTSTATE
;
442 /* SFVCB_COPYHOOKCALLBACK structure */
452 } SFVCOPYHOOKINFO
, * LPSFVCOPYHOOKINFO
;
453 typedef const SFVCOPYHOOKINFO
* LPCSFVCOPYHOOKINFO
;
455 /* SFVCB_GETDETAILSOF structure */
462 } SFVCOLUMNINFO
, * LPSFVCOLUMNINFO
;
464 /****************************************************************************
468 /* SHWaitForFileToOpen flags */
469 #define SHWFF_ADD 0x01
470 #define SHWFF_REMOVE 0x02
471 #define SHWFF_WAIT 0x04
473 BOOL WINAPI
SHWaitForFileToOpen(
478 WORD WINAPI
ArrangeWindows(
483 CONST HWND
* lpKids
);
485 /* RegisterShellHook types */
486 #define RSH_DEREGISTER 0
487 #define RSH_REGISTER 1
488 #define RSH_REGISTER_PROGMAN 2
489 #define RSH_REGISTER_TASKMAN 3
491 BOOL WINAPI
RegisterShellHook(
495 /* SHCreateDefClassObject callback function */
496 typedef HRESULT (CALLBACK
*LPFNCDCOCALLBACK
)(
501 HRESULT WINAPI
SHCreateDefClassObject(
504 LPFNCDCOCALLBACK lpfnCallback
,
508 void WINAPI
SHFreeUnusedLibraries(void);
510 /* SHCreateLinks flags */
511 #define SHCLF_PREFIXNAME 0x01
512 #define SHCLF_CREATEONDESKTOP 0x02
514 HRESULT WINAPI
SHCreateLinks(
517 LPDATAOBJECT lpDataObject
,
519 LPITEMIDLIST
*lppidlLinks
);
521 DWORD WINAPI
CheckEscapesA(LPSTR string
, DWORD len
);
522 DWORD WINAPI
CheckEscapesW(LPWSTR string
, DWORD len
);
524 /* policy functions */
525 BOOL WINAPI
SHInitRestricted(LPCVOID unused
, LPCVOID inpRegKey
);
527 #define CSIDL_FOLDER_MASK 0x00ff
529 /* Utility functions */
533 INT WINAPI
Shell_GetCachedImageIndex(LPCWSTR szPath
, INT nIndex
, UINT bSimulateDoc
);
536 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
544 fname
= strrchr(filename
, '\\');
547 fname
= strrchr(filename
, '/');
557 szMsgStart
= szMsg
+ sprintf(szMsg
, "%s:%d: ", fname
, line
);
559 va_start(vl
, lpFormat
);
560 uRet
= (ULONG
) vsprintf(szMsgStart
, lpFormat
, vl
);
563 OutputDebugStringA(szMsg
);
568 #define DbgPrint(fmt, ...) \
569 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
571 static inline void DbgDumpMenuInternal(HMENU hmenu
, char* padding
, int padlevel
)
575 int count
= GetMenuItemCount(hmenu
);
577 padding
[padlevel
] = '.';
578 padding
[padlevel
+ 1] = '.';
579 padding
[padlevel
+ 2] = 0;
581 for (i
= 0; i
< count
; i
++)
583 MENUITEMINFOW mii
= { 0 };
585 mii
.cbSize
= sizeof(mii
);
586 mii
.fMask
= MIIM_STRING
| MIIM_FTYPE
| MIIM_SUBMENU
| MIIM_STATE
| MIIM_ID
;
587 mii
.dwTypeData
= label
;
588 mii
.cch
= _countof(label
);
590 GetMenuItemInfo(hmenu
, i
, TRUE
, &mii
);
592 if (mii
.fType
& MFT_BITMAP
)
593 DbgPrint("%s%2d - %08x: BITMAP %08p (state=%d, has submenu=%s)\n", padding
, i
, mii
.wID
, mii
.hbmpItem
, mii
.fState
, mii
.hSubMenu
? "TRUE" : "FALSE");
594 else if (mii
.fType
& MFT_SEPARATOR
)
595 DbgPrint("%s%2d - %08x ---SEPARATOR---\n", padding
, i
, mii
.wID
);
597 DbgPrint("%s%2d - %08x: %S (state=%d, has submenu=%s)\n", padding
, i
, mii
.wID
, mii
.dwTypeData
, mii
.fState
, mii
.hSubMenu
? "TRUE" : "FALSE");
600 DbgDumpMenuInternal(mii
.hSubMenu
, padding
, padlevel
+ 2);
604 padding
[padlevel
] = 0;
607 static __inline
void DbgDumpMenu(HMENU hmenu
)
610 DbgDumpMenuInternal(hmenu
, padding
, 0);
614 /*****************************************************************************
617 // these resources are in shell32.dll
618 #define IDB_GOBUTTON_NORMAL 0x0e6
619 #define IDB_GOBUTTON_HOT 0x0e7
621 // band ids in internet toolbar
622 #define ITBBID_MENUBAND 1
623 #define ITBBID_BRANDBAND 5
624 #define ITBBID_TOOLSBAND 2
625 #define ITBBID_ADDRESSBAND 4
627 // commands in the CGID_PrivCITCommands command group handled by the internet toolbar
628 // there seems to be some support for hiding the menubar and an auto hide feature that are
629 // unavailable in the UI
630 #define ITID_TEXTLABELS 3
631 #define ITID_TOOLBARBANDSHOWN 4
632 #define ITID_ADDRESSBANDSHOWN 5
633 #define ITID_LINKSBANDSHOWN 6
634 #define ITID_MENUBANDSHOWN 12
635 #define ITID_AUTOHIDEENABLED 13
636 #define ITID_CUSTOMIZEENABLED 20
637 #define ITID_TOOLBARLOCKED 27
639 // commands in the CGID_BrandCmdGroup command group handled by the brand band
640 #define BBID_STARTANIMATION 1
641 #define BBID_STOPANIMATION 2
643 // undocumented flags for IShellMenu::SetShellFolder
644 #define SMSET_UNKNOWN08 0x08
645 #define SMSET_UNKNOWN10 0x10
647 void WINAPI
ShellDDEInit(BOOL bInit
);
648 DWORD WINAPI
WinList_Init(void);
650 IStream
* WINAPI
SHGetViewStream(LPCITEMIDLIST
, DWORD
, LPCTSTR
, LPCTSTR
, LPCTSTR
);
652 /*****************************************************************************
655 #include <pshpack1.h>
657 typedef struct tagSHELL_LINK_HEADER
659 /* The size of this structure (always 0x0000004C) */
661 /* CLSID = class identifier (always 00021401-0000-0000-C000-000000000046) */
663 /* Flags (SHELL_LINK_DATA_FLAGS) */
665 /* Informations about the link target: */
666 DWORD dwFileAttributes
;
667 FILETIME ftCreationTime
;
668 FILETIME ftLastAccessTime
;
669 FILETIME ftLastWriteTime
;
670 DWORD nFileSizeLow
; /* only the least significant 32 bits */
671 /* The index of an icon (signed?) */
673 /* The expected window state of an application launched by the link */
675 /* The keystrokes used to launch the application */
677 /* Reserved (must be zero) */
681 } SHELL_LINK_HEADER
, *LPSHELL_LINK_HEADER
;
683 /*****************************************************************************
685 * If cbHeaderSize == 0x0000001C then use SHELL_LINK_INFOA
686 * If cbHeaderSize >= 0x00000024 then use SHELL_LINK_INFOW
688 typedef struct tagSHELL_LINK_INFOA
690 /* Size of the link info data */
692 /* Size of this structure (ANSI: = 0x0000001C) */
694 /* Specifies which fields are present/populated (SLI_*) */
696 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */
697 DWORD cbVolumeIDOffset
;
698 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */
699 DWORD cbLocalBasePathOffset
;
700 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */
701 DWORD cbCommonNetworkRelativeLinkOffset
;
702 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */
703 DWORD cbCommonPathSuffixOffset
;
704 } SHELL_LINK_INFOA
, *LPSHELL_LINK_INFOA
;
706 typedef struct tagSHELL_LINK_INFOW
708 /* Size of the link info data */
710 /* Size of this structure (Unicode: >= 0x00000024) */
712 /* Specifies which fields are present/populated (SLI_*) */
714 /* Offset of the VolumeID field (SHELL_LINK_INFO_VOLUME_ID) */
715 DWORD cbVolumeIDOffset
;
716 /* Offset of the LocalBasePath field (ANSI, NULL-terminated string) */
717 DWORD cbLocalBasePathOffset
;
718 /* Offset of the CommonNetworkRelativeLink field (SHELL_LINK_INFO_CNR_LINK) */
719 DWORD cbCommonNetworkRelativeLinkOffset
;
720 /* Offset of the CommonPathSuffix field (ANSI, NULL-terminated string) */
721 DWORD cbCommonPathSuffixOffset
;
722 /* Offset of the LocalBasePathUnicode field (Unicode, NULL-terminated string) */
723 DWORD cbLocalBasePathUnicodeOffset
;
724 /* Offset of the CommonPathSuffixUnicode field (Unicode, NULL-terminated string) */
725 DWORD cbCommonPathSuffixUnicodeOffset
;
726 } SHELL_LINK_INFOW
, *LPSHELL_LINK_INFOW
;
728 /* VolumeID, LocalBasePath, LocalBasePathUnicode(cbHeaderSize >= 0x24) are present */
729 #define SLI_VALID_LOCAL 0x00000001
730 /* CommonNetworkRelativeLink is present */
731 #define SLI_VALID_NETWORK 0x00000002
733 /*****************************************************************************
734 * SHELL_LINK_INFO_VOLUME_IDA/W
735 * If cbVolumeLabelOffset != 0x00000014 (should be 0x00000010) then use
736 * SHELL_LINK_INFO_VOLUME_IDA
737 * If cbVolumeLabelOffset == 0x00000014 then use SHELL_LINK_INFO_VOLUME_IDW
739 typedef struct tagSHELL_LINK_INFO_VOLUME_IDA
741 /* Size of the VolumeID field (> 0x00000010) */
743 /* Drive type of the drive the link target is stored on (DRIVE_*) */
745 /* Serial number of the volume the link target is stored on */
746 DWORD nDriveSerialNumber
;
747 /* Offset of the volume label (ANSI, NULL-terminated string).
748 Must be != 0x00000014 (see tagSHELL_LINK_INFO_VOLUME_IDW) */
749 DWORD cbVolumeLabelOffset
;
750 } SHELL_LINK_INFO_VOLUME_IDA
, *LPSHELL_LINK_INFO_VOLUME_IDA
;
752 typedef struct tagSHELL_LINK_INFO_VOLUME_IDW
754 /* Size of the VolumeID field (> 0x00000010) */
756 /* Drive type of the drive the link target is stored on (DRIVE_*) */
758 /* Serial number of the volume the link target is stored on */
759 DWORD nDriveSerialNumber
;
760 /* Offset of the volume label (ANSI, NULL-terminated string).
761 If the value of this field is 0x00000014, ignore it and use
762 cbVolumeLabelUnicodeOffset! */
763 DWORD cbVolumeLabelOffset
;
764 /* Offset of the volume label (Unicode, NULL-terminated string).
765 If the value of the VolumeLabelOffset field is not 0x00000014,
766 this field must be ignored (==> it doesn't exists ==> ANSI). */
767 DWORD cbVolumeLabelUnicodeOffset
;
768 } SHELL_LINK_INFO_VOLUME_IDW
, *LPSHELL_LINK_INFO_VOLUME_IDW
;
770 /*****************************************************************************
771 * SHELL_LINK_INFO_CNR_LINKA/W (CNR = Common Network Relative)
772 * If cbNetNameOffset == 0x00000014 then use SHELL_LINK_INFO_CNR_LINKA
773 * If cbNetNameOffset > 0x00000014 then use SHELL_LINK_INFO_CNR_LINKW
775 typedef struct tagSHELL_LINK_INFO_CNR_LINKA
777 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */
779 /* Specifies which fields are present/populated (SLI_CNR_*) */
781 /* Offset of the NetName field (ANSI, NULL–terminated string) */
782 DWORD cbNetNameOffset
;
783 /* Offset of the DeviceName field (ANSI, NULL–terminated string) */
784 DWORD cbDeviceNameOffset
;
785 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */
786 DWORD dwNetworkProviderType
;
787 } SHELL_LINK_INFO_CNR_LINKA
, *LPSHELL_LINK_INFO_CNR_LINKA
;
789 typedef struct tagSHELL_LINK_INFO_CNR_LINKW
791 /* Size of the CommonNetworkRelativeLink field (>= 0x00000014) */
793 /* Specifies which fields are present/populated (SLI_CNR_*) */
795 /* Offset of the NetName field (ANSI, NULL–terminated string) */
796 DWORD cbNetNameOffset
;
797 /* Offset of the DeviceName field (ANSI, NULL–terminated string) */
798 DWORD cbDeviceNameOffset
;
799 /* Type of the network provider (WNNC_NET_* defined in winnetwk.h) */
800 DWORD dwNetworkProviderType
;
801 /* Offset of the NetNameUnicode field (Unicode, NULL–terminated string) */
802 DWORD cbNetNameUnicodeOffset
;
803 /* Offset of the DeviceNameUnicode field (Unicode, NULL–terminated string) */
804 DWORD cbDeviceNameUnicodeOffset
;
805 } SHELL_LINK_INFO_CNR_LINKW
, *LPSHELL_LINK_INFO_CNR_LINKW
;
807 /* DeviceName is present */
808 #define SLI_CNR_VALID_DEVICE 0x00000001
809 /* NetworkProviderType is present */
810 #define SLI_CNR_VALID_NET_TYPE 0x00000002
812 /*****************************************************************************
813 * Shell Link Extra Data (IShellLinkDataList)
815 typedef struct tagEXP_TRACKER
817 /* .cbSize = 0x00000060, .dwSignature = 0xa0000003 */
818 DATABLOCK_HEADER dbh
;
819 /* Length >= 0x00000058 */
821 /* Must be 0x00000000 */
823 /* NetBIOS name (ANSI, unused bytes are set to zero) */
824 CHAR szMachineID
[16]; /* "variable" >= 16 (?) */
825 /* Some GUIDs for the Link Tracking service (from the FS?) */
826 GUID guidDroidVolume
;
827 GUID guidDroidObject
;
828 GUID guidDroidBirthVolume
;
829 GUID guidDroidBirthObject
;
830 } EXP_TRACKER
, *LPEXP_TRACKER
;
832 typedef struct tagEXP_SHIM
834 /* .cbSize >= 0x00000088, .dwSignature = 0xa0000008 */
835 DATABLOCK_HEADER dbh
;
836 /* Name of a shim layer to apply (Unicode, unused bytes are set to zero) */
837 WCHAR szwLayerName
[64]; /* "variable" >= 64 */
838 } EXP_SHIM
, *LPEXP_SHIM
;
840 typedef struct tagEXP_KNOWN_FOLDER
842 /* .cbSize = 0x0000001c, .dwSignature = 0xa000000b */
843 DATABLOCK_HEADER dbh
;
844 /* A GUID value that identifies a known folder */
845 GUID guidKnownFolder
;
846 /* Specifies the location of the ItemID of the first child
847 segment of the IDList specified by guidKnownFolder */
849 } EXP_KNOWN_FOLDER
, *LPEXP_KNOWN_FOLDER
;
851 typedef struct tagEXP_VISTA_ID_LIST
853 /* .cbSize >= 0x0000000a, .dwSignature = 0xa000000c */
854 DATABLOCK_HEADER dbh
;
855 /* Specifies an alternate IDList that can be used instead
856 of the "normal" IDList (SLDF_HAS_ID_LIST) */
857 /* LPITEMIDLIST pIDList; (variable) */
858 } EXP_VISTA_ID_LIST
, *LPEXP_VISTA_ID_LIST
;
860 #define EXP_TRACKER_SIG 0xa0000003
861 #define EXP_SHIM_SIG 0xa0000008
862 #define EXP_KNOWN_FOLDER_SIG 0xa000000b
863 #define EXP_VISTA_ID_LIST_SIG 0xa000000c
869 #endif /* defined(__cplusplus) */
871 #endif /* __WINE_UNDOCSHELL_H */