master
   1/**
   2 * This file is part of the mingw-w64 runtime package.
   3 * No warranty is given; refer to the file DISCLAIMER within this package.
   4 */
   5
   6#ifndef _SHLOBJ_H_
   7#define _SHLOBJ_H_
   8
   9#include <wtypesbase.h>
  10#include <wincrypt.h>
  11#include <winapifamily.h>
  12
  13#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || defined(WINSTORECOMPAT)
  14
  15#ifndef _SHFOLDER_H_
  16#define CSIDL_FLAG_CREATE 0x8000
  17#endif
  18
  19#ifndef SHFOLDERAPI
  20#if defined (_SHFOLDER_) || defined (_SHELL32_)
  21#define SHFOLDERAPI STDAPI
  22#else
  23#define SHFOLDERAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  24#endif
  25#endif
  26
  27#define CSIDL_PERSONAL 0x0005
  28#define CSIDL_MYPICTURES 0x0027
  29
  30#define CSIDL_APPDATA 0x001a
  31#define CSIDL_MYMUSIC 0x000d
  32#define CSIDL_MYVIDEO 0x000e
  33
  34typedef enum {
  35  SHGFP_TYPE_CURRENT = 0,
  36  SHGFP_TYPE_DEFAULT = 1
  37} SHGFP_TYPE;
  38
  39  SHFOLDERAPI SHGetFolderPathW (HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
  40
  41#endif
  42
  43#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  44
  45#include <_mingw_unicode.h>
  46
  47#ifndef _WINRESRC_
  48#ifndef _WIN32_IE
  49#define _WIN32_IE 0x0501
  50#endif
  51#endif
  52
  53#ifndef SNDMSG
  54#ifdef __cplusplus
  55#define SNDMSG ::SendMessage
  56#else
  57#define SNDMSG SendMessage
  58#endif
  59#endif
  60
  61#ifndef WINSHELLAPI
  62#ifdef _SHELL32_
  63#define WINSHELLAPI
  64#else
  65#define WINSHELLAPI DECLSPEC_IMPORT
  66#endif
  67#endif
  68
  69#ifndef SHSTDAPI
  70#ifdef _SHELL32_
  71#define SHSTDAPI STDAPI
  72#define SHSTDAPI_(type) STDAPI_(type)
  73#else
  74#define SHSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  75#define SHSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  76#endif
  77#endif
  78
  79#ifndef SHDOCAPI
  80#ifdef _SHDOCVW_
  81#define SHDOCAPI STDAPI
  82#define SHDOCAPI_(type) STDAPI_(type)
  83#else
  84#define SHDOCAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  85#define SHDOCAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  86#endif
  87#endif
  88
  89#ifndef SHSTDDOCAPI
  90#if defined (_SHDOCVW_) || defined (_SHELL32_)
  91#define SHSTDDOCAPI STDAPI
  92#define SHSTDDOCAPI_(type) STDAPI_(type)
  93#else
  94#define SHSTDDOCAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  95#define SHSTDDOCAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  96#endif
  97#endif
  98
  99#ifndef BROWSEUIAPI
 100#ifdef _BROWSEUI_
 101#define BROWSEUIAPI STDAPI
 102#define BROWSEUIAPI_(type) STDAPI_(type)
 103#else
 104#define BROWSEUIAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
 105#define BROWSEUIAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
 106#endif
 107#endif
 108
 109#include <ole2.h>
 110
 111#ifndef _PRSHT_H_
 112#include <prsht.h>
 113#endif
 114
 115#ifndef _INC_COMMCTRL
 116#include <commctrl.h>
 117#endif
 118
 119#ifndef INITGUID
 120#include <shlguid.h>
 121#endif
 122
 123#include <shtypes.h>
 124#include <shobjidl.h>
 125
 126#ifdef __cplusplus
 127extern "C" {
 128#endif
 129
 130#include <pshpack1.h>
 131
 132  SHSTDAPI SHGetMalloc (IMalloc **ppMalloc);
 133  SHSTDAPI_(void *) SHAlloc (SIZE_T cb);
 134  SHSTDAPI_(void) SHFree (void *pv);
 135
 136#define GIL_OPENICON 0x1
 137#define GIL_FORSHELL 0x2
 138#define GIL_ASYNC 0x20
 139#define GIL_DEFAULTICON 0x40
 140#define GIL_FORSHORTCUT 0x80
 141#define GIL_CHECKSHIELD 0x200
 142
 143#define GIL_SIMULATEDOC 0x1
 144#define GIL_PERINSTANCE 0x2
 145#define GIL_PERCLASS 0x4
 146#define GIL_NOTFILENAME 0x8
 147#define GIL_DONTCACHE 0x10
 148#define GIL_SHIELD 0x200
 149#define GIL_FORCENOSHIELD 0x400
 150
 151#undef INTERFACE
 152#define INTERFACE IExtractIconA
 153  DECLARE_INTERFACE_IID_ (IExtractIconA, IUnknown, "000214eb-0000-0000-c000-000000000046") {
 154    STDMETHOD(GetIconLocation) (THIS_ UINT uFlags, PSTR pszIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) PURE;
 155    STDMETHOD(Extract) (THIS_ PCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) PURE;
 156  };
 157  typedef IExtractIconA *LPEXTRACTICONA;
 158
 159#undef INTERFACE
 160#define INTERFACE IExtractIconW
 161  DECLARE_INTERFACE_IID_ (IExtractIconW, IUnknown, "000214fa-0000-0000-c000-000000000046") {
 162    STDMETHOD(GetIconLocation) (THIS_ UINT uFlags, PWSTR pszIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) PURE;
 163    STDMETHOD(Extract) (THIS_ PCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) PURE;
 164  };
 165  typedef IExtractIconW *LPEXTRACTICONW;
 166
 167#define IExtractIcon __MINGW_NAME_AW(IExtractIcon)
 168#define IExtractIconVtbl __MINGW_NAME_AW_EXT(IExtractIcon,Vtbl)
 169#define LPEXTRACTICON __MINGW_NAME_AW(LPEXTRACTICON)
 170
 171#undef INTERFACE
 172#define INTERFACE IShellIconOverlayIdentifier
 173  DECLARE_INTERFACE_IID_ (IShellIconOverlayIdentifier, IUnknown, "0c6c4200-c589-11d0-999a-00c04fd655e1") {
 174    STDMETHOD(IsMemberOf) (THIS_ PCWSTR pwszPath, DWORD dwAttrib) PURE;
 175    STDMETHOD(GetOverlayInfo) (THIS_ PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags) PURE;
 176    STDMETHOD(GetPriority) (THIS_ int *pIPriority) PURE;
 177  };
 178
 179#define ISIOI_ICONFILE 0x1
 180#define ISIOI_ICONINDEX 0x2
 181
 182#undef INTERFACE
 183#define INTERFACE IShellIconOverlayManager
 184  DECLARE_INTERFACE_IID_ (IShellIconOverlayManager, IUnknown, "f10b5e34-dd3b-42a7-aa7d-2f4ec54bb09b") {
 185    STDMETHOD(GetFileOverlayInfo) (THIS_ PCWSTR pwszPath, DWORD dwAttrib, int *pIndex, DWORD dwflags) PURE;
 186    STDMETHOD(GetReservedOverlayInfo) (THIS_ PCWSTR pwszPath, DWORD dwAttrib, int *pIndex, DWORD dwflags, int iReservedID) PURE;
 187    STDMETHOD(RefreshOverlayImages) (THIS_ DWORD dwFlags) PURE;
 188    STDMETHOD(LoadNonloadedOverlayIdentifiers) (THIS) PURE;
 189    STDMETHOD(OverlayIndexFromImageIndex) (THIS_ int iImage, int *piIndex, WINBOOL fAdd) PURE;
 190  };
 191
 192#define SIOM_OVERLAYINDEX 1
 193#define SIOM_ICONINDEX 2
 194
 195#define SIOM_RESERVED_SHARED 0
 196#define SIOM_RESERVED_LINK 1
 197#define SIOM_RESERVED_SLOWFILE 2
 198#define SIOM_RESERVED_DEFAULT 3
 199
 200#undef INTERFACE
 201#define INTERFACE IShellIconOverlay
 202  DECLARE_INTERFACE_IID_ (IShellIconOverlay, IUnknown, "7d688a70-c613-11d0-999b-00c04fd655e1") {
 203    STDMETHOD(GetOverlayIndex) (THIS_ PCUITEMID_CHILD pidl, int *pIndex) PURE;
 204    STDMETHOD(GetOverlayIconIndex) (THIS_ PCUITEMID_CHILD pidl, int *pIconIndex) PURE;
 205  };
 206
 207#define OI_DEFAULT 0x0
 208#define OI_ASYNC 0xffffeeee
 209
 210#define IDO_SHGIOI_SHARE 0x0fffffff
 211#define IDO_SHGIOI_LINK 0x0ffffffe
 212#define IDO_SHGIOI_SLOWFILE 0x0fffffffd
 213#define IDO_SHGIOI_DEFAULT 0x0fffffffc
 214  SHSTDAPI_(int) SHGetIconOverlayIndexA (LPCSTR pszIconPath, int iIconIndex);
 215  SHSTDAPI_(int) SHGetIconOverlayIndexW (LPCWSTR pszIconPath, int iIconIndex);
 216
 217#define SHGetIconOverlayIndex __MINGW_NAME_AW(SHGetIconOverlayIndex)
 218
 219  typedef enum {
 220    SLDF_DEFAULT = 0x00000000,
 221    SLDF_HAS_ID_LIST = 0x00000001,
 222    SLDF_HAS_LINK_INFO = 0x00000002,
 223    SLDF_HAS_NAME = 0x00000004,
 224    SLDF_HAS_RELPATH = 0x00000008,
 225    SLDF_HAS_WORKINGDIR = 0x00000010,
 226    SLDF_HAS_ARGS = 0x00000020,
 227    SLDF_HAS_ICONLOCATION = 0x00000040,
 228    SLDF_UNICODE = 0x00000080,
 229    SLDF_FORCE_NO_LINKINFO = 0x00000100,
 230    SLDF_HAS_EXP_SZ = 0x00000200,
 231    SLDF_RUN_IN_SEPARATE = 0x00000400,
 232#if NTDDI_VERSION < 0x06000000
 233    SLDF_HAS_LOGO3ID = 0x00000800,
 234#endif
 235    SLDF_HAS_DARWINID = 0x00001000,
 236    SLDF_RUNAS_USER = 0x00002000,
 237    SLDF_HAS_EXP_ICON_SZ = 0x00004000,
 238    SLDF_NO_PIDL_ALIAS = 0x00008000,
 239    SLDF_FORCE_UNCNAME = 0x00010000,
 240    SLDF_RUN_WITH_SHIMLAYER = 0x00020000,
 241#if NTDDI_VERSION >= 0x06000000
 242    SLDF_FORCE_NO_LINKTRACK = 0x00040000,
 243    SLDF_ENABLE_TARGET_METADATA = 0x00080000,
 244    SLDF_DISABLE_LINK_PATH_TRACKING = 0x00100000,
 245    SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000,
 246#if NTDDI_VERSION >= 0x06010000
 247    SLDF_NO_KF_ALIAS = 0x00400000,
 248    SLDF_ALLOW_LINK_TO_LINK = 0x00800000,
 249    SLDF_UNALIAS_ON_SAVE = 0x01000000,
 250    SLDF_PREFER_ENVIRONMENT_PATH = 0x02000000,
 251
 252    SLDF_KEEP_LOCAL_IDLIST_FOR_UNC_TARGET = 0x04000000,
 253#if NTDDI_VERSION >= 0x06020000
 254    SLDF_PERSIST_VOLUME_ID_RELATIVE = 0x08000000,
 255    SLDF_VALID = 0x0ffff7ff,
 256#else
 257    SLDF_VALID = 0x07fff7ff,
 258#endif
 259#else
 260    SLDF_VALID = 0x003ff7ff,
 261#endif
 262#endif
 263    SLDF_RESERVED = (int) 0x80000000
 264  } SHELL_LINK_DATA_FLAGS;
 265
 266  DEFINE_ENUM_FLAG_OPERATORS (SHELL_LINK_DATA_FLAGS);
 267
 268  typedef struct tagDATABLOCKHEADER {
 269    DWORD cbSize;
 270    DWORD dwSignature;
 271  } DATABLOCK_HEADER,*LPDATABLOCK_HEADER,*LPDBLIST;
 272
 273#ifdef LF_FACESIZE
 274  typedef struct {
 275#ifdef __cplusplus
 276    DATABLOCK_HEADER dbh;
 277#else
 278/*  DATABLOCK_HEADER DUMMYSTRUCTNAME; */
 279    __C89_NAMELESS struct {
 280      DWORD cbSize;
 281      DWORD dwSignature;
 282    };
 283#endif
 284    WORD wFillAttribute;
 285    WORD wPopupFillAttribute;
 286    COORD dwScreenBufferSize;
 287    COORD dwWindowSize;
 288    COORD dwWindowOrigin;
 289    DWORD nFont;
 290    DWORD nInputBufferSize;
 291    COORD dwFontSize;
 292    UINT uFontFamily;
 293    UINT uFontWeight;
 294    WCHAR FaceName[LF_FACESIZE];
 295    UINT uCursorSize;
 296    WINBOOL bFullScreen;
 297    WINBOOL bQuickEdit;
 298    WINBOOL bInsertMode;
 299    WINBOOL bAutoPosition;
 300    UINT uHistoryBufferSize;
 301    UINT uNumberOfHistoryBuffers;
 302    WINBOOL bHistoryNoDup;
 303    COLORREF ColorTable[16];
 304  } NT_CONSOLE_PROPS,*LPNT_CONSOLE_PROPS;
 305
 306#define NT_CONSOLE_PROPS_SIG 0xa0000002
 307
 308#endif
 309
 310  typedef struct {
 311#ifdef __cplusplus
 312    DATABLOCK_HEADER dbh;
 313#else
 314    /* DATABLOCK_HEADER DUMMYSTRUCTNAME; */
 315    __C89_NAMELESS struct {
 316      DWORD cbSize;
 317      DWORD dwSignature;
 318    };
 319#endif
 320    UINT uCodePage;
 321  } NT_FE_CONSOLE_PROPS,*LPNT_FE_CONSOLE_PROPS;
 322#define NT_FE_CONSOLE_PROPS_SIG 0xa0000004
 323
 324  typedef struct {
 325#ifdef __cplusplus
 326    DATABLOCK_HEADER dbh;
 327#else
 328/*  DATABLOCK_HEADER DUMMYSTRUCTNAME; */
 329    __C89_NAMELESS struct {
 330      DWORD cbSize;
 331      DWORD dwSignature;
 332    };
 333#endif
 334    CHAR szDarwinID[MAX_PATH];
 335    WCHAR szwDarwinID[MAX_PATH];
 336  } EXP_DARWIN_LINK,*LPEXP_DARWIN_LINK;
 337
 338#define EXP_DARWIN_ID_SIG 0xa0000006
 339
 340#define EXP_SPECIAL_FOLDER_SIG 0xa0000005
 341
 342  typedef struct {
 343    DWORD cbSize;
 344    DWORD dwSignature;
 345    DWORD idSpecialFolder;
 346    DWORD cbOffset;
 347  } EXP_SPECIAL_FOLDER,*LPEXP_SPECIAL_FOLDER;
 348
 349  typedef struct {
 350    DWORD cbSize;
 351    DWORD dwSignature;
 352    CHAR szTarget[MAX_PATH];
 353    WCHAR swzTarget[MAX_PATH];
 354  } EXP_SZ_LINK,*LPEXP_SZ_LINK;
 355
 356#define EXP_SZ_LINK_SIG 0xa0000001
 357#define EXP_SZ_ICON_SIG 0xa0000007
 358
 359#if NTDDI_VERSION >= 0x06000000
 360  typedef struct {
 361    DWORD cbSize;
 362    DWORD dwSignature;
 363    BYTE abPropertyStorage[1];
 364  } EXP_PROPERTYSTORAGE;
 365
 366#define EXP_PROPERTYSTORAGE_SIG 0xa0000009
 367
 368#endif
 369
 370#ifdef _INC_SHELLAPI
 371#undef INTERFACE
 372#define INTERFACE IShellExecuteHookA
 373  DECLARE_INTERFACE_IID_ (IShellExecuteHookA, IUnknown, "000214f5-0000-0000-c000-000000000046") {
 374    STDMETHOD(Execute) (THIS_ LPSHELLEXECUTEINFOA pei) PURE;
 375  };
 376
 377#undef INTERFACE
 378#define INTERFACE IShellExecuteHookW
 379  DECLARE_INTERFACE_IID_ (IShellExecuteHookW, IUnknown, "000214fb-0000-0000-c000-000000000046") {
 380    STDMETHOD(Execute) (THIS_ LPSHELLEXECUTEINFOW pei) PURE;
 381  };
 382
 383#define IShellExecuteHook __MINGW_NAME_AW(IShellExecuteHook)
 384#define IShellExecuteHookVtbl __MINGW_NAME_AW_EXT(IShellExecuteHook,Vtbl)
 385#endif
 386
 387#undef INTERFACE
 388#define INTERFACE IURLSearchHook
 389  DECLARE_INTERFACE_IID_ (IURLSearchHook, IUnknown, "ac60f6a0-0fd9-11d0-99cb-00c04fd64497") {
 390    STDMETHOD(Translate) (THIS_ PWSTR pwszSearchURL, DWORD cchBufferSize) PURE;
 391  };
 392
 393#undef INTERFACE
 394#define INTERFACE ISearchContext
 395  DECLARE_INTERFACE_IID_ (ISearchContext, IUnknown, "09F656A2-41AF-480C-88F7-16CC0D164615") {
 396    STDMETHOD(GetSearchUrl) (THIS_ BSTR *pbstrSearchUrl) PURE;
 397    STDMETHOD(GetSearchText) (THIS_ BSTR *pbstrSearchText) PURE;
 398    STDMETHOD(GetSearchStyle) (THIS_ DWORD *pdwSearchStyle) PURE;
 399  };
 400
 401#undef INTERFACE
 402#define INTERFACE IURLSearchHook2
 403  DECLARE_INTERFACE_IID_ (IURLSearchHook2, IURLSearchHook, "5ee44da4-6d32-46e3-86bc-07540dedd0e0") {
 404    STDMETHOD(TranslateWithSearchContext) (THIS_ PWSTR pwszSearchURL, DWORD cchBufferSize, ISearchContext *pSearchContext) PURE;
 405  };
 406
 407#undef INTERFACE
 408#define INTERFACE INewShortcutHookA
 409  DECLARE_INTERFACE_IID_ (INewShortcutHookA, IUnknown, "000214e1-0000-0000-c000-000000000046") {
 410    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
 411    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
 412    STDMETHOD_(ULONG, Release) (THIS) PURE;
 413    STDMETHOD(SetReferent) (THIS_ PCSTR pcszReferent, HWND hwnd) PURE;
 414    STDMETHOD(GetReferent) (THIS_ PSTR pszReferent, int cchReferent) PURE;
 415    STDMETHOD(SetFolder) (THIS_ PCSTR pcszFolder) PURE;
 416    STDMETHOD(GetFolder) (THIS_ PSTR pszFolder, int cchFolder) PURE;
 417    STDMETHOD(GetName) (THIS_ PSTR pszName, int cchName) PURE;
 418    STDMETHOD(GetExtension) (THIS_ PSTR pszExtension, int cchExtension) PURE;
 419  };
 420
 421#undef INTERFACE
 422#define INTERFACE INewShortcutHookW
 423  DECLARE_INTERFACE_IID_ (INewShortcutHookW, IUnknown, "000214f7-0000-0000-c000-000000000046") {
 424    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
 425    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
 426    STDMETHOD_(ULONG, Release) (THIS) PURE;
 427    STDMETHOD(SetReferent) (THIS_ PCWSTR pcszReferent, HWND hwnd) PURE;
 428    STDMETHOD(GetReferent) (THIS_ PWSTR pszReferent, int cchReferent) PURE;
 429    STDMETHOD(SetFolder) (THIS_ PCWSTR pcszFolder) PURE;
 430    STDMETHOD(GetFolder) (THIS_ PWSTR pszFolder, int cchFolder) PURE;
 431    STDMETHOD(GetName) (THIS_ PWSTR pszName, int cchName) PURE;
 432    STDMETHOD(GetExtension) (THIS_ PWSTR pszExtension, int cchExtension) PURE;
 433  };
 434
 435#define INewShortcutHook __MINGW_NAME_AW(INewShortcutHook)
 436#define INewShortcutHookVtbl __MINGW_NAME_AW_EXT(INewShortcutHook,Vtbl)
 437
 438#undef INTERFACE
 439#define INTERFACE ICopyHookA
 440  DECLARE_INTERFACE_IID_ (ICopyHookA, IUnknown, "000214EF-0000-0000-c000-000000000046") {
 441    STDMETHOD_(UINT, CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, PCSTR pszSrcFile, DWORD dwSrcAttribs, PCSTR pszDestFile, DWORD dwDestAttribs) PURE;
 442  };
 443  typedef ICopyHookA *LPCOPYHOOKA;
 444
 445#undef INTERFACE
 446#define INTERFACE ICopyHookW
 447  DECLARE_INTERFACE_IID_ (ICopyHookW, IUnknown, "000214FC-0000-0000-c000-000000000046") {
 448    STDMETHOD_(UINT, CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, PCWSTR pszSrcFile, DWORD dwSrcAttribs, PCWSTR pszDestFile, DWORD dwDestAttribs) PURE;
 449  };
 450  typedef ICopyHookW *LPCOPYHOOKW;
 451
 452#define ICopyHook __MINGW_NAME_AW(ICopyHook)
 453#define ICopyHookVtbl __MINGW_NAME_AW_EXT(ICopyHook,Vtbl)
 454#define LPCOPYHOOK __MINGW_NAME_AW(LPCOPYHOOK)
 455
 456#if NTDDI_VERSION < 0x05000000
 457#undef INTERFACE
 458#define INTERFACE IFileViewerSite
 459  DECLARE_INTERFACE_IID_ (IFileViewerSite, IUnknown, "000214f3-0000-0000-c000-000000000046") {
 460    STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE;
 461    STDMETHOD(GetPinnedWindow) (THIS_ HWND *phwnd) PURE;
 462  };
 463  typedef IFileViewerSite *LPFILEVIEWERSITE;
 464
 465#include <pshpack8.h>
 466  typedef struct {
 467    DWORD cbSize;
 468    HWND hwndOwner;
 469    int iShow;
 470    DWORD dwFlags;
 471    RECT rect;
 472    IUnknown *punkRel;
 473    OLECHAR strNewFile[MAX_PATH];
 474  } FVSHOWINFO,*LPFVSHOWINFO;
 475#include <poppack.h>
 476
 477#define FVSIF_RECT 0x00000001
 478#define FVSIF_PINNED 0x00000002
 479#define FVSIF_NEWFAILED 0x08000000
 480#define FVSIF_NEWFILE 0x80000000
 481#define FVSIF_CANVIEWIT 0x40000000
 482
 483#undef INTERFACE
 484#define INTERFACE IFileViewerA
 485  DECLARE_INTERFACE_IID (IFileViewerA, "000214f0-0000-0000-c000-000000000046") {
 486    STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE;
 487    STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE;
 488    STDMETHOD(PrintTo) (THIS_ PSTR pszDriver, WINBOOL fSuppressUI) PURE;
 489  };
 490  typedef IFileViewerA *LPFILEVIEWERA;
 491
 492#undef INTERFACE
 493#define INTERFACE IFileViewerW
 494  DECLARE_INTERFACE_IID (IFileViewerW, "000214f8-0000-0000-c000-000000000046") {
 495    STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE;
 496    STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE;
 497    STDMETHOD(PrintTo) (THIS_ PWSTR pszDriver, WINBOOL fSuppressUI) PURE;
 498  };
 499  typedef IFileViewerW *LPFILEVIEWERW;
 500
 501#define IFileViewer __MINGW_NAME_AW(IFileViewer)
 502#define LPFILEVIEWER __MINGW_NAME_AW(LPFILEVIEWER)
 503#endif
 504
 505#define FCIDM_SHVIEWFIRST 0x0000
 506#define FCIDM_SHVIEWLAST 0x7fff
 507#define FCIDM_BROWSERFIRST 0xa000
 508#define FCIDM_BROWSERLAST 0xbf00
 509#define FCIDM_GLOBALFIRST 0x8000
 510#define FCIDM_GLOBALLAST 0x9fff
 511
 512#define FCIDM_MENU_FILE (FCIDM_GLOBALFIRST+0x0000)
 513#define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040)
 514#define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080)
 515#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
 516#define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0)
 517#define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1)
 518#define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100)
 519#define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140)
 520#define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150)
 521#define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170)
 522
 523#define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0)
 524#define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1)
 525
 526#define IDC_OFFLINE_HAND 103
 527#if _WIN32_IE >= 0x0700
 528#define IDC_PANTOOL_HAND_OPEN 104
 529#define IDC_PANTOOL_HAND_CLOSED 105
 530#endif
 531
 532#define PANE_NONE ((DWORD)-1)
 533#define PANE_ZONE 1
 534#define PANE_OFFLINE 2
 535#define PANE_PRINTER 3
 536#define PANE_SSL 4
 537#define PANE_NAVIGATION 5
 538#define PANE_PROGRESS 6
 539#if _WIN32_IE >= 0x0600
 540#define PANE_PRIVACY 7
 541#endif
 542
 543  SHSTDAPI_(PIDLIST_RELATIVE) ILClone (PCUIDLIST_RELATIVE pidl);
 544  SHSTDAPI_(PITEMID_CHILD) ILCloneFirst (PCUIDLIST_RELATIVE pidl);
 545  SHSTDAPI_(PIDLIST_ABSOLUTE) ILCombine (PCIDLIST_ABSOLUTE pidl1, PCUIDLIST_RELATIVE pidl2);
 546  SHSTDAPI_(void) ILFree (PIDLIST_RELATIVE pidl);
 547  SHSTDAPI_(PUIDLIST_RELATIVE) ILGetNext (PCUIDLIST_RELATIVE pidl);
 548  SHSTDAPI_(UINT) ILGetSize (PCUIDLIST_RELATIVE pidl);
 549  SHSTDAPI_(PUIDLIST_RELATIVE) ILFindChild (PIDLIST_ABSOLUTE pidlParent, PCIDLIST_ABSOLUTE pidlChild);
 550  SHSTDAPI_(PUITEMID_CHILD) ILFindLastID (PCUIDLIST_RELATIVE pidl);
 551  SHSTDAPI_(WINBOOL) ILRemoveLastID (PUIDLIST_RELATIVE pidl);
 552  SHSTDAPI_(WINBOOL) ILIsEqual (PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2);
 553  SHSTDAPI_(WINBOOL) ILIsParent (PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2, WINBOOL fImmediate);
 554  SHSTDAPI ILSaveToStream (IStream *pstm, PCUIDLIST_RELATIVE pidl);
 555  SHSTDAPI ILLoadFromStream (IStream *pstm, PIDLIST_RELATIVE *pidl);
 556#if NTDDI_VERSION >= 0x06000000
 557  SHSTDAPI ILLoadFromStreamEx (IStream *pstm, PIDLIST_RELATIVE *pidl);
 558#endif
 559
 560  SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathA (PCSTR pszPath);
 561  SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPathW (PCWSTR pszPath);
 562#ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH
 563  SHSTDAPI_(PIDLIST_ABSOLUTE) ILCreateFromPath (PCTSTR pszPath);
 564#else
 565#define ILCreateFromPath __MINGW_NAME_AW(ILCreateFromPath)
 566#endif
 567
 568  SHSTDAPI SHILCreateFromPath (PCWSTR pszPath, PIDLIST_ABSOLUTE *ppidl, DWORD *rgfInOut);
 569
 570#define VOID_OFFSET(pv, cb) ((void *) (((BYTE *) (pv))+ (cb)))
 571
 572#if defined (STRICT_TYPED_ITEMIDS) && defined (__cplusplus)
 573}
 574
 575inline PIDLIST_ABSOLUTE ILCloneFull(PCUIDLIST_ABSOLUTE p) { return reinterpret_cast<PIDLIST_ABSOLUTE> (ILClone (p)); }
 576inline PITEMID_CHILD ILCloneChild(PCUITEMID_CHILD p) { return ILCloneFirst (p); }
 577#if NTDDI_VERSION >= 0x06000000
 578inline HRESULT ILLoadFromStreamEx(IStream *s, PIDLIST_ABSOLUTE *p) { return ILLoadFromStreamEx (s, reinterpret_cast<PIDLIST_RELATIVE *> (p)); }
 579inline HRESULT ILLoadFromStreamEx(IStream *s, PITEMID_CHILD *p) { return ILLoadFromStreamEx (s, reinterpret_cast<PIDLIST_RELATIVE *> (p)); }
 580#endif
 581inline PCUIDLIST_RELATIVE ILSkip(PCUIDLIST_RELATIVE p, UINT c) { return reinterpret_cast<PCUIDLIST_RELATIVE> (VOID_OFFSET (p, c)); }
 582inline PUIDLIST_RELATIVE ILSkip(PUIDLIST_RELATIVE p, UINT c) { return const_cast<PUIDLIST_RELATIVE> (ILSkip (const_cast<PCUIDLIST_RELATIVE> (p), c)); }
 583inline PCUIDLIST_RELATIVE ILNext(PCUIDLIST_RELATIVE p) { return ILSkip (p, p->mkid.cb); }
 584inline PUIDLIST_RELATIVE ILNext(PUIDLIST_RELATIVE p) { return const_cast<PUIDLIST_RELATIVE> (ILNext (const_cast<PCUIDLIST_RELATIVE> (p))); }
 585inline WINBOOL ILIsAligned(PCUIDLIST_RELATIVE p) { return ((((DWORD_PTR) p) & (sizeof (void *) - 1)) == 0); }
 586inline WINBOOL ILIsEmpty(PCUIDLIST_RELATIVE p) { return (!p || p->mkid.cb == 0); }
 587inline WINBOOL ILIsChild(PCUIDLIST_RELATIVE p) { return (ILIsEmpty (p) || ILIsEmpty (ILNext (p))); }
 588#ifdef STRICT_TYPED_ITEMIDS
 589inline PCUIDLIST_RELATIVE ILFindChild(PCIDLIST_ABSOLUTE p, PCIDLIST_ABSOLUTE c) { return const_cast<PCUIDLIST_RELATIVE> (ILFindChild (const_cast<PIDLIST_ABSOLUTE> (p), c)); }
 590#endif
 591
 592extern "C" {
 593#else
 594
 595#define ILCloneFull ILClone
 596#define ILCloneChild ILCloneFirst
 597#define ILSkip(P, C) ((PUIDLIST_RELATIVE)VOID_OFFSET ((P),(C)))
 598#define ILNext(P) ILSkip (P,(P)->mkid.cb)
 599#define ILIsAligned(P) ((((DWORD_PTR) (P)) & (sizeof (void *) - 1)) == 0)
 600#define ILIsEmpty(P) (!(P) || (P)->mkid.cb == 0)
 601#define ILIsChild(P) (ILIsEmpty(P) || ILIsEmpty(ILNext(P)))
 602#endif
 603
 604  SHSTDAPI_(PIDLIST_RELATIVE) ILAppendID (PIDLIST_RELATIVE pidl, LPCSHITEMID pmkid, WINBOOL fAppend);
 605
 606#if NTDDI_VERSION >= 0x06000000
 607  typedef enum tagGPFIDL_FLAGS {
 608    GPFIDL_DEFAULT = 0x0,
 609    GPFIDL_ALTNAME = 0x1,
 610    GPFIDL_UNCPRINTER = 0x2
 611  };
 612
 613  typedef int GPFIDL_FLAGS;
 614
 615  SHSTDAPI_(WINBOOL) SHGetPathFromIDListEx (PCIDLIST_ABSOLUTE pidl, PWSTR pszPath, DWORD cchPath, GPFIDL_FLAGS uOpts);
 616#endif
 617  SHSTDAPI_(WINBOOL) SHGetPathFromIDListA (PCIDLIST_ABSOLUTE pidl, LPSTR pszPath);
 618  SHSTDAPI_(WINBOOL) SHGetPathFromIDListW (PCIDLIST_ABSOLUTE pidl, LPWSTR pszPath);
 619  SHSTDAPI_(int) SHCreateDirectory (HWND hwnd, PCWSTR pszPath);
 620  SHSTDAPI_(int) SHCreateDirectoryExA (HWND hwnd, LPCSTR pszPath, const SECURITY_ATTRIBUTES *psa);
 621  SHSTDAPI_(int) SHCreateDirectoryExW (HWND hwnd, LPCWSTR pszPath, const SECURITY_ATTRIBUTES *psa);
 622
 623#define SHGetPathFromIDList __MINGW_NAME_AW(SHGetPathFromIDList)
 624#define SHCreateDirectoryEx __MINGW_NAME_AW(SHCreateDirectoryEx)
 625
 626#if NTDDI_VERSION >= 0x06000000
 627#define OFASI_EDIT 0x0001
 628#define OFASI_OPENDESKTOP 0x0002
 629#endif
 630
 631  SHSTDAPI SHOpenFolderAndSelectItems (PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD dwFlags);
 632  SHSTDAPI SHCreateShellItem (PCIDLIST_ABSOLUTE pidlParent, IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi);
 633
 634#define REGSTR_PATH_SPECIAL_FOLDERS REGSTR_PATH_EXPLORER TEXT ("\\Shell Folders")
 635
 636#define CSIDL_DESKTOP 0x0000
 637#define CSIDL_INTERNET 0x0001
 638#define CSIDL_PROGRAMS 0x0002
 639#define CSIDL_CONTROLS 0x0003
 640#define CSIDL_PRINTERS 0x0004
 641#define CSIDL_FAVORITES 0x0006
 642#define CSIDL_STARTUP 0x0007
 643#define CSIDL_RECENT 0x0008
 644#define CSIDL_SENDTO 0x0009
 645#define CSIDL_BITBUCKET 0x000a
 646#define CSIDL_STARTMENU 0x000b
 647#define CSIDL_MYDOCUMENTS CSIDL_PERSONAL
 648#define CSIDL_DESKTOPDIRECTORY 0x0010
 649#define CSIDL_DRIVES 0x0011
 650#define CSIDL_NETWORK 0x0012
 651#define CSIDL_NETHOOD 0x0013
 652#define CSIDL_FONTS 0x0014
 653#define CSIDL_TEMPLATES 0x0015
 654#define CSIDL_COMMON_STARTMENU 0x0016
 655#define CSIDL_COMMON_PROGRAMS 0x0017
 656#define CSIDL_COMMON_STARTUP 0x0018
 657#define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
 658#define CSIDL_PRINTHOOD 0x001b
 659
 660#ifndef CSIDL_LOCAL_APPDATA
 661#define CSIDL_LOCAL_APPDATA 0x001c
 662#endif
 663
 664#define CSIDL_ALTSTARTUP 0x001d
 665#define CSIDL_COMMON_ALTSTARTUP 0x001e
 666#define CSIDL_COMMON_FAVORITES 0x001f
 667
 668#ifndef _SHFOLDER_H_
 669#define CSIDL_INTERNET_CACHE 0x0020
 670#define CSIDL_COOKIES 0x0021
 671#define CSIDL_HISTORY 0x0022
 672#define CSIDL_COMMON_APPDATA 0x0023
 673#define CSIDL_WINDOWS 0x0024
 674#define CSIDL_SYSTEM 0x0025
 675#define CSIDL_PROGRAM_FILES 0x0026
 676#endif
 677
 678#define CSIDL_PROFILE 0x0028
 679#define CSIDL_SYSTEMX86 0x0029
 680#define CSIDL_PROGRAM_FILESX86 0x002a
 681
 682#ifndef _SHFOLDER_H_
 683#define CSIDL_PROGRAM_FILES_COMMON 0x002b
 684#endif
 685
 686#define CSIDL_PROGRAM_FILES_COMMONX86 0x002c
 687#define CSIDL_COMMON_TEMPLATES 0x002d
 688
 689#ifndef _SHFOLDER_H_
 690#define CSIDL_COMMON_DOCUMENTS 0x002e
 691#define CSIDL_COMMON_ADMINTOOLS 0x002f
 692#define CSIDL_ADMINTOOLS 0x0030
 693#endif
 694
 695#define CSIDL_CONNECTIONS 0x0031
 696#define CSIDL_COMMON_MUSIC 0x0035
 697#define CSIDL_COMMON_PICTURES 0x0036
 698#define CSIDL_COMMON_VIDEO 0x0037
 699#define CSIDL_RESOURCES 0x0038
 700
 701#ifndef _SHFOLDER_H_
 702#define CSIDL_RESOURCES_LOCALIZED 0x0039
 703#endif
 704
 705#define CSIDL_COMMON_OEM_LINKS 0x003a
 706#define CSIDL_CDBURN_AREA 0x003b
 707
 708#define CSIDL_COMPUTERSNEARME 0x003d
 709
 710#define CSIDL_FLAG_DONT_VERIFY 0x4000
 711#define CSIDL_FLAG_DONT_UNEXPAND 0x2000
 712#define CSIDL_FLAG_NO_ALIAS 0x1000
 713#define CSIDL_FLAG_PER_USER_INIT 0x0800
 714#define CSIDL_FLAG_MASK 0xff00
 715
 716  SHSTDAPI SHGetSpecialFolderLocation (HWND hwnd, int csidl, PIDLIST_ABSOLUTE *ppidl);
 717  SHSTDAPI_(PIDLIST_ABSOLUTE) SHCloneSpecialIDList (HWND hwnd, int csidl, WINBOOL fCreate);
 718  SHSTDAPI_(WINBOOL) SHGetSpecialFolderPathA (HWND hwnd, LPSTR pszPath, int csidl, WINBOOL fCreate);
 719  SHSTDAPI_(WINBOOL) SHGetSpecialFolderPathW (HWND hwnd, LPWSTR pszPath, int csidl, WINBOOL fCreate);
 720  SHSTDAPI_(void) SHFlushSFCache (void);
 721
 722  SHFOLDERAPI SHGetFolderPathA (HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
 723  SHSTDAPI SHGetFolderLocation (HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, PIDLIST_ABSOLUTE *ppidl);
 724  SHSTDAPI SHSetFolderPathA (int csidl, HANDLE hToken, DWORD dwFlags, LPCSTR pszPath);
 725  SHSTDAPI SHSetFolderPathW (int csidl, HANDLE hToken, DWORD dwFlags, LPCWSTR pszPath);
 726  SHSTDAPI SHGetFolderPathAndSubDirA (HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPCSTR pszSubDir, LPSTR pszPath);
 727  SHSTDAPI SHGetFolderPathAndSubDirW (HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPCWSTR pszSubDir, LPWSTR pszPath);
 728
 729#define SHGetSpecialFolderPath __MINGW_NAME_AW(SHGetSpecialFolderPath)
 730#define SHGetFolderPath __MINGW_NAME_AW(SHGetFolderPath)
 731#define SHSetFolderPath __MINGW_NAME_AW(SHSetFolderPath)
 732#define SHGetFolderPathAndSubDir __MINGW_NAME_AW(SHGetFolderPathAndSubDir)
 733
 734#if NTDDI_VERSION >= 0x06000000
 735  typedef enum {
 736    KF_FLAG_DEFAULT = 0x00000000,
 737#if NTDDI_VERSION >= NTDDI_WIN10_RS3
 738    KF_FLAG_FORCE_APP_DATA_REDIRECTION = 0x00080000,
 739#endif
 740#if NTDDI_VERSION >= NTDDI_WIN10_RS2
 741    KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000,
 742    KF_FLAG_FORCE_PACKAGE_REDIRECTION = 0x00020000,
 743    KF_FLAG_NO_PACKAGE_REDIRECTION = 0x00010000,
 744#endif
 745#if NTDDI_VERSION >= NTDDI_WIN8
 746    KF_FLAG_FORCE_APPCONTAINER_REDIRECTION = 0x00020000,
 747#endif
 748#if NTDDI_VERSION >= 0x06010000
 749    KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000,
 750#endif
 751    KF_FLAG_CREATE = 0x00008000,
 752    KF_FLAG_DONT_VERIFY = 0x00004000,
 753    KF_FLAG_DONT_UNEXPAND = 0x00002000,
 754    KF_FLAG_NO_ALIAS = 0x00001000,
 755    KF_FLAG_INIT = 0x00000800,
 756    KF_FLAG_DEFAULT_PATH = 0x00000400,
 757    KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200,
 758    KF_FLAG_SIMPLE_IDLIST = 0x00000100,
 759    KF_FLAG_ALIAS_ONLY = 0x80000000
 760  } KNOWN_FOLDER_FLAG;
 761
 762  DEFINE_ENUM_FLAG_OPERATORS (KNOWN_FOLDER_FLAG);
 763
 764  STDAPI SHGetKnownFolderIDList (REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PIDLIST_ABSOLUTE *ppidl);
 765  STDAPI SHSetKnownFolderPath (REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PCWSTR pszPath);
 766  STDAPI SHGetKnownFolderPath (REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
 767#endif
 768
 769#if NTDDI_VERSION >= 0x06010000
 770  STDAPI SHGetKnownFolderItem (REFKNOWNFOLDERID rfid, KNOWN_FOLDER_FLAG flags, HANDLE hToken, REFIID riid, void **ppv);
 771#endif
 772
 773#define FCS_READ 0x00000001
 774#define FCS_FORCEWRITE 0x00000002
 775#define FCS_WRITE (FCS_READ | FCS_FORCEWRITE)
 776
 777#define FCS_FLAG_DRAGDROP 2
 778
 779#define FCSM_VIEWID 0x00000001
 780#define FCSM_WEBVIEWTEMPLATE 0x00000002
 781#define FCSM_INFOTIP 0x00000004
 782#define FCSM_CLSID 0x00000008
 783#define FCSM_ICONFILE 0x00000010
 784#define FCSM_LOGO 0x00000020
 785#define FCSM_FLAGS 0x00000040
 786
 787#if NTDDI_VERSION >= 0x06000000
 788
 789#include <pshpack8.h>
 790  typedef struct {
 791    DWORD dwSize;
 792    DWORD dwMask;
 793    SHELLVIEWID *pvid;
 794    LPWSTR pszWebViewTemplate;
 795    DWORD cchWebViewTemplate;
 796    LPWSTR pszWebViewTemplateVersion;
 797    LPWSTR pszInfoTip;
 798    DWORD cchInfoTip;
 799    CLSID *pclsid;
 800    DWORD dwFlags;
 801    LPWSTR pszIconFile;
 802    DWORD cchIconFile;
 803    int iIconIndex;
 804    LPWSTR pszLogo;
 805    DWORD cchLogo;
 806  } SHFOLDERCUSTOMSETTINGS,*LPSHFOLDERCUSTOMSETTINGS;
 807#include <poppack.h>
 808
 809  SHSTDAPI SHGetSetFolderCustomSettings (LPSHFOLDERCUSTOMSETTINGS pfcs, PCWSTR pszPath, DWORD dwReadWrite);
 810#endif
 811
 812  typedef int (CALLBACK *BFFCALLBACK) (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
 813
 814#include <pshpack8.h>
 815  typedef struct _browseinfoA {
 816    HWND hwndOwner;
 817    PCIDLIST_ABSOLUTE pidlRoot;
 818    LPSTR pszDisplayName;
 819    LPCSTR lpszTitle;
 820    UINT ulFlags;
 821    BFFCALLBACK lpfn;
 822    LPARAM lParam;
 823    int iImage;
 824  } BROWSEINFOA,*PBROWSEINFOA,*LPBROWSEINFOA;
 825
 826  typedef struct _browseinfoW {
 827    HWND hwndOwner;
 828    PCIDLIST_ABSOLUTE pidlRoot;
 829    LPWSTR pszDisplayName;
 830    LPCWSTR lpszTitle;
 831    UINT ulFlags;
 832    BFFCALLBACK lpfn;
 833    LPARAM lParam;
 834    int iImage;
 835  } BROWSEINFOW,*PBROWSEINFOW,*LPBROWSEINFOW;
 836#include <poppack.h>
 837
 838#define BROWSEINFO __MINGW_NAME_AW(BROWSEINFO)
 839#define PBROWSEINFO __MINGW_NAME_AW(PBROWSEINFO)
 840#define LPBROWSEINFO __MINGW_NAME_AW(LPBROWSEINFO)
 841
 842#define BIF_RETURNONLYFSDIRS 0x00000001
 843#define BIF_DONTGOBELOWDOMAIN 0x00000002
 844#define BIF_STATUSTEXT 0x00000004
 845
 846#define BIF_RETURNFSANCESTORS 0x00000008
 847#define BIF_EDITBOX 0x00000010
 848#define BIF_VALIDATE 0x00000020
 849
 850#define BIF_NEWDIALOGSTYLE 0x00000040
 851
 852#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
 853
 854#define BIF_BROWSEINCLUDEURLS 0x00000080
 855#define BIF_UAHINT 0x00000100
 856#define BIF_NONEWFOLDERBUTTON 0x00000200
 857#define BIF_NOTRANSLATETARGETS 0x00000400
 858
 859#define BIF_BROWSEFORCOMPUTER 0x00001000
 860#define BIF_BROWSEFORPRINTER 0x00002000
 861#define BIF_BROWSEINCLUDEFILES 0x00004000
 862#define BIF_SHAREABLE 0x00008000
 863#define BIF_BROWSEFILEJUNCTIONS 0x00010000
 864
 865#define BFFM_INITIALIZED 1
 866#define BFFM_SELCHANGED 2
 867#define BFFM_VALIDATEFAILEDA 3
 868#define BFFM_VALIDATEFAILEDW 4
 869#define BFFM_IUNKNOWN 5
 870
 871#define BFFM_SETSTATUSTEXTA (WM_USER + 100)
 872#define BFFM_ENABLEOK (WM_USER + 101)
 873#define BFFM_SETSELECTIONA (WM_USER + 102)
 874#define BFFM_SETSELECTIONW (WM_USER + 103)
 875#define BFFM_SETSTATUSTEXTW (WM_USER + 104)
 876#define BFFM_SETOKTEXT (WM_USER + 105)
 877#define BFFM_SETEXPANDED (WM_USER + 106)
 878
 879  SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderA (LPBROWSEINFOA lpbi);
 880  SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderW (LPBROWSEINFOW lpbi);
 881
 882#define SHBrowseForFolder __MINGW_NAME_AW(SHBrowseForFolder)
 883#define BFFM_SETSTATUSTEXT __MINGW_NAME_AW(BFFM_SETSTATUSTEXT)
 884#define BFFM_SETSELECTION __MINGW_NAME_AW(BFFM_SETSELECTION)
 885#define BFFM_VALIDATEFAILED __MINGW_NAME_AW(BFFM_VALIDATEFAILED)
 886
 887  SHSTDAPI SHLoadInProc (REFCLSID rclsid);
 888
 889  enum {
 890    ISHCUTCMDID_DOWNLOADICON = 0,
 891    ISHCUTCMDID_INTSHORTCUTCREATE = 1
 892#if _WIN32_IE >= 0x0700
 893    , ISHCUTCMDID_COMMITHISTORY = 2,
 894    ISHCUTCMDID_SETUSERAWURL = 3
 895#endif
 896  };
 897
 898#define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE
 899
 900#define STR_PARSE_WITH_PROPERTIES L"ParseWithProperties"
 901#define STR_PARSE_PARTIAL_IDLIST L"ParseOriginalItem"
 902
 903  SHSTDAPI SHGetDesktopFolder (IShellFolder **ppshf);
 904
 905#undef INTERFACE
 906#define INTERFACE IShellDetails
 907  DECLARE_INTERFACE_IID_ (IShellDetails, IUnknown, "000214EC-0000-0000-c000-000000000046") {
 908    STDMETHOD(GetDetailsOf) (THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;
 909    STDMETHOD(ColumnClick) (THIS_ UINT iColumn) PURE;
 910  };
 911
 912#undef INTERFACE
 913#define INTERFACE IObjMgr
 914  DECLARE_INTERFACE_IID_ (IObjMgr, IUnknown, "00BB2761-6A77-11D0-A535-00C04FD7D062") {
 915    STDMETHOD(Append) (THIS_ IUnknown *punk) PURE;
 916    STDMETHOD(Remove) (THIS_ IUnknown *punk) PURE;
 917  };
 918
 919#undef INTERFACE
 920#define INTERFACE ICurrentWorkingDirectory
 921  DECLARE_INTERFACE_IID_ (ICurrentWorkingDirectory, IUnknown, "91956D21-9276-11d1-921A-006097DF5BD4") {
 922    STDMETHOD(GetDirectory) (THIS_ PWSTR pwzPath, DWORD cchSize) PURE;
 923    STDMETHOD(SetDirectory) (THIS_ PCWSTR pwzPath) PURE;
 924  };
 925
 926#undef INTERFACE
 927#define INTERFACE IACList
 928  DECLARE_INTERFACE_IID_ (IACList, IUnknown, "77A130B0-94FD-11D0-A544-00C04FD7d062") {
 929    STDMETHOD(Expand) (THIS_ PCWSTR pszExpand) PURE;
 930  };
 931
 932#undef INTERFACE
 933#define INTERFACE IACList2
 934  typedef enum _tagAUTOCOMPLETELISTOPTIONS {
 935    ACLO_NONE = 0,
 936    ACLO_CURRENTDIR = 1,
 937    ACLO_MYCOMPUTER = 2,
 938    ACLO_DESKTOP = 4,
 939    ACLO_FAVORITES = 8,
 940    ACLO_FILESYSONLY = 16
 941#if _WIN32_IE >= 0x0600
 942    , ACLO_FILESYSDIRS = 32
 943#endif
 944#if _WIN32_IE >= 0x0700
 945    , ACLO_VIRTUALNAMESPACE = 64
 946#endif
 947  } AUTOCOMPLETELISTOPTIONS;
 948
 949  DECLARE_INTERFACE_IID_ (IACList2, IACList, "470141a0-5186-11d2-bbb6-0060977b464c") {
 950    STDMETHOD(SetOptions) (THIS_ DWORD dwFlag) PURE;
 951    STDMETHOD(GetOptions) (THIS_ DWORD *pdwFlag) PURE;
 952  };
 953
 954#define PROGDLG_NORMAL 0x00000000
 955#define PROGDLG_MODAL 0x00000001
 956#define PROGDLG_AUTOTIME 0x00000002
 957#define PROGDLG_NOTIME 0x00000004
 958#define PROGDLG_NOMINIMIZE 0x00000008
 959#define PROGDLG_NOPROGRESSBAR 0x00000010
 960#if _WIN32_IE >= 0x0700
 961#define PROGDLG_MARQUEEPROGRESS 0x00000020
 962#define PROGDLG_NOCANCEL 0x00000040
 963#endif
 964
 965#define PDTIMER_RESET 0x00000001
 966
 967#if _WIN32_IE >= 0x0700
 968#define PDTIMER_PAUSE 0x00000002
 969#define PDTIMER_RESUME 0x00000003
 970#endif
 971
 972#undef INTERFACE
 973#define INTERFACE IProgressDialog
 974  DECLARE_INTERFACE_IID_ (IProgressDialog, IUnknown, "EBBC7C04-315E-11d2-B62F-006097DF5BD4") {
 975    STDMETHOD(StartProgressDialog) (THIS_ HWND hwndParent, IUnknown *punkEnableModless, DWORD dwFlags, LPCVOID pvResevered) PURE;
 976    STDMETHOD(StopProgressDialog) (THIS) PURE;
 977    STDMETHOD(SetTitle) (THIS_ PCWSTR pwzTitle) PURE;
 978    STDMETHOD(SetAnimation) (THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PURE;
 979    STDMETHOD_(WINBOOL, HasUserCancelled) (THIS) PURE;
 980    STDMETHOD(SetProgress) (THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
 981    STDMETHOD(SetProgress64) (THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
 982    STDMETHOD(SetLine) (THIS_ DWORD dwLineNum, PCWSTR pwzString, WINBOOL fCompactPath, LPCVOID pvResevered) PURE;
 983    STDMETHOD(SetCancelMsg) (THIS_ PCWSTR pwzCancelMsg, LPCVOID pvResevered) PURE;
 984    STDMETHOD(Timer) (THIS_ DWORD dwTimerAction, LPCVOID pvResevered) PURE;
 985  };
 986
 987#undef INTERFACE
 988#define INTERFACE IDockingWindowSite
 989  DECLARE_INTERFACE_IID_ (IDockingWindowSite, IOleWindow, "2a342fc2-7b26-11d0-8ca9-00a0c92dbfe8") {
 990    STDMETHOD(GetBorderDW) (THIS_ IUnknown *punkObj, RECT *prcBorder) PURE;
 991    STDMETHOD(RequestBorderSpaceDW) (THIS_ IUnknown *punkObj, LPCBORDERWIDTHS pbw) PURE;
 992    STDMETHOD(SetBorderSpaceDW) (THIS_ IUnknown *punkObj, LPCBORDERWIDTHS pbw) PURE;
 993  };
 994
 995#define DWFRF_NORMAL 0x0000
 996#define DWFRF_DELETECONFIGDATA 0x0001
 997
 998#define DWFAF_HIDDEN 0x1
 999#define DWFAF_GROUP1 0x2
1000#define DWFAF_GROUP2 0x4
1001#define DWFAF_AUTOHIDE 0x10
1002
1003#undef INTERFACE
1004#define INTERFACE IDockingWindowFrame
1005  DECLARE_INTERFACE_IID_ (IDockingWindowFrame, IOleWindow, "47d2657a-7b27-11d0-8ca9-00a0c92dbfe8") {
1006    STDMETHOD(AddToolbar) (THIS_ IUnknown *punkSrc, PCWSTR pwszItem, DWORD dwAddFlags) PURE;
1007    STDMETHOD(RemoveToolbar) (THIS_ IUnknown *punkSrc, DWORD dwRemoveFlags) PURE;
1008    STDMETHOD(FindToolbar) (THIS_ PCWSTR pwszItem, REFIID riid, void **ppv) PURE;
1009  };
1010
1011#undef INTERFACE
1012#define INTERFACE IThumbnailCapture
1013  DECLARE_INTERFACE_IID_ (IThumbnailCapture, IUnknown, "4ea39266-7211-409f-b622-f63dbd16c533") {
1014    STDMETHOD(CaptureThumbnail) (THIS_ const SIZE *pMaxSize, IUnknown *pHTMLDoc2, HBITMAP *phbmThumbnail) PURE;
1015  };
1016  typedef IThumbnailCapture *LPTHUMBNAILCAPTURE;
1017
1018#if (NTDDI_VERSION >= 0x05000000 && NTDDI_VERSION < 0x06000000)
1019#include <pshpack8.h>
1020  typedef struct _EnumImageStoreDATAtag {
1021    WCHAR szPath[MAX_PATH];
1022    FILETIME ftTimeStamp;
1023  } ENUMSHELLIMAGESTOREDATA,*PENUMSHELLIMAGESTOREDATA;
1024#include <poppack.h>
1025
1026#undef INTERFACE
1027#define INTERFACE IEnumShellImageStore
1028  DECLARE_INTERFACE_IID_ (IEnumShellImageStore, IUnknown, "6DFD582B-92E3-11D1-98A3-00C04FB687DA") {
1029    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1030    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1031    STDMETHOD_(ULONG, Release) (THIS) PURE;
1032    STDMETHOD(Reset) (THIS) PURE;
1033    STDMETHOD(Next) (THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA *prgElt, ULONG *pceltFetched) PURE;
1034    STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
1035    STDMETHOD(Clone) (THIS_ IEnumShellImageStore **ppEnum) PURE;
1036  };
1037  typedef IEnumShellImageStore *LPENUMSHELLIMAGESTORE;
1038
1039#define SHIMSTCAPFLAG_LOCKABLE 0x0001
1040#define SHIMSTCAPFLAG_PURGEABLE 0x0002
1041
1042#undef INTERFACE
1043#define INTERFACE IShellImageStore
1044  DECLARE_INTERFACE_IID_ (IShellImageStore, IUnknown, "48C8118C-B924-11D1-98D5-00C04FB687DA") {
1045    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1046    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1047    STDMETHOD_(ULONG, Release) (THIS) PURE;
1048    STDMETHOD(Open) (THIS_ DWORD dwMode, DWORD *pdwLock) PURE;
1049    STDMETHOD(Create) (THIS_ DWORD dwMode, DWORD *pdwLock) PURE;
1050    STDMETHOD(ReleaseLock) (THIS_ DWORD const *pdwLock) PURE;
1051    STDMETHOD(Close) (THIS_ DWORD const *pdwLock) PURE;
1052    STDMETHOD(Commit) (THIS_ DWORD const *pdwLock) PURE;
1053    STDMETHOD(IsLocked) (THIS) PURE;
1054    STDMETHOD(GetMode) (THIS_ DWORD *pdwMode) PURE;
1055    STDMETHOD(GetCapabilities) (THIS_ DWORD *pdwCapMask) PURE;
1056    STDMETHOD(AddEntry) (THIS_ PCWSTR pszName, const FILETIME *pftTimeStamp, DWORD dwMode, HBITMAP hImage) PURE;
1057    STDMETHOD(GetEntry) (THIS_ PCWSTR pszName, DWORD dwMode, HBITMAP *phImage) PURE;
1058    STDMETHOD(DeleteEntry) (THIS_ PCWSTR pszName) PURE;
1059    STDMETHOD(IsEntryInStore) (THIS_ PCWSTR pszName, FILETIME *pftTimeStamp) PURE;
1060    STDMETHOD(Enum) (THIS_ LPENUMSHELLIMAGESTORE *ppEnum) PURE;
1061  };
1062  typedef IShellImageStore *LPSHELLIMAGESTORE;
1063#endif
1064
1065#define ISFB_MASK_STATE 0x00000001
1066#define ISFB_MASK_BKCOLOR 0x00000002
1067#define ISFB_MASK_VIEWMODE 0x00000004
1068#define ISFB_MASK_SHELLFOLDER 0x00000008
1069#define ISFB_MASK_IDLIST 0x00000010
1070#define ISFB_MASK_COLORS 0x00000020
1071
1072#define ISFB_STATE_DEFAULT 0x00000000
1073#define ISFB_STATE_DEBOSSED 0x00000001
1074#define ISFB_STATE_ALLOWRENAME 0x00000002
1075#define ISFB_STATE_NOSHOWTEXT 0x00000004
1076#define ISFB_STATE_CHANNELBAR 0x00000010
1077#define ISFB_STATE_QLINKSMODE 0x00000020
1078#define ISFB_STATE_FULLOPEN 0x00000040
1079#define ISFB_STATE_NONAMESORT 0x00000080
1080#define ISFB_STATE_BTNMINSIZE 0x00000100
1081
1082#define ISFBVIEWMODE_SMALLICONS 0x0001
1083#define ISFBVIEWMODE_LARGEICONS 0x0002
1084#if _WIN32_IE < 0x0700
1085#define ISFBVIEWMODE_LOGOS 0x0003
1086#endif
1087
1088#include <pshpack8.h>
1089  typedef struct {
1090    DWORD dwMask;
1091    DWORD dwStateMask;
1092    DWORD dwState;
1093    COLORREF crBkgnd;
1094    COLORREF crBtnLt;
1095    COLORREF crBtnDk;
1096    WORD wViewMode;
1097    WORD wAlign;
1098    IShellFolder *psf;
1099    PIDLIST_ABSOLUTE pidl;
1100  } BANDINFOSFB,*PBANDINFOSFB;
1101#include <poppack.h>
1102
1103#undef INTERFACE
1104#define INTERFACE IShellFolderBand
1105  DECLARE_INTERFACE_IID_ (IShellFolderBand, IUnknown, "7FE80CC8-C247-11d0-B93A-00A0C90312E1") {
1106    STDMETHOD(InitializeSFB) (THIS_ IShellFolder *psf, PCIDLIST_ABSOLUTE pidl) PURE;
1107    STDMETHOD(SetBandInfoSFB) (THIS_ PBANDINFOSFB pbi) PURE;
1108    STDMETHOD(GetBandInfoSFB) (THIS_ PBANDINFOSFB pbi) PURE;
1109  };
1110  enum {
1111    SFBID_PIDLCHANGED
1112  };
1113
1114#undef INTERFACE
1115#define INTERFACE IDeskBarClient
1116  DECLARE_INTERFACE_IID_ (IDeskBarClient, IOleWindow, "EB0FE175-1A3A-11D0-89B3-00A0C90A90AC") {
1117    STDMETHOD(SetDeskBarSite) (THIS_ IUnknown *punkSite) PURE;
1118    STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE;
1119    STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE;
1120    STDMETHOD(GetSize) (THIS_ DWORD dwWhich, LPRECT prc) PURE;
1121  };
1122
1123#define DBC_GS_IDEAL 0
1124#define DBC_GS_SIZEDOWN 1
1125
1126#define DBC_HIDE 0
1127#define DBC_SHOW 1
1128#define DBC_SHOWOBSCURE 2
1129
1130  enum {
1131    DBCID_EMPTY = 0,
1132    DBCID_ONDRAG = 1,
1133    DBCID_CLSIDOFBAR = 2,
1134    DBCID_RESIZE = 3,
1135    DBCID_GETBAR = 4
1136  };
1137
1138#ifdef _WININET_
1139  typedef struct _tagWALLPAPEROPT {
1140    DWORD dwSize;
1141    DWORD dwStyle;
1142  } WALLPAPEROPT;
1143
1144  typedef WALLPAPEROPT *LPWALLPAPEROPT;
1145  typedef const WALLPAPEROPT *LPCWALLPAPEROPT;
1146
1147  typedef struct _tagCOMPONENTSOPT {
1148    DWORD dwSize;
1149    WINBOOL fEnableComponents;
1150    WINBOOL fActiveDesktop;
1151  } COMPONENTSOPT;
1152
1153  typedef COMPONENTSOPT *LPCOMPONENTSOPT;
1154  typedef const COMPONENTSOPT *LPCCOMPONENTSOPT;
1155
1156  typedef struct _tagCOMPPOS {
1157    DWORD dwSize;
1158    int iLeft;
1159    int iTop;
1160    DWORD dwWidth;
1161    DWORD dwHeight;
1162    int izIndex;
1163    WINBOOL fCanResize;
1164    WINBOOL fCanResizeX;
1165    WINBOOL fCanResizeY;
1166    int iPreferredLeftPercent;
1167    int iPreferredTopPercent;
1168  } COMPPOS;
1169
1170  typedef COMPPOS *LPCOMPPOS;
1171  typedef const COMPPOS *LPCCOMPPOS;
1172
1173  typedef struct _tagCOMPSTATEINFO {
1174    DWORD dwSize;
1175    int iLeft;
1176    int iTop;
1177    DWORD dwWidth;
1178    DWORD dwHeight;
1179    DWORD dwItemState;
1180  } COMPSTATEINFO;
1181
1182  typedef COMPSTATEINFO *LPCOMPSTATEINFO;
1183  typedef const COMPSTATEINFO *LPCCOMPSTATEINFO;
1184
1185#define COMPONENT_TOP (0x3fffffff)
1186
1187#define COMP_TYPE_HTMLDOC 0
1188#define COMP_TYPE_PICTURE 1
1189#define COMP_TYPE_WEBSITE 2
1190#define COMP_TYPE_CONTROL 3
1191#define COMP_TYPE_CFHTML 4
1192#define COMP_TYPE_MAX 4
1193
1194  typedef struct _tagIE4COMPONENT {
1195    DWORD dwSize;
1196    DWORD dwID;
1197    int iComponentType;
1198    WINBOOL fChecked;
1199    WINBOOL fDirty;
1200    WINBOOL fNoScroll;
1201    COMPPOS cpPos;
1202    WCHAR wszFriendlyName[MAX_PATH];
1203    WCHAR wszSource[INTERNET_MAX_URL_LENGTH];
1204    WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH];
1205  } IE4COMPONENT;
1206
1207  typedef IE4COMPONENT *LPIE4COMPONENT;
1208  typedef const IE4COMPONENT *LPCIE4COMPONENT;
1209
1210  typedef struct _tagCOMPONENT {
1211    DWORD dwSize;
1212    DWORD dwID;
1213    int iComponentType;
1214    WINBOOL fChecked;
1215    WINBOOL fDirty;
1216    WINBOOL fNoScroll;
1217    COMPPOS cpPos;
1218    WCHAR wszFriendlyName[MAX_PATH];
1219    WCHAR wszSource[INTERNET_MAX_URL_LENGTH];
1220    WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH];
1221    DWORD dwCurItemState;
1222    COMPSTATEINFO csiOriginal;
1223    COMPSTATEINFO csiRestored;
1224  } COMPONENT;
1225
1226  typedef COMPONENT *LPCOMPONENT;
1227  typedef const COMPONENT *LPCCOMPONENT;
1228
1229#define IS_NORMAL 0x00000001
1230#define IS_FULLSCREEN 0x00000002
1231#define IS_SPLIT 0x00000004
1232#define IS_VALIDSIZESTATEBITS (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN)
1233#define IS_VALIDSTATEBITS (IS_NORMAL | IS_SPLIT | IS_FULLSCREEN | 0x80000000 | 0x40000000)
1234
1235#define AD_APPLY_SAVE 0x00000001
1236#define AD_APPLY_HTMLGEN 0x00000002
1237#define AD_APPLY_REFRESH 0x00000004
1238#define AD_APPLY_ALL (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_REFRESH)
1239#define AD_APPLY_FORCE 0x00000008
1240#define AD_APPLY_BUFFERED_REFRESH 0x00000010
1241#define AD_APPLY_DYNAMICREFRESH 0x00000020
1242
1243#if NTDDI_VERSION >= 0x06000000
1244#define AD_GETWP_BMP 0x00000000
1245#define AD_GETWP_IMAGE 0x00000001
1246#define AD_GETWP_LAST_APPLIED 0x00000002
1247#endif
1248
1249#define WPSTYLE_CENTER 0
1250#define WPSTYLE_TILE 1
1251#define WPSTYLE_STRETCH 2
1252#if NTDDI_VERSION >= 0x06010000
1253#define WPSTYLE_KEEPASPECT 3
1254#define WPSTYLE_CROPTOFIT 4
1255#endif
1256#if NTDDI_VERSION >= 0x06020000
1257#define WPSTYLE_SPAN 5
1258#endif
1259
1260#if NTDDI_VERSION >= 0x06020000
1261#define WPSTYLE_MAX 6
1262#elif NTDDI_VERSION >= 0x06010000
1263#define WPSTYLE_MAX 5
1264#else
1265#define WPSTYLE_MAX 3
1266#endif
1267
1268#define COMP_ELEM_TYPE 0x00000001
1269#define COMP_ELEM_CHECKED 0x00000002
1270#define COMP_ELEM_DIRTY 0x00000004
1271#define COMP_ELEM_NOSCROLL 0x00000008
1272#define COMP_ELEM_POS_LEFT 0x00000010
1273#define COMP_ELEM_POS_TOP 0x00000020
1274#define COMP_ELEM_SIZE_WIDTH 0x00000040
1275#define COMP_ELEM_SIZE_HEIGHT 0x00000080
1276#define COMP_ELEM_POS_ZINDEX 0x00000100
1277#define COMP_ELEM_SOURCE 0x00000200
1278#define COMP_ELEM_FRIENDLYNAME 0x00000400
1279#define COMP_ELEM_SUBSCRIBEDURL 0x00000800
1280#define COMP_ELEM_ORIGINAL_CSI 0x00001000
1281#define COMP_ELEM_RESTORED_CSI 0x00002000
1282#define COMP_ELEM_CURITEMSTATE 0x00004000
1283
1284#define COMP_ELEM_ALL (COMP_ELEM_TYPE | COMP_ELEM_CHECKED | COMP_ELEM_DIRTY | COMP_ELEM_NOSCROLL | COMP_ELEM_POS_LEFT | COMP_ELEM_SIZE_WIDTH | COMP_ELEM_SIZE_HEIGHT | COMP_ELEM_POS_ZINDEX | COMP_ELEM_SOURCE | COMP_ELEM_FRIENDLYNAME | COMP_ELEM_POS_TOP | COMP_ELEM_SUBSCRIBEDURL | COMP_ELEM_ORIGINAL_CSI | COMP_ELEM_RESTORED_CSI | COMP_ELEM_CURITEMSTATE)
1285
1286  typedef enum tagDTI_ADTIWUI {
1287    DTI_ADDUI_DEFAULT = 0x0,
1288    DTI_ADDUI_DISPSUBWIZARD = 0x1,
1289    DTI_ADDUI_POSITIONITEM = 0x2
1290  };
1291
1292#define ADDURL_SILENT 0x1
1293
1294#define COMPONENT_DEFAULT_LEFT (0xffff)
1295#define COMPONENT_DEFAULT_TOP (0xffff)
1296
1297#undef INTERFACE
1298#define INTERFACE IActiveDesktop
1299  DECLARE_INTERFACE_IID_ (IActiveDesktop, IUnknown, "f490eb00-1240-11d1-9888-006097deacf9") {
1300    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1301    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1302    STDMETHOD_(ULONG, Release) (THIS) PURE;
1303    STDMETHOD(ApplyChanges) (THIS_ DWORD dwFlags) PURE;
1304    STDMETHOD(GetWallpaper) (THIS_ PWSTR pwszWallpaper, UINT cchWallpaper, DWORD dwFlags) PURE;
1305    STDMETHOD(SetWallpaper) (THIS_ PCWSTR pwszWallpaper, DWORD dwReserved) PURE;
1306    STDMETHOD(GetWallpaperOptions) (THIS_ LPWALLPAPEROPT pwpo, DWORD dwReserved) PURE;
1307    STDMETHOD(SetWallpaperOptions) (THIS_ LPCWALLPAPEROPT pwpo, DWORD dwReserved) PURE;
1308    STDMETHOD(GetPattern) (THIS_ PWSTR pwszPattern, UINT cchPattern, DWORD dwReserved) PURE;
1309    STDMETHOD(SetPattern) (THIS_ PCWSTR pwszPattern, DWORD dwReserved) PURE;
1310    STDMETHOD(GetDesktopItemOptions) (THIS_ LPCOMPONENTSOPT pco, DWORD dwReserved) PURE;
1311    STDMETHOD(SetDesktopItemOptions) (THIS_ LPCCOMPONENTSOPT pco, DWORD dwReserved) PURE;
1312    STDMETHOD(AddDesktopItem) (THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
1313    STDMETHOD(AddDesktopItemWithUI) (THIS_ HWND hwnd, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
1314    STDMETHOD(ModifyDesktopItem) (THIS_ LPCCOMPONENT pcomp, DWORD dwFlags) PURE;
1315    STDMETHOD(RemoveDesktopItem) (THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
1316    STDMETHOD(GetDesktopItemCount) (THIS_ int *pcItems, DWORD dwReserved) PURE;
1317    STDMETHOD(GetDesktopItem) (THIS_ int nComponent, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
1318    STDMETHOD(GetDesktopItemByID) (THIS_ ULONG_PTR dwID, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
1319    STDMETHOD(GenerateDesktopItemHtml) (THIS_ PCWSTR pwszFileName, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
1320    STDMETHOD(AddUrl) (THIS_ HWND hwnd, PCWSTR pszSource, LPCOMPONENT pcomp, DWORD dwFlags) PURE;
1321    STDMETHOD(GetDesktopItemBySource) (THIS_ PCWSTR pwszSource, LPCOMPONENT pcomp, DWORD dwReserved) PURE;
1322  };
1323  typedef IActiveDesktop *LPACTIVEDESKTOP;
1324
1325#define SSM_CLEAR 0x0000
1326#define SSM_SET 0x0001
1327#define SSM_REFRESH 0x0002
1328#define SSM_UPDATE 0x0004
1329
1330#define SCHEME_DISPLAY 0x0001
1331#define SCHEME_EDIT 0x0002
1332#define SCHEME_LOCAL 0x0004
1333#define SCHEME_GLOBAL 0x0008
1334#define SCHEME_REFRESH 0x0010
1335#define SCHEME_UPDATE 0x0020
1336#define SCHEME_DONOTUSE 0x0040
1337#define SCHEME_CREATE 0x0080
1338
1339#undef INTERFACE
1340#define INTERFACE IActiveDesktopP
1341  DECLARE_INTERFACE_IID_ (IActiveDesktopP, IUnknown, "52502EE0-EC80-11D0-89AB-00C04FC2972D") {
1342    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1343    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1344    STDMETHOD_(ULONG, Release) (THIS) PURE;
1345    STDMETHOD(SetSafeMode) (THIS_ DWORD dwFlags) PURE;
1346    STDMETHOD(EnsureUpdateHTML) (THIS) PURE;
1347    STDMETHOD(SetScheme) (THIS_ PCWSTR pwszSchemeName, DWORD dwFlags) PURE;
1348    STDMETHOD(GetScheme) (THIS_ PWSTR pwszSchemeName, DWORD *pdwcchBuffer, DWORD dwFlags) PURE;
1349  };
1350  typedef IActiveDesktopP *LPACTIVEDESKTOPP;
1351
1352#define GADOF_DIRTY 0x00000001
1353
1354#undef INTERFACE
1355#define INTERFACE IADesktopP2
1356  DECLARE_INTERFACE_IID_ (IADesktopP2, IUnknown, "B22754E2-4574-11d1-9888-006097DEACF9") {
1357    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1358    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1359    STDMETHOD_(ULONG, Release) (THIS) PURE;
1360    STDMETHOD(ReReadWallpaper) (THIS) PURE;
1361    STDMETHOD(GetADObjectFlags) (THIS_ DWORD *pdwFlags, DWORD dwMask) PURE;
1362    STDMETHOD(UpdateAllDesktopSubscriptions) (THIS) PURE;
1363    STDMETHOD(MakeDynamicChanges) (THIS_ IOleObject *pOleObj) PURE;
1364  };
1365  typedef IADesktopP2 *LPADESKTOPP2;
1366#endif
1367
1368#define MAX_COLUMN_NAME_LEN 80
1369#define MAX_COLUMN_DESC_LEN 128
1370
1371#include <pshpack1.h>
1372  typedef struct {
1373    SHCOLUMNID scid;
1374    VARTYPE vt;
1375    DWORD fmt;
1376    UINT cChars;
1377    DWORD csFlags;
1378    WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
1379    WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
1380  } SHCOLUMNINFO,*LPSHCOLUMNINFO;
1381
1382  typedef const SHCOLUMNINFO *LPCSHCOLUMNINFO;
1383#include <poppack.h>
1384
1385#include <pshpack8.h>
1386  typedef struct {
1387    ULONG dwFlags;
1388    ULONG dwReserved;
1389    WCHAR wszFolder[MAX_PATH];
1390  } SHCOLUMNINIT,*LPSHCOLUMNINIT;
1391
1392  typedef const SHCOLUMNINIT *LPCSHCOLUMNINIT;
1393
1394#define SHCDF_UPDATEITEM 0x00000001
1395
1396  typedef struct {
1397    ULONG dwFlags;
1398    DWORD dwFileAttributes;
1399    ULONG dwReserved;
1400    WCHAR *pwszExt;
1401    WCHAR wszFile[MAX_PATH];
1402  } SHCOLUMNDATA,*LPSHCOLUMNDATA;
1403
1404  typedef const SHCOLUMNDATA *LPCSHCOLUMNDATA;
1405#include <poppack.h>
1406
1407#undef INTERFACE
1408#define INTERFACE IColumnProvider
1409  DECLARE_INTERFACE_IID_ (IColumnProvider, IUnknown, "E8025004-1C42-11d2-BE2C-00A0C9A83DA1") {
1410    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
1411    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
1412    STDMETHOD_(ULONG, Release) (THIS) PURE;
1413    STDMETHOD(Initialize) (THIS_ LPCSHCOLUMNINIT psci) PURE;
1414    STDMETHOD(GetColumnInfo) (THIS_ DWORD dwIndex, SHCOLUMNINFO *psci) PURE;
1415    STDMETHOD(GetItemData) (THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VARIANT *pvarData) PURE;
1416  };
1417
1418#define CFSTR_SHELLIDLIST TEXT ("Shell IDList Array")
1419#define CFSTR_SHELLIDLISTOFFSET TEXT ("Shell Object Offsets")
1420#define CFSTR_NETRESOURCES TEXT ("Net Resource")
1421#define CFSTR_FILEDESCRIPTORA TEXT ("FileGroupDescriptor")
1422#define CFSTR_FILEDESCRIPTORW TEXT ("FileGroupDescriptorW")
1423#define CFSTR_FILECONTENTS TEXT ("FileContents")
1424#define CFSTR_FILENAMEA TEXT ("FileName")
1425#define CFSTR_FILENAMEW TEXT ("FileNameW")
1426#define CFSTR_PRINTERGROUP TEXT ("PrinterFriendlyName")
1427#define CFSTR_FILENAMEMAPA TEXT ("FileNameMap")
1428#define CFSTR_FILENAMEMAPW TEXT ("FileNameMapW")
1429#define CFSTR_SHELLURL TEXT ("UniformResourceLocator")
1430#define CFSTR_INETURLA CFSTR_SHELLURL
1431#define CFSTR_INETURLW TEXT ("UniformResourceLocatorW")
1432#define CFSTR_PREFERREDDROPEFFECT TEXT ("Preferred DropEffect")
1433#define CFSTR_PERFORMEDDROPEFFECT TEXT ("Performed DropEffect")
1434#define CFSTR_PASTESUCCEEDED TEXT ("Paste Succeeded")
1435#define CFSTR_INDRAGLOOP TEXT ("InShellDragLoop")
1436#define CFSTR_MOUNTEDVOLUME TEXT ("MountedVolume")
1437#define CFSTR_PERSISTEDDATAOBJECT TEXT ("PersistedDataObject")
1438#define CFSTR_TARGETCLSID TEXT ("TargetCLSID")
1439#define CFSTR_LOGICALPERFORMEDDROPEFFECT TEXT ("Logical Performed DropEffect")
1440#define CFSTR_AUTOPLAY_SHELLIDLISTS TEXT ("Autoplay Enumerated IDList Array")
1441#define CFSTR_UNTRUSTEDDRAGDROP TEXT ("UntrustedDragDrop")
1442#define CFSTR_FILE_ATTRIBUTES_ARRAY TEXT ("File Attributes Array")
1443#define CFSTR_INVOKECOMMAND_DROPPARAM TEXT ("InvokeCommand DropParam")
1444#define CFSTR_SHELLDROPHANDLER TEXT ("DropHandlerCLSID")
1445#define CFSTR_DROPDESCRIPTION TEXT ("DropDescription")
1446#define CFSTR_ZONEIDENTIFIER TEXT ("ZoneIdentifier")
1447
1448#define CFSTR_FILEDESCRIPTOR __MINGW_NAME_AW(CFSTR_FILEDESCRIPTOR)
1449#define CFSTR_FILENAME __MINGW_NAME_AW(CFSTR_FILENAME)
1450#define CFSTR_FILENAMEMAP __MINGW_NAME_AW(CFSTR_FILENAMEMAP)
1451#define CFSTR_INETURL __MINGW_NAME_AW(CFSTR_INETURL)
1452
1453#define DVASPECT_SHORTNAME 2
1454#define DVASPECT_COPY 3
1455#define DVASPECT_LINK 4
1456
1457#include <pshpack8.h>
1458  typedef struct _NRESARRAY {
1459    UINT cItems;
1460    NETRESOURCE nr[1];
1461  } NRESARRAY,*LPNRESARRAY;
1462#include <poppack.h>
1463
1464  typedef struct _IDA {
1465    UINT cidl;
1466    UINT aoffset[1];
1467  } CIDA,*LPIDA;
1468
1469  typedef enum {
1470    FD_CLSID = 0x1,
1471    FD_SIZEPOINT = 0x2,
1472    FD_ATTRIBUTES = 0x4,
1473    FD_CREATETIME = 0x8,
1474    FD_ACCESSTIME = 0x10,
1475    FD_WRITESTIME = 0x20,
1476    FD_FILESIZE = 0x40,
1477    FD_PROGRESSUI = 0x4000,
1478    FD_LINKUI = 0x8000
1479#if NTDDI_VERSION >= 0x06000000
1480    , FD_UNICODE = (int) 0x80000000
1481#endif
1482  } FD_FLAGS;
1483
1484  typedef struct _FILEDESCRIPTORA {
1485    DWORD dwFlags;
1486    CLSID clsid;
1487    SIZEL sizel;
1488    POINTL pointl;
1489    DWORD dwFileAttributes;
1490    FILETIME ftCreationTime;
1491    FILETIME ftLastAccessTime;
1492    FILETIME ftLastWriteTime;
1493    DWORD nFileSizeHigh;
1494    DWORD nFileSizeLow;
1495    CHAR cFileName[MAX_PATH];
1496  } FILEDESCRIPTORA,*LPFILEDESCRIPTORA;
1497
1498  typedef struct _FILEDESCRIPTORW {
1499    DWORD dwFlags;
1500    CLSID clsid;
1501    SIZEL sizel;
1502    POINTL pointl;
1503    DWORD dwFileAttributes;
1504    FILETIME ftCreationTime;
1505    FILETIME ftLastAccessTime;
1506    FILETIME ftLastWriteTime;
1507    DWORD nFileSizeHigh;
1508    DWORD nFileSizeLow;
1509    WCHAR cFileName[MAX_PATH];
1510  } FILEDESCRIPTORW,*LPFILEDESCRIPTORW;
1511
1512#define FILEDESCRIPTOR __MINGW_NAME_AW(FILEDESCRIPTOR)
1513#define LPFILEDESCRIPTOR __MINGW_NAME_AW(LPFILEDESCRIPTOR)
1514
1515  typedef struct _FILEGROUPDESCRIPTORA {
1516    UINT cItems;
1517    FILEDESCRIPTORA fgd[1];
1518  } FILEGROUPDESCRIPTORA,*LPFILEGROUPDESCRIPTORA;
1519
1520  typedef struct _FILEGROUPDESCRIPTORW {
1521    UINT cItems;
1522    FILEDESCRIPTORW fgd[1];
1523  } FILEGROUPDESCRIPTORW,*LPFILEGROUPDESCRIPTORW;
1524
1525#define FILEGROUPDESCRIPTOR __MINGW_NAME_AW(FILEGROUPDESCRIPTOR)
1526#define LPFILEGROUPDESCRIPTOR __MINGW_NAME_AW(LPFILEGROUPDESCRIPTOR)
1527
1528  typedef struct _DROPFILES {
1529    DWORD pFiles;
1530    POINT pt;
1531    WINBOOL fNC;
1532    WINBOOL fWide;
1533  } DROPFILES,*LPDROPFILES;
1534
1535#if NTDDI_VERSION >= 0x06000000
1536  typedef struct {
1537    UINT cItems;
1538    DWORD dwSumFileAttributes;
1539    DWORD dwProductFileAttributes;
1540    DWORD rgdwFileAttributes[1];
1541  } FILE_ATTRIBUTES_ARRAY;
1542#endif
1543
1544#if NTDDI_VERSION >= 0x06000000
1545  typedef enum {
1546    DROPIMAGE_INVALID = -1,
1547    DROPIMAGE_NONE = 0,
1548    DROPIMAGE_COPY = DROPEFFECT_COPY,
1549    DROPIMAGE_MOVE = DROPEFFECT_MOVE,
1550    DROPIMAGE_LINK = DROPEFFECT_LINK,
1551    DROPIMAGE_LABEL = 6,
1552    DROPIMAGE_WARNING = 7,
1553    DROPIMAGE_NOIMAGE = 8
1554  } DROPIMAGETYPE;
1555
1556  typedef struct {
1557    DROPIMAGETYPE type;
1558    WCHAR szMessage[MAX_PATH];
1559    WCHAR szInsert[MAX_PATH];
1560  } DROPDESCRIPTION;
1561#endif
1562
1563  typedef struct _SHChangeNotifyEntry {
1564    PCIDLIST_ABSOLUTE pidl;
1565    WINBOOL fRecursive;
1566  } SHChangeNotifyEntry;
1567
1568#define SHCNRF_InterruptLevel 0x0001
1569#define SHCNRF_ShellLevel 0x0002
1570#define SHCNRF_RecursiveInterrupt 0x1000
1571#define SHCNRF_NewDelivery 0x8000
1572
1573#define SHCNE_RENAMEITEM __MSABI_LONG(0x00000001)
1574#define SHCNE_CREATE __MSABI_LONG(0x00000002)
1575#define SHCNE_DELETE __MSABI_LONG(0x00000004)
1576#define SHCNE_MKDIR __MSABI_LONG(0x00000008)
1577#define SHCNE_RMDIR __MSABI_LONG(0x00000010)
1578#define SHCNE_MEDIAINSERTED __MSABI_LONG(0x00000020)
1579#define SHCNE_MEDIAREMOVED __MSABI_LONG(0x00000040)
1580#define SHCNE_DRIVEREMOVED __MSABI_LONG(0x00000080)
1581#define SHCNE_DRIVEADD __MSABI_LONG(0x00000100)
1582#define SHCNE_NETSHARE __MSABI_LONG(0x00000200)
1583#define SHCNE_NETUNSHARE __MSABI_LONG(0x00000400)
1584#define SHCNE_ATTRIBUTES __MSABI_LONG(0x00000800)
1585#define SHCNE_UPDATEDIR __MSABI_LONG(0x00001000)
1586#define SHCNE_UPDATEITEM __MSABI_LONG(0x00002000)
1587#define SHCNE_SERVERDISCONNECT __MSABI_LONG(0x00004000)
1588#define SHCNE_UPDATEIMAGE __MSABI_LONG(0x00008000)
1589#define SHCNE_DRIVEADDGUI __MSABI_LONG(0x00010000)
1590#define SHCNE_RENAMEFOLDER __MSABI_LONG(0x00020000)
1591#define SHCNE_FREESPACE __MSABI_LONG(0x00040000)
1592
1593#define SHCNE_EXTENDED_EVENT __MSABI_LONG(0x04000000)
1594
1595#define SHCNE_ASSOCCHANGED __MSABI_LONG(0x08000000)
1596
1597#define SHCNE_DISKEVENTS __MSABI_LONG(0x0002381f)
1598#define SHCNE_GLOBALEVENTS __MSABI_LONG(0x0c0581e0)
1599#define SHCNE_ALLEVENTS __MSABI_LONG(0x7fffffff)
1600#define SHCNE_INTERRUPT __MSABI_LONG(0x80000000)
1601
1602#define SHCNEE_ORDERCHANGED __MSABI_LONG(2)
1603#define SHCNEE_MSI_CHANGE __MSABI_LONG(4)
1604#define SHCNEE_MSI_UNINSTALL __MSABI_LONG(5)
1605
1606#define SHCNF_IDLIST 0x0000
1607#define SHCNF_PATHA 0x0001
1608#define SHCNF_PRINTERA 0x0002
1609#define SHCNF_DWORD 0x0003
1610#define SHCNF_PATHW 0x0005
1611#define SHCNF_PRINTERW 0x0006
1612#define SHCNF_TYPE 0x00ff
1613#define SHCNF_FLUSH 0x1000
1614#define SHCNF_FLUSHNOWAIT 0x3000
1615
1616#define SHCNF_NOTIFYRECURSIVE 0x10000
1617
1618#define SHCNF_PATH __MINGW_NAME_AW(SHCNF_PATH)
1619#define SHCNF_PRINTER __MINGW_NAME_AW(SHCNF_PRINTER)
1620
1621  SHSTDAPI_(void) SHChangeNotify (LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
1622
1623#undef INTERFACE
1624#define INTERFACE IShellChangeNotify
1625  DECLARE_INTERFACE_IID_ (IShellChangeNotify, IUnknown, "D82BE2B1-5764-11D0-A96E-00C04FD705A2") {
1626    STDMETHOD(OnChange) (THIS_ LONG lEvent, PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2) PURE;
1627  };
1628
1629#undef INTERFACE
1630#define INTERFACE IQueryInfo
1631  DECLARE_INTERFACE_IID_ (IQueryInfo, IUnknown, "00021500-0000-0000-c000-000000000046") {
1632    STDMETHOD(GetInfoTip) (THIS_ DWORD dwFlags, PWSTR *ppwszTip) PURE;
1633    STDMETHOD(GetInfoFlags) (THIS_ DWORD *pdwFlags) PURE;
1634  };
1635
1636#define QITIPF_DEFAULT 0x00000000
1637#define QITIPF_USENAME 0x00000001
1638#define QITIPF_LINKNOTARGET 0x00000002
1639#define QITIPF_LINKUSETARGET 0x00000004
1640#define QITIPF_USESLOWTIP 0x00000008
1641#if NTDDI_VERSION >= 0x06000000
1642#define QITIPF_SINGLELINE 0x00000010
1643#endif
1644
1645#define QIF_CACHED 0x00000001
1646#define QIF_DONTEXPANDFOLDER 0x00000002
1647
1648  typedef enum {
1649    SHARD_PIDL = __MSABI_LONG(0x00000001),
1650    SHARD_PATHA = __MSABI_LONG(0x00000002),
1651    SHARD_PATHW = __MSABI_LONG(0x00000003)
1652#if NTDDI_VERSION >= 0x06010000
1653    , SHARD_APPIDINFO = __MSABI_LONG(0x00000004),
1654    SHARD_APPIDINFOIDLIST = __MSABI_LONG(0x00000005),
1655    SHARD_LINK = __MSABI_LONG(0x00000006),
1656    SHARD_APPIDINFOLINK = __MSABI_LONG(0x00000007),
1657    SHARD_SHELLITEM = __MSABI_LONG(0x00000008)
1658#endif
1659  } SHARD;
1660
1661#if NTDDI_VERSION >= 0x06010000
1662
1663  typedef struct SHARDAPPIDINFO {
1664    IShellItem *psi;
1665    PCWSTR pszAppID;
1666  } SHARDAPPIDINFO;
1667
1668  typedef struct SHARDAPPIDINFOIDLIST {
1669    PCIDLIST_ABSOLUTE pidl;
1670    PCWSTR pszAppID;
1671  } SHARDAPPIDINFOIDLIST;
1672
1673  typedef struct SHARDAPPIDINFOLINK {
1674    IShellLink *psl;
1675    PCWSTR pszAppID;
1676  } SHARDAPPIDINFOLINK;
1677#endif
1678
1679#define SHARD_PATH __MINGW_NAME_AW(SHARD_PATH)
1680
1681  SHSTDAPI_(void) SHAddToRecentDocs (UINT uFlags, LPCVOID pv);
1682
1683  typedef struct _SHChangeDWORDAsIDList {
1684    USHORT cb;
1685    DWORD dwItem1;
1686    DWORD dwItem2;
1687    USHORT cbZero;
1688  } SHChangeDWORDAsIDList,*LPSHChangeDWORDAsIDList;
1689
1690  typedef struct _SHChangeUpdateImageIDList {
1691    USHORT cb;
1692    int iIconIndex;
1693    int iCurIndex;
1694    UINT uFlags;
1695    DWORD dwProcessID;
1696    WCHAR szName[MAX_PATH];
1697    USHORT cbZero;
1698  } SHChangeUpdateImageIDList,*LPSHChangeUpdateImageIDList;
1699
1700  SHSTDAPI_(int) SHHandleUpdateImage (PCIDLIST_ABSOLUTE pidlExtra);
1701
1702  typedef struct _SHChangeProductKeyAsIDList {
1703    USHORT cb;
1704    WCHAR wszProductKey[39];
1705    USHORT cbZero;
1706  } SHChangeProductKeyAsIDList,*LPSHChangeProductKeyAsIDList;
1707
1708  SHSTDAPI_(void) SHUpdateImageA (LPCSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
1709  SHSTDAPI_(void) SHUpdateImageW (LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex);
1710
1711#define SHUpdateImage __MINGW_NAME_AW(SHUpdateImage)
1712
1713  SHSTDAPI_(ULONG) SHChangeNotifyRegister (HWND hwnd, int fSources, LONG fEvents, UINT wMsg, int cEntries, const SHChangeNotifyEntry *pshcne);
1714  SHSTDAPI_(WINBOOL) SHChangeNotifyDeregister (ULONG ulID);
1715
1716  typedef enum {
1717    SCNRT_ENABLE = 0,
1718    SCNRT_DISABLE = 1
1719  } SCNRT_STATUS;
1720
1721#if NTDDI_VERSION >= 0x06000000
1722  STDAPI_ (void) SHChangeNotifyRegisterThread (SCNRT_STATUS status);
1723#endif
1724  SHSTDAPI_(HANDLE) SHChangeNotification_Lock (HANDLE hChange, DWORD dwProcId, PIDLIST_ABSOLUTE **pppidl, LONG *plEvent);
1725  SHSTDAPI_(WINBOOL) SHChangeNotification_Unlock (HANDLE hLock);
1726  SHSTDAPI SHGetRealIDL (IShellFolder *psf, PCUITEMID_CHILD pidlSimple, PITEMID_CHILD *ppidlReal);
1727  SHSTDAPI SHGetInstanceExplorer (IUnknown **ppunk);
1728
1729#define SHGDFIL_FINDDATA 1
1730#define SHGDFIL_NETRESOURCE 2
1731#define SHGDFIL_DESCRIPTIONID 3
1732
1733#define SHDID_ROOT_REGITEM 1
1734#define SHDID_FS_FILE 2
1735#define SHDID_FS_DIRECTORY 3
1736#define SHDID_FS_OTHER 4
1737#define SHDID_COMPUTER_DRIVE35 5
1738#define SHDID_COMPUTER_DRIVE525 6
1739#define SHDID_COMPUTER_REMOVABLE 7
1740#define SHDID_COMPUTER_FIXED 8
1741#define SHDID_COMPUTER_NETDRIVE 9
1742#define SHDID_COMPUTER_CDROM 10
1743#define SHDID_COMPUTER_RAMDISK 11
1744#define SHDID_COMPUTER_OTHER 12
1745#define SHDID_NET_DOMAIN 13
1746#define SHDID_NET_SERVER 14
1747#define SHDID_NET_SHARE 15
1748#define SHDID_NET_RESTOFNET 16
1749#define SHDID_NET_OTHER 17
1750#define SHDID_COMPUTER_IMAGING 18
1751#define SHDID_COMPUTER_AUDIO 19
1752#define SHDID_COMPUTER_SHAREDDOCS 20
1753#if NTDDI_VERSION >= 0x06000000
1754#define SHDID_MOBILE_DEVICE 21
1755#endif
1756
1757#include <pshpack8.h>
1758  typedef struct _SHDESCRIPTIONID {
1759    DWORD dwDescriptionId;
1760    CLSID clsid;
1761  } SHDESCRIPTIONID,*LPSHDESCRIPTIONID;
1762#include <poppack.h>
1763
1764  SHSTDAPI SHGetDataFromIDListA (IShellFolder *psf, PCUITEMID_CHILD pidl, int nFormat, void *pv, int cb);
1765  SHSTDAPI SHGetDataFromIDListW (IShellFolder *psf, PCUITEMID_CHILD pidl, int nFormat, void *pv, int cb);
1766
1767#define SHGetDataFromIDList __MINGW_NAME_AW(SHGetDataFromIDList)
1768
1769#define PRF_VERIFYEXISTS 0x1
1770#define PRF_TRYPROGRAMEXTENSIONS (0x2 | PRF_VERIFYEXISTS)
1771#define PRF_FIRSTDIRDEF 0x4
1772#define PRF_DONTFINDLNK 0x8
1773#define PRF_REQUIREABSOLUTE 0x10
1774
1775  SHSTDAPI_(int) RestartDialog (HWND hwnd, PCWSTR pszPrompt, DWORD dwReturn);
1776  SHSTDAPI_(int) RestartDialogEx (HWND hwnd, PCWSTR pszPrompt, DWORD dwReturn, DWORD dwReasonCode);
1777  SHSTDAPI SHCoCreateInstance (PCWSTR pszCLSID, const CLSID *pclsid, IUnknown *pUnkOuter, REFIID riid, void **ppv);
1778#if NTDDI_VERSION >= 0x06000000
1779  SHSTDAPI SHCreateDataObject (PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject *pdtInner, REFIID riid, void **ppv);
1780#endif
1781  SHSTDAPI CIDLData_CreateFromIDArray (PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUIDLIST_RELATIVE_ARRAY apidl, IDataObject **ppdtobj);
1782  SHSTDAPI SHCreateStdEnumFmtEtc (UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **ppenumFormatEtc);
1783  SHSTDAPI SHDoDragDrop (HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD dwEffect, DWORD *pdwEffect);
1784
1785#define NUM_POINTS 3
1786
1787  typedef struct {
1788    int iNextSample;
1789    DWORD dwLastScroll;
1790    WINBOOL bFull;
1791    POINT pts[NUM_POINTS];
1792    DWORD dwTimes[NUM_POINTS];
1793  } AUTO_SCROLL_DATA;
1794
1795  SHSTDAPI_(WINBOOL) DAD_SetDragImage (HIMAGELIST him, POINT *pptOffset);
1796  SHSTDAPI_(WINBOOL) DAD_DragEnterEx (HWND hwndTarget, const POINT ptStart);
1797  SHSTDAPI_(WINBOOL) DAD_DragEnterEx2 (HWND hwndTarget, const POINT ptStart, IDataObject *pdtObject);
1798  SHSTDAPI_(WINBOOL) DAD_ShowDragImage (WINBOOL fShow);
1799  SHSTDAPI_(WINBOOL) DAD_DragMove (POINT pt);
1800  SHSTDAPI_(WINBOOL) DAD_DragLeave (void);
1801  SHSTDAPI_(WINBOOL) DAD_AutoScroll (HWND hwnd, AUTO_SCROLL_DATA *pad, const POINT *pptNow);
1802
1803  typedef struct {
1804    WORD cLength;
1805    WORD nVersion;
1806    WINBOOL fFullPathTitle : 1;
1807    WINBOOL fSaveLocalView : 1;
1808    WINBOOL fNotShell : 1;
1809    WINBOOL fSimpleDefault : 1;
1810    WINBOOL fDontShowDescBar : 1;
1811    WINBOOL fNewWindowMode : 1;
1812    WINBOOL fShowCompColor : 1;
1813    WINBOOL fDontPrettyNames : 1;
1814    WINBOOL fAdminsCreateCommonGroups : 1;
1815    UINT fUnusedFlags : 7;
1816    UINT fMenuEnumFilter;
1817  } CABINETSTATE,*LPCABINETSTATE;
1818
1819#define CABINETSTATE_VERSION 2
1820
1821  SHSTDAPI_(WINBOOL) ReadCabinetState (CABINETSTATE *pcs, int cLength);
1822  SHSTDAPI_(WINBOOL) WriteCabinetState (CABINETSTATE *pcs);
1823  SHSTDAPI_(WINBOOL) PathMakeUniqueName (PWSTR pszUniqueName, UINT cchMax, PCWSTR pszTemplate, PCWSTR pszLongPlate, PCWSTR pszDir);
1824  SHSTDAPI_(void) PathQualify (PWSTR psz);
1825  SHSTDAPI_(WINBOOL) PathIsExe (PCWSTR pszPath);
1826  SHSTDAPI_(WINBOOL) PathIsSlowA (LPCSTR pszFile, DWORD dwAttr);
1827  SHSTDAPI_(WINBOOL) PathIsSlowW (LPCWSTR pszFile, DWORD dwAttr);
1828
1829#define PathIsSlow __MINGW_NAME_AW(PathIsSlow)
1830
1831#define PCS_FATAL 0x80000000
1832#define PCS_REPLACEDCHAR 0x00000001
1833#define PCS_REMOVEDCHAR 0x00000002
1834#define PCS_TRUNCATED 0x00000004
1835#define PCS_PATHTOOLONG 0x00000008
1836
1837  SHSTDAPI_(int) PathCleanupSpec (PCWSTR pszDir, PWSTR pszSpec);
1838  SHSTDAPI_(int) PathResolve (PWSTR pszPath, PZPCWSTR dirs, UINT fFlags);
1839  SHSTDAPI_(WINBOOL) GetFileNameFromBrowse (HWND hwnd, PWSTR pszFilePath, UINT cchFilePath, PCWSTR pszWorkingDir, PCWSTR pszDefExt, PCWSTR pszFilters, PCWSTR pszTitle);
1840  SHSTDAPI_(int) DriveType (int iDrive);
1841  SHSTDAPI_(int) RealDriveType (int iDrive, WINBOOL fOKToHitNet);
1842  SHSTDAPI_(int) IsNetDrive (int iDrive);
1843
1844#define MM_ADDSEPARATOR __MSABI_LONG(0x00000001)
1845#define MM_SUBMENUSHAVEIDS __MSABI_LONG(0x00000002)
1846#define MM_DONTREMOVESEPS __MSABI_LONG(0x00000004)
1847
1848  SHSTDAPI_(UINT) Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags);
1849  SHSTDAPI_(WINBOOL) SHObjectProperties (HWND hwnd, DWORD shopObjectType, PCWSTR pszObjectName, PCWSTR pszPropertyPage);
1850
1851#define SHOP_PRINTERNAME 0x00000001
1852#define SHOP_FILEPATH 0x00000002
1853#define SHOP_VOLUMEGUID 0x00000004
1854
1855  SHSTDAPI_(DWORD) SHFormatDrive (HWND hwnd, UINT drive, UINT fmtID, UINT options);
1856
1857#define SHFMT_ID_DEFAULT 0xffff
1858
1859#define SHFMT_OPT_FULL 0x0001
1860#define SHFMT_OPT_SYSONLY 0x0002
1861
1862#define SHFMT_ERROR __MSABI_LONG(0xffffffff)
1863#define SHFMT_CANCEL __MSABI_LONG(0xfffffffe)
1864#define SHFMT_NOFORMAT __MSABI_LONG(0xfffffffd)
1865
1866#ifndef HPSXA_DEFINED
1867#define HPSXA_DEFINED
1868  DECLARE_HANDLE (HPSXA);
1869#endif
1870
1871  WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray (HKEY hKey, PCWSTR pszSubKey, UINT max_iface);
1872  WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray (HPSXA hpsxa);
1873  WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray (HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam);
1874  WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray (HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam);
1875
1876#if (NTDDI_VERSION >= 0x05000000 && NTDDI_VERSION < 0x06000000)
1877#undef INTERFACE
1878#define INTERFACE IDefViewFrame
1879  DECLARE_INTERFACE_IID_ (IDefViewFrame, IUnknown, "710EB7A0-45ED-11D0-924A-0020AFC7AC4D") {
1880    STDMETHOD(GetWindowLV) (THIS_ HWND *phwnd) PURE;
1881    STDMETHOD(ReleaseWindowLV) (THIS) PURE;
1882    STDMETHOD(GetShellFolder) (THIS_ IShellFolder **ppsf) PURE;
1883  };
1884#endif
1885
1886  typedef enum RESTRICTIONS {
1887    REST_NONE = 0x00000000,
1888    REST_NORUN = 0x00000001,
1889    REST_NOCLOSE = 0x00000002,
1890    REST_NOSAVESET = 0x00000004,
1891    REST_NOFILEMENU = 0x00000008,
1892    REST_NOSETFOLDERS = 0x00000010,
1893    REST_NOSETTASKBAR = 0x00000020,
1894    REST_NODESKTOP = 0x00000040,
1895    REST_NOFIND = 0x00000080,
1896    REST_NODRIVES = 0x00000100,
1897    REST_NODRIVEAUTORUN = 0x00000200,
1898    REST_NODRIVETYPEAUTORUN = 0x00000400,
1899    REST_NONETHOOD = 0x00000800,
1900    REST_STARTBANNER = 0x00001000,
1901    REST_RESTRICTRUN = 0x00002000,
1902    REST_NOPRINTERTABS = 0x00004000,
1903    REST_NOPRINTERDELETE = 0x00008000,
1904    REST_NOPRINTERADD = 0x00010000,
1905    REST_NOSTARTMENUSUBFOLDERS = 0x00020000,
1906    REST_MYDOCSONNET = 0x00040000,
1907    REST_NOEXITTODOS = 0x00080000,
1908    REST_ENFORCESHELLEXTSECURITY = 0x00100000,
1909    REST_LINKRESOLVEIGNORELINKINFO = 0x00200000,
1910    REST_NOCOMMONGROUPS = 0x00400000,
1911    REST_SEPARATEDESKTOPPROCESS = 0x00800000,
1912    REST_NOWEB = 0x01000000,
1913    REST_NOTRAYCONTEXTMENU = 0x02000000,
1914    REST_NOVIEWCONTEXTMENU = 0x04000000,
1915    REST_NONETCONNECTDISCONNECT = 0x08000000,
1916    REST_STARTMENULOGOFF = 0x10000000,
1917    REST_NOSETTINGSASSIST = 0x20000000,
1918    REST_NOINTERNETICON = 0x40000001,
1919    REST_NORECENTDOCSHISTORY = 0x40000002,
1920    REST_NORECENTDOCSMENU = 0x40000003,
1921    REST_NOACTIVEDESKTOP = 0x40000004,
1922    REST_NOACTIVEDESKTOPCHANGES = 0x40000005,
1923    REST_NOFAVORITESMENU = 0x40000006,
1924    REST_CLEARRECENTDOCSONEXIT = 0x40000007,
1925    REST_CLASSICSHELL = 0x40000008,
1926    REST_NOCUSTOMIZEWEBVIEW = 0x40000009,
1927    REST_NOHTMLWALLPAPER = 0x40000010,
1928    REST_NOCHANGINGWALLPAPER = 0x40000011,
1929    REST_NODESKCOMP = 0x40000012,
1930    REST_NOADDDESKCOMP = 0x40000013,
1931    REST_NODELDESKCOMP = 0x40000014,
1932    REST_NOCLOSEDESKCOMP = 0x40000015,
1933    REST_NOCLOSE_DRAGDROPBAND = 0x40000016,
1934    REST_NOMOVINGBAND = 0x40000017,
1935    REST_NOEDITDESKCOMP = 0x40000018,
1936    REST_NORESOLVESEARCH = 0x40000019,
1937    REST_NORESOLVETRACK = 0x4000001a,
1938    REST_FORCECOPYACLWITHFILE = 0x4000001b,
1939#if NTDDI_VERSION < 0x06000000
1940    REST_NOLOGO3CHANNELNOTIFY = 0x4000001c,
1941#endif
1942    REST_NOFORGETSOFTWAREUPDATE = 0x4000001d,
1943    REST_NOSETACTIVEDESKTOP = 0x4000001e,
1944    REST_NOUPDATEWINDOWS = 0x4000001f,
1945    REST_NOCHANGESTARMENU = 0x40000020,
1946    REST_NOFOLDEROPTIONS = 0x40000021,
1947    REST_HASFINDCOMPUTERS = 0x40000022,
1948    REST_INTELLIMENUS = 0x40000023,
1949    REST_RUNDLGMEMCHECKBOX = 0x40000024,
1950    REST_ARP_ShowPostSetup = 0x40000025,
1951    REST_NOCSC = 0x40000026,
1952    REST_NOCONTROLPANEL = 0x40000027,
1953    REST_ENUMWORKGROUP = 0x40000028,
1954    REST_ARP_NOARP = 0x40000029,
1955    REST_ARP_NOREMOVEPAGE = 0x4000002a,
1956    REST_ARP_NOADDPAGE = 0x4000002b,
1957    REST_ARP_NOWINSETUPPAGE = 0x4000002c,
1958    REST_GREYMSIADS = 0x4000002d,
1959    REST_NOCHANGEMAPPEDDRIVELABEL = 0x4000002e,
1960    REST_NOCHANGEMAPPEDDRIVECOMMENT = 0x4000002f,
1961    REST_MaxRecentDocs = 0x40000030,
1962    REST_NONETWORKCONNECTIONS = 0x40000031,
1963    REST_FORCESTARTMENULOGOFF = 0x40000032,
1964    REST_NOWEBVIEW = 0x40000033,
1965    REST_NOCUSTOMIZETHISFOLDER = 0x40000034,
1966    REST_NOENCRYPTION = 0x40000035,
1967    REST_DONTSHOWSUPERHIDDEN = 0x40000037,
1968    REST_NOSHELLSEARCHBUTTON = 0x40000038,
1969    REST_NOHARDWARETAB = 0x40000039,
1970    REST_NORUNASINSTALLPROMPT = 0x4000003a,
1971    REST_PROMPTRUNASINSTALLNETPATH = 0x4000003b,
1972    REST_NOMANAGEMYCOMPUTERVERB = 0x4000003c,
1973    REST_DISALLOWRUN = 0x4000003e,
1974    REST_NOWELCOMESCREEN = 0x4000003f,
1975    REST_RESTRICTCPL = 0x40000040,
1976    REST_DISALLOWCPL = 0x40000041,
1977    REST_NOSMBALLOONTIP = 0x40000042,
1978    REST_NOSMHELP = 0x40000043,
1979    REST_NOWINKEYS = 0x40000044,
1980    REST_NOENCRYPTONMOVE = 0x40000045,
1981    REST_NOLOCALMACHINERUN = 0x40000046,
1982    REST_NOCURRENTUSERRUN = 0x40000047,
1983    REST_NOLOCALMACHINERUNONCE = 0x40000048,
1984    REST_NOCURRENTUSERRUNONCE = 0x40000049,
1985    REST_FORCEACTIVEDESKTOPON = 0x4000004a,
1986    REST_NOVIEWONDRIVE = 0x4000004c,
1987    REST_NONETCRAWL = 0x4000004d,
1988    REST_NOSHAREDDOCUMENTS = 0x4000004e,
1989    REST_NOSMMYDOCS = 0x4000004f,
1990    REST_NOSMMYPICS = 0x40000050,
1991    REST_ALLOWBITBUCKDRIVES = 0x40000051,
1992    REST_NONLEGACYSHELLMODE = 0x40000052,
1993    REST_NOCONTROLPANELBARRICADE = 0x40000053,
1994    REST_NOSTARTPAGE = 0x40000054,
1995    REST_NOAUTOTRAYNOTIFY = 0x40000055,
1996    REST_NOTASKGROUPING = 0x40000056,
1997    REST_NOCDBURNING = 0x40000057,
1998    REST_MYCOMPNOPROP = 0x40000058,
1999    REST_MYDOCSNOPROP = 0x40000059,
2000    REST_NOSTARTPANEL = 0x4000005a,
2001    REST_NODISPLAYAPPEARANCEPAGE = 0x4000005b,
2002    REST_NOTHEMESTAB = 0x4000005c,
2003    REST_NOVISUALSTYLECHOICE = 0x4000005d,
2004    REST_NOSIZECHOICE = 0x4000005e,
2005    REST_NOCOLORCHOICE = 0x4000005f,
2006    REST_SETVISUALSTYLE = 0x40000060,
2007    REST_STARTRUNNOHOMEPATH = 0x40000061,
2008    REST_NOUSERNAMEINSTARTPANEL = 0x40000062,
2009    REST_NOMYCOMPUTERICON = 0x40000063,
2010    REST_NOSMNETWORKPLACES = 0x40000064,
2011    REST_NOSMPINNEDLIST = 0x40000065,
2012    REST_NOSMMYMUSIC = 0x40000066,
2013    REST_NOSMEJECTPC = 0x40000067,
2014    REST_NOSMMOREPROGRAMS = 0x40000068,
2015    REST_NOSMMFUPROGRAMS = 0x40000069,
2016    REST_NOTRAYITEMSDISPLAY = 0x4000006a,
2017    REST_NOTOOLBARSONTASKBAR = 0x4000006b,
2018    REST_NOSMCONFIGUREPROGRAMS = 0x4000006f,
2019    REST_HIDECLOCK = 0x40000070,
2020    REST_NOLOWDISKSPACECHECKS = 0x40000071,
2021    REST_NOENTIRENETWORK = 0x40000072,
2022    REST_NODESKTOPCLEANUP = 0x40000073,
2023    REST_BITBUCKNUKEONDELETE = 0x40000074,
2024    REST_BITBUCKCONFIRMDELETE = 0x40000075,
2025    REST_BITBUCKNOPROP = 0x40000076,
2026    REST_NODISPBACKGROUND = 0x40000077,
2027    REST_NODISPSCREENSAVEPG = 0x40000078,
2028    REST_NODISPSETTINGSPG = 0x40000079,
2029    REST_NODISPSCREENSAVEPREVIEW = 0x4000007a,
2030    REST_NODISPLAYCPL = 0x4000007b,
2031    REST_HIDERUNASVERB = 0x4000007c,
2032    REST_NOTHUMBNAILCACHE = 0x4000007d,
2033    REST_NOSTRCMPLOGICAL = 0x4000007e,
2034    REST_NOPUBLISHWIZARD = 0x4000007f,
2035    REST_NOONLINEPRINTSWIZARD = 0x40000080,
2036    REST_NOWEBSERVICES = 0x40000081,
2037    REST_ALLOWUNHASHEDWEBVIEW = 0x40000082,
2038    REST_ALLOWLEGACYWEBVIEW = 0x40000083,
2039    REST_REVERTWEBVIEWSECURITY = 0x40000084,
2040    REST_INHERITCONSOLEHANDLES = 0x40000086,
2041#if NTDDI_VERSION < 0x06000000
2042    REST_SORTMAXITEMCOUNT = 0x40000087,
2043#endif
2044    REST_NOREMOTERECURSIVEEVENTS = 0x40000089,
2045    REST_NOREMOTECHANGENOTIFY = 0x40000091,
2046#if NTDDI_VERSION < 0x06000000
2047    REST_NOSIMPLENETIDLIST = 0x40000092,
2048#endif
2049    REST_NOENUMENTIRENETWORK = 0x40000093,
2050#if NTDDI_VERSION < 0x06000000
2051    REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094,
2052#endif
2053    REST_NOINTERNETOPENWITH = 0x40000095,
2054    REST_DONTRETRYBADNETNAME = 0x4000009b,
2055    REST_ALLOWFILECLSIDJUNCTIONS = 0x4000009c,
2056    REST_NOUPNPINSTALL = 0x4000009d,
2057    REST_ARP_DONTGROUPPATCHES = 0x400000ac,
2058    REST_ARP_NOCHOOSEPROGRAMSPAGE = 0x400000ad,
2059    REST_NODISCONNECT = 0x41000001,
2060    REST_NOSECURITY = 0x41000002,
2061    REST_NOFILEASSOCIATE = 0x41000003,
2062    REST_ALLOWCOMMENTTOGGLE = 0x41000004
2063#if NTDDI_VERSION < 0x06000000
2064    , REST_USEDESKTOPINICACHE = 0x41000005
2065#endif
2066  } RESTRICTIONS;
2067
2068  SHSTDAPI_(IStream *) OpenRegStream (HKEY hkey, PCWSTR pszSubkey, PCWSTR pszValue, DWORD grfMode);
2069  SHSTDAPI_(WINBOOL) SHFindFiles (PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile);
2070  SHSTDAPI_(void) PathGetShortPath (PWSTR pszLongPath);
2071  SHSTDAPI_(WINBOOL) PathYetAnotherMakeUniqueName (PWSTR pszUniqueName, PCWSTR pszPath, PCWSTR pszShort, PCWSTR pszFileSpec);
2072  SHSTDAPI_(WINBOOL) Win32DeleteFile (PCWSTR pszPath);
2073
2074#if NTDDI_VERSION < 0x06000000
2075#define PPCF_ADDQUOTES 0x00000001
2076#define PPCF_ADDARGUMENTS 0x00000003
2077#define PPCF_NODIRECTORIES 0x00000010
2078#define PPCF_FORCEQUALIFY 0x00000040
2079#define PPCF_LONGESTPOSSIBLE 0x00000080
2080
2081  SHSTDAPI_(LONG) PathProcessCommand (PCWSTR pszSrc, PWSTR pszDest, int cchDest, DWORD dwFlags);
2082#endif
2083
2084  SHSTDAPI_(DWORD) SHRestricted (RESTRICTIONS rest);
2085  SHSTDAPI_(WINBOOL) SignalFileOpen (PCIDLIST_ABSOLUTE pidl);
2086#if NTDDI_VERSION >= 0x06000000
2087  SHSTDAPI AssocGetDetailsOfPropKey (IShellFolder *psf, PCUITEMID_CHILD pidl, const PROPERTYKEY *pkey, VARIANT *pv, WINBOOL *pfFoundPropKey);
2088#endif
2089#if NTDDI_VERSION < 0x06000000
2090  SHSTDAPI SHLoadOLE (LPARAM lParam);
2091#endif
2092  SHSTDAPI SHStartNetConnectionDialogA (HWND hwnd, LPCSTR pszRemoteName, DWORD dwType);
2093  SHSTDAPI SHStartNetConnectionDialogW (HWND hwnd, LPCWSTR pszRemoteName, DWORD dwType);
2094  SHSTDAPI SHDefExtractIconA (LPCSTR pszIconFile, int iIndex, UINT uFlags, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
2095  SHSTDAPI SHDefExtractIconW (LPCWSTR pszIconFile, int iIndex, UINT uFlags, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
2096
2097#define SHStartNetConnectionDialog __MINGW_NAME_AW(SHStartNetConnectionDialog)
2098#define SHDefExtractIcon __MINGW_NAME_AW(SHDefExtractIcon)
2099
2100  enum tagOPEN_AS_INFO_FLAGS {
2101    OAIF_ALLOW_REGISTRATION = 0x1,
2102    OAIF_REGISTER_EXT = 0x2,
2103    OAIF_EXEC = 0x4,
2104    OAIF_FORCE_REGISTRATION = 0x8
2105#if NTDDI_VERSION >= 0x06000000
2106    , OAIF_HIDE_REGISTRATION = 0x20,
2107    OAIF_URL_PROTOCOL = 0x40
2108#endif
2109#if NTDDI_VERSION >= 0x06020000
2110    , OAIF_FILE_IS_URI = 0x80
2111#endif
2112  };
2113
2114  typedef int OPEN_AS_INFO_FLAGS;
2115
2116#include <pshpack8.h>
2117  typedef struct _openasinfo {
2118    LPCWSTR pcszFile;
2119    LPCWSTR pcszClass;
2120    OPEN_AS_INFO_FLAGS oaifInFlags;
2121  } OPENASINFO,*POPENASINFO;
2122#include <poppack.h>
2123
2124#if NTDDI_VERSION >= 0x06000000
2125  SHSTDAPI SHOpenWithDialog (HWND hwndParent, const OPENASINFO *poainfo);
2126#endif
2127  SHSTDAPI_(WINBOOL) Shell_GetImageLists (HIMAGELIST *phiml, HIMAGELIST *phimlSmall);
2128  SHSTDAPI_(int) Shell_GetCachedImageIndex (PCWSTR pwszIconPath, int iIconIndex, UINT uIconFlags);
2129#if NTDDI_VERSION >= 0x06000000
2130  SHSTDAPI_(int) Shell_GetCachedImageIndexA (LPCSTR pszIconPath, int iIconIndex, UINT uIconFlags);
2131  SHSTDAPI_(int) Shell_GetCachedImageIndexW (LPCWSTR pszIconPath, int iIconIndex, UINT uIconFlags);
2132
2133#define Shell_GetCachedImageIndex __MINGW_NAME_AW(Shell_GetCachedImageIndex)
2134#endif
2135
2136#undef INTERFACE
2137#define INTERFACE IDocViewSite
2138  DECLARE_INTERFACE_IID_ (IDocViewSite, IUnknown, "87D605E0-C511-11CF-89A9-00A0C9054129") {
2139    STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE;
2140  };
2141
2142#define VALIDATEUNC_CONNECT 0x0001
2143#define VALIDATEUNC_NOUI 0x0002
2144#define VALIDATEUNC_PRINT 0x0004
2145#if NTDDI_VERSION >= 0x06000000
2146#define VALIDATEUNC_PERSIST 0x0008
2147#define VALIDATEUNC_VALID 0x000f
2148#else
2149#define VALIDATEUNC_VALID 0x0007
2150#endif
2151
2152  SHSTDAPI_(WINBOOL) SHValidateUNC (HWND hwndOwner, PWSTR pszFile, UINT fConnect);
2153
2154#define OPENPROPS_NONE 0x0000
2155#define OPENPROPS_INHIBITPIF 0x8000
2156#define GETPROPS_NONE 0x0000
2157#define SETPROPS_NONE 0x0000
2158#define CLOSEPROPS_NONE 0x0000
2159#define CLOSEPROPS_DISCARD 0x0001
2160
2161#define PIFNAMESIZE 30
2162#define PIFSTARTLOCSIZE 63
2163#define PIFDEFPATHSIZE 64
2164#define PIFPARAMSSIZE 64
2165#define PIFSHPROGSIZE 64
2166#define PIFSHDATASIZE 64
2167#define PIFDEFFILESIZE 80
2168#define PIFMAXFILEPATH 260
2169
2170  typedef struct PROPPRG {
2171    WORD flPrg;
2172    WORD flPrgInit;
2173    CHAR achTitle[PIFNAMESIZE];
2174    CHAR achCmdLine[PIFSTARTLOCSIZE+PIFPARAMSSIZE+1];
2175    CHAR achWorkDir[PIFDEFPATHSIZE];
2176    WORD wHotKey;
2177    CHAR achIconFile[PIFDEFFILESIZE];
2178    WORD wIconIndex;
2179    DWORD dwEnhModeFlags;
2180    DWORD dwRealModeFlags;
2181    CHAR achOtherFile[PIFDEFFILESIZE];
2182    CHAR achPIFFile[PIFMAXFILEPATH];
2183  } PROPPRG;
2184
2185  typedef UNALIGNED PROPPRG *PPROPPRG;
2186  typedef UNALIGNED PROPPRG *LPPROPPRG;
2187  typedef const UNALIGNED PROPPRG *LPCPROPPRG;
2188
2189  SHSTDAPI_(HANDLE) PifMgr_OpenProperties (PCWSTR pszApp, PCWSTR pszPIF, UINT hInf, UINT flOpt);
2190  SHSTDAPI_(int) PifMgr_GetProperties (HANDLE hProps, PCSTR pszGroup, void *lpProps, int cbProps, UINT flOpt);
2191  SHSTDAPI_(int) PifMgr_SetProperties (HANDLE hProps, PCSTR pszGroup, const void *lpProps, int cbProps, UINT flOpt);
2192  SHSTDAPI_(HANDLE) PifMgr_CloseProperties (HANDLE hProps, UINT flOpt);
2193  SHSTDAPI_(void) SHSetInstanceExplorer (IUnknown *punk);
2194  SHSTDAPI_(WINBOOL) IsUserAnAdmin (void);
2195
2196#undef INTERFACE
2197#define INTERFACE IInitializeObject
2198  DECLARE_INTERFACE_IID_ (IInitializeObject, IUnknown, "4622AD16-FF23-11d0-8D34-00A0C90F2719") {
2199    STDMETHOD(Initialize) (THIS) PURE;
2200  };
2201
2202  enum {
2203    BMICON_LARGE = 0,
2204    BMICON_SMALL
2205  };
2206
2207#undef INTERFACE
2208#define INTERFACE IBanneredBar
2209  DECLARE_INTERFACE_IID_ (IBanneredBar, IUnknown, "596A9A94-013E-11d1-8D34-00A0C90F2719") {
2210    STDMETHOD(SetIconSize) (THIS_ DWORD iIcon) PURE;
2211    STDMETHOD(GetIconSize) (THIS_ DWORD *piIcon) PURE;
2212    STDMETHOD(SetBitmap) (THIS_ HBITMAP hBitmap) PURE;
2213    STDMETHOD(GetBitmap) (THIS_ HBITMAP *phBitmap) PURE;
2214  };
2215  SHSTDAPI_(LRESULT) SHShellFolderView_Message (HWND hwndMain, UINT uMsg, LPARAM lParam);
2216
2217#undef INTERFACE
2218#define INTERFACE IShellFolderViewCB
2219  DECLARE_INTERFACE_IID_ (IShellFolderViewCB, IUnknown, "2047E320-F2A9-11CE-AE65-08002B2E1262") {
2220    STDMETHOD(MessageSFVCB) (THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
2221  };
2222
2223#include <pshpack8.h>
2224
2225#define QCMINFO_PLACE_BEFORE 0
2226#define QCMINFO_PLACE_AFTER 1
2227
2228  typedef struct _QCMINFO_IDMAP_PLACEMENT {
2229    UINT id;
2230    UINT fFlags;
2231  } QCMINFO_IDMAP_PLACEMENT;
2232
2233  typedef struct _QCMINFO_IDMAP {
2234    UINT nMaxIds;
2235    QCMINFO_IDMAP_PLACEMENT pIdList[1];
2236  } QCMINFO_IDMAP;
2237
2238  typedef struct _QCMINFO {
2239    HMENU hmenu;
2240    UINT indexMenu;
2241    UINT idCmdFirst;
2242    UINT idCmdLast;
2243    QCMINFO_IDMAP const *pIdMap;
2244  } QCMINFO;
2245
2246  typedef QCMINFO *LPQCMINFO;
2247
2248#define TBIF_APPEND 0
2249#define TBIF_PREPEND 1
2250#define TBIF_REPLACE 2
2251#define TBIF_DEFAULT 0x00000000
2252#define TBIF_INTERNETBAR 0x00010000
2253#define TBIF_STANDARDTOOLBAR 0x00020000
2254#define TBIF_NOTOOLBAR 0x00030000
2255
2256  typedef struct _TBINFO {
2257    UINT cbuttons;
2258    UINT uFlags;
2259  } TBINFO;
2260
2261  typedef TBINFO *LPTBINFO;
2262
2263  typedef struct _DETAILSINFO {
2264    PCUITEMID_CHILD pidl;
2265    int fmt;
2266    int cxChar;
2267    STRRET str;
2268    int iImage;
2269  } DETAILSINFO;
2270
2271  typedef DETAILSINFO *PDETAILSINFO;
2272
2273  typedef struct _SFVM_PROPPAGE_DATA {
2274    DWORD dwReserved;
2275    LPFNADDPROPSHEETPAGE pfn;
2276    LPARAM lParam;
2277  } SFVM_PROPPAGE_DATA;
2278
2279  typedef struct _SFVM_HELPTOPIC_DATA {
2280    WCHAR wszHelpFile[MAX_PATH];
2281    WCHAR wszHelpTopic[MAX_PATH];
2282  } SFVM_HELPTOPIC_DATA;
2283
2284#define SFVM_MERGEMENU 1
2285#define SFVM_INVOKECOMMAND 2
2286#define SFVM_GETHELPTEXT 3
2287#define SFVM_GETTOOLTIPTEXT 4
2288#define SFVM_GETBUTTONINFO 5
2289#define SFVM_GETBUTTONS 6
2290#define SFVM_INITMENUPOPUP 7
2291#define SFVM_FSNOTIFY 14
2292#define SFVM_WINDOWCREATED 15
2293#define SFVM_GETDETAILSOF 23
2294#define SFVM_COLUMNCLICK 24
2295#define SFVM_QUERYFSNOTIFY 25
2296#define SFVM_DEFITEMCOUNT 26
2297#define SFVM_DEFVIEWMODE 27
2298#define SFVM_UNMERGEMENU 28
2299#define SFVM_UPDATESTATUSBAR 31
2300#define SFVM_BACKGROUNDENUM 32
2301#define SFVM_DIDDRAGDROP 36
2302#define SFVM_SETISFV 39
2303#define SFVM_THISIDLIST 41
2304#define SFVM_ADDPROPERTYPAGES 47
2305#define SFVM_BACKGROUNDENUMDONE 48
2306#define SFVM_GETNOTIFY 49
2307#define SFVM_GETSORTDEFAULTS 53
2308#define SFVM_SIZE 57
2309#define SFVM_GETZONE 58
2310#define SFVM_GETPANE 59
2311#define SFVM_GETHELPTOPIC 63
2312#define SFVM_GETANIMATION 68
2313
2314  typedef struct _ITEMSPACING {
2315    int cxSmall;
2316    int cySmall;
2317    int cxLarge;
2318    int cyLarge;
2319  } ITEMSPACING;
2320
2321#define SFVSOC_INVALIDATE_ALL 0x00000001
2322#define SFVSOC_NOSCROLL LVSICF_NOSCROLL
2323
2324#define SFVS_SELECT_NONE 0x0
2325#define SFVS_SELECT_ALLITEMS 0x1
2326#define SFVS_SELECT_INVERT 0x2
2327
2328#undef INTERFACE
2329#define INTERFACE IShellFolderView
2330  DECLARE_INTERFACE_IID_ (IShellFolderView, IUnknown, "37A378C0-F82D-11CE-AE65-08002B2E1262") {
2331    STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE;
2332    STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE;
2333    STDMETHOD(ArrangeGrid) (THIS) PURE;
2334    STDMETHOD(AutoArrange) (THIS) PURE;
2335    STDMETHOD(GetAutoArrange) (THIS) PURE;
2336    STDMETHOD(AddObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE;
2337    STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE;
2338    STDMETHOD(RemoveObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE;
2339    STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE;
2340    STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE;
2341    STDMETHOD(UpdateObject) (THIS_ PUITEMID_CHILD pidlOld, PUITEMID_CHILD pidlNew, UINT *puItem) PURE;
2342    STDMETHOD(RefreshObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE;
2343    STDMETHOD(SetRedraw) (THIS_ WINBOOL bRedraw) PURE;
2344    STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE;
2345    STDMETHOD(GetSelectedObjects) (THIS_ PCUITEMID_CHILD **pppidl, UINT *puItems) PURE;
2346    STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE;
2347    STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE;
2348    STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE;
2349    STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE;
2350    STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE;
2351    STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE;
2352    STDMETHOD(SetClipboard) (THIS_ WINBOOL bMove) PURE;
2353    STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE;
2354    STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE;
2355    STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB *pNewCB, IShellFolderViewCB **ppOldCB) PURE;
2356    STDMETHOD(Select) (THIS_ UINT dwFlags) PURE;
2357    STDMETHOD(QuerySupport) (THIS_ UINT *pdwSupport) PURE;
2358    STDMETHOD(SetAutomationObject) (THIS_ IDispatch *pdisp) PURE;
2359  };
2360
2361  typedef struct _SFV_CREATE {
2362    UINT cbSize;
2363    IShellFolder *pshf;
2364    IShellView *psvOuter;
2365    IShellFolderViewCB *psfvcb;
2366  } SFV_CREATE;
2367
2368  SHSTDAPI SHCreateShellFolderView (const SFV_CREATE *pcsfv, IShellView **ppsv);
2369
2370  typedef HRESULT (CALLBACK *LPFNDFMCALLBACK) (IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam);
2371
2372  SHSTDAPI CDefFolderMenu_Create2 (PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK pfn, UINT nKeys, const HKEY *ahkeys, IContextMenu **ppcm);
2373
2374  typedef struct {
2375    HWND hwnd;
2376    IContextMenuCB *pcmcb;
2377    PCIDLIST_ABSOLUTE pidlFolder;
2378    IShellFolder *psf;
2379    UINT cidl;
2380    PCUITEMID_CHILD_ARRAY apidl;
2381    IUnknown *punkAssociationInfo;
2382    UINT cKeys;
2383    const HKEY *aKeys;
2384  } DEFCONTEXTMENU;
2385
2386#if NTDDI_VERSION >= 0x06000000
2387  SHSTDAPI SHCreateDefaultContextMenu (const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv);
2388#endif
2389  SHSTDAPI_(WINBOOL) SHOpenPropSheetA (LPCSTR pszCaption, HKEY ahkeys[], UINT ckeys, const CLSID *pclsidDefault, IDataObject *pdtobj, IShellBrowser *psb, LPCSTR pStartPage);
2390  SHSTDAPI_(WINBOOL) SHOpenPropSheetW (LPCWSTR pszCaption, HKEY ahkeys[], UINT ckeys, const CLSID *pclsidDefault, IDataObject *pdtobj, IShellBrowser *psb, LPCWSTR pStartPage);
2391
2392#define SHOpenPropSheet __MINGW_NAME_AW(SHOpenPropSheet)
2393
2394  typedef struct {
2395    DWORD cbSize;
2396    DWORD fMask;
2397    LPARAM lParam;
2398    UINT idCmdFirst;
2399    UINT idDefMax;
2400    LPCMINVOKECOMMANDINFO pici;
2401#if NTDDI_VERSION >= 0x06000000
2402    IUnknown *punkSite;
2403#endif
2404  } DFMICS,*PDFMICS;
2405
2406#define DFM_MERGECONTEXTMENU 1
2407#define DFM_INVOKECOMMAND 2
2408#define DFM_GETHELPTEXT 5
2409#define DFM_WM_MEASUREITEM 6
2410#define DFM_WM_DRAWITEM 7
2411#define DFM_WM_INITMENUPOPUP 8
2412#define DFM_VALIDATECMD 9
2413#define DFM_MERGECONTEXTMENU_TOP 10
2414#define DFM_GETHELPTEXTW 11
2415#define DFM_INVOKECOMMANDEX 12
2416#define DFM_MAPCOMMANDNAME 13
2417#define DFM_GETDEFSTATICID 14
2418#define DFM_GETVERBW 15
2419#define DFM_GETVERBA 16
2420#define DFM_MERGECONTEXTMENU_BOTTOM 17
2421#define DFM_MODIFYQCMFLAGS 18
2422
2423#define DFM_CMD_DELETE ((UINT)-1)
2424#define DFM_CMD_MOVE ((UINT)-2)
2425#define DFM_CMD_COPY ((UINT)-3)
2426#define DFM_CMD_LINK ((UINT)-4)
2427#define DFM_CMD_PROPERTIES ((UINT)-5)
2428#define DFM_CMD_NEWFOLDER ((UINT)-6)
2429#define DFM_CMD_PASTE ((UINT)-7)
2430#define DFM_CMD_VIEWLIST ((UINT)-8)
2431#define DFM_CMD_VIEWDETAILS ((UINT)-9)
2432#define DFM_CMD_PASTELINK ((UINT)-10)
2433#define DFM_CMD_PASTESPECIAL ((UINT)-11)
2434#define DFM_CMD_MODALPROP ((UINT)-12)
2435#define DFM_CMD_RENAME ((UINT)-13)
2436
2437  typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK) (IShellView *psvOuter, IShellFolder *psf, HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam);
2438
2439  typedef struct _CSFV {
2440    UINT cbSize;
2441    IShellFolder *pshf;
2442    IShellView *psvOuter;
2443    PCIDLIST_ABSOLUTE pidl;
2444    LONG lEvents;
2445    LPFNVIEWCALLBACK pfnCallback;
2446    FOLDERVIEWMODE fvm;
2447  } CSFV,*LPCSFV;
2448
2449#define SFVM_REARRANGE 0x00000001
2450#define SFVM_ADDOBJECT 0x00000003
2451#define SFVM_REMOVEOBJECT 0x00000006
2452#define SFVM_UPDATEOBJECT 0x00000007
2453#define SFVM_GETSELECTEDOBJECTS 0x00000009
2454#define SFVM_SETITEMPOS 0x0000000e
2455#define SFVM_SETCLIPBOARD 0x00000010
2456#define SFVM_SETPOINTS 0x00000017
2457
2458#define ShellFolderView_ReArrange(_hwnd, _lparam) (WINBOOL)SHShellFolderView_Message (_hwnd, SFVM_REARRANGE, _lparam)
2459#define ShellFolderView_AddObject(_hwnd, _pidl) (LPARAM)SHShellFolderView_Message (_hwnd, SFVM_ADDOBJECT,(LPARAM) (_pidl))
2460#define ShellFolderView_RemoveObject(_hwnd, _pidl) (LPARAM)SHShellFolderView_Message (_hwnd, SFVM_REMOVEOBJECT,(LPARAM) (_pidl))
2461#define ShellFolderView_UpdateObject(_hwnd, _ppidl) (LPARAM)SHShellFolderView_Message (_hwnd, SFVM_UPDATEOBJECT,(LPARAM) (_ppidl))
2462#define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) (LPARAM)SHShellFolderView_Message (_hwnd, SFVM_GETSELECTEDOBJECTS,(LPARAM) (ppidl))
2463#define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) { SFV_SETITEMPOS _sip = {_pidl, { _x, _y } }; SHShellFolderView_Message (_hwnd, SFVM_SETITEMPOS,(LPARAM) (LPSFV_SETITEMPOS) & _sip); }
2464#define ShellFolderView_SetClipboard(_hwnd, _dwEffect) (void)SHShellFolderView_Message (_hwnd, SFVM_SETCLIPBOARD,(LPARAM) (DWORD) (_dwEffect))
2465#define ShellFolderView_SetPoints(_hwnd, _pdtobj) (void)SHShellFolderView_Message (_hwnd, SFVM_SETPOINTS,(LPARAM) (_pdtobj))
2466
2467  typedef struct _SFV_SETITEMPOS {
2468    PCUITEMID_CHILD pidl;
2469    POINT pt;
2470  } SFV_SETITEMPOS;
2471
2472  typedef SFV_SETITEMPOS *LPSFV_SETITEMPOS;
2473  typedef const SFV_SETITEMPOS *PCSFV_SETITEMPOS;
2474#include <poppack.h>
2475
2476  SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup (HMENU hmenu, HWND hwndOwner, UINT idCmdFirst, UINT idCmdLast);
2477  SHSTDAPI SHCreateShellFolderViewEx (CSFV *pcsfv, IShellView **ppsv);
2478
2479#define PID_IS_URL 2
2480#define PID_IS_NAME 4
2481#define PID_IS_WORKINGDIR 5
2482#define PID_IS_HOTKEY 6
2483#define PID_IS_SHOWCMD 7
2484#define PID_IS_ICONINDEX 8
2485#define PID_IS_ICONFILE 9
2486#define PID_IS_WHATSNEW 10
2487#define PID_IS_AUTHOR 11
2488#define PID_IS_DESCRIPTION 12
2489#define PID_IS_COMMENT 13
2490#define PID_IS_ROAMED 15
2491
2492#define PID_INTSITE_WHATSNEW 2
2493#define PID_INTSITE_AUTHOR 3
2494#define PID_INTSITE_LASTVISIT 4
2495#define PID_INTSITE_LASTMOD 5
2496#define PID_INTSITE_VISITCOUNT 6
2497#define PID_INTSITE_DESCRIPTION 7
2498#define PID_INTSITE_COMMENT 8
2499#define PID_INTSITE_FLAGS 9
2500#define PID_INTSITE_CONTENTLEN 10
2501#define PID_INTSITE_CONTENTCODE 11
2502#define PID_INTSITE_RECURSE 12
2503#define PID_INTSITE_WATCH 13
2504#define PID_INTSITE_SUBSCRIPTION 14
2505#define PID_INTSITE_URL 15
2506#define PID_INTSITE_TITLE 16
2507#define PID_INTSITE_CODEPAGE 18
2508#define PID_INTSITE_TRACKING 19
2509#define PID_INTSITE_ICONINDEX 20
2510#define PID_INTSITE_ICONFILE 21
2511#define PID_INTSITE_ROAMED 34
2512
2513#define PIDISF_RECENTLYCHANGED 0x00000001
2514#define PIDISF_CACHEDSTICKY 0x00000002
2515#define PIDISF_CACHEIMAGES 0x00000010
2516#define PIDISF_FOLLOWALLLINKS 0x00000020
2517
2518#define PIDISM_GLOBAL 0
2519#define PIDISM_WATCH 1
2520#define PIDISM_DONTWATCH 2
2521
2522#define PIDISR_UP_TO_DATE 0
2523#define PIDISR_NEEDS_ADD 1
2524#define PIDISR_NEEDS_UPDATE 2
2525#define PIDISR_NEEDS_DELETE 3
2526
2527typedef struct {
2528  WINBOOL fShowAllObjects : 1;
2529  WINBOOL fShowExtensions : 1;
2530  WINBOOL fNoConfirmRecycle : 1;
2531  WINBOOL fShowSysFiles : 1;
2532  WINBOOL fShowCompColor : 1;
2533  WINBOOL fDoubleClickInWebView : 1;
2534  WINBOOL fDesktopHTML : 1;
2535  WINBOOL fWin95Classic : 1;
2536  WINBOOL fDontPrettyPath : 1;
2537  WINBOOL fShowAttribCol : 1;
2538  WINBOOL fMapNetDrvBtn : 1;
2539  WINBOOL fShowInfoTip : 1;
2540  WINBOOL fHideIcons : 1;
2541  WINBOOL fWebView : 1;
2542  WINBOOL fFilter : 1;
2543  WINBOOL fShowSuperHidden : 1;
2544  WINBOOL fNoNetCrawling : 1;
2545  DWORD dwWin95Unused;
2546  UINT uWin95Unused;
2547  LONG lParamSort;
2548  int iSortDirection;
2549  UINT version;
2550  UINT uNotUsed;
2551  WINBOOL fSepProcess: 1;
2552  WINBOOL fStartPanelOn: 1;
2553  WINBOOL fShowStartPage: 1;
2554  WINBOOL fAutoCheckSelect: 1;
2555  WINBOOL fIconsOnly: 1;
2556  WINBOOL fShowTypeOverlay: 1;
2557  WINBOOL fShowStatusBar : 1;
2558  UINT fSpareFlags : 9;
2559} SHELLSTATEA,*LPSHELLSTATEA;
2560
2561typedef struct {
2562  WINBOOL fShowAllObjects : 1;
2563  WINBOOL fShowExtensions : 1;
2564  WINBOOL fNoConfirmRecycle : 1;
2565  WINBOOL fShowSysFiles : 1;
2566  WINBOOL fShowCompColor : 1;
2567  WINBOOL fDoubleClickInWebView : 1;
2568  WINBOOL fDesktopHTML : 1;
2569  WINBOOL fWin95Classic : 1;
2570  WINBOOL fDontPrettyPath : 1;
2571  WINBOOL fShowAttribCol : 1;
2572  WINBOOL fMapNetDrvBtn : 1;
2573  WINBOOL fShowInfoTip : 1;
2574  WINBOOL fHideIcons : 1;
2575  WINBOOL fWebView : 1;
2576  WINBOOL fFilter : 1;
2577  WINBOOL fShowSuperHidden : 1;
2578  WINBOOL fNoNetCrawling : 1;
2579  DWORD dwWin95Unused;
2580  UINT uWin95Unused;
2581  LONG lParamSort;
2582  int iSortDirection;
2583  UINT version;
2584  UINT uNotUsed;
2585  WINBOOL fSepProcess: 1;
2586  WINBOOL fStartPanelOn: 1;
2587  WINBOOL fShowStartPage: 1;
2588  WINBOOL fAutoCheckSelect: 1;
2589  WINBOOL fIconsOnly: 1;
2590  WINBOOL fShowTypeOverlay: 1;
2591  WINBOOL fShowStatusBar : 1;
2592  UINT fSpareFlags : 9;
2593} SHELLSTATEW,*LPSHELLSTATEW;
2594
2595#define SHELLSTATEVERSION_IE4 9
2596#define SHELLSTATEVERSION_WIN2K 10
2597
2598#define SHELLSTATE __MINGW_NAME_AW(SHELLSTATE)
2599#define LPSHELLSTATE __MINGW_NAME_AW(LPSHELLSTATE)
2600
2601#define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET (SHELLSTATE, lParamSort)
2602#define SHELLSTATE_SIZE_NT4 FIELD_OFFSET (SHELLSTATE, version)
2603#define SHELLSTATE_SIZE_IE4 FIELD_OFFSET (SHELLSTATE, uNotUsed)
2604#define SHELLSTATE_SIZE_WIN2K sizeof (SHELLSTATE)
2605
2606  SHSTDAPI_(void) SHGetSetSettings (LPSHELLSTATE lpss, DWORD dwMask, WINBOOL bSet);
2607
2608typedef struct {
2609  WINBOOL fShowAllObjects : 1;
2610  WINBOOL fShowExtensions : 1;
2611  WINBOOL fNoConfirmRecycle : 1;
2612  WINBOOL fShowSysFiles : 1;
2613  WINBOOL fShowCompColor : 1;
2614  WINBOOL fDoubleClickInWebView : 1;
2615  WINBOOL fDesktopHTML : 1;
2616  WINBOOL fWin95Classic : 1;
2617  WINBOOL fDontPrettyPath : 1;
2618  WINBOOL fShowAttribCol : 1;
2619  WINBOOL fMapNetDrvBtn : 1;
2620  WINBOOL fShowInfoTip : 1;
2621  WINBOOL fHideIcons : 1;
2622#if NTDDI_VERSION >= 0x06000000
2623  WINBOOL fAutoCheckSelect: 1;
2624  WINBOOL fIconsOnly: 1;
2625  UINT fRestFlags : 1;
2626#else
2627  UINT fRestFlags : 3;
2628#endif
2629} SHELLFLAGSTATE,*LPSHELLFLAGSTATE;
2630
2631#define SSF_SHOWALLOBJECTS 0x00000001
2632#define SSF_SHOWEXTENSIONS 0x00000002
2633#define SSF_HIDDENFILEEXTS 0x00000004
2634#define SSF_SERVERADMINUI 0x00000004
2635#define SSF_SHOWCOMPCOLOR 0x00000008
2636#define SSF_SORTCOLUMNS 0x00000010
2637#define SSF_SHOWSYSFILES 0x00000020
2638#define SSF_DOUBLECLICKINWEBVIEW 0x00000080
2639#define SSF_SHOWATTRIBCOL 0x00000100
2640#define SSF_DESKTOPHTML 0x00000200
2641#define SSF_WIN95CLASSIC 0x00000400
2642#define SSF_DONTPRETTYPATH 0x00000800
2643#define SSF_SHOWINFOTIP 0x00002000
2644#define SSF_MAPNETDRVBUTTON 0x00001000
2645#define SSF_NOCONFIRMRECYCLE 0x00008000
2646#define SSF_HIDEICONS 0x00004000
2647#define SSF_FILTER 0x00010000
2648#define SSF_WEBVIEW 0x00020000
2649#define SSF_SHOWSUPERHIDDEN 0x00040000
2650#define SSF_SEPPROCESS 0x00080000
2651#define SSF_NONETCRAWLING 0x00100000
2652#define SSF_STARTPANELON 0x00200000
2653#define SSF_SHOWSTARTPAGE 0x00400000
2654#if NTDDI_VERSION >= 0x06000000
2655#define SSF_AUTOCHECKSELECT 0x00800000
2656#define SSF_ICONSONLY 0x01000000
2657#define SSF_SHOWTYPEOVERLAY 0x02000000
2658#endif
2659#if NTDDI_VERSION >= 0x06020000
2660#define SSF_SHOWSTATUSBAR 0x04000000
2661#endif
2662
2663  SHSTDAPI_(void) SHGetSettings (SHELLFLAGSTATE *psfs, DWORD dwMask);
2664  SHSTDAPI SHBindToParent (PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv, PCUITEMID_CHILD *ppidlLast);
2665#if NTDDI_VERSION >= 0x06000000
2666  SHSTDAPI SHBindToFolderIDListParent (IShellFolder *psfRoot, PCUIDLIST_RELATIVE pidl, REFIID riid, void **ppv, PCUITEMID_CHILD *ppidlLast);
2667  SHSTDAPI SHBindToFolderIDListParentEx (IShellFolder *psfRoot, PCUIDLIST_RELATIVE pidl, IBindCtx *ppbc, REFIID riid, void **ppv, PCUITEMID_CHILD *ppidlLast);
2668  SHSTDAPI SHBindToObject (IShellFolder *psf, PCUIDLIST_RELATIVE pidl, IBindCtx *pbc, REFIID riid, void **ppv);
2669#endif
2670
2671  __forceinline WINBOOL IDListContainerIsConsistent(PCUIDLIST_RELATIVE p, UINT sz) {
2672    UINT c = sizeof (p->mkid.cb);
2673
2674    while (c <= sz && p->mkid.cb >= sizeof (p->mkid.cb) && p->mkid.cb <= (sz - c)) {
2675      c += p->mkid.cb;
2676      p = ILNext(p);
2677    }
2678    return c <= sz && p->mkid.cb == 0;
2679  }
2680
2681  SHSTDAPI SHParseDisplayName (PCWSTR pszName, IBindCtx *pbc, PIDLIST_ABSOLUTE *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut);
2682
2683#define SHPPFW_NONE 0x00000000
2684#define SHPPFW_DEFAULT SHPPFW_DIRCREATE
2685#define SHPPFW_DIRCREATE 0x00000001
2686#define SHPPFW_ASKDIRCREATE 0x00000002
2687#define SHPPFW_IGNOREFILENAME 0x00000004
2688#define SHPPFW_NOWRITECHECK 0x00000008
2689#define SHPPFW_MEDIACHECKONLY 0x00000010
2690
2691  SHSTDAPI SHPathPrepareForWriteA (HWND hwnd, IUnknown *punkEnableModless, LPCSTR pszPath, DWORD dwFlags);
2692  SHSTDAPI SHPathPrepareForWriteW (HWND hwnd, IUnknown *punkEnableModless, LPCWSTR pszPath, DWORD dwFlags);
2693
2694#define SHPathPrepareForWrite __MINGW_NAME_AW(SHPathPrepareForWrite)
2695
2696#undef INTERFACE
2697#define INTERFACE INamedPropertyBag
2698DECLARE_INTERFACE_IID_ (INamedPropertyBag, IUnknown, "FB700430-952C-11d1-946F-000000000000") {
2699  STDMETHOD(ReadPropertyNPB) (THIS_ PCWSTR pszBagname, PCWSTR pszPropName, PROPVARIANT *pVar) PURE;
2700  STDMETHOD(WritePropertyNPB) (THIS_ PCWSTR pszBagname, PCWSTR pszPropName, PROPVARIANT *pVar) PURE;
2701  STDMETHOD(RemovePropertyNPB) (THIS_ PCWSTR pszBagname, PCWSTR pszPropName) PURE;
2702};
2703
2704#ifdef __urlmon_h__
2705  SHDOCAPI_(DWORD) SoftwareUpdateMessageBox (HWND hWnd, PCWSTR pszDistUnit, DWORD dwFlags, LPSOFTDISTINFO psdi);
2706#endif
2707  SHSTDAPI SHPropStgCreate (IPropertySetStorage *psstg, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, IPropertyStorage **ppstg, UINT *puCodePage);
2708  SHSTDAPI SHPropStgReadMultiple (IPropertyStorage *pps, UINT uCodePage, ULONG cpspec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[]);
2709  SHSTDAPI SHPropStgWriteMultiple (IPropertyStorage *pps, UINT *puCodePage, ULONG cpspec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[], PROPID propidNameFirst);
2710  SHSTDAPI SHCreateFileExtractIconA (LPCSTR pszFile, DWORD dwFileAttributes, REFIID riid, void **ppv);
2711  SHSTDAPI SHCreateFileExtractIconW (LPCWSTR pszFile, DWORD dwFileAttributes, REFIID riid, void **ppv);
2712
2713#define SHCreateFileExtractIcon __MINGW_NAME_AW(SHCreateFileExtractIcon)
2714
2715  SHSTDAPI SHLimitInputEdit (HWND hwndEdit, IShellFolder *psf);
2716  STDAPI SHGetAttributesFromDataObject (IDataObject *pdo, DWORD dwAttributeMask, DWORD *pdwAttributes, UINT *pcItems);
2717  SHSTDAPI SHMultiFileProperties (IDataObject *pdtobj, DWORD dwFlags);
2718  SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex (IShellFolder *pshf, PCUITEMID_CHILD pidl, int *piIndexSel);
2719  SHSTDAPI SHCLSIDFromString (PCWSTR psz, CLSID *pclsid);
2720  SHSTDAPI SHCreateQueryCancelAutoPlayMoniker (IMoniker **ppmoniker);
2721  STDAPI_ (void) PerUserInit (void);
2722  SHSTDAPI_(WINBOOL)SHRunControlPanel (PCWSTR lpcszCmdLine, HWND hwndMsgParent);
2723  SHSTDAPI_(int) PickIconDlg (HWND hwnd, PWSTR pszIconPath, UINT cchIconPath, int *piIconIndex);
2724
2725#include <pshpack8.h>
2726  typedef struct tagAAMENUFILENAME {
2727    SHORT cbTotal;
2728    BYTE rgbReserved[12];
2729    WCHAR szFileName[1];
2730  } AASHELLMENUFILENAME,*LPAASHELLMENUFILENAME;
2731
2732  typedef struct tagAASHELLMENUITEM {
2733    void *lpReserved1;
2734    int iReserved;
2735    UINT uiReserved;
2736    LPAASHELLMENUFILENAME lpName;
2737    LPWSTR psz;
2738  } AASHELLMENUITEM,*LPAASHELLMENUITEM;
2739#include <poppack.h>
2740
2741#if NTDDI_VERSION >= 0x06010000
2742  STDAPI StgMakeUniqueName (IStorage *pstgParent, PCWSTR pszFileSpec, DWORD grfMode, REFIID riid, void **ppv);
2743#endif
2744
2745#if _WIN32_IE >= 0x0700
2746  typedef enum tagIESHORTCUTFLAGS {
2747    IESHORTCUT_NEWBROWSER = 0x01,
2748    IESHORTCUT_OPENNEWTAB = 0x02,
2749    IESHORTCUT_FORCENAVIGATE = 0x04,
2750    IESHORTCUT_BACKGROUNDTAB = 0x08
2751  } IESHORTCUTFLAGS;
2752#endif
2753
2754#if _WIN32_IE >= 0x0600
2755  SHDOCAPI_(WINBOOL) ImportPrivacySettings (PCWSTR pszFilename, WINBOOL *pfParsePrivacyPreferences, WINBOOL *pfParsePerSiteRules);
2756
2757#ifndef IEnumPrivacyRecords
2758  typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
2759#endif
2760
2761  SHDOCAPI DoPrivacyDlg (HWND hwndOwner, PCWSTR pszUrl, IEnumPrivacyRecords *pPrivacyEnum, WINBOOL fReportAllSites);
2762#endif
2763
2764#include <poppack.h>
2765
2766#ifdef __cplusplus
2767}
2768#endif
2769#endif
2770#endif