|  shellapi.h (6.00.3790.3959-Windows 5.0)  |   |  shellapi.h (6.0.6002.18005-Windows 6.0)  | 
 
       | 
      |  /*****************************************************************************\ |   | /*****************************************************************************\ | 
      | *                                                                             * |   | *                                                                             * | 
      | * shellapi.h -  SHELL.DLL functions, types, and definitions                   * |   | * shellapi.h -  SHELL.DLL functions, types, and definitions                   * | 
      | *                                                                             * |   | *                                                                             * | 
      | * Copyright (c) Microsoft Corporation. All rights reserved.                   * |   | * Copyright (c) Microsoft Corporation. All rights reserved.                   * | 
      | *                                                                             * |   | *                                                                             * | 
      | \*****************************************************************************/ |   | \*****************************************************************************/ | 
       |   |  | 
      | #ifndef _INC_SHELLAPI |   | #ifndef _INC_SHELLAPI | 
      | #define _INC_SHELLAPI |   | #define _INC_SHELLAPI | 
       |   |  | 
       | 
       |   | #include <SpecStrings.h> | 
       |   |                                                                                  | 
      | // |   | // | 
      | // Define API decoration for direct importing of DLL references. |   | // Define API decoration for direct importing of DLL references. | 
      | // |   | // | 
      | #ifndef WINSHELLAPI |   | #ifndef WINSHELLAPI | 
      | #if !defined(_SHELL32_) |   | #if !defined(_SHELL32_) | 
      | #define WINSHELLAPI       DECLSPEC_IMPORT |   | #define WINSHELLAPI       DECLSPEC_IMPORT | 
      | #else |   | #else | 
      | #define WINSHELLAPI |   | #define WINSHELLAPI | 
      | #endif |   | #endif | 
      | #endif // WINSHELLAPI |   | #endif // WINSHELLAPI | 
       |   |  | 
      | skipping to change at line 53 |   | skipping to change at line 55 | 
      | #if !defined(_WIN64) |   | #if !defined(_WIN64) | 
      | #include <pshpack1.h> |   | #include <pshpack1.h> | 
      | #endif |   | #endif | 
       |   |  | 
      | #ifdef __cplusplus |   | #ifdef __cplusplus | 
      | extern "C" {            /* Assume C declarations for C++ */ |   | extern "C" {            /* Assume C declarations for C++ */ | 
      | #endif  /* __cplusplus */ |   | #endif  /* __cplusplus */ | 
       |   |  | 
      | DECLARE_HANDLE(HDROP); |   | DECLARE_HANDLE(HDROP); | 
       |   |  | 
       | 
      | SHSTDAPI_(UINT) DragQueryFileA(HDROP,UINT,LPSTR,UINT); |   | SHSTDAPI_(UINT) DragQueryFileA(HDROP hDrop, UINT iFile, __out_ecount_opt(cch) LP | 
      | SHSTDAPI_(UINT) DragQueryFileW(HDROP,UINT,LPWSTR,UINT); |   | STR lpszFile, UINT cch); | 
       |   | SHSTDAPI_(UINT) DragQueryFileW(HDROP hDrop, UINT iFile, __out_ecount_opt(cch) LP | 
       |   | WSTR lpszFile, UINT cch); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define DragQueryFile  DragQueryFileW |   | #define DragQueryFile  DragQueryFileW | 
      | #else |   | #else | 
      | #define DragQueryFile  DragQueryFileA |   | #define DragQueryFile  DragQueryFileA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(BOOL) DragQueryPoint(HDROP,LPPOINT); |   | SHSTDAPI_(BOOL) DragQueryPoint(HDROP hDrop,__out LPPOINT lppt); | 
      | SHSTDAPI_(void) DragFinish(HDROP); |   | SHSTDAPI_(void) DragFinish(__in HDROP hDrop); | 
      | SHSTDAPI_(void) DragAcceptFiles(HWND,BOOL); |   | SHSTDAPI_(void) DragAcceptFiles(__in HWND hWnd, __in BOOL fAccept); | 
       |   |  | 
       | 
      | SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, |   | SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, | 
      |  LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); |   |  LPCSTR lpParameters, | 
      | SHSTDAPI_(HINSTANCE) ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFil |   |     LPCSTR lpDirectory, INT nShowCmd); | 
      | e, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); |   | SHSTDAPI_(HINSTANCE) ShellExecuteW(HWND hwnd, LPCWSTR lpOperation, LPCWSTR lpFil | 
       |   | e, LPCWSTR lpParameters, | 
       |   |     LPCWSTR lpDirectory, INT nShowCmd); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ShellExecute  ShellExecuteW |   | #define ShellExecute  ShellExecuteW | 
      | #else |   | #else | 
      | #define ShellExecute  ShellExecuteA |   | #define ShellExecute  ShellExecuteA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(HINSTANCE) FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lp |   | SHSTDAPI_(HINSTANCE) FindExecutableA(LPCSTR lpFile, LPCSTR lpDirectory, __out_ec | 
      | Result); |   | ount(MAX_PATH) LPSTR lpResult); | 
      | SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR |   | SHSTDAPI_(HINSTANCE) FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, __out_ | 
      |  lpResult); |   | ecount(MAX_PATH) LPWSTR lpResult); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define FindExecutable  FindExecutableW |   | #define FindExecutable  FindExecutableW | 
      | #else |   | #else | 
      | #define FindExecutable  FindExecutableA |   | #define FindExecutable  FindExecutableA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(LPWSTR *)  CommandLineToArgvW(LPCWSTR lpCmdLine, int*pNumArgs); |   | SHSTDAPI_(LPWSTR *)  CommandLineToArgvW(LPCWSTR lpCmdLine, __out int* pNumArgs); | 
       |   |  | 
      | SHSTDAPI_(INT) ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON h
Icon); |   | SHSTDAPI_(INT) ShellAboutA(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON h
Icon); | 
      | SHSTDAPI_(INT) ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON
 hIcon); |   | SHSTDAPI_(INT) ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON
 hIcon); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ShellAbout  ShellAboutW |   | #define ShellAbout  ShellAboutW | 
      | #else |   | #else | 
      | #define ShellAbout  ShellAboutA |   | #define ShellAbout  ShellAboutA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | SHSTDAPI_(HICON) DuplicateIcon(HINSTANCE hInst, HICON hIcon); |   | SHSTDAPI_(HICON) DuplicateIcon(HINSTANCE hInst, HICON hIcon); | 
       | 
      | SHSTDAPI_(HICON) ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWOR |   | SHSTDAPI_(HICON) ExtractAssociatedIconA(HINSTANCE hInst, __inout_ecount(128)  LP | 
      | D lpiIcon); |   | STR lpIconPath, __inout LPWORD lpiIcon); | 
      | SHSTDAPI_(HICON) ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWO |   | SHSTDAPI_(HICON) ExtractAssociatedIconW(HINSTANCE hInst, __inout_ecount(128)  LP | 
      | RD lpiIcon); |   | WSTR lpIconPath, __inout LPWORD lpiIcon); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ExtractAssociatedIcon  ExtractAssociatedIconW |   | #define ExtractAssociatedIcon  ExtractAssociatedIconW | 
      | #else |   | #else | 
      | #define ExtractAssociatedIcon  ExtractAssociatedIconA |   | #define ExtractAssociatedIcon  ExtractAssociatedIconA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   | SHSTDAPI_(HICON) ExtractAssociatedIconExA(HINSTANCE hInst, __inout_ecount(128) L | 
      | SHSTDAPI_(HICON) ExtractAssociatedIconExA(HINSTANCE hInst,LPSTR lpIconPath,LPWOR |   | PSTR lpIconPath, __inout LPWORD lpiIconIndex, __out LPWORD lpiIconId); | 
      | D lpiIconIndex, LPWORD lpiIconId); |   | SHSTDAPI_(HICON) ExtractAssociatedIconExW(HINSTANCE hInst, __inout_ecount(128) L | 
      | SHSTDAPI_(HICON) ExtractAssociatedIconExW(HINSTANCE hInst,LPWSTR lpIconPath,LPWO |   | PWSTR lpIconPath, __inout LPWORD lpiIconIndex, __out LPWORD lpiIconId); | 
      | RD lpiIconIndex, LPWORD lpiIconId); |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ExtractAssociatedIconEx  ExtractAssociatedIconExW |   | #define ExtractAssociatedIconEx  ExtractAssociatedIconExW | 
      | #else |   | #else | 
      | #define ExtractAssociatedIconEx  ExtractAssociatedIconExA |   | #define ExtractAssociatedIconEx  ExtractAssociatedIconExA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | #endif // (_WIN32_IE >= 0x0601) |   |  | 
      | SHSTDAPI_(HICON) ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIco
nIndex); |   | SHSTDAPI_(HICON) ExtractIconA(HINSTANCE hInst, LPCSTR lpszExeFileName, UINT nIco
nIndex); | 
      | SHSTDAPI_(HICON) ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIc
onIndex); |   | SHSTDAPI_(HICON) ExtractIconW(HINSTANCE hInst, LPCWSTR lpszExeFileName, UINT nIc
onIndex); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ExtractIcon  ExtractIconW |   | #define ExtractIcon  ExtractIconW | 
      | #else |   | #else | 
      | #define ExtractIcon  ExtractIconA |   | #define ExtractIcon  ExtractIconA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | #if(WINVER >= 0x0400) |   | #if(WINVER >= 0x0400) | 
      | typedef struct _DRAGINFOA { |   | typedef struct _DRAGINFOA { | 
       |   |  | 
      | skipping to change at line 150 |   | skipping to change at line 152 | 
      | #define ABM_QUERYPOS      0x00000002 |   | #define ABM_QUERYPOS      0x00000002 | 
      | #define ABM_SETPOS        0x00000003 |   | #define ABM_SETPOS        0x00000003 | 
      | #define ABM_GETSTATE      0x00000004 |   | #define ABM_GETSTATE      0x00000004 | 
      | #define ABM_GETTASKBARPOS 0x00000005 |   | #define ABM_GETTASKBARPOS 0x00000005 | 
      | #define ABM_ACTIVATE      0x00000006  // lParam == TRUE/FALSE means activate/dea
ctivate |   | #define ABM_ACTIVATE      0x00000006  // lParam == TRUE/FALSE means activate/dea
ctivate | 
      | #define ABM_GETAUTOHIDEBAR 0x00000007 |   | #define ABM_GETAUTOHIDEBAR 0x00000007 | 
      | #define ABM_SETAUTOHIDEBAR 0x00000008  // this can fail at any time.  MUST check
 the result |   | #define ABM_SETAUTOHIDEBAR 0x00000008  // this can fail at any time.  MUST check
 the result | 
      |                                         // lParam = TRUE/FALSE  Set/Unset |   |                                         // lParam = TRUE/FALSE  Set/Unset | 
      |                                         // uEdge = what edge |   |                                         // uEdge = what edge | 
      | #define ABM_WINDOWPOSCHANGED 0x0000009 |   | #define ABM_WINDOWPOSCHANGED 0x0000009 | 
       | 
      | #define ABM_SETSTATE      0x0000000a |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   | #define ABM_SETSTATE         0x0000000a | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   |  | 
      | // these are put in the wparam of callback messages |   | // these are put in the wparam of callback messages | 
      | #define ABN_STATECHANGE    0x0000000 |   | #define ABN_STATECHANGE    0x0000000 | 
      | #define ABN_POSCHANGED     0x0000001 |   | #define ABN_POSCHANGED     0x0000001 | 
      | #define ABN_FULLSCREENAPP  0x0000002 |   | #define ABN_FULLSCREENAPP  0x0000002 | 
      | #define ABN_WINDOWARRANGE  0x0000003 // lParam == TRUE means hide |   | #define ABN_WINDOWARRANGE  0x0000003 // lParam == TRUE means hide | 
       |   |  | 
      | // flags for get state |   | // flags for get state | 
      | #define ABS_AUTOHIDE    0x0000001 |   | #define ABS_AUTOHIDE    0x0000001 | 
      | #define ABS_ALWAYSONTOP 0x0000002 |   | #define ABS_ALWAYSONTOP 0x0000002 | 
       |   |  | 
      | skipping to change at line 177 |   | skipping to change at line 181 | 
      | typedef struct _AppBarData |   | typedef struct _AppBarData | 
      | { |   | { | 
      |     DWORD cbSize; |   |     DWORD cbSize; | 
      |     HWND hWnd; |   |     HWND hWnd; | 
      |     UINT uCallbackMessage; |   |     UINT uCallbackMessage; | 
      |     UINT uEdge; |   |     UINT uEdge; | 
      |     RECT rc; |   |     RECT rc; | 
      |     LPARAM lParam; // message specific |   |     LPARAM lParam; // message specific | 
      | } APPBARDATA, *PAPPBARDATA; |   | } APPBARDATA, *PAPPBARDATA; | 
       |   |  | 
       | 
      | SHSTDAPI_(UINT_PTR) SHAppBarMessage(DWORD dwMessage, PAPPBARDATA pData); |   | SHSTDAPI_(UINT_PTR) SHAppBarMessage(DWORD dwMessage, __in PAPPBARDATA pData); | 
       |   |  | 
      | //// |   | //// | 
      | ////  EndAppBar |   | ////  EndAppBar | 
      | //// |   | //// | 
       |   |  | 
       | 
      | SHSTDAPI_(DWORD)   DoEnvironmentSubstA(LPSTR szString, UINT cchString); |   | SHSTDAPI_(DWORD)   DoEnvironmentSubstA(__inout_ecount(cchString) LPSTR szString, | 
      | SHSTDAPI_(DWORD)   DoEnvironmentSubstW(LPWSTR szString, UINT cchString); |   |  UINT cchString); | 
       |   | SHSTDAPI_(DWORD)   DoEnvironmentSubstW(__inout_ecount(cchString) LPWSTR szString | 
       |   | , UINT cchString); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define DoEnvironmentSubst  DoEnvironmentSubstW |   | #define DoEnvironmentSubst  DoEnvironmentSubstW | 
      | #else |   | #else | 
      | #define DoEnvironmentSubst  DoEnvironmentSubstA |   | #define DoEnvironmentSubst  DoEnvironmentSubstA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | #define EIRESID(x) (-1 * (int)(x)) |   | #define EIRESID(x) (-1 * (int)(x)) | 
       | 
      | SHSTDAPI_(UINT) ExtractIconExA(LPCSTR lpszFile, int nIconIndex, HICON *phiconLar |   | SHSTDAPI_(UINT) ExtractIconExA(LPCSTR lpszFile, int nIconIndex, __out_ecount_opt | 
      | ge, HICON *phiconSmall, UINT nIcons); |   | (nIcons) HICON *phiconLarge, __out_ecount_opt(nIcons) HICON *phiconSmall, UINT n | 
      | SHSTDAPI_(UINT) ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, HICON *phiconLa |   | Icons); | 
      | rge, HICON *phiconSmall, UINT nIcons); |   | SHSTDAPI_(UINT) ExtractIconExW(LPCWSTR lpszFile, int nIconIndex, __out_ecount_op | 
       |   | t(nIcons) HICON *phiconLarge, __out_ecount_opt(nIcons) HICON *phiconSmall, UINT  | 
       |   | nIcons); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ExtractIconEx  ExtractIconExW |   | #define ExtractIconEx  ExtractIconExW | 
      | #else |   | #else | 
      | #define ExtractIconEx  ExtractIconExA |   | #define ExtractIconEx  ExtractIconExA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
      | //// |   | // Shell File Operations | 
      | //// Shell File Operations |   |  | 
      | //// |   |  | 
      | #ifndef FO_MOVE //these need to be kept in sync with the ones in shlobj.h |   |  | 
       |   |  | 
       | 
      | #define FO_MOVE           0x0001 |   | #define FO_MOVE                    0x0001 | 
      | #define FO_COPY           0x0002 |   | #define FO_COPY                    0x0002 | 
      | #define FO_DELETE         0x0003 |   | #define FO_DELETE                  0x0003 | 
      | #define FO_RENAME         0x0004 |   | #define FO_RENAME                  0x0004 | 
       |   |                                                                                  | 
       |   | // SHFILEOPSTRUCT.fFlags and IFileOperation::SetOperationFlags() flag values | 
       |   |  | 
      | #define FOF_MULTIDESTFILES         0x0001 |   | #define FOF_MULTIDESTFILES         0x0001 | 
      | #define FOF_CONFIRMMOUSE           0x0002 |   | #define FOF_CONFIRMMOUSE           0x0002 | 
       | 
      | #define FOF_SILENT                 0x0004  // don't create progress/report |   | #define FOF_SILENT                 0x0004  // don't display progress UI (confirm | 
      | #define FOF_RENAMEONCOLLISION      0x0008 |   |  prompts may be displayed still) | 
      | #define FOF_NOCONFIRMATION         0x0010  // Don't prompt the user. |   | #define FOF_RENAMEONCOLLISION      0x0008  // automatically rename the source fi | 
       |   | les to avoid the collisions | 
       |   | #define FOF_NOCONFIRMATION         0x0010  // don't display confirmation UI, ass | 
       |   | ume "yes" for cases that can be bypassed, "no" for those that can not | 
      | #define FOF_WANTMAPPINGHANDLE      0x0020  // Fill in SHFILEOPSTRUCT.hNameMappin
gs |   | #define FOF_WANTMAPPINGHANDLE      0x0020  // Fill in SHFILEOPSTRUCT.hNameMappin
gs | 
       | 
      |                                       // Must be freed using SHFreeNameMappings |   |                                            // Must be freed using SHFreeNameMapp | 
      | #define FOF_ALLOWUNDO              0x0040 |   | ings | 
      | #define FOF_FILESONLY              0x0080  // on *.*, do only files |   | #define FOF_ALLOWUNDO              0x0040  // enable undo including Recycle beha | 
       |   | vior for IFileOperation::Delete() | 
       |   | #define FOF_FILESONLY              0x0080  // only operate on the files (non fol | 
       |   | ders), both files and folders are assumed without this | 
      | #define FOF_SIMPLEPROGRESS         0x0100  // means don't show names of files |   | #define FOF_SIMPLEPROGRESS         0x0100  // means don't show names of files | 
       | 
      | #define FOF_NOCONFIRMMKDIR         0x0200  // don't confirm making any needed di |   | #define FOF_NOCONFIRMMKDIR         0x0200  // don't dispplay confirmatino UI bef | 
      | rs |   | ore making any needed directories, assume "Yes" in these cases | 
      | #define FOF_NOERRORUI              0x0400  // don't put up error UI |   | #define FOF_NOERRORUI              0x0400  // don't put up error UI, other UI ma | 
      | #define FOF_NOCOPYSECURITYATTRIBS  0x0800  // dont copy NT file Security Attribu |   | y be displayed, progress, confirmations | 
      | tes |   |  | 
      | #define FOF_NORECURSION            0x1000  // don't recurse into directories. |   |  | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
       | 
      | #define FOF_NO_CONNECTED_ELEMENTS  0x2000  // don't operate on connected element |   | #define FOF_NOCOPYSECURITYATTRIBS  0x0800  // dont copy file security attributes | 
      | s. |   |  (ACLs) | 
       |   | #define FOF_NORECURSION            0x1000  // don't recurse into directories for | 
       |   |  operations that would recurse | 
       |   | #define FOF_NO_CONNECTED_ELEMENTS  0x2000  // don't operate on connected element | 
       |   | s ("xxx_files" folders that go with .htm files) | 
      | #define FOF_WANTNUKEWARNING        0x4000  // during delete operation, warn if n
uking instead of recycling (partially overrides FOF_NOCONFIRMATION) |   | #define FOF_WANTNUKEWARNING        0x4000  // during delete operation, warn if n
uking instead of recycling (partially overrides FOF_NOCONFIRMATION) | 
      | #endif // (_WIN32_IE >= 0x500) |   | #endif // (_WIN32_IE >= 0x500) | 
      | #if (_WIN32_WINNT >= 0x0501) |   | #if (_WIN32_WINNT >= 0x0501) | 
       | 
      | #define FOF_NORECURSEREPARSE       0x8000  // treat reparse points as objects, n
ot containers |   | #define FOF_NORECURSEREPARSE       0x8000  // deprecated; the operations engine 
always does the right thing on FolderLink objects (symlinks, reparse points, fol
der shortcuts) | 
      | #endif // (_WIN32_WINNT >= 0x501) |   | #endif // (_WIN32_WINNT >= 0x501) | 
       | 
       |   | #define FOF_NO_UI                   (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERR
ORUI | FOF_NOCONFIRMMKDIR) // don't display any UI at all | 
       |   |  | 
      | typedef WORD FILEOP_FLAGS; |   | typedef WORD FILEOP_FLAGS; | 
       |   |  | 
      | #define PO_DELETE       0x0013  // printer is being deleted |   | #define PO_DELETE       0x0013  // printer is being deleted | 
      | #define PO_RENAME       0x0014  // printer is being renamed |   | #define PO_RENAME       0x0014  // printer is being renamed | 
      | #define PO_PORTCHANGE   0x0020  // port this printer connected to is being chang
ed |   | #define PO_PORTCHANGE   0x0020  // port this printer connected to is being chang
ed | 
      |                                 // if this id is set, the strings received by |   |                                 // if this id is set, the strings received by | 
      |                                 // the copyhook are a doubly-null terminated |   |                                 // the copyhook are a doubly-null terminated | 
      |                                 // list of strings.  The first is the printer |   |                                 // list of strings.  The first is the printer | 
      |                                 // name and the second is the printer port. |   |                                 // name and the second is the printer port. | 
      | #define PO_REN_PORT     0x0034  // PO_RENAME and PO_PORTCHANGE at same time. |   | #define PO_REN_PORT     0x0034  // PO_RENAME and PO_PORTCHANGE at same time. | 
       |   |  | 
      | // no POF_ flags currently defined |   | // no POF_ flags currently defined | 
       |   |  | 
      | typedef WORD PRINTEROP_FLAGS; |   | typedef WORD PRINTEROP_FLAGS; | 
       |   |  | 
       | 
      | #endif // FO_MOVE |   |  | 
      |                                                                                  |   |  | 
      | // implicit parameters are: |   | // implicit parameters are: | 
      | //      if pFrom or pTo are unqualified names the current directories are |   | //      if pFrom or pTo are unqualified names the current directories are | 
      | //      taken from the global current drive/directory settings managed |   | //      taken from the global current drive/directory settings managed | 
      | //      by Get/SetCurrentDrive/Directory |   | //      by Get/SetCurrentDrive/Directory | 
      | // |   | // | 
      | //      the global confirmation settings |   | //      the global confirmation settings | 
       |   |  | 
      | typedef struct _SHFILEOPSTRUCTA |   | typedef struct _SHFILEOPSTRUCTA | 
      | { |   | { | 
       | 
      |         HWND            hwnd; |   |     HWND            hwnd; | 
      |         UINT            wFunc; |   |     UINT            wFunc; | 
      |         LPCSTR          pFrom; |   |     LPCSTR          pFrom; | 
      |         LPCSTR          pTo; |   |     LPCSTR          pTo; | 
      |         FILEOP_FLAGS    fFlags; |   |     FILEOP_FLAGS    fFlags; | 
      |         BOOL            fAnyOperationsAborted; |   |     BOOL            fAnyOperationsAborted; | 
      |         LPVOID          hNameMappings; |   |     LPVOID          hNameMappings; | 
      |         LPCSTR           lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS |   |     LPCSTR          lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS | 
      | } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; |   | } SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA; | 
      | typedef struct _SHFILEOPSTRUCTW |   | typedef struct _SHFILEOPSTRUCTW | 
      | { |   | { | 
       | 
      |         HWND            hwnd; |   |     HWND            hwnd; | 
      |         UINT            wFunc; |   |     UINT            wFunc; | 
      |         LPCWSTR         pFrom; |   |     LPCWSTR         pFrom; | 
      |         LPCWSTR         pTo; |   |     LPCWSTR         pTo; | 
      |         FILEOP_FLAGS    fFlags; |   |     FILEOP_FLAGS    fFlags; | 
      |         BOOL            fAnyOperationsAborted; |   |     BOOL            fAnyOperationsAborted; | 
      |         LPVOID          hNameMappings; |   |     LPVOID          hNameMappings; | 
      |         LPCWSTR          lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS |   |     LPCWSTR         lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS | 
      | } SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; |   | } SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW; | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT; |   | typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT; | 
      | typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT; |   | typedef LPSHFILEOPSTRUCTW LPSHFILEOPSTRUCT; | 
      | #else |   | #else | 
      | typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; |   | typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT; | 
      | typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; |   | typedef LPSHFILEOPSTRUCTA LPSHFILEOPSTRUCT; | 
      | #endif // UNICODE |   | #endif // UNICODE | 
       |   |  | 
       | 
      | SHSTDAPI_(int) SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp); |   | SHSTDAPI_(int) SHFileOperationA(__inout LPSHFILEOPSTRUCTA lpFileOp); | 
      | SHSTDAPI_(int) SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp); |   | SHSTDAPI_(int) SHFileOperationW(__inout LPSHFILEOPSTRUCTW lpFileOp); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHFileOperation  SHFileOperationW |   | #define SHFileOperation  SHFileOperationW | 
      | #else |   | #else | 
      | #define SHFileOperation  SHFileOperationA |   | #define SHFileOperation  SHFileOperationA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | SHSTDAPI_(void) SHFreeNameMappings(HANDLE hNameMappings); |   | SHSTDAPI_(void) SHFreeNameMappings(HANDLE hNameMappings); | 
       |   |  | 
      | typedef struct _SHNAMEMAPPINGA |   | typedef struct _SHNAMEMAPPINGA | 
      | { |   | { | 
      |     LPSTR   pszOldPath; |   |     LPSTR   pszOldPath; | 
       |   |  | 
      | skipping to change at line 352 |   | skipping to change at line 354 | 
      | #define SE_ERR_NOASSOC                  31 |   | #define SE_ERR_NOASSOC                  31 | 
       |   |  | 
      | #if(WINVER >= 0x0400) |   | #if(WINVER >= 0x0400) | 
       |   |  | 
      | // Note CLASSKEY overrides CLASSNAME |   | // Note CLASSKEY overrides CLASSNAME | 
      | #define SEE_MASK_CLASSNAME         0x00000001 |   | #define SEE_MASK_CLASSNAME         0x00000001 | 
      | #define SEE_MASK_CLASSKEY          0x00000003 |   | #define SEE_MASK_CLASSKEY          0x00000003 | 
      | // Note INVOKEIDLIST overrides IDLIST |   | // Note INVOKEIDLIST overrides IDLIST | 
      | #define SEE_MASK_IDLIST            0x00000004 |   | #define SEE_MASK_IDLIST            0x00000004 | 
      | #define SEE_MASK_INVOKEIDLIST      0x0000000c |   | #define SEE_MASK_INVOKEIDLIST      0x0000000c | 
       | 
      | #define SEE_MASK_ICON              0x00000010 |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
       |   | #define SEE_MASK_ICON              0x00000010  //  not used | 
       |   | #endif // (NTDDI_VERSION < NTDDI_LONGHORN) | 
      | #define SEE_MASK_HOTKEY            0x00000020 |   | #define SEE_MASK_HOTKEY            0x00000020 | 
      | #define SEE_MASK_NOCLOSEPROCESS    0x00000040 |   | #define SEE_MASK_NOCLOSEPROCESS    0x00000040 | 
      | #define SEE_MASK_CONNECTNETDRV     0x00000080 |   | #define SEE_MASK_CONNECTNETDRV     0x00000080 | 
       | 
      | #define SEE_MASK_FLAG_DDEWAIT      0x00000100 |   | #define SEE_MASK_NOASYNC           0x00000100 | 
       |   | #define SEE_MASK_FLAG_DDEWAIT      SEE_MASK_NOASYNC // Use SEE_MASK_NOASYNC inst | 
       |   | ead of SEE_MASK_FLAG_DDEWAIT as it more accuratly describes the behavior | 
      | #define SEE_MASK_DOENVSUBST        0x00000200 |   | #define SEE_MASK_DOENVSUBST        0x00000200 | 
      | #define SEE_MASK_FLAG_NO_UI        0x00000400 |   | #define SEE_MASK_FLAG_NO_UI        0x00000400 | 
      | #define SEE_MASK_UNICODE           0x00004000 |   | #define SEE_MASK_UNICODE           0x00004000 | 
      | #define SEE_MASK_NO_CONSOLE        0x00008000 |   | #define SEE_MASK_NO_CONSOLE        0x00008000 | 
      | #define SEE_MASK_ASYNCOK           0x00100000 |   | #define SEE_MASK_ASYNCOK           0x00100000 | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #define SEE_MASK_HMONITOR          0x00200000 |   | #define SEE_MASK_HMONITOR          0x00200000 | 
       | 
      | #if (_WIN32_IE >= 0x0560) |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP1) | 
      | #define SEE_MASK_NOZONECHECKS      0x00800000 |   | #define SEE_MASK_NOZONECHECKS      0x00800000 | 
       | 
      | #endif // (_WIN32_IE >= 0x560) |   | #endif // (NTDDI_VERSION >= NTDDI_WINXPSP1) | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 |   | #define SEE_MASK_NOQUERYCLASSSTORE 0x01000000 | 
      | #define SEE_MASK_WAITFORINPUTIDLE  0x02000000 |   | #define SEE_MASK_WAITFORINPUTIDLE  0x02000000 | 
       | 
      | #endif // (_WIN32_IE >= 0x500) |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #if (_WIN32_IE >= 0x0560) |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define SEE_MASK_FLAG_LOG_USAGE    0x04000000 |   | #define SEE_MASK_FLAG_LOG_USAGE    0x04000000 | 
       | 
      | #endif // (_WIN32_IE >= 0x560) |   | #endif // (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   |  | 
      | // |   | // | 
      | // For compilers that don't support nameless unions |   | // For compilers that don't support nameless unions | 
      | // |   | // | 
      | #ifndef DUMMYUNIONNAME |   | #ifndef DUMMYUNIONNAME | 
      | #ifdef NONAMELESSUNION |   | #ifdef NONAMELESSUNION | 
      | #define DUMMYUNIONNAME   u |   | #define DUMMYUNIONNAME   u | 
      | #define DUMMYUNIONNAME2  u2 |   | #define DUMMYUNIONNAME2  u2 | 
      | #define DUMMYUNIONNAME3  u3 |   | #define DUMMYUNIONNAME3  u3 | 
      | #define DUMMYUNIONNAME4  u4 |   | #define DUMMYUNIONNAME4  u4 | 
      | #define DUMMYUNIONNAME5  u5 |   | #define DUMMYUNIONNAME5  u5 | 
      | #else |   | #else | 
      | #define DUMMYUNIONNAME |   | #define DUMMYUNIONNAME | 
      | #define DUMMYUNIONNAME2 |   | #define DUMMYUNIONNAME2 | 
      | #define DUMMYUNIONNAME3 |   | #define DUMMYUNIONNAME3 | 
      | #define DUMMYUNIONNAME4 |   | #define DUMMYUNIONNAME4 | 
      | #define DUMMYUNIONNAME5 |   | #define DUMMYUNIONNAME5 | 
      | #endif |   | #endif | 
      | #endif // DUMMYUNIONNAME |   | #endif // DUMMYUNIONNAME | 
       |   |  | 
       | 
       |   | #if defined(_MSC_VER) && (_MSC_VER >= 1200) | 
       |   | #pragma warning(push) | 
       |   | #pragma warning(disable:4201) /* nonstandard extension used : nameless struct/un | 
       |   | ion */ | 
       |   | #pragma once | 
       |   | #endif | 
       |   |                                                                                  | 
      | typedef struct _SHELLEXECUTEINFOA |   | typedef struct _SHELLEXECUTEINFOA | 
      | { |   | { | 
      |         DWORD cbSize; |   |         DWORD cbSize; | 
      |         ULONG fMask; |   |         ULONG fMask; | 
      |         HWND hwnd; |   |         HWND hwnd; | 
      |         LPCSTR   lpVerb; |   |         LPCSTR   lpVerb; | 
      |         LPCSTR   lpFile; |   |         LPCSTR   lpFile; | 
      |         LPCSTR   lpParameters; |   |         LPCSTR   lpParameters; | 
      |         LPCSTR   lpDirectory; |   |         LPCSTR   lpDirectory; | 
      |         int nShow; |   |         int nShow; | 
      |         HINSTANCE hInstApp; |   |         HINSTANCE hInstApp; | 
      |         // Optional fields |   |         // Optional fields | 
      |         LPVOID lpIDList; |   |         LPVOID lpIDList; | 
      |         LPCSTR   lpClass; |   |         LPCSTR   lpClass; | 
      |         HKEY hkeyClass; |   |         HKEY hkeyClass; | 
      |         DWORD dwHotKey; |   |         DWORD dwHotKey; | 
      |         union { |   |         union { | 
      |         HANDLE hIcon; |   |         HANDLE hIcon; | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         HANDLE hMonitor; |   |         HANDLE hMonitor; | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         } DUMMYUNIONNAME; |   |         } DUMMYUNIONNAME; | 
      |         HANDLE hProcess; |   |         HANDLE hProcess; | 
      | } SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; |   | } SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; | 
      | typedef struct _SHELLEXECUTEINFOW |   | typedef struct _SHELLEXECUTEINFOW | 
      | { |   | { | 
      |         DWORD cbSize; |   |         DWORD cbSize; | 
      |         ULONG fMask; |   |         ULONG fMask; | 
      |         HWND hwnd; |   |         HWND hwnd; | 
      |         LPCWSTR  lpVerb; |   |         LPCWSTR  lpVerb; | 
      |         LPCWSTR  lpFile; |   |         LPCWSTR  lpFile; | 
       |   |  | 
      | skipping to change at line 433 |   | skipping to change at line 448 | 
      |         LPCWSTR  lpDirectory; |   |         LPCWSTR  lpDirectory; | 
      |         int nShow; |   |         int nShow; | 
      |         HINSTANCE hInstApp; |   |         HINSTANCE hInstApp; | 
      |         // Optional fields |   |         // Optional fields | 
      |         LPVOID lpIDList; |   |         LPVOID lpIDList; | 
      |         LPCWSTR  lpClass; |   |         LPCWSTR  lpClass; | 
      |         HKEY hkeyClass; |   |         HKEY hkeyClass; | 
      |         DWORD dwHotKey; |   |         DWORD dwHotKey; | 
      |         union { |   |         union { | 
      |         HANDLE hIcon; |   |         HANDLE hIcon; | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         HANDLE hMonitor; |   |         HANDLE hMonitor; | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         } DUMMYUNIONNAME; |   |         } DUMMYUNIONNAME; | 
      |         HANDLE hProcess; |   |         HANDLE hProcess; | 
      | } SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW; |   | } SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW; | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO; |   | typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO; | 
      | typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO; |   | typedef LPSHELLEXECUTEINFOW LPSHELLEXECUTEINFO; | 
      | #else |   | #else | 
      | typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; |   | typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO; | 
      | typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; |   | typedef LPSHELLEXECUTEINFOA LPSHELLEXECUTEINFO; | 
      | #endif // UNICODE |   | #endif // UNICODE | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo); |   | SHSTDAPI_(BOOL) ShellExecuteExA(__inout LPSHELLEXECUTEINFOA lpExecInfo); | 
      | SHSTDAPI_(BOOL) ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo); |   | SHSTDAPI_(BOOL) ShellExecuteExW(__inout LPSHELLEXECUTEINFOW lpExecInfo); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ShellExecuteEx  ShellExecuteExW |   | #define ShellExecuteEx  ShellExecuteExW | 
      | #else |   | #else | 
      | #define ShellExecuteEx  ShellExecuteExA |   | #define ShellExecuteEx  ShellExecuteExA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(void) WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR |   |  | 
      |  lpstrTitle); |   |  | 
      | SHSTDAPI_(void) WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWS |   |  | 
      | TR lpstrTitle); |   |  | 
      | #ifdef UNICODE |   |  | 
      | #define WinExecError  WinExecErrorW |   |  | 
      | #else |   |  | 
      | #define WinExecError  WinExecErrorA |   |  | 
      | #endif // !UNICODE |   |  | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | // |   | // | 
      | //  SHCreateProcessAsUser() |   | //  SHCreateProcessAsUser() | 
      | typedef struct _SHCREATEPROCESSINFOW |   | typedef struct _SHCREATEPROCESSINFOW | 
      | { |   | { | 
      |         DWORD cbSize; |   |         DWORD cbSize; | 
      |         ULONG fMask; |   |         ULONG fMask; | 
      |         HWND hwnd; |   |         HWND hwnd; | 
      |         LPCWSTR  pszFile; |   |         LPCWSTR  pszFile; | 
      |         LPCWSTR  pszParameters; |   |         LPCWSTR  pszParameters; | 
      |         LPCWSTR  pszCurrentDirectory; |   |         LPCWSTR  pszCurrentDirectory; | 
       | 
      |         IN HANDLE hUserToken; |   |         HANDLE hUserToken; | 
      |         IN LPSECURITY_ATTRIBUTES lpProcessAttributes; |   |         LPSECURITY_ATTRIBUTES lpProcessAttributes; | 
      |         IN LPSECURITY_ATTRIBUTES lpThreadAttributes; |   |         LPSECURITY_ATTRIBUTES lpThreadAttributes; | 
      |         IN BOOL bInheritHandles; |   |         BOOL bInheritHandles; | 
      |         IN DWORD dwCreationFlags; |   |         DWORD dwCreationFlags; | 
      |         IN LPSTARTUPINFOW lpStartupInfo; |   |         LPSTARTUPINFOW lpStartupInfo; | 
      |         OUT LPPROCESS_INFORMATION lpProcessInformation; |   |         LPPROCESS_INFORMATION lpProcessInformation; | 
      | } SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW; |   | } SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW; | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) SHCreateProcessAsUserW(PSHCREATEPROCESSINFOW pscpi); |   | SHSTDAPI_(BOOL) SHCreateProcessAsUserW(__inout PSHCREATEPROCESSINFOW pscpi); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | SHSTDAPI SHEvaluateSystemCommandTemplate(PCWSTR pszCmdTemplate, __out PWSTR *pps | 
       |   | zApplication, __out_opt PWSTR *ppszCommandLine, __out_opt PWSTR *ppszParameters) | 
       |   | ; | 
       |   | // | 
       |   | //  SHEvaluateSystemCommandTemplate() | 
       |   | //      *   enforces stricter validation before calling CreateProcess().  may al | 
       |   | so be | 
       |   | //              used before calling ShellExecute(). | 
       |   | //      *   should be used when caller wants the deterministic behavior from a c | 
       |   | ommand template | 
       |   | //              regardless of execution context.  it ignores the current process | 
       |   |  state, | 
       |   | //              such as the %PATH%, GetCurrentDirectory(), and parent process di | 
       |   | rectory. | 
       |   | //      *   should be used when the command is hardcoded. | 
       |   | //      *   is used by ShellExecute() when handling file associations from HKCR. | 
       |   | //      *   reduces CreateProcess() commandline exploits | 
       |   | //      *   is not designed for processing user input, and may generate unexpect | 
       |   | ed failures. | 
       |   | // | 
       |   | //  INPUT: | 
       |   | //      pszCmdTemplate =    command line, this may or may not include parameters | 
       |   | . | 
       |   | //                          if the parameters are substitution parameters then t | 
       |   | his API | 
       |   | //                          should be called before parameters have been replace | 
       |   | d. | 
       |   | //                          (check the examples below to see sample supported in | 
       |   | puts.) | 
       |   | // | 
       |   | //  OUTPUT on return: S_OK | 
       |   | //      ppszApplication =   verified path to the Application.  this should be pa | 
       |   | ssed as the lpApplication | 
       |   | //                          parameter to CreateProcess() or the lpFile parameter | 
       |   |  to ShellExecute(). | 
       |   | //                          (allocated using CoTaskMemAlloc(), free with CoTaskM | 
       |   | emFree()) | 
       |   | // | 
       |   | //      ppszCommandLine =   OPTIONAL - use if planning to call CreateProcess(). | 
       |   | //                          resulting command line template.  parameters should  | 
       |   | be replaced based on this template, | 
       |   | //                          and then passed as the lpCommandLine parameter to Cr | 
       |   | eateProcess(). | 
       |   | //                          it is guaranteed to be of a form that PathGetArgs()  | 
       |   | will always succeed correctly. | 
       |   | //                          (allocated using CoTaskMemAlloc(), free with CoTaskM | 
       |   | emFree()) | 
       |   | // | 
       |   | //      ppszParameters  =   OPTIONAL - use if planning to call ShellExecute(). | 
       |   | //                          resulting parameter list template.  parameters shoul | 
       |   | d be replaced based on this template, | 
       |   | //                          and then passed as the lpParameters parameter to She | 
       |   | llExecute(). | 
       |   | //                          NOTE: identical to PathGetArgs(*ppszCommandLine). | 
       |   | //                          (allocated using CoTaskMemAlloc(), free with CoTaskM | 
       |   | emFree()) | 
       |   | // | 
       |   | //  OUTPUT on return: FAILED() | 
       |   | //      all outputs will be NULL'ed on failure | 
       |   | // | 
       |   | //  NOTES:  the parsing logic to determine a valid Application path is non-trivi | 
       |   | al, although | 
       |   | //              the extension is not required and if missing will be completed | 
       |   | //              in the following standard order:  { .PIF, .COM, .EXE, .BAT, .CMD | 
       |   |  } | 
       |   | // | 
       |   | //      Relative Paths are System Paths - if the first token has no path qualifi | 
       |   | ers | 
       |   | //              then the token is first checked to see if a key of the same name | 
       |   |  has | 
       |   | //              been installed under HKLM\Software\Microsoft\Windows\CurrentVers | 
       |   | ion\App Paths. | 
       |   | //              if the key or default value does not exist, it is assumed to be  | 
       |   | a child | 
       |   | //              of the system directories.  the following directories will be se | 
       |   | arched | 
       |   | //              in order for the relative token: { CSIDL_SYSTEM, CSIDL_WINDOWS } | 
       |   | // | 
       |   | //      Prefer Quoted Paths - if the first token in pszCmdTemplate is quoted and | 
       |   |  appears | 
       |   | //              to be an absolute path then the token is the only possible resul | 
       |   | t. | 
       |   | // | 
       |   | //      Limit Forms of Unquoted Paths - if the first token is unquoted and appea | 
       |   | rs | 
       |   | //              to be an absolute path, then it is subject to more stringent lim | 
       |   | itations. | 
       |   | //              if the token is a substring of CSIDL_PROGRAM_FILES or does not | 
       |   | //              exist on the file system, then SHEvaluateSystemCommandTemplate() | 
       |   |  will | 
       |   | //              attempt to complete using a token delimited by the first space o | 
       |   | f the | 
       |   | //              last valid path segment (usually the file name).  if this token  | 
       |   | also doesnt exist, | 
       |   | //              then the next space will be used, etc. | 
       |   | // | 
       |   | //  USAGE:      used before calling into CreateProcess() or ShellExecute(), call | 
       |   | ers | 
       |   | //              would typically look like the following: | 
       |   | /* #if 0 // SAMPLE CODE | 
       |   | HRESULT MyCreateProcessPriv(PCWSTR pszCmd) | 
       |   | { | 
       |   |     PWSTR pszApp; | 
       |   |     PWSTR pszCmdLine; | 
       |   |     HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine); | 
       |   |     if (SUCCEEDED(hr)) | 
       |   |     { | 
       |   |         //  if this was a real template, maybe some kind of wnsprintf() first? | 
       |   |         PROCESS_INFORMATION pi; | 
       |   |         STARTUPINFO si = {0}; | 
       |   |         si.cb = sizeof(startup); | 
       |   |         si.wShowWindow = SW_SHOWNORMAL; | 
       |   |  | 
       |   |         if (CreateProcess(pszApp, pszCmdLine, NULL, NULL, FALSE, | 
       |   |                  CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi)) | 
       |   |         { | 
       |   |             //  we are good | 
       |   |             ASSERT(hr == S_OK); | 
       |   |             CloseHandle(pi.hProcess); | 
       |   |             CloseHandle(pi.hThread); | 
       |   |         } | 
       |   |         else | 
       |   |         { | 
       |   |             hr = HRESULT_FROM_WIN32(GetLastError()); | 
       |   |         } | 
       |   |  | 
       |   |         CoTaskMemFree(pszApp); | 
       |   |         CoTaskMemFree(pszCmdLine); | 
       |   |     } | 
       |   |     return hr; | 
       |   | } | 
       |   |  | 
       |   | HRESULT MyShellExec(PCWSTR pszCmd) | 
       |   | { | 
       |   |     PWSTR pszApp; | 
       |   |     PWSTR pszCmdLine; | 
       |   |     HRESULT hr = SHEvaluateSystemCommandTemplate(pszCmd, &pszApp, &pszCmdLine); | 
       |   |     if (SUCCEEDED(hr)) | 
       |   |     { | 
       |   |         //  if this was a real template, maybe some kind of wnsprintf() first? | 
       |   |         SHELLEXECUTEINFOW sei = { | 
       |   |             sizeof(sei),           // cbSize; | 
       |   |             0,                     // fMask | 
       |   |             NULL,                  // hwnd | 
       |   |             NULL,                  // lpVerb | 
       |   |             pszApp,                // lpFile | 
       |   |             PathGetArgs(pszCmdLine), // lpParameters | 
       |   |             NULL,                  // lpDirectory | 
       |   |             SW_SHOWNORMAL,         // nShow | 
       |   |             0,                     // hInstApp | 
       |   |             NULL,                  // lpIDList | 
       |   |             NULL,                  // lpClass | 
       |   |             NULL,                  // hkeyClass | 
       |   |             0,                     // dwHotKey | 
       |   |             NULL,                  // hIcon | 
       |   |             NULL                   // hProcess | 
       |   |         }; | 
       |   |  | 
       |   |         if (ShellExecuteEx(&sei)) | 
       |   |         { | 
       |   |             //  we are good | 
       |   |             ASSERT(hr == S_OK); | 
       |   |         } | 
       |   |         else | 
       |   |         { | 
       |   |             hr = HRESULT_FROM_WIN32(GetLastError()); | 
       |   |         } | 
       |   |  | 
       |   |         CoTaskMemFree(pszApp); | 
       |   |         CoTaskMemFree(pszCmdLine); | 
       |   |     } | 
       |   |     return hr; | 
       |   | } | 
       |   | #endif //  0 // SAMPLE CODE | 
       |   | */ | 
       |   |  | 
       |   | //  EXAMPLE:   Each example will show an input parameter and the results returne | 
       |   | d by | 
       |   | //              SHEvaluateSystemCommandTemplate().  Also included is the alterna | 
       |   | te result | 
       |   | //              of what CreateProcess() would have created if pszCmdTemplate wer | 
       |   | e | 
       |   | //              passed directly as lpCommandLine and lpApplication were NULL. | 
       |   | //              (results marked with an asterisk (*) indicate differences.) | 
       |   | // | 
       |   | //          Assume for the examples that the following paths and values exist: | 
       |   | // | 
       |   | //      SHGetFolderPath() values: | 
       |   | //          CSIDL_SYSTEM            =   C:\windows\system32 | 
       |   | //          CSIDL_WINDOWS           =   C:\windows | 
       |   | //          CSIDL_PROGRAM_FILES     =   C:\Program Files | 
       |   | // | 
       |   | //      Environment settings | 
       |   | //          GetModuleFileName(NULL) =   C:\Program Files\Example\sample.exe | 
       |   | //          GetCurrentDirectory()   =   \\server\share\foo | 
       |   | //          HKLM\...\App Paths\pbrush.exe = C:\windows\system32\mspaint.exe | 
       |   | //          HKLM\...\App Paths\mycl.exe = C:\Program Files\Compilers\mycl.exe | 
       |   | //          PATH                    =   c:\windows\system32;C:\windows;c:\;C:\Pr | 
       |   | ogram Files\Compilers\ | 
       |   | // | 
       |   | //      Valid Application paths: | 
       |   | //          C:\Program Files\Internet Explorer\iexplore.exe | 
       |   | //          C:\windows\system32\rundll32.exe | 
       |   | //          C:\windows\system32\notepad.exe | 
       |   | //          C:\windows\notepad.exe | 
       |   | //          C:\Program Files\Example\sample.exe | 
       |   | //          C:\Program Files\Compilers\cl.exe | 
       |   | //          C:\Other Programs\prog.exe | 
       |   | // | 
       |   | //      Suspicious (possibly hostile) Application paths: | 
       |   | //          C:\Program.exe | 
       |   | //          C:\Program Files\Internet.exe | 
       |   | //          C:\Program Files\Example\regedit.bat | 
       |   | //          C:\mycl.exe | 
       |   | //          \\server\share\foo\rundll32.exe | 
       |   | //          \\server\share\foo\myapp.exe | 
       |   | // | 
       |   | // | 
       |   | //  Relative Path Example #1 | 
       |   | //      pszCmdTemplate      =   notepad.exe %1 | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\windows\system32\notepad.exe | 
       |   | //              pszCommandLine  =   "notepad.exe" %1 | 
       |   | //          CreateProcess() would return TRUE | 
       |   | //              new process =   C:\windows\system32\notepad.exe | 
       |   | // | 
       |   | //  Relative Path Example #2 | 
       |   | //      pszCmdTemplate      =   rundll32.exe shell32.dll,RunDll | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\windows\system32\rundll32.exe | 
       |   | //              pszCommandLine  =   "rundll32.exe" shell32.dll,RunDll | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   \\server\share\foo\rundll32.exe | 
       |   | // | 
       |   | //  Relative Path Example #3 | 
       |   | //      pszCmdTemplate      =   regedit %1 | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\windows\system32\regedit.exe | 
       |   | //              pszCommandLine  =   "regedit.exe" %1 | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program Files\Example\regedit.bat | 
       |   | // | 
       |   | //  Relative Path Example #4 | 
       |   | //      pszCmdTemplate      =   pbrush "%1" | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\windows\system32\mspaint.exe | 
       |   | //              pszCommandLine  =   "mspaint.exe" "%1" | 
       |   | //          * CreateProcess() would return FALSE | 
       |   | // | 
       |   | //  Relative Path Example #5 | 
       |   | //      pszCmdTemplate      =   mycl "%1" "%2" | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Compilers\mycl.exe | 
       |   | //              pszCommandLine  =   "mycl.exe" "%1" "%2" | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\mycl.exe | 
       |   | // | 
       |   | //  Relative Path Example #6 | 
       |   | //      pszCmdTemplate      =   myapp.exe | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   \\server\share\foo\myapp.exe | 
       |   | // | 
       |   | //  Quoted Path Example #1 | 
       |   | //      pszCmdTemplate      =   "C:\Program Files\Internet Explorer\iexplore.exe | 
       |   | " -nohome | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet Explorer\iexplore. | 
       |   | exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet Explorer\iexplore | 
       |   | .exe" -nohome | 
       |   | //          CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program Files\Internet Explorer\iexplore.exe | 
       |   | // | 
       |   | //  Quoted Path Example #2 | 
       |   | //      pszCmdTemplate      =   "C:\Program Files\Internet" -url | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet.exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet.exe" -url | 
       |   | //          CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program Files\internet.exe | 
       |   | // | 
       |   | //  Quoted Path Example #3 | 
       |   | //      pszCmdTemplate      =   "C:\Program" -url | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program.exe | 
       |   | //              pszCommandLine  =   "C:\Program.exe" -url | 
       |   | //          CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #1 | 
       |   | //      pszCmdTemplate      =   C:\Program Files\Internet Explorer\iexplore.exe  | 
       |   | -nohome | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet Explorer\iexplore. | 
       |   | exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet Explorer\iexplore | 
       |   | .exe" -nohome | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #2 | 
       |   | //      pszCmdTemplate      =   C:\Program Files\Internet Explorer\iexplore.exe  | 
       |   | -url fool.htm | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet Explorer\iexplore. | 
       |   | exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet Explorer\iexplore | 
       |   | .exe" -url fool.htm | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #3 | 
       |   | //      pszCmdTemplate      =   C:\Program Files\Internet Explorer\iexplore.exe  | 
       |   | -url C:\fool.htm | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet Explorer\iexplore. | 
       |   | exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet Explorer\iexplore | 
       |   | .exe" -url C:\fool.htm | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #4 | 
       |   | //      pszCmdTemplate      =   C:\Program Files\Internet -url | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Program Files\Internet.exe | 
       |   | //              pszCommandLine  =   "C:\Program Files\Internet.exe" -url | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #5 | 
       |   | //      pszCmdTemplate      =   C:\Other Programs\prog.exe -go %1 \fool %2 | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Other Programs\prog.exe | 
       |   | //              pszCommandLine  =   "C:\Other Programs\prog.exe" %1 \fool %2 | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Other Programs\prog.exe | 
       |   | // | 
       |   | //  Unquoted Example #6 | 
       |   | //      pszCmdTemplate      =   C:\Other Programs\prog.exe -go "\fool" "%1" | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: S_OK | 
       |   | //              pszApplication  =   C:\Other Programs\prog.exe | 
       |   | //              pszCommandLine  =   "C:\Other Programs\prog.exe" -go "\fool" "%1 | 
       |   | " | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Other Programs\prog.exe | 
       |   | // | 
       |   | //  Unquoted Example #7 | 
       |   | //      pszCmdTemplate      =   C:\Program Files\Internet Explorer\iexplore.exe  | 
       |   | -url \fool.htm | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #8 | 
       |   | //      pszCmdTemplate      =   C:\Program -url | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #9 | 
       |   | //      pszCmdTemplate      =   C:\Other Programs\prog.exe -go \fool us | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Other Programs\prog.exe | 
       |   | // | 
       |   | //  Unquoted Example #10 | 
       |   | //      pszCmdTemplate      =   C:\Other Programs\prog.exe -go \fool %1 | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: CO_E_APPNOTFOUND | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Other Programs\prog.exe | 
       |   | // | 
       |   | //  Unquoted Example #11 | 
       |   | //      pszCmdTemplate      =   C:\Program "%1" | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: E_ACCESSDENIED | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   | //  Unquoted Example #12 | 
       |   | //      pszCmdTemplate      =   C:\Program | 
       |   | //          SHEvaluateSystemCommandTemplate() returns: E_ACCESSDENIED | 
       |   | //          * CreateProcess() would return TRUE | 
       |   | //              new process =   C:\Program.exe | 
       |   | // | 
       |   |  | 
       |   | //  used for implementing IShellFolder::GetUIObject(IID_IQueryAssociations) | 
       |   | //  designed for namespace extensions with registered extensible types | 
       |   | //  SHCreateDefaultContextMenu() and others use IQueryAssociations to build up d | 
       |   | ata sets | 
       |   |  | 
       |   | typedef enum ASSOCCLASS | 
       |   | {                               //  which other members are used | 
       |   |     ASSOCCLASS_SHELL_KEY = 0,   //  hkeyClass | 
       |   |     ASSOCCLASS_PROGID_KEY,      //  hkeyClass | 
       |   |     ASSOCCLASS_PROGID_STR,      //  pszClass (HKCR\pszClass) | 
       |   |     ASSOCCLASS_CLSID_KEY,       //  hkeyClass | 
       |   |     ASSOCCLASS_CLSID_STR,       //  pszClass (HKCR\CLSID\pszClass) | 
       |   |     ASSOCCLASS_APP_KEY,         //  hkeyClass | 
       |   |     ASSOCCLASS_APP_STR,         //  pszClass (HKCR\Applications\PathFindFileName | 
       |   | (pszClass)) | 
       |   |     ASSOCCLASS_SYSTEM_STR,      //  pszClass | 
       |   |     ASSOCCLASS_FOLDER,          //  none | 
       |   |     ASSOCCLASS_STAR,            //  none | 
       |   | } ASSOCCLASS; | 
       |   | typedef struct ASSOCIATIONELEMENT_ | 
       |   | { | 
       |   |     ASSOCCLASS ac;              // required | 
       |   |     HKEY hkClass;               // may be NULL | 
       |   |     PCWSTR pszClass;            // may be NULL | 
       |   | } ASSOCIATIONELEMENT; | 
       |   |  | 
       |   | // the object returned from this API implements IQueryAssociations | 
       |   |  | 
       |   | SHSTDAPI AssocCreateForClasses(__in const ASSOCIATIONELEMENT *rgClasses, ULONG c | 
       |   | Classes, REFIID riid, __out void **ppv); | 
       |   |  | 
       |   | /* #if 0 // SAMPLE CODE | 
       |   | HRESULT CCustomFolder::_AssocCreate(PCUITEMID_CHILD pidl, REFIID riid, __out voi | 
       |   | d **ppv) | 
       |   | { | 
       |   |     *ppv = NULL; | 
       |   |     ASSOCIATIONELEMENT rgAssoc[] = | 
       |   |     { | 
       |   |         { ASSOCCLASS_PROGID_STR, NULL, CCustomFolder::_MapChildToType(pidl)}, | 
       |   |         { ASSOCCLASS_FOLDER, NULL, NULL}, | 
       |   |     }; | 
       |   |     if (CCustomFolder::_IsFolder(pidl)) | 
       |   |     { | 
       |   |         return AssocCreateForClasses(rgAssoc, ARRAYSIZE(rgAssoc), riid, ppv); | 
       |   |     } | 
       |   |     else | 
       |   |     { | 
       |   |         //  skip FOLDER at the end | 
       |   |         return AssocCreateForClasses(rgAssoc, ARRAYSIZE(rgAssoc)-1, riid, ppv); | 
       |   |     } | 
       |   | } | 
       |   |  | 
       |   | HRESULT CCustomFolder::GetUIObjectOf(...) | 
       |   | { | 
       |   |     //  validate parameters | 
       |   |     if (riid == IID_IQueryAssociations) | 
       |   |     { | 
       |   |         hr = _AssocCreate(apidl[0], riid, ppv); | 
       |   |     } | 
       |   |     //  else if ... | 
       |   | } | 
       |   | #endif // SAMPLE CODE | 
       |   | */ | 
       |   |  | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
      | //// |   | //// | 
      | ////  End ShellExecuteEx and family |   | ////  End ShellExecuteEx and family | 
      | //// |   | //// | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | // |   | // | 
      | // RecycleBin |   | // RecycleBin | 
      | // |   | // | 
       |   |  | 
      | // struct for query recycle bin info |   | // struct for query recycle bin info | 
      | typedef struct _SHQUERYRBINFO { |   | typedef struct _SHQUERYRBINFO { | 
      |     DWORD   cbSize; |   |     DWORD   cbSize; | 
      | #if !defined(_MAC) || defined(_MAC_INT_64) |   | #if !defined(_MAC) || defined(_MAC_INT_64) | 
      |     __int64 i64Size; |   |     __int64 i64Size; | 
      |     __int64 i64NumItems; |   |     __int64 i64NumItems; | 
       |   |  | 
      | skipping to change at line 507 |   | skipping to change at line 916 | 
      |     DWORDLONG i64NumItems; |   |     DWORDLONG i64NumItems; | 
      | #endif |   | #endif | 
      | } SHQUERYRBINFO, *LPSHQUERYRBINFO; |   | } SHQUERYRBINFO, *LPSHQUERYRBINFO; | 
       |   |  | 
      | // flags for SHEmptyRecycleBin |   | // flags for SHEmptyRecycleBin | 
      | // |   | // | 
      | #define SHERB_NOCONFIRMATION    0x00000001 |   | #define SHERB_NOCONFIRMATION    0x00000001 | 
      | #define SHERB_NOPROGRESSUI      0x00000002 |   | #define SHERB_NOPROGRESSUI      0x00000002 | 
      | #define SHERB_NOSOUND           0x00000004 |   | #define SHERB_NOSOUND           0x00000004 | 
       |   |  | 
       | 
      | SHSTDAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo); |   | SHSTDAPI SHQueryRecycleBinA(LPCSTR pszRootPath, __inout LPSHQUERYRBINFO pSHQuery | 
      | SHSTDAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) |   | RBInfo); | 
      | ; |   | SHSTDAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, __inout LPSHQUERYRBINFO pSHQuer | 
       |   | yRBInfo); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHQueryRecycleBin  SHQueryRecycleBinW |   | #define SHQueryRecycleBin  SHQueryRecycleBinW | 
      | #else |   | #else | 
      | #define SHQueryRecycleBin  SHQueryRecycleBinA |   | #define SHQueryRecycleBin  SHQueryRecycleBinA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | SHSTDAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags); |   | SHSTDAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags); | 
      | SHSTDAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags); |   | SHSTDAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHEmptyRecycleBin  SHEmptyRecycleBinW |   | #define SHEmptyRecycleBin  SHEmptyRecycleBinW | 
      | #else |   | #else | 
      | #define SHEmptyRecycleBin  SHEmptyRecycleBinA |   | #define SHEmptyRecycleBin  SHEmptyRecycleBinA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | //// |   | //// | 
      | //// end of RecycleBin |   | //// end of RecycleBin | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | //// |   | //// | 
       | 
      | //// Tray notification definitions |   | //// Taskbar notification definitions | 
      | //// |   | //// | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | typedef enum | 
       |   | { | 
       |   |     QUNS_NOT_PRESENT               = 1,    // The user is not present.  Heuristi | 
       |   | c check for modes like: screen saver, locked machine, non-active FUS session | 
       |   |     QUNS_BUSY                      = 2,    // The user is busy.  Heuristic check | 
       |   |  for modes like: full-screen app | 
       |   |     QUNS_RUNNING_D3D_FULL_SCREEN   = 3,    // full-screen (exlusive-mode) D3D ap | 
       |   | p | 
       |   |     QUNS_PRESENTATION_MODE         = 4,    // Windows presentation mode (laptop  | 
       |   | feature) is turned on | 
       |   |     QUNS_ACCEPTS_NOTIFICATIONS     = 5,    // none of the above | 
       |   | } QUERY_USER_NOTIFICATION_STATE; | 
       |   |  | 
       |   | SHSTDAPI SHQueryUserNotificationState(__out QUERY_USER_NOTIFICATION_STATE *pquns | 
       |   | ); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |                                                                                  | 
      | typedef struct _NOTIFYICONDATAA { |   | typedef struct _NOTIFYICONDATAA { | 
       | 
      |         DWORD cbSize; |   |     DWORD cbSize; | 
      |         HWND hWnd; |   |     HWND hWnd; | 
      |         UINT uID; |   |     UINT uID; | 
      |         UINT uFlags; |   |     UINT uFlags; | 
      |         UINT uCallbackMessage; |   |     UINT uCallbackMessage; | 
      |         HICON hIcon; |   |     HICON hIcon; | 
      | #if (_WIN32_IE < 0x0500) |   | #if (NTDDI_VERSION < NTDDI_WIN2K) | 
      |         CHAR   szTip[64]; |   |     CHAR   szTip[64]; | 
      | #else |   |  | 
      |         CHAR   szTip[128]; |   |  | 
      | #endif |   | #endif | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         DWORD dwState; |   |     CHAR   szTip[128]; | 
      |         DWORD dwStateMask; |   |     DWORD dwState; | 
      |         CHAR   szInfo[256]; |   |     DWORD dwStateMask; | 
      |         union { |   |     CHAR   szInfo[256]; | 
      |             UINT  uTimeout; |   |     union { | 
      |             UINT  uVersion; |   |         UINT  uTimeout; | 
      |         } DUMMYUNIONNAME; |   |         UINT  uVersion;  // used with NIM_SETVERSION, values 0, 3 and 4 | 
      |         CHAR   szInfoTitle[64]; |   |     } DUMMYUNIONNAME; | 
      |         DWORD dwInfoFlags; |   |     CHAR   szInfoTitle[64]; | 
       |   |     DWORD dwInfoFlags; | 
      | #endif |   | #endif | 
       | 
      | #if (_WIN32_IE >= 0x600) |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |         GUID guidItem; |   |     GUID guidItem; | 
       |   | #endif | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     HICON hBalloonIcon; | 
      | #endif |   | #endif | 
      | } NOTIFYICONDATAA, *PNOTIFYICONDATAA; |   | } NOTIFYICONDATAA, *PNOTIFYICONDATAA; | 
      | typedef struct _NOTIFYICONDATAW { |   | typedef struct _NOTIFYICONDATAW { | 
       | 
      |         DWORD cbSize; |   |     DWORD cbSize; | 
      |         HWND hWnd; |   |     HWND hWnd; | 
      |         UINT uID; |   |     UINT uID; | 
      |         UINT uFlags; |   |     UINT uFlags; | 
      |         UINT uCallbackMessage; |   |     UINT uCallbackMessage; | 
      |         HICON hIcon; |   |     HICON hIcon; | 
      | #if (_WIN32_IE < 0x0500) |   | #if (NTDDI_VERSION < NTDDI_WIN2K) | 
      |         WCHAR  szTip[64]; |   |     WCHAR  szTip[64]; | 
      | #else |   |  | 
      |         WCHAR  szTip[128]; |   |  | 
      | #endif |   | #endif | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |         DWORD dwState; |   |     WCHAR  szTip[128]; | 
      |         DWORD dwStateMask; |   |     DWORD dwState; | 
      |         WCHAR  szInfo[256]; |   |     DWORD dwStateMask; | 
      |         union { |   |     WCHAR  szInfo[256]; | 
      |             UINT  uTimeout; |   |     union { | 
      |             UINT  uVersion; |   |         UINT  uTimeout; | 
      |         } DUMMYUNIONNAME; |   |         UINT  uVersion;  // used with NIM_SETVERSION, values 0, 3 and 4 | 
      |         WCHAR  szInfoTitle[64]; |   |     } DUMMYUNIONNAME; | 
      |         DWORD dwInfoFlags; |   |     WCHAR  szInfoTitle[64]; | 
       |   |     DWORD dwInfoFlags; | 
      | #endif |   | #endif | 
       | 
      | #if (_WIN32_IE >= 0x600) |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |         GUID guidItem; |   |     GUID guidItem; | 
       |   | #endif | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     HICON hBalloonIcon; | 
      | #endif |   | #endif | 
      | } NOTIFYICONDATAW, *PNOTIFYICONDATAW; |   | } NOTIFYICONDATAW, *PNOTIFYICONDATAW; | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | typedef NOTIFYICONDATAW NOTIFYICONDATA; |   | typedef NOTIFYICONDATAW NOTIFYICONDATA; | 
      | typedef PNOTIFYICONDATAW PNOTIFYICONDATA; |   | typedef PNOTIFYICONDATAW PNOTIFYICONDATA; | 
      | #else |   | #else | 
      | typedef NOTIFYICONDATAA NOTIFYICONDATA; |   | typedef NOTIFYICONDATAA NOTIFYICONDATA; | 
      | typedef PNOTIFYICONDATAA PNOTIFYICONDATA; |   | typedef PNOTIFYICONDATAA PNOTIFYICONDATA; | 
      | #endif // UNICODE |   | #endif // UNICODE | 
       |   |  | 
       |   |  | 
      | skipping to change at line 607 |   | skipping to change at line 1034 | 
      | #endif |   | #endif | 
       |   |  | 
      | #define NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem) |   | #define NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem) | 
      | #define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem) |   | #define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem) | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE |   | #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE | 
      | #else |   | #else | 
      | #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE |   | #define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE | 
      | #endif |   | #endif | 
       |   |  | 
       | 
       |   | #define NOTIFYICONDATAA_V3_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon) | 
       |   | #define NOTIFYICONDATAW_V3_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon) | 
       |   | #ifdef UNICODE | 
       |   | #define NOTIFYICONDATA_V3_SIZE      NOTIFYICONDATAW_V3_SIZE | 
       |   | #else | 
       |   | #define NOTIFYICONDATA_V3_SIZE      NOTIFYICONDATAA_V3_SIZE | 
       |   | #endif | 
       |   |                                                                                  | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
      | #define NIN_SELECT          (WM_USER + 0) |   | #define NIN_SELECT          (WM_USER + 0) | 
      | #define NINF_KEY            0x1 |   | #define NINF_KEY            0x1 | 
      | #define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY) |   | #define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY) | 
      | #endif |   | #endif | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0501) |   | #if (_WIN32_IE >= 0x0501) | 
       | 
      | #define NIN_BALLOONSHOW     (WM_USER + 2) |   | #define NIN_BALLOONSHOW         (WM_USER + 2) | 
      | #define NIN_BALLOONHIDE     (WM_USER + 3) |   | #define NIN_BALLOONHIDE         (WM_USER + 3) | 
      | #define NIN_BALLOONTIMEOUT  (WM_USER + 4) |   | #define NIN_BALLOONTIMEOUT      (WM_USER + 4) | 
      | #define NIN_BALLOONUSERCLICK (WM_USER + 5) |   | #define NIN_BALLOONUSERCLICK    (WM_USER + 5) | 
      | #endif |   | #endif | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define NIN_POPUPOPEN           (WM_USER + 6) | 
       |   | #define NIN_POPUPCLOSE          (WM_USER + 7) | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
      | #define NIM_ADD         0x00000000 |   | #define NIM_ADD         0x00000000 | 
      | #define NIM_MODIFY      0x00000001 |   | #define NIM_MODIFY      0x00000001 | 
      | #define NIM_DELETE      0x00000002 |   | #define NIM_DELETE      0x00000002 | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
      | #define NIM_SETFOCUS    0x00000003 |   | #define NIM_SETFOCUS    0x00000003 | 
      | #define NIM_SETVERSION  0x00000004 |   | #define NIM_SETVERSION  0x00000004 | 
       | 
      | #define     NOTIFYICON_VERSION 3 |   | // set NOTIFYICONDATA.uVersion with 0, 3 or 4 | 
       |   | // please read the documentation on the behavior difference that the different v | 
       |   | ersions imply | 
       |   | #define     NOTIFYICON_VERSION      3 | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define     NOTIFYICON_VERSION_4    4 | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
      | #endif |   | #endif | 
       |   |  | 
      | #define NIF_MESSAGE     0x00000001 |   | #define NIF_MESSAGE     0x00000001 | 
      | #define NIF_ICON        0x00000002 |   | #define NIF_ICON        0x00000002 | 
      | #define NIF_TIP         0x00000004 |   | #define NIF_TIP         0x00000004 | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
      | #define NIF_STATE       0x00000008 |   | #define NIF_STATE       0x00000008 | 
      | #define NIF_INFO        0x00000010 |   | #define NIF_INFO        0x00000010 | 
      | #endif |   | #endif | 
      | #if (_WIN32_IE >= 0x600) |   | #if (_WIN32_IE >= 0x600) | 
      | #define NIF_GUID        0x00000020 |   | #define NIF_GUID        0x00000020 | 
      | #endif |   | #endif | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define NIF_REALTIME    0x00000040 | 
       |   | #define NIF_SHOWTIP     0x00000080 | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
      | #define NIS_HIDDEN              0x00000001 |   | #define NIS_HIDDEN              0x00000001 | 
      | #define NIS_SHAREDICON          0x00000002 |   | #define NIS_SHAREDICON          0x00000002 | 
       |   |  | 
      | // says this is the source of a shared icon |   | // says this is the source of a shared icon | 
       |   |  | 
      | // Notify Icon Infotip flags |   | // Notify Icon Infotip flags | 
      | #define NIIF_NONE       0x00000000 |   | #define NIIF_NONE       0x00000000 | 
      | // icon flags are mutually exclusive |   | // icon flags are mutually exclusive | 
      | // and take only the lowest 2 bits |   | // and take only the lowest 2 bits | 
      | #define NIIF_INFO       0x00000001 |   | #define NIIF_INFO       0x00000001 | 
      | #define NIIF_WARNING    0x00000002 |   | #define NIIF_WARNING    0x00000002 | 
      | #define NIIF_ERROR      0x00000003 |   | #define NIIF_ERROR      0x00000003 | 
       | 
      | #if (_WIN32_IE >= 0x0600) |   | #if (NTDDI_VERSION >= NTDDI_XPSP2) // also available in NTDDI_WS03SP1 | 
      | #define NIIF_USER       0x00000004 |   | #define NIIF_USER       0x00000004 | 
       | 
      | #endif |   | #endif // (NTDDI_VERSION >= NTDDI_XPSP2) | 
      | #define NIIF_ICON_MASK  0x0000000F |   | #define NIIF_ICON_MASK  0x0000000F | 
      | #if (_WIN32_IE >= 0x0501) |   | #if (_WIN32_IE >= 0x0501) | 
      | #define NIIF_NOSOUND    0x00000010 |   | #define NIIF_NOSOUND    0x00000010 | 
      | #endif |   | #endif | 
      | #endif |   | #endif | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define NIIF_LARGE_ICON 0x00000020 | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData); |   | SHSTDAPI_(BOOL) Shell_NotifyIconA(DWORD dwMessage, __in PNOTIFYICONDATAA lpData) | 
      | SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData); |   | ; | 
       |   | SHSTDAPI_(BOOL) Shell_NotifyIconW(DWORD dwMessage, __in PNOTIFYICONDATAW lpData) | 
       |   | ; | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define Shell_NotifyIcon  Shell_NotifyIconW |   | #define Shell_NotifyIcon  Shell_NotifyIconW | 
      | #else |   | #else | 
      | #define Shell_NotifyIcon  Shell_NotifyIconA |   | #define Shell_NotifyIcon  Shell_NotifyIconA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | //// |   | //// | 
       | 
      | //// End Tray Notification Icons |   | //// End Taskbar Notification Icons | 
      | //// |   | //// | 
       |   |  | 
      | #ifndef SHFILEINFO_DEFINED |   | #ifndef SHFILEINFO_DEFINED | 
      | #define SHFILEINFO_DEFINED |   | #define SHFILEINFO_DEFINED | 
      | //// |   | //// | 
      | //// Begin SHGetFileInfo |   | //// Begin SHGetFileInfo | 
      | //// |   | //// | 
       |   |  | 
      | /* |   | /* | 
      |  * The SHGetFileInfo API provides an easy way to get attributes |   |  * The SHGetFileInfo API provides an easy way to get attributes | 
       |   |  | 
      | skipping to change at line 730 |   | skipping to change at line 1181 | 
       |   |  | 
      | #define SHGFI_ICON              0x000000100     // get icon |   | #define SHGFI_ICON              0x000000100     // get icon | 
      | #define SHGFI_DISPLAYNAME       0x000000200     // get display name |   | #define SHGFI_DISPLAYNAME       0x000000200     // get display name | 
      | #define SHGFI_TYPENAME          0x000000400     // get type name |   | #define SHGFI_TYPENAME          0x000000400     // get type name | 
      | #define SHGFI_ATTRIBUTES        0x000000800     // get attributes |   | #define SHGFI_ATTRIBUTES        0x000000800     // get attributes | 
      | #define SHGFI_ICONLOCATION      0x000001000     // get icon location |   | #define SHGFI_ICONLOCATION      0x000001000     // get icon location | 
      | #define SHGFI_EXETYPE           0x000002000     // return exe type |   | #define SHGFI_EXETYPE           0x000002000     // return exe type | 
      | #define SHGFI_SYSICONINDEX      0x000004000     // get system icon index |   | #define SHGFI_SYSICONINDEX      0x000004000     // get system icon index | 
      | #define SHGFI_LINKOVERLAY       0x000008000     // put a link overlay on icon |   | #define SHGFI_LINKOVERLAY       0x000008000     // put a link overlay on icon | 
      | #define SHGFI_SELECTED          0x000010000     // show icon in selected state |   | #define SHGFI_SELECTED          0x000010000     // show icon in selected state | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #define SHGFI_ATTR_SPECIFIED    0x000020000     // get only specified attributes |   | #define SHGFI_ATTR_SPECIFIED    0x000020000     // get only specified attributes | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #define SHGFI_LARGEICON         0x000000000     // get large icon |   | #define SHGFI_LARGEICON         0x000000000     // get large icon | 
      | #define SHGFI_SMALLICON         0x000000001     // get small icon |   | #define SHGFI_SMALLICON         0x000000001     // get small icon | 
      | #define SHGFI_OPENICON          0x000000002     // get open icon |   | #define SHGFI_OPENICON          0x000000002     // get open icon | 
      | #define SHGFI_SHELLICONSIZE     0x000000004     // get shell size icon |   | #define SHGFI_SHELLICONSIZE     0x000000004     // get shell size icon | 
      | #define SHGFI_PIDL              0x000000008     // pszPath is a pidl |   | #define SHGFI_PIDL              0x000000008     // pszPath is a pidl | 
      | #define SHGFI_USEFILEATTRIBUTES 0x000000010     // use passed dwFileAttribute |   | #define SHGFI_USEFILEATTRIBUTES 0x000000010     // use passed dwFileAttribute | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
      | #define SHGFI_ADDOVERLAYS       0x000000020     // apply the appropriate overlay
s |   | #define SHGFI_ADDOVERLAYS       0x000000020     // apply the appropriate overlay
s | 
      | #define SHGFI_OVERLAYINDEX      0x000000040     // Get the index of the overlay |   | #define SHGFI_OVERLAYINDEX      0x000000040     // Get the index of the overlay | 
      |                                                 // in the upper 8 bits of the iI
con |   |                                                 // in the upper 8 bits of the iI
con | 
      | #endif |   | #endif | 
       |   |  | 
       | 
      | SHSTDAPI_(DWORD_PTR) SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, SHFI |   | SHSTDAPI_(DWORD_PTR) SHGetFileInfoA(LPCSTR pszPath, DWORD dwFileAttributes, __in | 
      | LEINFOA *psfi, UINT cbFileInfo, UINT uFlags); |   | out_bcount_opt(cbFileInfo) SHFILEINFOA *psfi, | 
      | SHSTDAPI_(DWORD_PTR) SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, SHF |   |     UINT cbFileInfo, UINT uFlags); | 
      | ILEINFOW *psfi, UINT cbFileInfo, UINT uFlags); |   | SHSTDAPI_(DWORD_PTR) SHGetFileInfoW(LPCWSTR pszPath, DWORD dwFileAttributes, __i | 
       |   | nout_bcount_opt(cbFileInfo) SHFILEINFOW *psfi, | 
       |   |     UINT cbFileInfo, UINT uFlags); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetFileInfo  SHGetFileInfoW |   | #define SHGetFileInfo  SHGetFileInfoW | 
      | #else |   | #else | 
      | #define SHGetFileInfo  SHGetFileInfoA |   | #define SHGetFileInfo  SHGetFileInfoA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | typedef struct _SHSTOCKICONINFO | 
       |   | { | 
       |   |     DWORD cbSize; | 
       |   |     HICON hIcon; | 
       |   |     int   iSysImageIndex; | 
       |   |     int   iIcon; | 
       |   |     WCHAR szPath[MAX_PATH]; | 
       |   | } SHSTOCKICONINFO; | 
       |   |  | 
       |   | #define SHGSI_ICONLOCATION      0 // you always get the icon location | 
       |   | #define SHGSI_ICON              SHGFI_ICON | 
       |   | #define SHGSI_SYSICONINDEX      SHGFI_SYSICONINDEX | 
       |   | #define SHGSI_LINKOVERLAY       SHGFI_LINKOVERLAY | 
       |   | #define SHGSI_SELECTED          SHGFI_SELECTED | 
       |   | #define SHGSI_LARGEICON         SHGFI_LARGEICON | 
       |   | #define SHGSI_SMALLICON         SHGFI_SMALLICON | 
       |   | #define SHGSI_SHELLICONSIZE     SHGFI_SHELLICONSIZE | 
       |   |  | 
       |   | //  Shell icons | 
       |   |  | 
       |   | typedef enum SHSTOCKICONID | 
       |   | { | 
       |   |     SIID_DOCNOASSOC = 0,          // document (blank page), no associated progra | 
       |   | m | 
       |   |     SIID_DOCASSOC = 1,            // document with an associated program | 
       |   |     SIID_APPLICATION = 2,         // generic application with no custom icon | 
       |   |     SIID_FOLDER = 3,              // folder (closed) | 
       |   |     SIID_FOLDEROPEN = 4,          // folder (open) | 
       |   |     SIID_DRIVE525 = 5,            // 5.25" floppy disk drive | 
       |   |     SIID_DRIVE35 = 6,             // 3.5" floppy disk drive | 
       |   |     SIID_DRIVEREMOVE = 7,         // removable drive | 
       |   |     SIID_DRIVEFIXED = 8,          // fixed (hard disk) drive | 
       |   |     SIID_DRIVENET = 9,            // network drive | 
       |   |     SIID_DRIVENETDISABLED = 10,   // disconnected network drive | 
       |   |     SIID_DRIVECD = 11,            // CD drive | 
       |   |     SIID_DRIVERAM = 12,           // RAM disk drive | 
       |   |     SIID_WORLD = 13,              // entire network | 
       |   |     SIID_SERVER = 15,             // a computer on the network | 
       |   |     SIID_PRINTER = 16,            // printer | 
       |   |     SIID_MYNETWORK = 17,          // My network places | 
       |   |     SIID_FIND = 22,               // Find | 
       |   |     SIID_HELP = 23,               // Help | 
       |   |     SIID_SHARE = 28,              // overlay for shared items | 
       |   |     SIID_LINK = 29,               // overlay for shortcuts to items | 
       |   |     SIID_SLOWFILE = 30,           // overlay for slow items | 
       |   |     SIID_RECYCLER = 31,           // empty recycle bin | 
       |   |     SIID_RECYCLERFULL = 32,       // full recycle bin | 
       |   |     SIID_MEDIACDAUDIO = 40,       // Audio CD Media | 
       |   |     SIID_LOCK = 47,               // Security lock | 
       |   |     SIID_AUTOLIST = 49,           // AutoList | 
       |   |     SIID_PRINTERNET = 50,         // Network printer | 
       |   |     SIID_SERVERSHARE = 51,        // Server share | 
       |   |     SIID_PRINTERFAX = 52,         // Fax printer | 
       |   |     SIID_PRINTERFAXNET = 53,      // Networked Fax Printer | 
       |   |     SIID_PRINTERFILE = 54,        // Print to File | 
       |   |     SIID_STACK = 55,              // Stack | 
       |   |     SIID_MEDIASVCD = 56,          // SVCD Media | 
       |   |     SIID_STUFFEDFOLDER = 57,      // Folder containing other items | 
       |   |     SIID_DRIVEUNKNOWN = 58,       // Unknown drive | 
       |   |     SIID_DRIVEDVD = 59,           // DVD Drive | 
       |   |     SIID_MEDIADVD = 60,           // DVD Media | 
       |   |     SIID_MEDIADVDRAM = 61,        // DVD-RAM Media | 
       |   |     SIID_MEDIADVDRW = 62,         // DVD-RW Media | 
       |   |     SIID_MEDIADVDR = 63,          // DVD-R Media | 
       |   |     SIID_MEDIADVDROM = 64,        // DVD-ROM Media | 
       |   |     SIID_MEDIACDAUDIOPLUS = 65,   // CD+ (Enhanced CD) Media | 
       |   |     SIID_MEDIACDRW = 66,          // CD-RW Media | 
       |   |     SIID_MEDIACDR = 67,           // CD-R Media | 
       |   |     SIID_MEDIACDBURN = 68,        // Burning CD | 
       |   |     SIID_MEDIABLANKCD = 69,       // Blank CD Media | 
       |   |     SIID_MEDIACDROM = 70,         // CD-ROM Media | 
       |   |     SIID_AUDIOFILES = 71,         // Audio files | 
       |   |     SIID_IMAGEFILES = 72,         // Image files | 
       |   |     SIID_VIDEOFILES = 73,         // Video files | 
       |   |     SIID_MIXEDFILES = 74,         // Mixed files | 
       |   |     SIID_FOLDERBACK = 75,         // Folder back | 
       |   |     SIID_FOLDERFRONT = 76,        // Folder front | 
       |   |     SIID_SHIELD = 77,             // Security shield. Use for UAC prompts only. | 
       |   |     SIID_WARNING = 78,            // Warning | 
       |   |     SIID_INFO = 79,               // Informational | 
       |   |     SIID_ERROR = 80,              // Error | 
       |   |     SIID_KEY = 81,                // Key / Secure | 
       |   |     SIID_SOFTWARE = 82,           // Software | 
       |   |     SIID_RENAME = 83,             // Rename | 
       |   |     SIID_DELETE = 84,             // Delete | 
       |   |     SIID_MEDIAAUDIODVD = 85,      // Audio DVD Media | 
       |   |     SIID_MEDIAMOVIEDVD = 86,      // Movie DVD Media | 
       |   |     SIID_MEDIAENHANCEDCD = 87,    // Enhanced CD Media | 
       |   |     SIID_MEDIAENHANCEDDVD = 88,   // Enhanced DVD Media | 
       |   |     SIID_MEDIAHDDVD = 89,         // HD-DVD Media | 
       |   |     SIID_MEDIABLURAY = 90,        // BluRay Media | 
       |   |     SIID_MEDIAVCD = 91,           // VCD Media | 
       |   |     SIID_MEDIADVDPLUSR = 92,      // DVD+R Media | 
       |   |     SIID_MEDIADVDPLUSRW = 93,     // DVD+RW Media | 
       |   |     SIID_DESKTOPPC = 94,          // desktop computer | 
       |   |     SIID_MOBILEPC = 95,           // mobile computer (laptop/notebook) | 
       |   |     SIID_USERS = 96,              // users | 
       |   |     SIID_MEDIASMARTMEDIA = 97,    // Smart Media | 
       |   |     SIID_MEDIACOMPACTFLASH = 98,  // Compact Flash | 
       |   |     SIID_DEVICECELLPHONE = 99,    // Cell phone | 
       |   |     SIID_DEVICECAMERA = 100,      // Camera | 
       |   |     SIID_DEVICEVIDEOCAMERA = 101, // Video camera | 
       |   |     SIID_DEVICEAUDIOPLAYER = 102, // Audio player | 
       |   |     SIID_NETWORKCONNECT = 103,    // Connect to network | 
       |   |     SIID_INTERNET = 104,          // Internet | 
       |   |     SIID_ZIPFILE = 105,           // ZIP file | 
       |   |     SIID_SETTINGS = 106,          // Settings | 
       |   |     SIID_MAX_ICONS = 107, | 
       |   | } SHSTOCKICONID; | 
       |   |  | 
       |   | #define SIID_INVALID ((SHSTOCKICONID)-1) | 
       |   |  | 
       |   | SHSTDAPI SHGetStockIconInfo(SHSTOCKICONID siid, UINT uFlags, __inout SHSTOCKICON | 
       |   | INFO *psii); | 
       |   |  | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | #define SHGetDiskFreeSpace SHGetDiskFreeSpaceEx |   | #define SHGetDiskFreeSpace SHGetDiskFreeSpaceEx | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName, ULARGE_INTEGER* p |   | SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExA(LPCSTR pszDirectoryName, __out_opt ULARGE_ | 
      | ulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INTE |   | INTEGER* pulFreeBytesAvailableToCaller, | 
      | GER* pulTotalNumberOfFreeBytes); |   |     __out_opt ULARGE_INTEGER* pulTotalNumberOfBytes, __out_opt ULARGE_INTEGER* p | 
      | SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName, ULARGE_INTEGER*  |   | ulTotalNumberOfFreeBytes); | 
      | pulFreeBytesAvailableToCaller, ULARGE_INTEGER* pulTotalNumberOfBytes, ULARGE_INT |   | SHSTDAPI_(BOOL) SHGetDiskFreeSpaceExW(LPCWSTR pszDirectoryName, __out_opt ULARGE | 
      | EGER* pulTotalNumberOfFreeBytes); |   | _INTEGER* pulFreeBytesAvailableToCaller, | 
       |   |     __out_opt ULARGE_INTEGER* pulTotalNumberOfBytes, __out_opt ULARGE_INTEGER* p | 
       |   | ulTotalNumberOfFreeBytes); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExW |   | #define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExW | 
      | #else |   | #else | 
      | #define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExA |   | #define SHGetDiskFreeSpaceEx  SHGetDiskFreeSpaceExA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(BOOL) SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName |   | SHSTDAPI_(BOOL) SHGetNewLinkInfoA(__in LPCSTR pszLinkTo, __in LPCSTR pszDir, __o | 
      | , BOOL *pfMustCopy, UINT uFlags); |   | ut_ecount(MAX_PATH) LPSTR pszName, __out BOOL *pfMustCopy, __in UINT uFlags); | 
      | SHSTDAPI_(BOOL) SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszN |   | SHSTDAPI_(BOOL) SHGetNewLinkInfoW(__in LPCWSTR pszLinkTo, __in LPCWSTR pszDir, _ | 
      | ame, BOOL *pfMustCopy, UINT uFlags); |   | _out_ecount(MAX_PATH) LPWSTR pszName, __out BOOL *pfMustCopy, __in UINT uFlags); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetNewLinkInfo  SHGetNewLinkInfoW |   | #define SHGetNewLinkInfo  SHGetNewLinkInfoW | 
      | #else |   | #else | 
      | #define SHGetNewLinkInfo  SHGetNewLinkInfoA |   | #define SHGetNewLinkInfo  SHGetNewLinkInfoA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | #define SHGNLI_PIDL             0x000000001     // pszLinkTo is a pidl |   | #define SHGNLI_PIDL             0x000000001     // pszLinkTo is a pidl | 
      | #define SHGNLI_PREFIXNAME       0x000000002     // Make name "Shortcut to xxx" |   | #define SHGNLI_PREFIXNAME       0x000000002     // Make name "Shortcut to xxx" | 
      | #define SHGNLI_NOUNIQUE         0x000000004     // don't do the unique name gene
ration |   | #define SHGNLI_NOUNIQUE         0x000000004     // don't do the unique name gene
ration | 
      | #if (_WIN32_IE >= 0x0501) |   | #if (_WIN32_IE >= 0x0501) | 
      | #define SHGNLI_NOLNK            0x000000008     // don't add ".lnk" extension |   | #define SHGNLI_NOLNK            0x000000008     // don't add ".lnk" extension | 
      | #endif // _WIN2_IE >= 0x0501 |   | #endif // _WIN2_IE >= 0x0501 | 
       | 
       |   | #if (_WIN32_IE >= 0x0600) | 
       |   | #define SHGNLI_NOLOCNAME        0x000000010     // use non localized (parsing) n | 
       |   | ame from the target | 
       |   | #endif | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | //// |   | //// | 
      | //// End SHGetFileInfo |   | //// End SHGetFileInfo | 
      | //// |   | //// | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      | // Printer stuff |   | // Printer stuff | 
      | #define PRINTACTION_OPEN           0 |   | #define PRINTACTION_OPEN           0 | 
      | #define PRINTACTION_PROPERTIES     1 |   | #define PRINTACTION_PROPERTIES     1 | 
      | #define PRINTACTION_NETINSTALL     2 |   | #define PRINTACTION_NETINSTALL     2 | 
      | #define PRINTACTION_NETINSTALLLINK 3 |   | #define PRINTACTION_NETINSTALLLINK 3 | 
      | #define PRINTACTION_TESTPAGE       4 |   | #define PRINTACTION_TESTPAGE       4 | 
      | #define PRINTACTION_OPENNETPRN     5 |   | #define PRINTACTION_OPENNETPRN     5 | 
      | #ifdef WINNT |   | #ifdef WINNT | 
      | #define PRINTACTION_DOCUMENTDEFAULTS 6 |   | #define PRINTACTION_DOCUMENTDEFAULTS 6 | 
      | #define PRINTACTION_SERVERPROPERTIES 7 |   | #define PRINTACTION_SERVERPROPERTIES 7 | 
      | #endif |   | #endif | 
       |   |  | 
      | SHSTDAPI_(BOOL) SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, 
LPCSTR lpBuf2, BOOL fModal); |   | SHSTDAPI_(BOOL) SHInvokePrinterCommandA(HWND hwnd, UINT uAction, LPCSTR lpBuf1, 
LPCSTR lpBuf2, BOOL fModal); | 
      | SHSTDAPI_(BOOL) SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1,
 LPCWSTR lpBuf2, BOOL fModal); |   | SHSTDAPI_(BOOL) SHInvokePrinterCommandW(HWND hwnd, UINT uAction, LPCWSTR lpBuf1,
 LPCWSTR lpBuf2, BOOL fModal); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHInvokePrinterCommand  SHInvokePrinterCommandW |   | #define SHInvokePrinterCommand  SHInvokePrinterCommandW | 
      | #else |   | #else | 
      | #define SHInvokePrinterCommand  SHInvokePrinterCommandA |   | #define SHInvokePrinterCommand  SHInvokePrinterCommandA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | typedef struct _OPEN_PRINTER_PROPS_INFOA | 
       |   | { | 
       |   |     DWORD       dwSize; | 
       |   |     LPSTR       pszSheetName; | 
       |   |     UINT        uSheetIndex; | 
       |   |     DWORD       dwFlags; | 
       |   |     BOOL        bModal; | 
       |   | } OPEN_PRINTER_PROPS_INFOA, *POPEN_PRINTER_PROPS_INFOA; | 
       |   | typedef struct _OPEN_PRINTER_PROPS_INFOW | 
       |   | { | 
       |   |     DWORD       dwSize; | 
       |   |     LPWSTR      pszSheetName; | 
       |   |     UINT        uSheetIndex; | 
       |   |     DWORD       dwFlags; | 
       |   |     BOOL        bModal; | 
       |   | } OPEN_PRINTER_PROPS_INFOW, *POPEN_PRINTER_PROPS_INFOW; | 
       |   | #ifdef UNICODE | 
       |   | typedef OPEN_PRINTER_PROPS_INFOW OPEN_PRINTER_PROPS_INFO; | 
       |   | typedef POPEN_PRINTER_PROPS_INFOW POPEN_PRINTER_PROPS_INFO; | 
       |   | #else | 
       |   | typedef OPEN_PRINTER_PROPS_INFOA OPEN_PRINTER_PROPS_INFO; | 
       |   | typedef POPEN_PRINTER_PROPS_INFOA POPEN_PRINTER_PROPS_INFO; | 
       |   | #endif // UNICODE | 
       |   | #define PRINT_PROP_FORCE_NAME   0x01 | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | #endif /* WINVER >= 0x0400 */ |   | #endif /* WINVER >= 0x0400 */ | 
       |   |  | 
      | #if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) |   | #if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) | 
       |   |  | 
      | // |   | // | 
      | // The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's |   | // The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's | 
      | // icon overlay manager to load any registered icon overlay |   | // icon overlay manager to load any registered icon overlay | 
      | // identifers that are not currently loaded.  This is useful if an |   | // identifers that are not currently loaded.  This is useful if an | 
      | // overlay identifier did not load at shell startup but is needed |   | // overlay identifier did not load at shell startup but is needed | 
       |   |  | 
      | skipping to change at line 837 |   | skipping to change at line 1444 | 
      | //     S_OK                 File/directory is available offline, unless |   | //     S_OK                 File/directory is available offline, unless | 
      | //                            OFFLINE_STATUS_INCOMPLETE is returned. |   | //                            OFFLINE_STATUS_INCOMPLETE is returned. | 
      | //     E_INVALIDARG         Path is invalid, or not a net path |   | //     E_INVALIDARG         Path is invalid, or not a net path | 
      | //     E_FAIL               File/directory is not available offline |   | //     E_FAIL               File/directory is not available offline | 
      | // |   | // | 
      | // Notes: |   | // Notes: | 
      | //     OFFLINE_STATUS_INCOMPLETE is never returned for directories. |   | //     OFFLINE_STATUS_INCOMPLETE is never returned for directories. | 
      | //     Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned, |   | //     Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned, | 
      | //     indicating "open in both places." This is common when the server is onlin
e. |   | //     indicating "open in both places." This is common when the server is onlin
e. | 
      | // |   | // | 
       | 
      | SHSTDAPI SHIsFileAvailableOffline(LPCWSTR pwszPath, LPDWORD pdwStatus); |   | SHSTDAPI SHIsFileAvailableOffline(__in LPCWSTR pwszPath, __out_opt LPDWORD pdwSt
atus); | 
       |   |  | 
      | #define OFFLINE_STATUS_LOCAL        0x0001  // If open, it's open locally |   | #define OFFLINE_STATUS_LOCAL        0x0001  // If open, it's open locally | 
      | #define OFFLINE_STATUS_REMOTE       0x0002  // If open, it's open remotely |   | #define OFFLINE_STATUS_REMOTE       0x0002  // If open, it's open remotely | 
      | #define OFFLINE_STATUS_INCOMPLETE   0x0004  // The local copy is currently imcom
plete. |   | #define OFFLINE_STATUS_INCOMPLETE   0x0004  // The local copy is currently imcom
plete. | 
      |                                             // The file will not be available of
fline |   |                                             // The file will not be available of
fline | 
      |                                             // until it has been synchronized. |   |                                             // until it has been synchronized. | 
       |   |  | 
      | #endif |   | #endif | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | //  sets the specified path to use the string resource |   | //  sets the specified path to use the string resource | 
      | //  as the UI instead of the file system name |   | //  as the UI instead of the file system name | 
       | 
      | SHSTDAPI SHSetLocalizedName(LPWSTR pszPath, LPCWSTR pszResModule, int idsRes); |   | SHSTDAPI SHSetLocalizedName(LPCWSTR pszPath, LPCWSTR pszResModule, int idsRes); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | //  sets the specified path to use the string resource | 
       |   | //  as the UI instead of the file system name | 
       |   | SHSTDAPI SHRemoveLocalizedName(LPCWSTR pszPath); | 
       |   | //  gets the string resource for the specified path | 
       |   | SHSTDAPI SHGetLocalizedName(__in LPCWSTR pszPath, __out_ecount(cch) LPWSTR pszRe | 
       |   | sModule, UINT cch, __out int *pidsRes); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
      | //====== ShellMessageBox ================================================ |   | //====== ShellMessageBox ================================================ | 
       |   |  | 
      | // If lpcTitle is NULL, the title is taken from hWnd |   | // If lpcTitle is NULL, the title is taken from hWnd | 
      | // If lpcText is NULL, this is assumed to be an Out Of Memory message |   | // If lpcText is NULL, this is assumed to be an Out Of Memory message | 
      | // If the selector of lpcTitle or lpcText is NULL, the offset should be a |   | // If the selector of lpcTitle or lpcText is NULL, the offset should be a | 
      | //     string resource ID |   | //     string resource ID | 
      | // The variable arguments must all be 32-bit values (even if fewer bits |   | // The variable arguments must all be 32-bit values (even if fewer bits | 
      | //     are actually used) |   | //     are actually used) | 
      | // lpcText (or whatever string resource it causes to be loaded) should |   | // lpcText (or whatever string resource it causes to be loaded) should | 
      | //     be a formatting string similar to wsprintf except that only the |   | //     be a formatting string similar to wsprintf except that only the | 
      | //     following formats are available: |   | //     following formats are available: | 
      | //         %%              formats to a single '%' |   | //         %%              formats to a single '%' | 
      | //         %nn%s           the nn-th arg is a string which is inserted |   | //         %nn%s           the nn-th arg is a string which is inserted | 
      | //         %nn%ld          the nn-th arg is a DWORD, and formatted decimal |   | //         %nn%ld          the nn-th arg is a DWORD, and formatted decimal | 
      | //         %nn%lx          the nn-th arg is a DWORD, and formatted hex |   | //         %nn%lx          the nn-th arg is a DWORD, and formatted hex | 
      | //     note that lengths are allowed on the %s, %ld, and %lx, just |   | //     note that lengths are allowed on the %s, %ld, and %lx, just | 
      | //                         like wsprintf |   | //                         like wsprintf | 
      | // |   | // | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   |  | 
       |   |  | 
       | 
      | int _cdecl ShellMessageBoxA( |   | #if !defined(_SHLWAPI_) | 
      |     HINSTANCE hAppInst, |   | #define LWSTDAPIV_(type)  EXTERN_C DECLSPEC_IMPORT type STDAPIVCALLTYPE | 
      |     HWND hWnd, |   | #else | 
      |     LPCSTR lpcText, |   | #define LWSTDAPIV_(type)  STDAPIV_(type) | 
      |     LPCSTR lpcTitle, |   | #endif | 
      |     UINT fuStyle, |   |  | 
      |     ...); |   | LWSTDAPIV_(int) ShellMessageBoxA( | 
      | int _cdecl ShellMessageBoxW( |   |     __in_opt HINSTANCE hAppInst, | 
      |     HINSTANCE hAppInst, |   |     __in_opt HWND hWnd, | 
      |     HWND hWnd, |   |     __in LPCSTR lpcText, | 
      |     LPCWSTR lpcText, |   |     __in_opt LPCSTR lpcTitle, | 
      |     LPCWSTR lpcTitle, |   |     __in UINT fuStyle, ...); | 
      |     UINT fuStyle, |   | LWSTDAPIV_(int) ShellMessageBoxW( | 
      |     ...); |   |     __in_opt HINSTANCE hAppInst, | 
       |   |     __in_opt HWND hWnd, | 
       |   |     __in LPCWSTR lpcText, | 
       |   |     __in_opt LPCWSTR lpcTitle, | 
       |   |     __in UINT fuStyle, ...); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ShellMessageBox  ShellMessageBoxW |   | #define ShellMessageBox  ShellMessageBoxW | 
      | #else |   | #else | 
      | #define ShellMessageBox  ShellMessageBoxA |   | #define ShellMessageBox  ShellMessageBoxA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
      | #endif // (_WIN32_IE >= 0x0601) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
      |                                                                                  |   |  | 
      | #if (_WIN32_IE >= 0x0601) |   |  | 
      | SHSTDAPI_(BOOL) IsLFNDriveA(LPCSTR pszPath); |   | SHSTDAPI_(BOOL) IsLFNDriveA(LPCSTR pszPath); | 
      | SHSTDAPI_(BOOL) IsLFNDriveW(LPCWSTR pszPath); |   | SHSTDAPI_(BOOL) IsLFNDriveW(LPCWSTR pszPath); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define IsLFNDrive  IsLFNDriveW |   | #define IsLFNDrive  IsLFNDriveW | 
      | #else |   | #else | 
      | #define IsLFNDrive  IsLFNDriveA |   | #define IsLFNDrive  IsLFNDriveA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | #endif // (_WIN32_IE >= 0x0601) |   | #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | #if         _WIN32_IE >= 0x0600 |   | #if         _WIN32_IE >= 0x0600 | 
       |   |  | 
       | 
      | STDAPI          SHEnumerateUnreadMailAccountsA(HKEY hKeyUser, DWORD dwIndex, LPS |   | STDAPI          SHEnumerateUnreadMailAccountsA(HKEY hKeyUser, DWORD dwIndex, __o | 
      | TR pszMailAddress, int cchMailAddress); |   | ut_ecount(cchMailAddress) LPSTR pszMailAddress, int cchMailAddress); | 
      | STDAPI          SHEnumerateUnreadMailAccountsW(HKEY hKeyUser, DWORD dwIndex, LPW |   | STDAPI          SHEnumerateUnreadMailAccountsW(HKEY hKeyUser, DWORD dwIndex, __o | 
      | STR pszMailAddress, int cchMailAddress); |   | ut_ecount(cchMailAddress) LPWSTR pszMailAddress, int cchMailAddress); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHEnumerateUnreadMailAccounts  SHEnumerateUnreadMailAccountsW |   | #define SHEnumerateUnreadMailAccounts  SHEnumerateUnreadMailAccountsW | 
      | #else |   | #else | 
      | #define SHEnumerateUnreadMailAccounts  SHEnumerateUnreadMailAccountsA |   | #define SHEnumerateUnreadMailAccounts  SHEnumerateUnreadMailAccountsA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | STDAPI          SHGetUnreadMailCountA(HKEY hKeyUser, LPCSTR pszMailAddress, DWOR |   | STDAPI          SHGetUnreadMailCountA(HKEY hKeyUser, LPCSTR pszMailAddress, __ou | 
      | D *pdwCount, FILETIME *pFileTime, LPSTR pszShellExecuteCommand, int cchShellExec |   | t_opt DWORD *pdwCount, __out_opt FILETIME *pFileTime, __out_ecount_opt(cchShellE | 
      | uteCommand); |   | xecuteCommand) LPSTR pszShellExecuteCommand, int cchShellExecuteCommand); | 
      | STDAPI          SHGetUnreadMailCountW(HKEY hKeyUser, LPCWSTR pszMailAddress, DWO |   | STDAPI          SHGetUnreadMailCountW(HKEY hKeyUser, LPCWSTR pszMailAddress, __o | 
      | RD *pdwCount, FILETIME *pFileTime, LPWSTR pszShellExecuteCommand, int cchShellEx |   | ut_opt DWORD *pdwCount, __out_opt FILETIME *pFileTime, __out_ecount_opt(cchShell | 
      | ecuteCommand); |   | ExecuteCommand) LPWSTR pszShellExecuteCommand, int cchShellExecuteCommand); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetUnreadMailCount  SHGetUnreadMailCountW |   | #define SHGetUnreadMailCount  SHGetUnreadMailCountW | 
      | #else |   | #else | 
      | #define SHGetUnreadMailCount  SHGetUnreadMailCountA |   | #define SHGetUnreadMailCount  SHGetUnreadMailCountA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | STDAPI          SHSetUnreadMailCountA(LPCSTR pszMailAddress, DWORD dwCount, LPCS
TR pszShellExecuteCommand); |   | STDAPI          SHSetUnreadMailCountA(LPCSTR pszMailAddress, DWORD dwCount, LPCS
TR pszShellExecuteCommand); | 
      | STDAPI          SHSetUnreadMailCountW(LPCWSTR pszMailAddress, DWORD dwCount, LPC
WSTR pszShellExecuteCommand); |   | STDAPI          SHSetUnreadMailCountW(LPCWSTR pszMailAddress, DWORD dwCount, LPC
WSTR pszShellExecuteCommand); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHSetUnreadMailCount  SHSetUnreadMailCountW |   | #define SHSetUnreadMailCount  SHSetUnreadMailCountW | 
      | #else |   | #else | 
      | #define SHSetUnreadMailCount  SHSetUnreadMailCountA |   | #define SHSetUnreadMailCount  SHSetUnreadMailCountA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | #endif  /*  _WIN32_IE >= 0x0600     */ |   | #endif  /*  _WIN32_IE >= 0x0600     */ | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0601) |   | #if (_WIN32_IE >= 0x0601) | 
       | 
      | STDAPI_(BOOL)   SHTestTokenMembership(HANDLE hToken, ULONG ulRID); |   | STDAPI_(BOOL)   SHTestTokenMembership(__in_opt HANDLE hToken, __in ULONG ulRID); | 
      | #endif // (_WIN32_IE >= 0x0601) |   | #endif // (_WIN32_IE >= 0x0601) | 
       |   |  | 
      | #if         _WIN32_IE >= 0x0600 |   | #if         _WIN32_IE >= 0x0600 | 
       |   |  | 
       | 
      | STDAPI SHGetImageList(int iImageList, REFIID riid, void **ppvObj); |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   | SHSTDAPI SHGetImageList(int iImageList, REFIID riid, __out void **ppvObj); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define SHIL_LARGE          0   // normally 32x32 |   | #define SHIL_LARGE          0   // normally 32x32 | 
      | #define SHIL_SMALL          1   // normally 16x16 |   | #define SHIL_SMALL          1   // normally 16x16 | 
      | #define SHIL_EXTRALARGE     2 |   | #define SHIL_EXTRALARGE     2 | 
      | #define SHIL_SYSSMALL       3   // like SHIL_SMALL, but tracks system small icon
 metric correctly |   | #define SHIL_SYSSMALL       3   // like SHIL_SMALL, but tracks system small icon
 metric correctly | 
       | 
      |                                                                                  |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define SHIL_JUMBO          4   // normally 256x256 | 
       |   | #define SHIL_LAST           SHIL_JUMBO | 
       |   | #else | 
      | #define SHIL_LAST           SHIL_SYSSMALL |   | #define SHIL_LAST           SHIL_SYSSMALL | 
       | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   |  | 
      | // Function call types for ntshrui folder sharing helpers |   | // Function call types for ntshrui folder sharing helpers | 
       | 
      | typedef HRESULT (STDMETHODCALLTYPE *PFNCANSHAREFOLDERW)(IN LPCWSTR pszPath); |   | typedef HRESULT (STDMETHODCALLTYPE *PFNCANSHAREFOLDERW)(LPCWSTR pszPath); | 
      | typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(IN HWND hwndParent, I |   | typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(HWND hwndParent, LPCW | 
      | N LPCWSTR pszPath); |   | STR pszPath); | 
       |   |  | 
      | #endif  /*  _WIN32_IE >= 0x0600     */ |   | #endif  /*  _WIN32_IE >= 0x0600     */ | 
       |   |  | 
      | #ifdef __cplusplus |   | #ifdef __cplusplus | 
      | } |   | } | 
      | #endif  /* __cplusplus */ |   | #endif  /* __cplusplus */ | 
       |   |  | 
      | #if !defined(_WIN64) |   | #if !defined(_WIN64) | 
      | #include <poppack.h> |   | #include <poppack.h> | 
      | #endif |   | #endif | 
       |   |  | 
       | 
       |   | #if defined(_MSC_VER) && (_MSC_VER >= 1200) | 
       |   | #pragma warning(pop) | 
       |   | #endif | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | // API for new Network Address Control | 
       |   |  | 
       |   | // Instantiation | 
       |   | #define WC_NETADDRESS L"msctls_netaddress" | 
       |   | SHSTDAPI_(BOOL) InitNetworkAddressControl(); | 
       |   |  | 
       |   | // Address Control Messages | 
       |   |  | 
       |   | // NCM_GETADDRESS returns the type of address that is present in the | 
       |   | // control (based on TBD Net Address flags).  If the input string has | 
       |   | // not been validated using this message will force the validation of | 
       |   | // the input string.  The WPARAM is a BOOL to determine to show the | 
       |   | // balloon tip.  The LPARAM is a pointer to the structure to fill in | 
       |   | // with the address type and address string. | 
       |   | #define NCM_GETADDRESS (WM_USER+1) | 
       |   | #define NetAddr_GetAddress(hwnd,pv) \ | 
       |   |     (HRESULT)SNDMSG(hwnd,NCM_GETADDRESS,0,(LPARAM)pv) | 
       |   | typedef struct tagNC_ADDRESS | 
       |   | { | 
       |   |    struct NET_ADDRESS_INFO_ *pAddrInfo; // defined in iphlpapi.h | 
       |   |    USHORT  PortNumber; | 
       |   |    BYTE    PrefixLength; | 
       |   | } NC_ADDRESS, *PNC_ADDRESS; | 
       |   |  | 
       |   | // NCM_SETALLOWTYPE sets the type of addresses that the control will allow. | 
       |   | // The address flags are defined in iphlpapi.h | 
       |   | #define NCM_SETALLOWTYPE (WM_USER+2) | 
       |   | #define NetAddr_SetAllowType(hwnd,addrMask) \ | 
       |   |     (HRESULT)SNDMSG(hwnd,NCM_SETALLOWTYPE,(WPARAM)addrMask,0) | 
       |   | // NCM_GETALLOWTYPE returns the currently allowed type mask. | 
       |   | #define NCM_GETALLOWTYPE (WM_USER+3) | 
       |   | #define NetAddr_GetAllowType(hwnd) \ | 
       |   |     (DWORD)SNDMSG(hwnd,NCM_GETALLOWTYPE,0,0) | 
       |   |  | 
       |   | // NCM_DISPLAYERRORTIP displays the error balloon tip with the correct | 
       |   | // error string (based on the last failure from the NCM_GETADDRESS call | 
       |   | #define NCM_DISPLAYERRORTIP (WM_USER+4) | 
       |   | #define NetAddr_DisplayErrorTip(hwnd) \ | 
       |   |     (HRESULT)SNDMSG(hwnd,NCM_DISPLAYERRORTIP,0,0) | 
       |   |  | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | // Returns the type of media (CD, DVD, Blank, etc) that is in the drive. | 
       |   | // dwMediaContent is set to a combination of ARCONTENT flags. | 
       |   | STDAPI SHGetDriveMedia(LPCWSTR pszDrive, __out DWORD *pdwMediaContent); | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | // CPL task apis | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | // Windows Parental Controls (WPC) query apis | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |                                                                                  | 
      | #endif  /* _INC_SHELLAPI */ |   | #endif  /* _INC_SHELLAPI */ | 
      |   |  | 
     |  End of changes. 89 change blocks.  | 
     | 212 lines changed or deleted |   | 986 lines changed or added | 
      | 
   
    
  |  shlobj.h (6.00.3790.3959-Windows 5.0)  |   |  shlobj.h (6.0.6002.18005-Windows 6.0)  | 
 
       |   |  | 
      | skipping to change at line 12 |   | skipping to change at line 12 | 
      | // |   | // | 
      | // Copyright (c) Microsoft Corporation. All rights reserved. |   | // Copyright (c) Microsoft Corporation. All rights reserved. | 
      | // |   | // | 
      | // File: shlobj.h |   | // File: shlobj.h | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #ifndef _SHLOBJ_H_ |   | #ifndef _SHLOBJ_H_ | 
      | #define _SHLOBJ_H_ |   | #define _SHLOBJ_H_ | 
       |   |  | 
       | 
      | #ifndef _WINRESRC_ |   |  | 
      | #ifndef _WIN32_IE |   |  | 
      | #define _WIN32_IE 0x0501 |   |  | 
      | #else |   |  | 
      | #if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500) |   |  | 
      | #error _WIN32_IE setting conflicts with _WIN32_WINNT setting |   |  | 
      | #endif |   |  | 
      | #endif |   |  | 
      | #endif |   |  | 
      |                                                                                  |   |  | 
      | #ifndef SNDMSG |   | #ifndef SNDMSG | 
      | #ifdef __cplusplus |   | #ifdef __cplusplus | 
      | #define SNDMSG ::SendMessage |   | #define SNDMSG ::SendMessage | 
      | #else |   | #else | 
      | #define SNDMSG SendMessage |   | #define SNDMSG SendMessage | 
      | #endif |   | #endif | 
      | #endif // ifndef SNDMSG |   | #endif // ifndef SNDMSG | 
       |   |  | 
      | // |   | // | 
      | // Define API decoration for direct importing of DLL references. |   | // Define API decoration for direct importing of DLL references. | 
       |   |  | 
      | skipping to change at line 103 |   | skipping to change at line 93 | 
      | #include <prsht.h> |   | #include <prsht.h> | 
      | #endif |   | #endif | 
      | #ifndef _INC_COMMCTRL |   | #ifndef _INC_COMMCTRL | 
      | #include <commctrl.h>   // for LPTBBUTTON |   | #include <commctrl.h>   // for LPTBBUTTON | 
      | #endif |   | #endif | 
       |   |  | 
      | #ifndef INITGUID |   | #ifndef INITGUID | 
      | #include <shlguid.h> |   | #include <shlguid.h> | 
      | #endif /* !INITGUID */ |   | #endif /* !INITGUID */ | 
       |   |  | 
       | 
      | #include <pshpack1.h>   /* Assume byte packing throughout */ |   |  | 
       |   |  | 
      | #ifdef __cplusplus |   |  | 
      | extern "C" {            /* Assume C declarations for C++ */ |   |  | 
      | #endif /* __cplusplus */ |   |  | 
      |                                                                                  |   |  | 
      | #include <shtypes.h> |   | #include <shtypes.h> | 
       | 
      |                                                                                  |   |  | 
      | #include <shobjidl.h> |   | #include <shobjidl.h> | 
       |   |  | 
       | 
      | //=========================================================================== |   | #if defined(_MSC_VER) && (_MSC_VER >= 1200) | 
      | // |   | #pragma once | 
      | // Task allocator API |   | #endif | 
      | // |   |  | 
      | //  All the shell extensions MUST use the task allocator (see OLE 2.0 |   |  | 
      | // programming guild for its definition) when they allocate or free |   |  | 
      | // memory objects (mostly ITEMIDLIST) that are returned across any |   |  | 
      | // shell interfaces. There are two ways to access the task allocator |   |  | 
      | // from a shell extension depending on whether or not it is linked with |   |  | 
      | // OLE32.DLL or not (purely for efficiency). |   |  | 
      | // |   |  | 
      | // (1) A shell extension which calls any OLE API (i.e., linked with |   |  | 
      | //  OLE32.DLL) should call OLE's task allocator (by retrieving |   |  | 
      | //  the task allocator by calling CoGetMalloc API). |   |  | 
      | // |   |  | 
      | // (2) A shell extension which does not call any OLE API (i.e., not linked |   |  | 
      | //  with OLE32.DLL) should call the shell task allocator API (defined |   |  | 
      | //  below), so that the shell can quickly loads it when OLE32.DLL is not |   |  | 
      | //  loaded by any application at that point. |   |  | 
      | // |   |  | 
      | // Notes: |   |  | 
      | //  In next version of Windowso release, SHGetMalloc will be replaced by |   |  | 
      | // the following macro. |   |  | 
      | // |   |  | 
      | // #define SHGetMalloc(ppmem)   CoGetMalloc(MEMCTX_TASK, ppmem) |   |  | 
      | // |   |  | 
      | //=========================================================================== |   |  | 
       |   |  | 
       | 
      | SHSTDAPI SHGetMalloc(LPMALLOC * ppMalloc); |   | #ifdef __cplusplus | 
       |   | extern "C" {            /* Assume C declarations for C++ */ | 
       |   | #endif /* __cplusplus */ | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   | #include <pshpack1.h>   /* Assume byte packing throughout */ | 
      | SHSTDAPI_(void *) SHAlloc(SIZE_T cb); |   |  | 
      | SHSTDAPI_(void)   SHFree(void * pv); |   |  | 
      | #endif  // (_WIN32_IE >= 0x0601) |   |  | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
       | 
      | // IContextMenu interface |   | // Legacy exports that are no longer needed, call the COM API instead | 
      | // |   |  | 
      | // [OverView] |   |  | 
      | // |   |  | 
      | //  The shell uses the IContextMenu interface in following three cases. |   |  | 
      | // |   |  | 
      | // case-1: The shell is loading context menu extensions. |   |  | 
      | // |   |  | 
      | //   When the user clicks the right mouse button on an item within the shell's |   |  | 
      | //  name space (i.g., file, directory, server, work-group, etc.), it creates |   |  | 
      | //  the default context menu for its type, then loads context menu extensions |   |  | 
      | //  that are registered for that type (and its base type) so that they can |   |  | 
      | //  add extra menu items. Those context menu extensions are registered at |   |  | 
      | //  HKCR\{ProgID}\shellex\ContextMenuHandlers. |   |  | 
      | // |   |  | 
      | // case-2: The shell is retrieving a context menu of sub-folders in extended |   |  | 
      | //   name-space. |   |  | 
      | // |   |  | 
      | //   When the explorer's name space is extended by name space extensions, |   |  | 
      | //  the shell calls their IShellFolder::GetUIObjectOf to get the IContextMenu |   |  | 
      | //  objects when it creates context menus for folders under those extended |   |  | 
      | //  name spaces. |   |  | 
      | // |   |  | 
      | // case-3: The shell is loading non-default drag and drop handler for directorie |   |  | 
      | s. |   |  | 
      | // |   |  | 
      | //   When the user performed a non-default drag and drop onto one of file |   |  | 
      | //  system folders (i.e., directories), it loads shell extensions that are |   |  | 
      | //  registered at HKCR\{ProgID}\DragDropHandlers. |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // IContextMenu::QueryContextMenu |   |  | 
      | // |   |  | 
      | //   This member function may insert one or more menuitems to the specified |   |  | 
      | //  menu (hmenu) at the specified location (indexMenu which is never be -1). |   |  | 
      | //  The IDs of those menuitem must be in the specified range (idCmdFirst and |   |  | 
      | //  idCmdLast). It returns the maximum menuitem ID offset (ushort) in the |   |  | 
      | //  'code' field (low word) of the scode. |   |  | 
      | // |   |  | 
      | //   The uFlags specify the context. It may have one or more of following |   |  | 
      | //  flags. |   |  | 
      | // |   |  | 
      | //  CMF_DEFAULTONLY: This flag is passed if the user is invoking the default |   |  | 
      | //   action (typically by double-clicking, case 1 and 2 only). Context menu |   |  | 
      | //   extensions (case 1) should not add any menu items, and returns NOERROR. |   |  | 
      | // |   |  | 
      | //  CMF_VERBSONLY: The explorer passes this flag if it is constructing |   |  | 
      | //   a context menu for a short-cut object (case 1 and case 2 only). If this |   |  | 
      | //   flag is passed, it should not add any menu-items that is not appropriate |   |  | 
      | //   from a short-cut. |   |  | 
      | //    A good example is the "Delete" menuitem, which confuses the user |   |  | 
      | //   because it is not clear whether it deletes the link source item or the |   |  | 
      | //   link itself. |   |  | 
      | // |   |  | 
      | //  CMF_EXPLORER: The explorer passes this flag if it has the left-side pane |   |  | 
      | //   (case 1 and 2 only). Context menu extensions should ignore this flag. |   |  | 
      | // |   |  | 
      | //   High word (16-bit) are reserved for context specific communications |   |  | 
      | //  and the rest of flags (13-bit) are reserved by the system. |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // IContextMenu::InvokeCommand |   |  | 
      | // |   |  | 
      | //   This member is called when the user has selected one of menuitems that |   |  | 
      | //  are inserted by previous QueryContextMenu member. In this case, the |   |  | 
      | //  LOWORD(lpici->lpVerb) contains the menuitem ID offset (menuitem ID - |   |  | 
      | //  idCmdFirst). |   |  | 
      | // |   |  | 
      | //   This member function may also be called programmatically. In such a case, |   |  | 
      | //  lpici->lpVerb specifies the canonical name of the command to be invoked, |   |  | 
      | //  which is typically retrieved by GetCommandString member previously. |   |  | 
      | // |   |  | 
      | //  Parameters in lpci: |   |  | 
      | //    cbSize -- Specifies the size of this structure (sizeof(*lpci)) |   |  | 
      | //    hwnd   -- Specifies the owner window for any message/dialog box. |   |  | 
      | //    fMask  -- Specifies whether or not dwHotkey/hIcon paramter is valid. |   |  | 
      | //    lpVerb -- Specifies the command to be invoked. |   |  | 
      | //    lpParameters -- Parameters (optional) |   |  | 
      | //    lpDirectory  -- Working directory (optional) |   |  | 
      | //    nShow -- Specifies the flag to be passed to ShowWindow (SW_*). |   |  | 
      | //    dwHotKey -- Hot key to be assigned to the app after invoked (optional). |   |  | 
      | //    hIcon -- Specifies the icon (optional). |   |  | 
      | //    hMonitor -- Specifies the default monitor (optional). |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // IContextMenu::GetCommandString |   |  | 
      | // |   |  | 
      | //   This member function is called by the explorer either to get the |   |  | 
      | //  canonical (language independent) command name (uFlags == GCS_VERB) or |   |  | 
      | //  the help text ((uFlags & GCS_HELPTEXT) != 0) for the specified command. |   |  | 
      | //  The retrieved canonical string may be passed to its InvokeCommand |   |  | 
      | //  member function to invoke a command programmatically. The explorer |   |  | 
      | //  displays the help texts in its status bar; therefore, the length of |   |  | 
      | //  the help text should be reasonably short (<40 characters). |   |  | 
      | // |   |  | 
      | //  Parameters: |   |  | 
      | //   idCmd -- Specifies menuitem ID offset (from idCmdFirst) |   |  | 
      | //   uFlags -- Either GCS_VERB or GCS_HELPTEXT |   |  | 
      | //   pwReserved -- Reserved (must pass NULL when calling, must ignore when calle |   |  | 
      | d) |   |  | 
      | //   pszName -- Specifies the string buffer. |   |  | 
      | //   cchMax -- Specifies the size of the string buffer. |   |  | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
       | 
      | // QueryContextMenu uFlags |   | SHSTDAPI SHGetMalloc(__out IMalloc **ppMalloc); // CoGetMalloc(MEMCTX_TASK,ppMal | 
      | #define CMF_NORMAL              0x00000000 |   | loc) | 
      | #define CMF_DEFAULTONLY         0x00000001 |   | SHSTDAPI_(void *) SHAlloc(SIZE_T cb);           // CoTaskMemAlloc(cb) | 
      | #define CMF_VERBSONLY           0x00000002 |   | SHSTDAPI_(void)   SHFree(__in_opt void * pv);   // CoTaskMemFree(pv) | 
      | #define CMF_EXPLORE             0x00000004 |   |  | 
      | #define CMF_NOVERBS             0x00000008 |   |  | 
      | #define CMF_CANRENAME           0x00000010 |   |  | 
      | #define CMF_NODEFAULT           0x00000020 |   |  | 
      | #define CMF_INCLUDESTATIC       0x00000040 |   |  | 
      | #define CMF_EXTENDEDVERBS       0x00000100      // rarely used verbs |   |  | 
      | #define CMF_RESERVED            0xffff0000      // View specific |   |  | 
       |   |  | 
      | // GetCommandString uFlags |   |  | 
      | #define GCS_VERBA        0x00000000     // canonical verb |   |  | 
      | #define GCS_HELPTEXTA    0x00000001     // help text (for status bar) |   |  | 
      | #define GCS_VALIDATEA    0x00000002     // validate command exists |   |  | 
      | #define GCS_VERBW        0x00000004     // canonical verb (unicode) |   |  | 
      | #define GCS_HELPTEXTW    0x00000005     // help text (unicode version) |   |  | 
      | #define GCS_VALIDATEW    0x00000006     // validate command exists (unicode) |   |  | 
      | #define GCS_UNICODE      0x00000004     // for bit testing - Unicode string |   |  | 
       |   |  | 
      | #ifdef UNICODE |   |  | 
      | #define GCS_VERB        GCS_VERBW |   |  | 
      | #define GCS_HELPTEXT    GCS_HELPTEXTW |   |  | 
      | #define GCS_VALIDATE    GCS_VALIDATEW |   |  | 
      | #else |   |  | 
      | #define GCS_VERB        GCS_VERBA |   |  | 
      | #define GCS_HELPTEXT    GCS_HELPTEXTA |   |  | 
      | #define GCS_VALIDATE    GCS_VALIDATEA |   |  | 
      | #endif |   |  | 
       |   |  | 
      | #define CMDSTR_NEWFOLDERA   "NewFolder" |   |  | 
      | #define CMDSTR_VIEWLISTA    "ViewList" |   |  | 
      | #define CMDSTR_VIEWDETAILSA "ViewDetails" |   |  | 
      | #define CMDSTR_NEWFOLDERW   L"NewFolder" |   |  | 
      | #define CMDSTR_VIEWLISTW    L"ViewList" |   |  | 
      | #define CMDSTR_VIEWDETAILSW L"ViewDetails" |   |  | 
       |   |  | 
      | #ifdef UNICODE |   |  | 
      | #define CMDSTR_NEWFOLDER    CMDSTR_NEWFOLDERW |   |  | 
      | #define CMDSTR_VIEWLIST     CMDSTR_VIEWLISTW |   |  | 
      | #define CMDSTR_VIEWDETAILS  CMDSTR_VIEWDETAILSW |   |  | 
      | #else |   |  | 
      | #define CMDSTR_NEWFOLDER    CMDSTR_NEWFOLDERA |   |  | 
      | #define CMDSTR_VIEWLIST     CMDSTR_VIEWLISTA |   |  | 
      | #define CMDSTR_VIEWDETAILS  CMDSTR_VIEWDETAILSA |   |  | 
      | #endif |   |  | 
       |   |  | 
      | #define CMIC_MASK_HOTKEY        SEE_MASK_HOTKEY |   |  | 
      | #define CMIC_MASK_ICON          SEE_MASK_ICON |   |  | 
      | #define CMIC_MASK_FLAG_NO_UI    SEE_MASK_FLAG_NO_UI |   |  | 
      | #define CMIC_MASK_UNICODE       SEE_MASK_UNICODE |   |  | 
      | #define CMIC_MASK_NO_CONSOLE    SEE_MASK_NO_CONSOLE |   |  | 
      | #define CMIC_MASK_HASLINKNAME   SEE_MASK_HASLINKNAME |   |  | 
      | #define CMIC_MASK_FLAG_SEP_VDM  SEE_MASK_FLAG_SEPVDM |   |  | 
      | #define CMIC_MASK_HASTITLE      SEE_MASK_HASTITLE |   |  | 
      | #define CMIC_MASK_ASYNCOK       SEE_MASK_ASYNCOK |   |  | 
      | #if (_WIN32_IE >= 0x0603) |   |  | 
      | #define CMIC_MASK_NOZONECHECKS  SEE_MASK_NOZONECHECKS |   |  | 
      | #endif // (_WIN32_IE >= 0x0603) |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0501) |   |  | 
      | #define CMIC_MASK_SHIFT_DOWN    0x10000000 |   |  | 
      | #define CMIC_MASK_CONTROL_DOWN  0x40000000 |   |  | 
      | #endif // (_WIN32_IE >= 0x501) |   |  | 
      | #if (_WIN32_IE >= 0x0560) |   |  | 
      | #define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE |   |  | 
      | #define CMIC_MASK_NOZONECHECKS  SEE_MASK_NOZONECHECKS |   |  | 
      | #endif // (_WIN32_IE >= 0x560) |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   |  | 
      | #define CMIC_MASK_PTINVOKE      0x20000000 |   |  | 
      | #endif |   |  | 
       |   |  | 
      | #include <pshpack8.h> |   |  | 
       |   |  | 
      | //NOTE: When SEE_MASK_HMONITOR is set, hIcon is treated as hMonitor |   |  | 
      | typedef struct _CMINVOKECOMMANDINFO { |   |  | 
      |     DWORD cbSize;        // sizeof(CMINVOKECOMMANDINFO) |   |  | 
      |     DWORD fMask;         // any combination of CMIC_MASK_* |   |  | 
      |     HWND hwnd;           // might be NULL (indicating no owner window) |   |  | 
      |     LPCSTR lpVerb;       // either a string or MAKEINTRESOURCE(idOffset) |   |  | 
      |     LPCSTR lpParameters; // might be NULL (indicating no parameter) |   |  | 
      |     LPCSTR lpDirectory;  // might be NULL (indicating no specific directory) |   |  | 
      |     int nShow;           // one of SW_ values for ShowWindow() API |   |  | 
       |   |  | 
      |     DWORD dwHotKey; |   |  | 
      |     HANDLE hIcon; |   |  | 
      | } CMINVOKECOMMANDINFO,  *LPCMINVOKECOMMANDINFO; |   |  | 
       |   |  | 
      | typedef struct _CMInvokeCommandInfoEx { |   |  | 
      |     DWORD cbSize;        // must be sizeof(CMINVOKECOMMANDINFOEX) |   |  | 
      |     DWORD fMask;         // any combination of CMIC_MASK_* |   |  | 
      |     HWND hwnd;           // might be NULL (indicating no owner window) |   |  | 
      |     LPCSTR lpVerb;       // either a string or MAKEINTRESOURCE(idOffset) |   |  | 
      |     LPCSTR lpParameters; // might be NULL (indicating no parameter) |   |  | 
      |     LPCSTR lpDirectory;  // might be NULL (indicating no specific directory) |   |  | 
      |     int nShow;           // one of SW_ values for ShowWindow() API |   |  | 
       |   |  | 
      |     DWORD dwHotKey; |   |  | 
       |   |  | 
      |     HANDLE hIcon; |   |  | 
      |     LPCSTR lpTitle;      // For CreateProcess-StartupInfo.lpTitle |   |  | 
      |     LPCWSTR lpVerbW;        // Unicode verb (for those who can use it) |   |  | 
      |     LPCWSTR lpParametersW;  // Unicode parameters (for those who can use it) |   |  | 
      |     LPCWSTR lpDirectoryW;   // Unicode directory (for those who can use it) |   |  | 
      |     LPCWSTR lpTitleW;       // Unicode title (for those who can use it) |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   |  | 
      |     POINT   ptInvoke;       // Point where it's invoked |   |  | 
      | #endif |   |  | 
      | } CMINVOKECOMMANDINFOEX,  *LPCMINVOKECOMMANDINFOEX; |   |  | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IContextMenu |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IContextMenu, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(QueryContextMenu)(THIS_ |   |  | 
      |                                 HMENU hmenu, |   |  | 
      |                                 UINT indexMenu, |   |  | 
      |                                 UINT idCmdFirst, |   |  | 
      |                                 UINT idCmdLast, |   |  | 
      |                                 UINT uFlags) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(InvokeCommand)(THIS_ |   |  | 
      |                              LPCMINVOKECOMMANDINFO lpici) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(GetCommandString)(THIS_ |   |  | 
      |                                 UINT_PTR    idCmd, |   |  | 
      |                                 UINT        uType, |   |  | 
      |                                 UINT      * pwReserved, |   |  | 
      |                                 LPSTR       pszName, |   |  | 
      |                                 UINT        cchMax) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IContextMenu *  LPCONTEXTMENU; |   |  | 
       |   |  | 
      | // |   |  | 
      | // IContextMenu2 (IContextMenu with one new member) |   |  | 
      | // |   |  | 
      | // IContextMenu2::HandleMenuMsg |   |  | 
      | // |   |  | 
      | //  This function is called, if the client of IContextMenu is aware of |   |  | 
      | // IContextMenu2 interface and receives one of following messages while |   |  | 
      | // it is calling TrackPopupMenu (in the window proc of hwnd): |   |  | 
      | //      WM_INITPOPUP, WM_DRAWITEM and WM_MEASUREITEM |   |  | 
      | //  The callee may handle these messages to draw owner draw menuitems. |   |  | 
      | // |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IContextMenu2 |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IContextMenu2, IContextMenu) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IContextMenu methods *** |   |  | 
       |   |  | 
      |     STDMETHOD(QueryContextMenu)(THIS_ |   |  | 
      |                                 HMENU hmenu, |   |  | 
      |                                 UINT indexMenu, |   |  | 
      |                                 UINT idCmdFirst, |   |  | 
      |                                 UINT idCmdLast, |   |  | 
      |                                 UINT uFlags) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(InvokeCommand)(THIS_ |   |  | 
      |                              LPCMINVOKECOMMANDINFO lpici) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(GetCommandString)(THIS_ |   |  | 
      |                                 UINT_PTR    idCmd, |   |  | 
      |                                 UINT        uType, |   |  | 
      |                                 UINT      * pwReserved, |   |  | 
      |                                 LPSTR       pszName, |   |  | 
      |                                 UINT        cchMax) PURE; |   |  | 
       |   |  | 
      |     // *** IContextMenu2 methods *** |   |  | 
       |   |  | 
      |     STDMETHOD(HandleMenuMsg)(THIS_ |   |  | 
      |                              UINT uMsg, |   |  | 
      |                              WPARAM wParam, |   |  | 
      |                              LPARAM lParam) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IContextMenu2 * LPCONTEXTMENU2; |   |  | 
       |   |  | 
      | // |   |  | 
      | // IContextMenu3 (IContextMenu with one new member) |   |  | 
      | // |   |  | 
      | // IContextMenu3::HandleMenuMsg2 |   |  | 
      | // |   |  | 
      | //  This function is called, if the client of IContextMenu is aware of |   |  | 
      | // IContextMenu3 interface and receives a menu message while |   |  | 
      | // it is calling TrackPopupMenu (in the window proc of hwnd): |   |  | 
      | // |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IContextMenu3 |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IContextMenu3, IContextMenu2) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IContextMenu methods *** |   |  | 
       |   |  | 
      |     STDMETHOD(QueryContextMenu)(THIS_ |   |  | 
      |                                 HMENU hmenu, |   |  | 
      |                                 UINT indexMenu, |   |  | 
      |                                 UINT idCmdFirst, |   |  | 
      |                                 UINT idCmdLast, |   |  | 
      |                                 UINT uFlags) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(InvokeCommand)(THIS_ |   |  | 
      |                              LPCMINVOKECOMMANDINFO lpici) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD(GetCommandString)(THIS_ |   |  | 
      |                                 UINT_PTR    idCmd, |   |  | 
      |                                 UINT        uType, |   |  | 
      |                                 UINT      * pwReserved, |   |  | 
      |                                 LPSTR       pszName, |   |  | 
      |                                 UINT        cchMax) PURE; |   |  | 
       |   |  | 
      |     // *** IContextMenu2 methods *** |   |  | 
       |   |  | 
      |     STDMETHOD(HandleMenuMsg)(THIS_ |   |  | 
      |                              UINT uMsg, |   |  | 
      |                              WPARAM wParam, |   |  | 
      |                              LPARAM lParam) PURE; |   |  | 
       |   |  | 
      |     // *** IContextMenu3 methods *** |   |  | 
       |   |  | 
      |     STDMETHOD(HandleMenuMsg2)(THIS_ |   |  | 
      |                              UINT uMsg, |   |  | 
      |                              WPARAM wParam, |   |  | 
      |                              LPARAM lParam, |   |  | 
      |                              LRESULT* plResult) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IContextMenu3 * LPCONTEXTMENU3; |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0500) |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IPersistFolder3 |   |  | 
       |   |  | 
      | #define CSIDL_FLAG_PFTI_TRACKTARGET CSIDL_FLAG_DONT_VERIFY |   |  | 
       |   |  | 
      | // DESCRIPTION: PERSIST_FOLDER_TARGET_INFO |   |  | 
      | //    This stucture is used for Folder Shortcuts which allow the shell to |   |  | 
      | // have a file system folder act like another area in the name space. |   |  | 
      | // One of pidlTargetFolder, szTargetParsingName, or csidl needs to |   |  | 
      | // specify the destination name space. |   |  | 
      | // |   |  | 
      | // pidlTargetFolder: This is a full pidl to the target folder.  Can be NULL in t |   |  | 
      | he IPersistFolder3::InitializeEx() |   |  | 
      | //                   call but not in the GetFolderTargetInfo() return structure. |   |  | 
      | // szTargetParsingName: Empty string if not specified. Ortherwise, it is the par |   |  | 
      | sible name |   |  | 
      | //                       to the target.  This name can be parsed by IShellFolder |   |  | 
      | :: |   |  | 
      | //                       ParsedName() from the desktop. |   |  | 
      | // szNetworkProvider: Can be an empty string.  If not empty, it specifies the ty |   |  | 
      | pe of network |   |  | 
      | //                    provider that will be used when binding to the target.  Th |   |  | 
      | is is used |   |  | 
      | //                    for performance optimizations for the WNet APIs. |   |  | 
      | // dwAttributes: -1 if not known.  These are the SFGAO_ flags for IShellFolder:: |   |  | 
      | GetAttributesOf() |   |  | 
      | // csidl: This is -1 if it's not used.  This can be used instead of pidlTargetFo |   |  | 
      | lder or |   |  | 
      | //        szTargetParsingName to indicate the TargetFolder.  See the list of CSI |   |  | 
      | DL_ folders |   |  | 
      | //        below.  CSIDL_FLAG_PFTI_TRACKTARGET means that the IShellFolder's targ |   |  | 
      | et folder |   |  | 
      | //        should change if the user changes the target of the underlying CSIDL v |   |  | 
      | alue. |   |  | 
      | //        You can also pass CSIDL_FLAG_CREATE to indicate that the target folder |   |  | 
      | //        should be created if it does not exist.  No other CSIDL_FLAG_* values  |   |  | 
      | are supported. |   |  | 
       |   |  | 
      | #include <pshpack8.h> |   |  | 
       |   |  | 
      | typedef struct |   |  | 
      | { |   |  | 
      |     LPITEMIDLIST  pidlTargetFolder;               // pidl for the folder we want |   |  | 
      |  to intiailize |   |  | 
      |     WCHAR         szTargetParsingName[MAX_PATH];  // optional parsing name for t |   |  | 
      | he target |   |  | 
      |     WCHAR         szNetworkProvider[MAX_PATH];    // optional network provider |   |  | 
      |     DWORD         dwAttributes;                   // optional FILE_ATTRIBUTES_ f |   |  | 
      | lags (-1 if not used) |   |  | 
      |     int           csidl;                          // optional folder index (SHGe |   |  | 
      | tFolderPath()) -1 if not used |   |  | 
      | } PERSIST_FOLDER_TARGET_INFO; |   |  | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   |  | 
       |   |  | 
      | // DESCRIPTION: IPersistFolder3 |   |  | 
      | //    This interface is implemented by an IShellFolder object that wants non-def |   |  | 
      | ault |   |  | 
      | // handling of Folder Shortcuts.  In general, shell name space extensions should |   |  | 
      |  use |   |  | 
      | // pidlRoot (the alias pidl) as their location in the name space and pass it to  |   |  | 
      | public |   |  | 
      | // APIs, such as ShellExecute().  The one exception is that pidlTarget should be |   |  | 
      |  used |   |  | 
      | // when sending ChangeNotifies or registering to listen for change notifies |   |  | 
      | // (see SFVM_GETNOTIFY). |   |  | 
      | // |   |  | 
      | // InitializeEx: This method initializes an IShellFolder and specifies where |   |  | 
      | //               it is rooted in the name space. |   |  | 
      | //      pbc: May be NULL. |   |  | 
      | //      pidlRoot: This is the same parameter as IPersistFolder::Initialize(). Ca |   |  | 
      | ller allocates |   |  | 
      | //                and frees this parameter. |   |  | 
      | //      ppfti: May be NULL, in which case this is the same as a call to IPersist |   |  | 
      | Folder::Initialize(). |   |  | 
      | //             Otherwise this is a Folder Shortcut and this structure specifies  |   |  | 
      | the target |   |  | 
      | //             folder and it's attributes. |   |  | 
      | // GetFolderTargetInfo: This is used by the caller to find information about |   |  | 
      | //             the folder shortcut.  This structure may not be initialized by th |   |  | 
      | e caller, |   |  | 
      | //             so the callee needs to initialize every member.  The callee alloc |   |  | 
      | ates |   |  | 
      | //             pidlTargetFolder and the caller will free it.  Filling in pidlTar |   |  | 
      | getFolder is |   |  | 
      | //             ALWAYS required. |   |  | 
      | DECLARE_INTERFACE_(IPersistFolder3, IPersistFolder2) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef)(THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release)(THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IPersist methods *** |   |  | 
      |     STDMETHOD(GetClassID)(THIS_ LPCLSID lpClassID) PURE; |   |  | 
       |   |  | 
      |     // *** IPersistFolder methods *** |   |  | 
      |     STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST pidl) PURE; |   |  | 
       |   |  | 
      |     // *** IPersistFolder2 methods *** |   |  | 
      |     STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST *ppidl) PURE; |   |  | 
       |   |  | 
      |     // *** IPersistFolder3 methods *** |   |  | 
      |     STDMETHOD(InitializeEx)(THIS_ IBindCtx *pbc, LPCITEMIDLIST pidlRoot, const P |   |  | 
      | ERSIST_FOLDER_TARGET_INFO *ppfti) PURE; |   |  | 
      |     STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO *ppfti) PURE |   |  | 
      | ; |   |  | 
      | }; |   |  | 
       |   |  | 
      | #endif |   |  | 
      |                                                                                  |   |  | 
      | // |   |  | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IExtractIcon interface |   | // IExtractIcon interface | 
      | // |   | // | 
      | //  This interface is used in two different places in the shell. |   | //  This interface is used in two different places in the shell. | 
      | // |   | // | 
      | // Case-1: Icons of sub-folders for the scope-pane of the explorer. |   | // Case-1: Icons of sub-folders for the scope-pane of the explorer. | 
      | // |   | // | 
      | //  It is used by the explorer to get the "icon location" of |   | //  It is used by the explorer to get the "icon location" of | 
       |   |  | 
      | skipping to change at line 626 |   | skipping to change at line 147 | 
      | // Case-2: Extracting an icon image from a file |   | // Case-2: Extracting an icon image from a file | 
      | // |   | // | 
      | //  It is used by the shell when it extracts an icon image |   | //  It is used by the shell when it extracts an icon image | 
      | // from a file. When the shell is extracting an icon from a file, |   | // from a file. When the shell is extracting an icon from a file, | 
      | // it does following: |   | // it does following: | 
      | //  (1) creates the icon extraction handler object (by getting its CLSID |   | //  (1) creates the icon extraction handler object (by getting its CLSID | 
      | //     under the {ProgID}\shell\ExtractIconHanler key and calling |   | //     under the {ProgID}\shell\ExtractIconHanler key and calling | 
      | //     CoCreateInstance requesting for IExtractIcon interface). |   | //     CoCreateInstance requesting for IExtractIcon interface). | 
      | //  (2) Calls IExtractIcon::GetIconLocation. |   | //  (2) Calls IExtractIcon::GetIconLocation. | 
      | //  (3) Then, calls IExtractIcon::ExtractIcon with the location/index pair. |   | //  (3) Then, calls IExtractIcon::ExtractIcon with the location/index pair. | 
       | 
      | //  (4) If (3) returns NOERROR, it uses the returned icon. |   | //  (4) If (3) returns S_OK, it uses the returned icon. | 
      | //  (5) Otherwise, it recursively calls this logic with new location |   | //  (5) Otherwise, it recursively calls this logic with new location | 
      | //     assuming that the location string contains a fully qualified path name. |   | //     assuming that the location string contains a fully qualified path name. | 
      | // |   | // | 
      | //  From extension programmer's point of view, there are only two cases |   | //  From extension programmer's point of view, there are only two cases | 
      | // where they provide implementations of IExtractIcon: |   | // where they provide implementations of IExtractIcon: | 
      | //  Case-1) providing explorer extensions (i.e., IShellFolder). |   | //  Case-1) providing explorer extensions (i.e., IShellFolder). | 
      | //  Case-2) providing per-instance icons for some types of files. |   | //  Case-2) providing per-instance icons for some types of files. | 
      | // |   | // | 
      | // Because Case-1 is described above, we'll explain only Case-2 here. |   | // Because Case-1 is described above, we'll explain only Case-2 here. | 
      | // |   | // | 
       |   |  | 
      | skipping to change at line 671 |   | skipping to change at line 192 | 
      | // |   | // | 
      | //  This function returns an icon location. |   | //  This function returns an icon location. | 
      | // |   | // | 
      | //  Parameters: |   | //  Parameters: | 
      | //   uFlags     [in]  -- Specifies if it is opened or not (GIL_OPENICON or 0) |   | //   uFlags     [in]  -- Specifies if it is opened or not (GIL_OPENICON or 0) | 
      | //   szIconFile [out] -- Specifies the string buffer buffer for a location name. |   | //   szIconFile [out] -- Specifies the string buffer buffer for a location name. | 
      | //   cchMax     [in]  -- Specifies the size of szIconFile (almost always MAX_PAT
H) |   | //   cchMax     [in]  -- Specifies the size of szIconFile (almost always MAX_PAT
H) | 
      | //   piIndex    [out] -- Sepcifies the address of UINT for the index. |   | //   piIndex    [out] -- Sepcifies the address of UINT for the index. | 
      | //   pwFlags    [out] -- Returns GIL_* flags |   | //   pwFlags    [out] -- Returns GIL_* flags | 
      | //  Returns: |   | //  Returns: | 
       | 
      | //   NOERROR, if it returns a valid location; S_FALSE, if the shell use a |   | //   S_OK, if it returns a valid location; S_FALSE, if the shell use a | 
      | //   default icon. |   | //   default icon. | 
      | // |   | // | 
      | //  Notes: The location may or may not be a path to a file. The caller can |   | //  Notes: The location may or may not be a path to a file. The caller can | 
      | //   not assume anything unless the subsequent Extract member call returns |   | //   not assume anything unless the subsequent Extract member call returns | 
      | //   S_FALSE. |   | //   S_FALSE. | 
      | // |   | // | 
      | //   if the returned location is not a path to a file, GIL_NOTFILENAME should |   | //   if the returned location is not a path to a file, GIL_NOTFILENAME should | 
      | //   be set in the returned flags. |   | //   be set in the returned flags. | 
      | // |   | // | 
      | // IExtractIcon::Extract |   | // IExtractIcon::Extract | 
       |   |  | 
      | skipping to change at line 694 |   | skipping to change at line 215 | 
      | // |   | // | 
      | //  Parameters: |   | //  Parameters: | 
      | //   pszFile [in] -- Specifies the icon location (typically a path to a file). |   | //   pszFile [in] -- Specifies the icon location (typically a path to a file). | 
      | //   nIconIndex [in] -- Specifies the icon index. |   | //   nIconIndex [in] -- Specifies the icon index. | 
      | //   phiconLarge [out] -- Specifies the HICON variable for large icon. |   | //   phiconLarge [out] -- Specifies the HICON variable for large icon. | 
      | //   phiconSmall [out] -- Specifies the HICON variable for small icon. |   | //   phiconSmall [out] -- Specifies the HICON variable for small icon. | 
      | //   nIconSize [in] -- Specifies the size icon required (size of large icon) |   | //   nIconSize [in] -- Specifies the size icon required (size of large icon) | 
      | //                     LOWORD is the requested large icon size |   | //                     LOWORD is the requested large icon size | 
      | //                     HIWORD is the requested small icon size |   | //                     HIWORD is the requested small icon size | 
      | //  Returns: |   | //  Returns: | 
       | 
      | //   NOERROR, if it extracted the from the file. |   | //   S_OK, if it extracted the from the file. | 
      | //   S_FALSE, if the caller should extract from the file specified in the |   | //   S_FALSE, if the caller should extract from the file specified in the | 
      | //           location. |   | //           location. | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | // GetIconLocation() input flags |   | // GetIconLocation() input flags | 
       |   |  | 
       | 
      | #define GIL_OPENICON     0x0001      // allows containers to specify an "open" l |   | #define GIL_OPENICON      0x0001            // allows containers to specify an " | 
      | ook |   | open" look | 
      | #define GIL_FORSHELL     0x0002      // icon is to be displayed in a ShellFolder |   | #define GIL_FORSHELL      0x0002            // icon is to be displayed in a Shel | 
      | #define GIL_ASYNC        0x0020      // this is an async extract, return E_PENDI |   | lFolder | 
      | NG |   | #define GIL_ASYNC         0x0020            // this is an async extract, return  | 
      | #define GIL_DEFAULTICON  0x0040      // get the default icon location if the fin |   | E_PENDING | 
      | al one takes too long to get |   | #define GIL_DEFAULTICON   0x0040            // get the default icon location if  | 
      | #define GIL_FORSHORTCUT  0x0080      // the icon is for a shortcut to the object |   | the final one takes too long to get | 
       |   | #define GIL_FORSHORTCUT   0x0080            // the icon is for a shortcut to the | 
       |   |  object | 
       |   | #define GIL_CHECKSHIELD   0x0200            // return GIL_SHIELD or GIL_FORCENOS | 
       |   | HIELD, don't block if GIL_ASYNC is set | 
       |   |  | 
      | // GetIconLocation() return flags |   | // GetIconLocation() return flags | 
       |   |  | 
       | 
      | #define GIL_SIMULATEDOC  0x0001      // simulate this document icon for this |   | #define GIL_SIMULATEDOC   0x0001      // simulate this document icon for this | 
      | #define GIL_PERINSTANCE  0x0002      // icons from this class are per instance ( |   | #define GIL_PERINSTANCE   0x0002      // icons from this class are per instance  | 
      | each file has its own) |   | (each file has its own) | 
      | #define GIL_PERCLASS     0x0004      // icons from this class per class (shared  |   | #define GIL_PERCLASS      0x0004      // icons from this class per class (shared | 
      | for all files of this type) |   |  for all files of this type) | 
      | #define GIL_NOTFILENAME  0x0008      // location is not a filename, must call :: |   | #define GIL_NOTFILENAME   0x0008      // location is not a filename, must call : | 
      | ExtractIcon |   | :ExtractIcon | 
      | #define GIL_DONTCACHE    0x0010      // this icon should not be cached |   | #define GIL_DONTCACHE     0x0010      // this icon should not be cached | 
       |   | #define GIL_SHIELD        0x0200      // icon should be "stamped" with the LUA s | 
       |   | hield | 
       |   | #define GIL_FORCENOSHIELD 0x0400      // icon must *not* be "stamped" with the L | 
       |   | UA shield | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IExtractIconA |   | #define INTERFACE   IExtractIconA | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IExtractIconA, IUnknown)     // exic |   | DECLARE_INTERFACE_IID_(IExtractIconA, IUnknown, "000214eb-0000-0000-c000-0000000
00046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IExtractIcon methods *** |   |     // *** IExtractIcon methods *** | 
      |     STDMETHOD(GetIconLocation)(THIS_ |   |     STDMETHOD(GetIconLocation)(THIS_ | 
       | 
      |                          UINT   uFlags, |   |                                UINT   uFlags, | 
      |                          LPSTR  szIconFile, |   |           __out_ecount(cchMax) LPSTR  szIconFile, | 
      |                          UINT   cchMax, |   |                                UINT   cchMax, | 
      |                          int   * piIndex, |   |                          __out int   * piIndex, | 
      |                          UINT  * pwFlags) PURE; |   |                          __out UINT  * pwFlags) PURE; | 
       |   |  | 
      |     STDMETHOD(Extract)(THIS_ |   |     STDMETHOD(Extract)(THIS_ | 
       | 
      |                            LPCSTR pszFile, |   |                        LPCSTR  pszFile, | 
      |                            UINT   nIconIndex, |   |                        UINT    nIconIndex, | 
      |                            HICON   *phiconLarge, |   |              __out_opt HICON   *phiconLarge, | 
      |                            HICON   *phiconSmall, |   |              __out_opt HICON   *phiconSmall, | 
      |                            UINT    nIconSize) PURE; |   |                        UINT    nIconSize) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IExtractIconA * LPEXTRACTICONA; |   | typedef IExtractIconA * LPEXTRACTICONA; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IExtractIconW |   | #define INTERFACE   IExtractIconW | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IExtractIconW, IUnknown)     // exic |   | DECLARE_INTERFACE_IID_(IExtractIconW, IUnknown, "000214fa-0000-0000-c000-0000000
00046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IExtractIcon methods *** |   |     // *** IExtractIcon methods *** | 
      |     STDMETHOD(GetIconLocation)(THIS_ |   |     STDMETHOD(GetIconLocation)(THIS_ | 
       | 
      |                          UINT   uFlags, |   |                                UINT   uFlags, | 
      |                          LPWSTR szIconFile, |   |           __out_ecount(cchMax) LPWSTR pszIconFile, | 
      |                          UINT   cchMax, |   |                                UINT   cchMax, | 
      |                          int   * piIndex, |   |                          __out int   * piIndex, | 
      |                          UINT  * pwFlags) PURE; |   |                          __out UINT  * pwFlags) PURE; | 
       |   |  | 
      |     STDMETHOD(Extract)(THIS_ |   |     STDMETHOD(Extract)(THIS_ | 
       | 
      |                            LPCWSTR pszFile, |   |                        LPCWSTR pszFile, | 
      |                            UINT   nIconIndex, |   |                        UINT    nIconIndex, | 
      |                            HICON   *phiconLarge, |   |              __out_opt HICON   *phiconLarge, | 
      |                            HICON   *phiconSmall, |   |              __out_opt HICON   *phiconSmall, | 
      |                            UINT    nIconSize) PURE; |   |                        UINT    nIconSize) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IExtractIconW * LPEXTRACTICONW; |   | typedef IExtractIconW * LPEXTRACTICONW; | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define IExtractIcon        IExtractIconW |   | #define IExtractIcon        IExtractIconW | 
      | #define IExtractIconVtbl    IExtractIconWVtbl |   | #define IExtractIconVtbl    IExtractIconWVtbl | 
      | #define LPEXTRACTICON       LPEXTRACTICONW |   | #define LPEXTRACTICON       LPEXTRACTICONW | 
      | #else |   | #else | 
      | #define IExtractIcon        IExtractIconA |   | #define IExtractIcon        IExtractIconA | 
      | #define IExtractIconVtbl    IExtractIconAVtbl |   | #define IExtractIconVtbl    IExtractIconAVtbl | 
      | #define LPEXTRACTICON       LPEXTRACTICONA |   | #define LPEXTRACTICON       LPEXTRACTICONA | 
      | #endif |   | #endif | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
       | 
      | // IShellIcon Interface |   |  | 
      | // |   |  | 
      | // used to get a icon index for a IShellFolder object. |   |  | 
      | // |   |  | 
      | // this interface can be implemented by a IShellFolder, as a quick way to |   |  | 
      | // return the icon for a object in the folder. |   |  | 
      | // |   |  | 
      | // a instance of this interface is only created once for the folder, unlike |   |  | 
      | // IExtractIcon witch is created once for each object. |   |  | 
      | // |   |  | 
      | // if a ShellFolder does not implement this interface, the standard |   |  | 
      | // GetUIObject(....IExtractIcon) method will be used to get a icon |   |  | 
      | // for all objects. |   |  | 
      | // |   |  | 
      | // the following standard imagelist indexs can be returned: |   |  | 
      | // |   |  | 
      | //      0   document (blank page) (not associated) |   |  | 
      | //      1   document (with stuff on the page) |   |  | 
      | //      2   application (exe, com, bat) |   |  | 
      | //      3   folder (plain) |   |  | 
      | //      4   folder (open) |   |  | 
      | // |   |  | 
      | // IShellIcon:GetIconOf(pidl, flags, lpIconIndex) |   |  | 
      | // |   |  | 
      | //      pidl            object to get icon for. |   |  | 
      | //      flags           GIL_* input flags (GIL_OPEN, ...) |   |  | 
      | //      lpIconIndex     place to return icon index. |   |  | 
      | // |   |  | 
      | //  returns: |   |  | 
      | //      NOERROR, if lpIconIndex contains the correct system imagelist index. |   |  | 
      | //      S_FALSE, if unable to get icon for this object, go through |   |  | 
      | //               GetUIObject, IExtractIcon, methods. |   |  | 
      | // |   |  | 
      | //=========================================================================== |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IShellIcon |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IShellIcon, IUnknown)      // shi |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IShellIcon methods *** |   |  | 
      |     STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags, |   |  | 
      |                     LPINT lpIconIndex) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IShellIcon *LPSHELLICON; |   |  | 
       |   |  | 
      | //=========================================================================== |   |  | 
      | // |   |  | 
      | // IShellIconOverlayIdentifier |   | // IShellIconOverlayIdentifier | 
      | // |   | // | 
      | // Used to identify a file as a member of the group of files that have this spec
ific |   | // Used to identify a file as a member of the group of files that have this spec
ific | 
      | // icon overlay |   | // icon overlay | 
      | // |   | // | 
      | // Users can create new IconOverlayIdentifiers and place them in the following r
egistry |   | // Users can create new IconOverlayIdentifiers and place them in the following r
egistry | 
      | // location together with the Icon overlay image and their priority. |   | // location together with the Icon overlay image and their priority. | 
      | // HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\ShellIconOv
erlayIdentifiers" |   | // HKEY_LOCAL_MACHINE "Software\\Microsoft\\Windows\\CurrentVersion\\ShellIconOv
erlayIdentifiers" | 
      | // |   | // | 
      | // The shell will enumerate through all IconOverlayIdentifiers at start, and pri
oritize |   | // The shell will enumerate through all IconOverlayIdentifiers at start, and pri
oritize | 
       |   |  | 
      | skipping to change at line 873 |   | skipping to change at line 343 | 
      | //      dwFlags        defined below |   | //      dwFlags        defined below | 
      | // |   | // | 
      | // IShellIconOverlayIdentifier::GetPriority(int * pIPriority) PURE; |   | // IShellIconOverlayIdentifier::GetPriority(int * pIPriority) PURE; | 
      | //      pIPriority     the priority of this Overlay Identifier |   | //      pIPriority     the priority of this Overlay Identifier | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellIconOverlayIdentifier |   | #define INTERFACE   IShellIconOverlayIdentifier | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellIconOverlayIdentifier, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellIconOverlayIdentifier, IUnknown, "0c6c4200-c589-11d
0-999a-00c04fd655e1") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellIconOverlayIdentifier methods *** |   |     // *** IShellIconOverlayIdentifier methods *** | 
      |     STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE; |   |     STDMETHOD (IsMemberOf)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib) PURE; | 
       | 
      |     STDMETHOD (GetOverlayInfo)(THIS_ LPWSTR pwszIconFile, int cchMax, int * pInd |   |     STDMETHOD (GetOverlayInfo)(THIS_ __out_ecount(cchMax) LPWSTR pwszIconFile, i | 
      | ex, DWORD * pdwFlags) PURE; |   | nt cchMax, __out int * pIndex, __out DWORD * pdwFlags) PURE; | 
      |     STDMETHOD (GetPriority)(THIS_ int * pIPriority) PURE; |   |     STDMETHOD (GetPriority)(THIS_ __out int * pIPriority) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #define ISIOI_ICONFILE            0x00000001          // path is returned throug
h pwszIconFile |   | #define ISIOI_ICONFILE            0x00000001          // path is returned throug
h pwszIconFile | 
      | #define ISIOI_ICONINDEX           0x00000002          // icon index in pwszIconF
ile is returned through pIndex |   | #define ISIOI_ICONINDEX           0x00000002          // icon index in pwszIconF
ile is returned through pIndex | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IShellIconOverlayManager |   | // IShellIconOverlayManager | 
      | // |   | // | 
      | // Used to return the icon overlay information including OverlayIndex, Image Ind
ex or Priority for an IShellFolder object. |   | // Used to return the icon overlay information including OverlayIndex, Image Ind
ex or Priority for an IShellFolder object. | 
       |   |  | 
      | skipping to change at line 919 |   | skipping to change at line 389 | 
      | //      It will reload the icons into the imagelist, when passed SIOM_ICONINDEX |   | //      It will reload the icons into the imagelist, when passed SIOM_ICONINDEX | 
      | // IShellIconOverlayManager::LoadNonloadedOverlayIdentifiers() |   | // IShellIconOverlayManager::LoadNonloadedOverlayIdentifiers() | 
      | //      This method loads any registered overlay identifiers (handlers) that |   | //      This method loads any registered overlay identifiers (handlers) that | 
      | //      are not currently loaded. |   | //      are not currently loaded. | 
      | // IShellIconOverlayManager::OverlayIndexFromImageIndex(int iImage, int *piIndex
, BOOL fAdd) |   | // IShellIconOverlayManager::OverlayIndexFromImageIndex(int iImage, int *piIndex
, BOOL fAdd) | 
      | //      iImage          existing shell image list index to look for |   | //      iImage          existing shell image list index to look for | 
      | //      piIndex         returned overlay index |   | //      piIndex         returned overlay index | 
      | //      fAdd            Add image if not already present? |   | //      fAdd            Add image if not already present? | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellIconOverlayManager |   | #define INTERFACE   IShellIconOverlayManager | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellIconOverlayManager, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellIconOverlayManager, IUnknown, "f10b5e34-dd3b-42a7-a
a7d-2f4ec54bb09b") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellIconOverlayManager methods *** |   |     // *** IShellIconOverlayManager methods *** | 
       | 
      |     STDMETHOD(GetFileOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, int *  |   |     STDMETHOD(GetFileOverlayInfo)(THIS_ __in LPCWSTR pwszPath, DWORD dwAttrib, _ | 
      | pIndex, DWORD dwflags) PURE; |   | _out int * pIndex, DWORD dwflags) PURE; | 
      |     STDMETHOD(GetReservedOverlayInfo)(THIS_ LPCWSTR pwszPath, DWORD dwAttrib, in |   |     STDMETHOD(GetReservedOverlayInfo)(THIS_ __in_opt LPCWSTR pwszPath, DWORD dwA | 
      | t * pIndex, DWORD dwflags, int iReservedID) PURE; |   | ttrib, __out int * pIndex, DWORD dwflags, int iReservedID) PURE; | 
      |     STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE; |   |     STDMETHOD(RefreshOverlayImages)(THIS_ DWORD dwFlags) PURE; | 
      |     STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE; |   |     STDMETHOD(LoadNonloadedOverlayIdentifiers)(THIS) PURE; | 
       | 
      |     STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, int * piIndex, BOOL 
fAdd) PURE; |   |     STDMETHOD(OverlayIndexFromImageIndex)(THIS_ int iImage, __out int * piIndex,
 BOOL fAdd) PURE; | 
      | }; |   | }; | 
       | 
       |   |                                                                                  | 
      | #define SIOM_OVERLAYINDEX         1 |   | #define SIOM_OVERLAYINDEX         1 | 
      | #define SIOM_ICONINDEX            2 |   | #define SIOM_ICONINDEX            2 | 
      | // #define SIOM_PRIORITY          3 |   | // #define SIOM_PRIORITY          3 | 
      | #define SIOM_RESERVED_SHARED      0 |   | #define SIOM_RESERVED_SHARED      0 | 
      | #define SIOM_RESERVED_LINK        1 |   | #define SIOM_RESERVED_LINK        1 | 
      | #define SIOM_RESERVED_SLOWFILE    2 |   | #define SIOM_RESERVED_SLOWFILE    2 | 
       | 
      | #endif  // (_WIN32_IE >= 0x0601) |   |  | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IShellIconOverlay |   | // IShellIconOverlay | 
      | // |   | // | 
      | // Used to return the icon overlay index or its icon index for an IShellFolder o
bject, |   | // Used to return the icon overlay index or its icon index for an IShellFolder o
bject, | 
      | // this is always implemented with IShellFolder |   | // this is always implemented with IShellFolder | 
      | // |   | // | 
      | // IShellIconOverlay:GetOverlayIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex) |   | // IShellIconOverlay:GetOverlayIndex(LPCITEMIDLIST pidl, DWORD * pdwIndex) | 
      | //      pidl            object to identify icon overlay for. |   | //      pidl            object to identify icon overlay for. | 
       |   |  | 
      | skipping to change at line 971 |   | skipping to change at line 440 | 
      | //  returns: |   | //  returns: | 
      | //      S_OK,  if the index of an Overlay is found |   | //      S_OK,  if the index of an Overlay is found | 
      | //      S_FALSE, if no Overlay exists for this file |   | //      S_FALSE, if no Overlay exists for this file | 
      | //      E_FAIL, if pidl is bad |   | //      E_FAIL, if pidl is bad | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellIconOverlay |   | #define INTERFACE   IShellIconOverlay | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellIconOverlay, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellIconOverlay, IUnknown, "7d688a70-c613-11d0-999b-00c
04fd655e1") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellIconOverlay methods *** |   |     // *** IShellIconOverlay methods *** | 
       | 
      |     STDMETHOD(GetOverlayIndex)(THIS_ LPCITEMIDLIST pidl, int * pIndex) PURE; |   |     STDMETHOD(GetOverlayIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIndex) | 
      |     STDMETHOD(GetOverlayIconIndex)(THIS_ LPCITEMIDLIST pidl, int * pIconIndex) P |   |  PURE; | 
      | URE; |   |     STDMETHOD(GetOverlayIconIndex)(THIS_ PCUITEMID_CHILD pidl, __inout int * pIc | 
       |   | onIndex) PURE; | 
      | }; |   | }; | 
       |   |  | 
       | 
       |   | #define OI_DEFAULT 0x00000000 | 
      | #define OI_ASYNC 0xFFFFEEEE |   | #define OI_ASYNC 0xFFFFEEEE | 
       |   |  | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // |   | // | 
      | // SHGetIconOverlayIndex |   | // SHGetIconOverlayIndex | 
      | // |   | // | 
      | // This function takes the path and icon/res id to the icon and convert it into |   | // This function takes the path and icon/res id to the icon and convert it into | 
      | // an overlay index in the system image list. |   | // an overlay index in the system image list. | 
      | // Note: there are totally only 15 slots for system image overlays, some of whic
h |   | // Note: there are totally only 15 slots for system image overlays, some of whic
h | 
      | // was reserved by the system, or taken by the overlayidentifiers, so it's possi
ble |   | // was reserved by the system, or taken by the overlayidentifiers, so it's possi
ble | 
       |   |  | 
      | skipping to change at line 1014 |   | skipping to change at line 484 | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetIconOverlayIndex  SHGetIconOverlayIndexW |   | #define SHGetIconOverlayIndex  SHGetIconOverlayIndexW | 
      | #else |   | #else | 
      | #define SHGetIconOverlayIndex  SHGetIconOverlayIndexA |   | #define SHGetIconOverlayIndex  SHGetIconOverlayIndexA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
       |   |  | 
      | // IShellLinkDataList::GetFlags()/SetFlags() |   | // IShellLinkDataList::GetFlags()/SetFlags() | 
      | typedef enum { |   | typedef enum { | 
       | 
      |    SLDF_HAS_ID_LIST         = 0x00000001,   // Shell link saved with ID list |   |     SLDF_HAS_ID_LIST                            = 0x00000001,   // Shell link sa | 
      |    SLDF_HAS_LINK_INFO       = 0x00000002,   // Shell link saved with LinkInfo |   | ved with ID list | 
      |    SLDF_HAS_NAME            = 0x00000004, |   |     SLDF_HAS_LINK_INFO                          = 0x00000002,   // Shell link sa | 
      |    SLDF_HAS_RELPATH         = 0x00000008, |   | ved with LinkInfo | 
      |    SLDF_HAS_WORKINGDIR      = 0x00000010, |   |     SLDF_HAS_NAME                               = 0x00000004, | 
      |    SLDF_HAS_ARGS            = 0x00000020, |   |     SLDF_HAS_RELPATH                            = 0x00000008, | 
      |    SLDF_HAS_ICONLOCATION    = 0x00000040, |   |     SLDF_HAS_WORKINGDIR                         = 0x00000010, | 
      |    SLDF_UNICODE             = 0x00000080,   // the strings are unicode |   |     SLDF_HAS_ARGS                               = 0x00000020, | 
      |    SLDF_FORCE_NO_LINKINFO   = 0x00000100,   // don't create a LINKINFO (make a d |   |     SLDF_HAS_ICONLOCATION                       = 0x00000040, | 
      | umb link) |   |     SLDF_UNICODE                                = 0x00000080,   // the strings a | 
      |    SLDF_HAS_EXP_SZ          = 0x00000200,   // the link contains expandable env  |   | re unicode | 
      | strings |   |     SLDF_FORCE_NO_LINKINFO                      = 0x00000100,   // disable LINKI | 
      |    SLDF_RUN_IN_SEPARATE     = 0x00000400,   // Run the 16-bit target exe in a se |   | NFO tracking information (used to track network drives and compute UNC paths if  | 
      | parate VDM/WOW |   | one exists) | 
      |    SLDF_HAS_LOGO3ID         = 0x00000800,   // this link is a special Logo3/MSIC |   |     SLDF_HAS_EXP_SZ                             = 0x00000200,   // the link cont | 
      | D link |   | ains expandable env strings | 
      |    SLDF_HAS_DARWINID        = 0x00001000,   // this link is a special Darwin lin |   |     SLDF_RUN_IN_SEPARATE                        = 0x00000400,   // Run the 16-bi | 
      | k |   | t target exe in a separate VDM/WOW | 
      |    SLDF_RUNAS_USER          = 0x00002000,   // Run this link as a different user |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      |    SLDF_HAS_EXP_ICON_SZ     = 0x00004000,   // contains expandable env string fo |   |     SLDF_HAS_LOGO3ID                            = 0x00000800,   // not used anym | 
      | r icon path |   | ore | 
      |    SLDF_NO_PIDL_ALIAS       = 0x00008000,   // don't ever resolve to a logical l |   | #endif | 
      | ocation |   |     SLDF_HAS_DARWINID                           = 0x00001000,   // MSI (Darwin)  | 
      |    SLDF_FORCE_UNCNAME       = 0x00010000,   // make GetPath() prefer the UNC nam |   | link that can be installed on demand | 
      | e to the local name |   |     SLDF_RUNAS_USER                             = 0x00002000,   // Run target as | 
      |    SLDF_RUN_WITH_SHIMLAYER  = 0x00020000,   // Launch the target of this link w/ |   |  a different user | 
      |  shim layer active |   |     SLDF_HAS_EXP_ICON_SZ                        = 0x00004000,   // contains expa | 
      |    SLDF_RESERVED            = 0x80000000,   // Reserved-- so we can use the low  |   | ndable env string for icon path | 
      | word as an index value in the future |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
       |   |     SLDF_NO_PIDL_ALIAS                          = 0x00008000,   // disable IDLis | 
       |   | t alias mapping when parsing the IDList from the path | 
       |   |     SLDF_FORCE_UNCNAME                          = 0x00010000,   // make GetPath( | 
       |   | ) prefer the UNC name to the local name | 
       |   |     SLDF_RUN_WITH_SHIMLAYER                     = 0x00020000,   // activate targ | 
       |   | et of this link with shim layer active | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     SLDF_FORCE_NO_LINKTRACK                     = 0x00040000,   // disable Objec | 
       |   | tID tracking information | 
       |   |     SLDF_ENABLE_TARGET_METADATA                 = 0x00080000,   // enable cachin | 
       |   | g of target metadata into link | 
       |   |     SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING  = 0x00200000,   // disable Known | 
       |   | Folder tracking information (EXP_KNOWN_FOLDER) | 
       |   |     SLDF_VALID                                  = 0x003FF7FF,   // bits that are | 
       |   |  valid for ::SetFlags() | 
       |   | #endif | 
       |   |     SLDF_RESERVED                               = 0x80000000,   // Reserved-- so | 
       |   |  we can use the low word as an index value in the future | 
       |   | #endif | 
      | } SHELL_LINK_DATA_FLAGS; |   | } SHELL_LINK_DATA_FLAGS; | 
       |   |  | 
       | 
       |   | #if !defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER >= 1200) | 
       |   | #pragma warning(push) | 
       |   | #pragma warning(disable:4201) /* nonstandard extension used : nameless struct/un | 
       |   | ion */ | 
       |   | #endif | 
       |   |                                                                                  | 
      | typedef struct tagDATABLOCKHEADER |   | typedef struct tagDATABLOCKHEADER | 
      | { |   | { | 
      |     DWORD   cbSize;             // Size of this extra data block |   |     DWORD   cbSize;             // Size of this extra data block | 
      |     DWORD   dwSignature;        // signature of this extra data block |   |     DWORD   dwSignature;        // signature of this extra data block | 
      | } DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; |   | } DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST; | 
       |   |  | 
      | typedef struct { |   | typedef struct { | 
      | #ifdef __cplusplus |   | #ifdef __cplusplus | 
      |     DATABLOCK_HEADER dbh; |   |     DATABLOCK_HEADER dbh; | 
      | #else |   | #else | 
       |   |  | 
      | skipping to change at line 1092 |   | skipping to change at line 577 | 
      | typedef struct { |   | typedef struct { | 
      | #ifdef __cplusplus |   | #ifdef __cplusplus | 
      |     DATABLOCK_HEADER dbh; |   |     DATABLOCK_HEADER dbh; | 
      | #else |   | #else | 
      |     DATABLOCK_HEADER; |   |     DATABLOCK_HEADER; | 
      | #endif |   | #endif | 
      |     CHAR        szDarwinID[MAX_PATH];  // ANSI darwin ID associated with link |   |     CHAR        szDarwinID[MAX_PATH];  // ANSI darwin ID associated with link | 
      |     WCHAR       szwDarwinID[MAX_PATH]; // UNICODE darwin ID associated with link |   |     WCHAR       szwDarwinID[MAX_PATH]; // UNICODE darwin ID associated with link | 
      | } EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK; |   | } EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK; | 
      | #define EXP_DARWIN_ID_SIG       0xA0000006 |   | #define EXP_DARWIN_ID_SIG       0xA0000006 | 
       | 
      | #define EXP_LOGO3_ID_SIG        0xA0000007 |   | #endif | 
       |   |  | 
       |   | #if !defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER >= 1200) | 
       |   | #pragma warning(pop) | 
      | #endif |   | #endif | 
       |   |  | 
      | #define EXP_SPECIAL_FOLDER_SIG         0xA0000005   // LPEXP_SPECIAL_FOLDER |   | #define EXP_SPECIAL_FOLDER_SIG         0xA0000005   // LPEXP_SPECIAL_FOLDER | 
       |   |  | 
      | typedef struct |   | typedef struct | 
      | { |   | { | 
      |     DWORD       cbSize;             // Size of this extra data block |   |     DWORD       cbSize;             // Size of this extra data block | 
      |     DWORD       dwSignature;        // signature of this extra data block |   |     DWORD       dwSignature;        // signature of this extra data block | 
      |     DWORD       idSpecialFolder;    // special folder id this link points into |   |     DWORD       idSpecialFolder;    // special folder id this link points into | 
      |     DWORD       cbOffset;           // ofset into pidl from SLDF_HAS_ID_LIST for
 child |   |     DWORD       cbOffset;           // ofset into pidl from SLDF_HAS_ID_LIST for
 child | 
       |   |  | 
      | skipping to change at line 1115 |   | skipping to change at line 603 | 
      | typedef struct |   | typedef struct | 
      | { |   | { | 
      |     DWORD       cbSize;             // Size of this extra data block |   |     DWORD       cbSize;             // Size of this extra data block | 
      |     DWORD       dwSignature;        // signature of this extra data block |   |     DWORD       dwSignature;        // signature of this extra data block | 
      |     CHAR        szTarget[ MAX_PATH ];   // ANSI target name w/EXP_SZ in it |   |     CHAR        szTarget[ MAX_PATH ];   // ANSI target name w/EXP_SZ in it | 
      |     WCHAR       swzTarget[ MAX_PATH ];  // UNICODE target name w/EXP_SZ in it |   |     WCHAR       swzTarget[ MAX_PATH ];  // UNICODE target name w/EXP_SZ in it | 
      | } EXP_SZ_LINK, *LPEXP_SZ_LINK; |   | } EXP_SZ_LINK, *LPEXP_SZ_LINK; | 
      | #define EXP_SZ_LINK_SIG                0xA0000001   // LPEXP_SZ_LINK (target) |   | #define EXP_SZ_LINK_SIG                0xA0000001   // LPEXP_SZ_LINK (target) | 
      | #define EXP_SZ_ICON_SIG                0xA0000007   // LPEXP_SZ_LINK (icon) |   | #define EXP_SZ_ICON_SIG                0xA0000007   // LPEXP_SZ_LINK (icon) | 
       |   |  | 
       | 
      | #undef  INTERFACE |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
      | #define INTERFACE IShellLinkDataList |   | typedef struct | 
       |   |  | 
      | DECLARE_INTERFACE_(IShellLinkDataList, IUnknown) |   |  | 
      | { |   | { | 
       | 
      |     // *** IUnknown methods *** |   |     DWORD       cbSize;             // Size of this extra data block | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     DWORD       dwSignature;        // signature of this extra data block | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     BYTE abPropertyStorage[1]; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   | } EXP_PROPERTYSTORAGE; | 
       |   | #define EXP_PROPERTYSTORAGE_SIG     0xA0000009 | 
      |     // *** IShellLinkDataList methods *** |   | #endif | 
      |     STDMETHOD(AddDataBlock)(THIS_ void * pDataBlock) PURE; |   |  | 
      |     STDMETHOD(CopyDataBlock)(THIS_ DWORD dwSig, void **ppDataBlock) PURE; |   |  | 
      |     STDMETHOD(RemoveDataBlock)(THIS_ DWORD dwSig) PURE; |   |  | 
      |     STDMETHOD(GetFlags)(THIS_ DWORD *pdwFlags) PURE; |   |  | 
      |     STDMETHOD(SetFlags)(THIS_ DWORD dwFlags) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | #endif // (_WIN32_IE >= 0x0400) |   | #endif // (_WIN32_IE >= 0x0400) | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE IResolveShellLink |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IResolveShellLink, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IResolveShellLink methods *** |   |  | 
      |     STDMETHOD(ResolveShellLink)(THIS_ IUnknown* punk, HWND hwnd, DWORD fFlags) P |   |  | 
      | URE; |   |  | 
      | }; |   |  | 
      | #endif // (_WIN32_IE >= 0x0500) |   |  | 
      |                                                                                  |   |  | 
      | #ifdef _INC_SHELLAPI    /* for LPSHELLEXECUTEINFO */ |   | #ifdef _INC_SHELLAPI    /* for LPSHELLEXECUTEINFO */ | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IShellExecuteHook Interface |   | // IShellExecuteHook Interface | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellExecuteHookA |   | #define INTERFACE   IShellExecuteHookA | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellExecuteHookA, IUnknown) // shexhk |   | DECLARE_INTERFACE_IID_(IShellExecuteHookA, IUnknown, "000214f5-0000-0000-c000-00
0000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellExecuteHookA methods *** |   |     // *** IShellExecuteHookA methods *** | 
       | 
      |     STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA pei) PURE; |   |     STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOA pei) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellExecuteHookW |   | #define INTERFACE   IShellExecuteHookW | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellExecuteHookW, IUnknown) // shexhk |   | DECLARE_INTERFACE_IID_(IShellExecuteHookW, IUnknown, "000214fb-0000-0000-c000-00
0000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellExecuteHookW methods *** |   |     // *** IShellExecuteHookW methods *** | 
       | 
      |     STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW pei) PURE; |   |     STDMETHOD(Execute)(THIS_ __inout LPSHELLEXECUTEINFOW pei) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define IShellExecuteHook       IShellExecuteHookW |   | #define IShellExecuteHook       IShellExecuteHookW | 
      | #define IShellExecuteHookVtbl   IShellExecuteHookWVtbl |   | #define IShellExecuteHookVtbl   IShellExecuteHookWVtbl | 
      | #else |   | #else | 
      | #define IShellExecuteHook       IShellExecuteHookA |   | #define IShellExecuteHook       IShellExecuteHookA | 
      | #define IShellExecuteHookVtbl   IShellExecuteHookAVtbl |   | #define IShellExecuteHookVtbl   IShellExecuteHookAVtbl | 
      | #endif |   | #endif | 
      | #endif |   | #endif | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IURLSearchHook Interface |   | // IURLSearchHook Interface | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IURLSearchHook |   | #define INTERFACE   IURLSearchHook | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IURLSearchHook, IUnknown) |   | DECLARE_INTERFACE_IID_(IURLSearchHook, IUnknown, "ac60f6a0-0fd9-11d0-99cb-00c04f
d64497") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IURLSearchHook methods *** |   |     // *** IURLSearchHook methods *** | 
       | 
      |     STDMETHOD(Translate)(THIS_ LPWSTR lpwszSearchURL, DWORD cchBufferSize) PURE; |   |     STDMETHOD(Translate)(THIS_ __out_ecount(cchBufferSize) LPWSTR lpwszSearchURL
, DWORD cchBufferSize) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   ISearchContext |   | #define INTERFACE   ISearchContext | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(ISearchContext, IUnknown) |   | DECLARE_INTERFACE_IID_(ISearchContext, IUnknown, "09F656A2-41AF-480C-88F7-16CC0D
164615") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** ISearchContext methods *** |   |     // *** ISearchContext methods *** | 
       | 
      |     STDMETHOD(GetSearchUrl)(THIS_ BSTR * pbstrSearchUrl) PURE; |   |     STDMETHOD(GetSearchUrl)(THIS_ __out BSTR * pbstrSearchUrl) PURE; | 
      |     STDMETHOD(GetSearchText)(THIS_ BSTR * pbstrSearchText) PURE; |   |     STDMETHOD(GetSearchText)(THIS_ __out BSTR * pbstrSearchText) PURE; | 
      |     STDMETHOD(GetSearchStyle)(THIS_ DWORD * pdwSearchStyle) PURE; |   |     STDMETHOD(GetSearchStyle)(THIS_ __out DWORD * pdwSearchStyle) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IURLSearchHook2 |   | #define INTERFACE   IURLSearchHook2 | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IURLSearchHook2, IURLSearchHook) |   | DECLARE_INTERFACE_IID_(IURLSearchHook2, IURLSearchHook, "5ee44da4-6d32-46e3-86bc
-07540dedd0e0") | 
      | { |   | { | 
      |     // *** IURLSearchHook2 methods *** |   |     // *** IURLSearchHook2 methods *** | 
       | 
      |     STDMETHOD(TranslateWithSearchContext)(THIS_ LPWSTR lpwszSearchURL, DWORD cch
BufferSize, ISearchContext * pSearchContext) PURE; |   |     STDMETHOD(TranslateWithSearchContext)(THIS_ __out_ecount(cchBufferSize) LPWS
TR lpwszSearchURL, DWORD cchBufferSize, __in_opt ISearchContext * pSearchContext
) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // INewShortcutHook Interface |   | // INewShortcutHook Interface | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   INewShortcutHookA |   | #define INTERFACE   INewShortcutHookA | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(INewShortcutHookA, IUnknown) // nshhk |   | DECLARE_INTERFACE_IID_(INewShortcutHookA, IUnknown, "000214e1-0000-0000-c000-000
000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** INewShortcutHook methods *** |   |     // *** INewShortcutHook methods *** | 
      |     STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE; |   |     STDMETHOD(SetReferent)(THIS_ LPCSTR pcszReferent, HWND hwnd) PURE; | 
       | 
      |     STDMETHOD(GetReferent)(THIS_ LPSTR pszReferent, int cchReferent) PURE; |   |     STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPSTR pszReferent, in
t cchReferent) PURE; | 
      |     STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE; |   |     STDMETHOD(SetFolder)(THIS_ LPCSTR pcszFolder) PURE; | 
       | 
      |     STDMETHOD(GetFolder)(THIS_ LPSTR pszFolder, int cchFolder) PURE; |   |     STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPSTR pszFolder, int cchF | 
      |     STDMETHOD(GetName)(THIS_ LPSTR pszName, int cchName) PURE; |   | older) PURE; | 
      |     STDMETHOD(GetExtension)(THIS_ LPSTR pszExtension, int cchExtension) PURE; |   |     STDMETHOD(GetName)(THIS_ __out_ecount(cchName) LPSTR pszName, int cchName) P | 
       |   | URE; | 
       |   |     STDMETHOD(GetExtension)(THIS_ __out_ecount(cchExtension) LPSTR pszExtension, | 
       |   |  int cchExtension) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   INewShortcutHookW |   | #define INTERFACE   INewShortcutHookW | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(INewShortcutHookW, IUnknown) // nshhk |   | DECLARE_INTERFACE_IID_(INewShortcutHookW, IUnknown, "000214f7-0000-0000-c000-000
000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** INewShortcutHook methods *** |   |     // *** INewShortcutHook methods *** | 
      |     STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE; |   |     STDMETHOD(SetReferent)(THIS_ LPCWSTR pcszReferent, HWND hwnd) PURE; | 
       | 
      |     STDMETHOD(GetReferent)(THIS_ LPWSTR pszReferent, int cchReferent) PURE; |   |     STDMETHOD(GetReferent)(THIS_ __out_ecount(cchReferent) LPWSTR pszReferent, i
nt cchReferent) PURE; | 
      |     STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE; |   |     STDMETHOD(SetFolder)(THIS_ LPCWSTR pcszFolder) PURE; | 
       | 
      |     STDMETHOD(GetFolder)(THIS_ LPWSTR pszFolder, int cchFolder) PURE; |   |     STDMETHOD(GetFolder)(THIS_ __out_ecount(cchFolder) LPWSTR pszFolder, int cch | 
      |     STDMETHOD(GetName)(THIS_ LPWSTR pszName, int cchName) PURE; |   | Folder) PURE; | 
      |     STDMETHOD(GetExtension)(THIS_ LPWSTR pszExtension, int cchExtension) PURE; |   |     STDMETHOD(GetName)(THIS_ __out_ecount(cchName) LPWSTR pszName, int cchName)  | 
       |   | PURE; | 
       |   |     STDMETHOD(GetExtension)(THIS_ __out_ecount(cchExtension) LPWSTR pszExtension | 
       |   | , int cchExtension) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define INewShortcutHook        INewShortcutHookW |   | #define INewShortcutHook        INewShortcutHookW | 
      | #define INewShortcutHookVtbl    INewShortcutHookWVtbl |   | #define INewShortcutHookVtbl    INewShortcutHookWVtbl | 
      | #else |   | #else | 
      | #define INewShortcutHook        INewShortcutHookA |   | #define INewShortcutHook        INewShortcutHookA | 
      | #define INewShortcutHookVtbl    INewShortcutHookAVtbl |   | #define INewShortcutHookVtbl    INewShortcutHookAVtbl | 
      | #endif |   | #endif | 
       |   |  | 
       |   |  | 
      | skipping to change at line 1322 |   | skipping to change at line 786 | 
      | //      wFunc - what operation is being done |   | //      wFunc - what operation is being done | 
      | //      wFlags - and flags (FOF_*) set in the initial call to the file operation |   | //      wFlags - and flags (FOF_*) set in the initial call to the file operation | 
      | //      pszSrcFile - name of the source file |   | //      pszSrcFile - name of the source file | 
      | //      dwSrcAttribs - file attributes of the source file |   | //      dwSrcAttribs - file attributes of the source file | 
      | //      pszDestFile - name of the destiation file (for move and renames) |   | //      pszDestFile - name of the destiation file (for move and renames) | 
      | //      dwDestAttribs - file attributes of the destination file |   | //      dwDestAttribs - file attributes of the destination file | 
      | // |   | // | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
       | 
      | #ifndef FO_MOVE //these need to be kept in sync with the ones in shellapi.h |   |  | 
       |   |  | 
      | // file operations |   |  | 
       |   |  | 
      | #define FO_MOVE           0x0001 |   |  | 
      | #define FO_COPY           0x0002 |   |  | 
      | #define FO_DELETE         0x0003 |   |  | 
      | #define FO_RENAME         0x0004 |   |  | 
       |   |  | 
      | #define FOF_MULTIDESTFILES         0x0001 |   |  | 
      | #define FOF_CONFIRMMOUSE           0x0002 |   |  | 
      | #define FOF_SILENT                 0x0004  // don't create progress/report |   |  | 
      | #define FOF_RENAMEONCOLLISION      0x0008 |   |  | 
      | #define FOF_NOCONFIRMATION         0x0010  // Don't prompt the user. |   |  | 
      | #define FOF_WANTMAPPINGHANDLE      0x0020  // Fill in SHFILEOPSTRUCT.hNameMappin |   |  | 
      | gs |   |  | 
      |                                       // Must be freed using SHFreeNameMappings |   |  | 
      | #define FOF_ALLOWUNDO              0x0040 |   |  | 
      | #define FOF_FILESONLY              0x0080  // on *.*, do only files |   |  | 
      | #define FOF_SIMPLEPROGRESS         0x0100  // means don't show names of files |   |  | 
      | #define FOF_NOCONFIRMMKDIR         0x0200  // don't confirm making any needed di |   |  | 
      | rs |   |  | 
      | #define FOF_NOERRORUI              0x0400  // don't put up error UI |   |  | 
      | #define FOF_NOCOPYSECURITYATTRIBS  0x0800  // dont copy NT file Security Attribu |   |  | 
      | tes |   |  | 
      | #define FOF_NORECURSION            0x1000  // don't recurse into directories. |   |  | 
      | #if (_WIN32_IE >= 0x500) |   |  | 
      | #define FOF_NO_CONNECTED_ELEMENTS  0x2000  // don't operate on connected file el |   |  | 
      | ements. |   |  | 
      | #define FOF_WANTNUKEWARNING        0x4000  // during delete operation, warn if n |   |  | 
      | uking instead of recycling (partially overrides FOF_NOCONFIRMATION) |   |  | 
      | #endif // _WIN32_IE >= 0x500 |   |  | 
      | #if (_WIN32_WINNT >= 0x0501) |   |  | 
      | #define FOF_NORECURSEREPARSE       0x8000  // treat reparse points as objects, n |   |  | 
      | ot containers |   |  | 
      | #endif // (_WIN32_WINNT >= 0x501) |   |  | 
       |   |  | 
      | typedef WORD FILEOP_FLAGS; |   |  | 
       |   |  | 
      | // printer operations |   |  | 
       |   |  | 
      | #define PO_DELETE       0x0013  // printer is being deleted |   |  | 
      | #define PO_RENAME       0x0014  // printer is being renamed |   |  | 
      | #define PO_PORTCHANGE   0x0020  // port this printer connected to is being chang |   |  | 
      | ed |   |  | 
      |                                 // if this id is set, the strings received by |   |  | 
      |                                 // the copyhook are a doubly-null terminated |   |  | 
      |                                 // list of strings.  The first is the printer |   |  | 
      |                                 // name and the second is the printer port. |   |  | 
      | #define PO_REN_PORT     0x0034  // PO_RENAME and PO_PORTCHANGE at same time. |   |  | 
       |   |  | 
      | // no POF_ flags currently defined |   |  | 
       |   |  | 
      | typedef UINT PRINTEROP_FLAGS; |   |  | 
       |   |  | 
      | #endif // FO_MOVE |   |  | 
      |                                                                                  |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   ICopyHookA |   | #define INTERFACE   ICopyHookA | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(ICopyHookA, IUnknown)        // sl |   | DECLARE_INTERFACE_IID_(ICopyHookA, IUnknown, "000214EF-0000-0000-c000-0000000000
46") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** ICopyHook methods *** |   |     // *** ICopyHook methods *** | 
      |     STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC
STR pszSrcFile, DWORD dwSrcAttribs, |   |     STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC
STR pszSrcFile, DWORD dwSrcAttribs, | 
      |                                    LPCSTR pszDestFile, DWORD dwDestAttribs) PURE
; |   |                                    LPCSTR pszDestFile, DWORD dwDestAttribs) PURE
; | 
      | }; |   | }; | 
       |   |  | 
      | typedef ICopyHookA *    LPCOPYHOOKA; |   | typedef ICopyHookA *    LPCOPYHOOKA; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   ICopyHookW |   | #define INTERFACE   ICopyHookW | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(ICopyHookW, IUnknown)        // sl |   | DECLARE_INTERFACE_IID_(ICopyHookW, IUnknown, "000214FC-0000-0000-c000-0000000000
46") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** ICopyHook methods *** |   |     // *** ICopyHook methods *** | 
      |     STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC
WSTR pszSrcFile, DWORD dwSrcAttribs, |   |     STDMETHOD_(UINT,CopyCallback) (THIS_ HWND hwnd, UINT wFunc, UINT wFlags, LPC
WSTR pszSrcFile, DWORD dwSrcAttribs, | 
      |                                    LPCWSTR pszDestFile, DWORD dwDestAttribs) PUR
E; |   |                                    LPCWSTR pszDestFile, DWORD dwDestAttribs) PUR
E; | 
      | }; |   | }; | 
       |   |  | 
      | typedef ICopyHookW *    LPCOPYHOOKW; |   | typedef ICopyHookW *    LPCOPYHOOKW; | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define ICopyHook       ICopyHookW |   | #define ICopyHook       ICopyHookW | 
      | #define ICopyHookVtbl   ICopyHookWVtbl |   | #define ICopyHookVtbl   ICopyHookWVtbl | 
      | #define LPCOPYHOOK      LPCOPYHOOKW |   | #define LPCOPYHOOK      LPCOPYHOOKW | 
      | #else |   | #else | 
      | #define ICopyHook       ICopyHookA |   | #define ICopyHook       ICopyHookA | 
      | #define ICopyHookVtbl   ICopyHookAVtbl |   | #define ICopyHookVtbl   ICopyHookAVtbl | 
      | #define LPCOPYHOOK      LPCOPYHOOKA |   | #define LPCOPYHOOK      LPCOPYHOOKA | 
      | #endif |   | #endif | 
       |   |  | 
       | 
       |   | // IFileViewer, IFileViewerSite not supported as of win2k | 
       |   | #if (NTDDI_VERSION < NTDDI_WIN2K) | 
       |   |                                                                                  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IFileViewerSite Interface |   | // IFileViewerSite Interface | 
      | // |   | // | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IFileViewerSite |   | #define INTERFACE   IFileViewerSite | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IFileViewerSite, IUnknown) |   | DECLARE_INTERFACE_IID_(IFileViewerSite, IUnknown, "000214f3-0000-0000-c000-00000
0000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IFileViewerSite methods *** |   |     // *** IFileViewerSite methods *** | 
      |     STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE; |   |     STDMETHOD(SetPinnedWindow) (THIS_ HWND hwnd) PURE; | 
       | 
      |     STDMETHOD(GetPinnedWindow) (THIS_ HWND *phwnd) PURE; |   |     STDMETHOD(GetPinnedWindow) (THIS_ __out HWND *phwnd) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IFileViewerSite * LPFILEVIEWERSITE; |   | typedef IFileViewerSite * LPFILEVIEWERSITE; | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // |   | // | 
      | // IFileViewer Interface |   | // IFileViewer Interface | 
      | // |   | // | 
      | // Implemented in a FileViewer component object.  Used to tell a |   | // Implemented in a FileViewer component object.  Used to tell a | 
      | // FileViewer to PrintTo or to view, the latter happening though |   | // FileViewer to PrintTo or to view, the latter happening though | 
       |   |  | 
      | skipping to change at line 1484 |   | skipping to change at line 901 | 
       |   |  | 
      | #define FVSIF_NEWFAILED 0x08000000      // The new file passed back failed |   | #define FVSIF_NEWFAILED 0x08000000      // The new file passed back failed | 
      |                                         // to be viewed. |   |                                         // to be viewed. | 
       |   |  | 
      | #define FVSIF_NEWFILE   0x80000000      // A new file to view has been returned |   | #define FVSIF_NEWFILE   0x80000000      // A new file to view has been returned | 
      | #define FVSIF_CANVIEWIT 0x40000000      // The viewer can view it. |   | #define FVSIF_CANVIEWIT 0x40000000      // The viewer can view it. | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IFileViewerA |   | #define INTERFACE   IFileViewerA | 
       |   |  | 
       | 
      | DECLARE_INTERFACE(IFileViewerA) |   | DECLARE_INTERFACE_IID(IFileViewerA, "000214f0-0000-0000-c000-000000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IFileViewer methods *** |   |     // *** IFileViewer methods *** | 
       | 
      |     STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE; |   |     STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE; | 
      |     STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE; |   |     STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE; | 
      |     STDMETHOD(PrintTo) (THIS_ LPSTR pszDriver, BOOL fSuppressUI) PURE; |   |     STDMETHOD(PrintTo) (THIS_ __in_opt LPSTR pszDriver, BOOL fSuppressUI) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IFileViewerA * LPFILEVIEWERA; |   | typedef IFileViewerA * LPFILEVIEWERA; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IFileViewerW |   | #define INTERFACE   IFileViewerW | 
       |   |  | 
       | 
      | DECLARE_INTERFACE(IFileViewerW) |   | DECLARE_INTERFACE_IID(IFileViewerW, "000214f8-0000-0000-c000-000000000046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IFileViewer methods *** |   |     // *** IFileViewer methods *** | 
       | 
      |     STDMETHOD(ShowInitialize) (THIS_ LPFILEVIEWERSITE lpfsi) PURE; |   |     STDMETHOD(ShowInitialize) (THIS_ __in LPFILEVIEWERSITE lpfsi) PURE; | 
      |     STDMETHOD(Show) (THIS_ LPFVSHOWINFO pvsi) PURE; |   |     STDMETHOD(Show) (THIS_ __in LPFVSHOWINFO pvsi) PURE; | 
      |     STDMETHOD(PrintTo) (THIS_ LPWSTR pszDriver, BOOL fSuppressUI) PURE; |   |     STDMETHOD(PrintTo) (THIS_ __in_opt LPWSTR pszDriver, BOOL fSuppressUI) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IFileViewerW * LPFILEVIEWERW; |   | typedef IFileViewerW * LPFILEVIEWERW; | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define IFileViewer IFileViewerW |   | #define IFileViewer IFileViewerW | 
      | #define LPFILEVIEWER LPFILEVIEWERW |   | #define LPFILEVIEWER LPFILEVIEWERW | 
      | #else |   | #else | 
      | #define IFileViewer IFileViewerA |   | #define IFileViewer IFileViewerA | 
      | #define LPFILEVIEWER LPFILEVIEWERA |   | #define LPFILEVIEWER LPFILEVIEWERA | 
      | #endif |   | #endif | 
       |   |  | 
       | 
      | //========================================================================== |   | // IFileViewer, IFileViewerSite not supported as of win2k | 
      | // |   | #endif // (NTDDI_VERSION < NTDDI_WIN2K) | 
      | // IShellBrowser/IShellView/IShellFolder interface |   |  | 
      | // |   |  | 
      | //  These three interfaces are used when the shell communicates with |   |  | 
      | // name space extensions. The shell (explorer) provides IShellBrowser |   |  | 
      | // interface, and extensions implements IShellFolder and IShellView |   |  | 
      | // interfaces. |   |  | 
      | // |   |  | 
      | //========================================================================== |   |  | 
       |   |  | 
      | //-------------------------------------------------------------------------- |   | //-------------------------------------------------------------------------- | 
      | // |   | // | 
      | // Command/menuitem IDs |   | // Command/menuitem IDs | 
      | // |   | // | 
      | //  The explorer dispatches WM_COMMAND messages based on the range of |   | //  The explorer dispatches WM_COMMAND messages based on the range of | 
      | // command/menuitem IDs. All the IDs of menuitems that the view (right |   | // command/menuitem IDs. All the IDs of menuitems that the view (right | 
      | // pane) inserts must be in FCIDM_SHVIEWFIRST/LAST (otherwise, the explorer |   | // pane) inserts must be in FCIDM_SHVIEWFIRST/LAST (otherwise, the explorer | 
      | // won't dispatch them). The view should not deal with any menuitems |   | // won't dispatch them). The view should not deal with any menuitems | 
      | // in FCIDM_BROWSERFIRST/LAST (otherwise, it won't work with the future |   | // in FCIDM_BROWSERFIRST/LAST (otherwise, it won't work with the future | 
       |   |  | 
      | skipping to change at line 1587 |   | skipping to change at line 996 | 
       |   |  | 
      | #define FCIDM_TOOLBAR      (FCIDM_BROWSERFIRST + 0) |   | #define FCIDM_TOOLBAR      (FCIDM_BROWSERFIRST + 0) | 
      | #define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1) |   | #define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1) | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
      | //-------------------------------------------------------------------------- |   | //-------------------------------------------------------------------------- | 
      | // |   | // | 
      | // The resource id of the offline cursor |   | // The resource id of the offline cursor | 
      | // This cursor is avaialble in shdocvw.dll |   | // This cursor is avaialble in shdocvw.dll | 
      | #define IDC_OFFLINE_HAND        103 |   | #define IDC_OFFLINE_HAND        103 | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
       |   | #define IDC_PANTOOL_HAND_OPEN   104 | 
       |   | #define IDC_PANTOOL_HAND_CLOSED 105 | 
       |   | #endif | 
      | // |   | // | 
      | //-------------------------------------------------------------------------- |   | //-------------------------------------------------------------------------- | 
      | #endif |   | #endif | 
       |   |  | 
      | // SBCMDID_GETPANE - not necessarily in order |   | // SBCMDID_GETPANE - not necessarily in order | 
       | 
      | #define PANE_NONE        -1 |   | #define PANE_NONE        ((DWORD)-1) | 
      | #define PANE_ZONE        1 |   | #define PANE_ZONE        1 | 
      | #define PANE_OFFLINE     2 |   | #define PANE_OFFLINE     2 | 
      | #define PANE_PRINTER     3 |   | #define PANE_PRINTER     3 | 
      | #define PANE_SSL         4 |   | #define PANE_SSL         4 | 
      | #define PANE_NAVIGATION  5 |   | #define PANE_NAVIGATION  5 | 
      | #define PANE_PROGRESS    6 |   | #define PANE_PROGRESS    6 | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE60) | 
      | #define PANE_PRIVACY     7 |   | #define PANE_PRIVACY     7 | 
       | 
       |   | #endif | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   | // SHGetPathFromIDListEx returns a win32 file system path for the item in the na | 
      | // ICommDlgBrowser interface |   | me space. | 
      | // |   | //  and has a few special cases that include returning UNC printer names too! | 
      | //  ICommDlgBrowser interface is the interface that is provided by the new |   | typedef enum tagGPFIDL_FLAGS | 
      | // common dialog window to hook and modify the behavior of IShellView.  When |   |  | 
      | // a default view is created, it queries its parent IShellBrowser for the |   |  | 
      | // ICommDlgBrowser interface.  If supported, it calls out to that interface |   |  | 
      | // in several cases that need to behave differently in a dialog. |   |  | 
      | // |   |  | 
      | // Member functions: |   |  | 
      | // |   |  | 
      | //  ICommDlgBrowser::OnDefaultCommand() |   |  | 
      | //    Called when the user double-clicks in the view or presses Enter.  The |   |  | 
      | //   browser should return S_OK if it processed the action itself, S_FALSE |   |  | 
      | //   to let the view perform the default action. |   |  | 
      | // |   |  | 
      | //  ICommDlgBrowser::OnStateChange(ULONG uChange) |   |  | 
      | //    Called when some states in the view change.  'uChange' is one of the |   |  | 
      | //   CDBOSC_* values.  This call is made after the state (selection, focus, |   |  | 
      | //   etc) has changed.  There is no return value. |   |  | 
      | // |   |  | 
      | //  ICommDlgBrowser::IncludeObject(LPCITEMIDLIST pidl) |   |  | 
      | //    Called when the view is enumerating objects.  'pidl' is a relative |   |  | 
      | //   IDLIST.  The browser should return S_OK to include the object in the |   |  | 
      | //   view, S_FALSE to hide it |   |  | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | #define CDBOSC_SETFOCUS     0x00000000 |   |  | 
      | #define CDBOSC_KILLFOCUS    0x00000001 |   |  | 
      | #define CDBOSC_SELCHANGE    0x00000002 |   |  | 
      | #define CDBOSC_RENAME       0x00000003 |   |  | 
      | #define CDBOSC_STATECHANGE  0x00000004 |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   ICommDlgBrowser |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(ICommDlgBrowser, IUnknown) |   |  | 
      | { |   | { | 
       | 
      |     // *** IUnknown methods *** |   |     GPFIDL_DEFAULT    = 0x0000,      // normal Win32 file name, servers and driv | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   | e roots included | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     GPFIDL_ALTNAME    = 0x0001,      // short file name | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     GPFIDL_UNCPRINTER = 0x0002,      // include UNC printer names too (non file  | 
      |                                                                                  |   | system item) | 
      |     // *** ICommDlgBrowser methods *** |   |  | 
      |     STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE; |   |  | 
      |     STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 ULONG uChange) PURE; |   |  | 
      |     STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 LPCITEMIDLIST pidl) PURE; |   |  | 
      | }; |   | }; | 
       | 
      |                                                                                  |   | typedef int GPFIDL_FLAGS; | 
      | typedef ICommDlgBrowser * LPCOMMDLGBROWSER; |   | SHSTDAPI_(BOOL) SHGetPathFromIDListEx(__in PCIDLIST_ABSOLUTE pidl, __out_ecount( | 
       |   | cchPath) PWSTR pszPath, __in DWORD cchPath, __in GPFIDL_FLAGS uOpts); | 
      | //------------------------------------------------------------------------- |   |  | 
      | // ICommDlgBrowser2 interface |   |  | 
      | // |   |  | 
      | // Member functions: |   |  | 
      | // |   |  | 
      | //  ICommDlgBrowser2::Notify(IShellView *pshv, DWORD dwNotfyType) |   |  | 
      | //   Called when the view is wants to notify common dialog when an event |   |  | 
      | //  occurrs. |   |  | 
      | // |   |  | 
      | //  CDB2N_CONTEXTMENU_START indicates the context menu has started. |   |  | 
      | //  CDB2N_CONTEXTMENU_DONE  indicates the context menu has completed. |   |  | 
      | // |   |  | 
      | //  ICommDlgBrowser2::GetDefaultMenuText(IShellView *pshv, |   |  | 
      | //                                      WCHAR *pszText, INT cchMax) |   |  | 
      | //   Called when the view wants to get the default context menu text. |   |  | 
      | //  pszText points to buffer and cchMax specifies the size of the |   |  | 
      | //  buffer in characters.  The browser on return has filled the buffer |   |  | 
      | //  with the default context menu text.  The Shell will call this method |   |  | 
      | //  with at least a buffer size of MAX_PATH.  The browser should return |   |  | 
      | //  S_OK if it returned a new default menu text, S_FALSE to let the view |   |  | 
      | //  to use the normal default menu text. |   |  | 
      | // |   | // | 
       | 
      | //  ICommDlgBrowser2::GetViewFlags(DWORD *pdwFlags) |   | // SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes | 
      | //     Called when the view wants to determine  if special customization needs t |   |  the size of the buffer (MAX_PATH). | 
      | o |   | // The pidl should point to a file system object. | 
      | //    be done for the common dialog browser. For example View calls this functio |   | SHSTDAPI_(BOOL) SHGetPathFromIDListA(PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PA | 
      | n to |   | TH) LPSTR pszPath); | 
      | //    determin if all files(hidden and system)needs to be shown. If the GetViewF |   |  | 
      | lags returns a DWORD with |   |  | 
      | //    CDB2GVF_SHOWALLFILES  flag set then it will show all the files. |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | #define CDB2N_CONTEXTMENU_DONE  0x00000001 |   |  | 
      | #define CDB2N_CONTEXTMENU_START 0x00000002 |   |  | 
       |   |  | 
      | //GetViewFlags |   |  | 
      | #define CDB2GVF_SHOWALLFILES        0x00000001 |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   ICommDlgBrowser2 |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(ICommDlgBrowser2, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** ICommDlgBrowser methods *** |   |  | 
      |     STDMETHOD(OnDefaultCommand) (THIS_ struct IShellView * ppshv) PURE; |   |  | 
      |     STDMETHOD(OnStateChange) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 ULONG uChange) PURE; |   |  | 
      |     STDMETHOD(IncludeObject) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 LPCITEMIDLIST pidl) PURE; |   |  | 
       |   |  | 
      |     // *** ICommDlgBrowser2 methods *** |   |  | 
      |     STDMETHOD(Notify) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 DWORD dwNotifyType) PURE; |   |  | 
      |     STDMETHOD(GetDefaultMenuText) (THIS_ struct IShellView * ppshv, |   |  | 
      |                 WCHAR *pszText, INT cchMax) PURE; |   |  | 
      |     STDMETHOD(GetViewFlags)(THIS_ DWORD *pdwFlags) PURE; |   |  | 
       |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef ICommDlgBrowser2 * LPCOMMDLGBROWSER2; |   |  | 
      |                                                                                  |   |  | 
      | // |   | // | 
       | 
      | // function assumes the size of the buffer (MAX_PATH). The pidl |   | // SHGetPathFromIDListW is the old version of SHGetPathFromIDListEx that assumes | 
      | // should point to a file system object. |   |  the size of the buffer (MAX_PATH). | 
      |                                                                                  |   | // The pidl should point to a file system object. | 
      | SHSTDAPI_(BOOL) SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath); |   | SHSTDAPI_(BOOL) SHGetPathFromIDListW(PCIDLIST_ABSOLUTE pidl, __out_ecount(MAX_PA | 
      | SHSTDAPI_(BOOL) SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath); |   | TH) LPWSTR pszPath); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetPathFromIDList  SHGetPathFromIDListW |   | #define SHGetPathFromIDList  SHGetPathFromIDListW | 
      | #else |   | #else | 
      | #define SHGetPathFromIDList  SHGetPathFromIDListA |   | #define SHGetPathFromIDList  SHGetPathFromIDListA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   |  | 
      | SHSTDAPI_(int) SHCreateDirectory(HWND hwnd, LPCWSTR pszPath); |   | SHSTDAPI_(int) SHCreateDirectory(HWND hwnd, LPCWSTR pszPath); | 
       | 
      | #endif  // (_WIN32_IE >= 0x0601) |   | SHSTDAPI_(int) SHCreateDirectoryExA(HWND hwnd, LPCSTR pszPath, const SECURITY_AT | 
      | SHSTDAPI_(int) SHCreateDirectoryExA(HWND hwnd, LPCSTR pszPath, SECURITY_ATTRIBUT |   | TRIBUTES *psa); | 
      | ES *psa); |   | SHSTDAPI_(int) SHCreateDirectoryExW(HWND hwnd, LPCWSTR pszPath, const SECURITY_A | 
      | SHSTDAPI_(int) SHCreateDirectoryExW(HWND hwnd, LPCWSTR pszPath, SECURITY_ATTRIBU |   | TTRIBUTES *psa); | 
      | TES *psa); |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHCreateDirectoryEx  SHCreateDirectoryExW |   | #define SHCreateDirectoryEx  SHCreateDirectoryExW | 
      | #else |   | #else | 
      | #define SHCreateDirectoryEx  SHCreateDirectoryExA |   | #define SHCreateDirectoryEx  SHCreateDirectoryExA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
      | SHSTDAPI SHOpenFolderAndSelectItems(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEM |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
      | IDLIST *apidl, DWORD dwFlags); |   | #define OFASI_EDIT          0x0001 | 
       |   | #define OFASI_OPENDESKTOP   0x0002 | 
       |   | #endif | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0601) |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | SHSTDAPI SHCreateShellItem(LPCITEMIDLIST pidlParent, IShellFolder *psfParent, LP |   |                                                                                  | 
      | CITEMIDLIST pidl, IShellItem **ppsi); |   | SHSTDAPI SHOpenFolderAndSelectItems(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, __i | 
      | #endif  // (_WIN32_IE >= 0x0601) |   | n_ecount_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, DWORD dwFlags); | 
       |   |  | 
       |   | //  deprecated because of parameter ambiguity | 
       |   | //  call SHCreateItemWithParent() or SHCreateItemFromIDList() instead | 
       |   | SHSTDAPI SHCreateShellItem(__in_opt PCIDLIST_ABSOLUTE pidlParent, __in_opt IShel | 
       |   | lFolder *psfParent, __in PCUITEMID_CHILD pidl, __out IShellItem **ppsi); | 
       |   |                                                                                  | 
       |   | #endif | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   | // | 
      | // SHGetSpecialFolderLocation |   | // SHGetSpecialFolderLocation | 
      | // |   | // | 
      | //  Caller should use SHGetMalloc to obtain an allocator that can free the pidl |   | //  Caller should use SHGetMalloc to obtain an allocator that can free the pidl | 
      | // |   | // | 
       | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // registry entries for special paths are kept in : |   | // registry entries for special paths are kept in : | 
       | 
      | #define REGSTR_PATH_SPECIAL_FOLDERS    REGSTR_PATH_EXPLORER TEXT("\\Shell Folder
s") |   | #define REGSTR_PATH_SPECIAL_FOLDERS     REGSTR_PATH_EXPLORER TEXT("\\Shell Folde
rs") | 
       |   |  | 
      | #define CSIDL_DESKTOP                   0x0000        // <desktop> |   | #define CSIDL_DESKTOP                   0x0000        // <desktop> | 
      | #define CSIDL_INTERNET                  0x0001        // Internet Explorer (icon
 on desktop) |   | #define CSIDL_INTERNET                  0x0001        // Internet Explorer (icon
 on desktop) | 
      | #define CSIDL_PROGRAMS                  0x0002        // Start Menu\Programs |   | #define CSIDL_PROGRAMS                  0x0002        // Start Menu\Programs | 
      | #define CSIDL_CONTROLS                  0x0003        // My Computer\Control Pan
el |   | #define CSIDL_CONTROLS                  0x0003        // My Computer\Control Pan
el | 
      | #define CSIDL_PRINTERS                  0x0004        // My Computer\Printers |   | #define CSIDL_PRINTERS                  0x0004        // My Computer\Printers | 
      | #define CSIDL_PERSONAL                  0x0005        // My Documents |   | #define CSIDL_PERSONAL                  0x0005        // My Documents | 
      | #define CSIDL_FAVORITES                 0x0006        // <user name>\Favorites |   | #define CSIDL_FAVORITES                 0x0006        // <user name>\Favorites | 
      | #define CSIDL_STARTUP                   0x0007        // Start Menu\Programs\Sta
rtup |   | #define CSIDL_STARTUP                   0x0007        // Start Menu\Programs\Sta
rtup | 
      | #define CSIDL_RECENT                    0x0008        // <user name>\Recent |   | #define CSIDL_RECENT                    0x0008        // <user name>\Recent | 
      | #define CSIDL_SENDTO                    0x0009        // <user name>\SendTo |   | #define CSIDL_SENDTO                    0x0009        // <user name>\SendTo | 
      | #define CSIDL_BITBUCKET                 0x000a        // <desktop>\Recycle Bin |   | #define CSIDL_BITBUCKET                 0x000a        // <desktop>\Recycle Bin | 
      | #define CSIDL_STARTMENU                 0x000b        // <user name>\Start Menu |   | #define CSIDL_STARTMENU                 0x000b        // <user name>\Start Menu | 
       | 
      | #define CSIDL_MYDOCUMENTS               0x000c        // logical "My Documents" 
desktop icon |   | #define CSIDL_MYDOCUMENTS               CSIDL_PERSONAL //  Personal was just a s
illy name for My Documents | 
      | #define CSIDL_MYMUSIC                   0x000d        // "My Music" folder |   | #define CSIDL_MYMUSIC                   0x000d        // "My Music" folder | 
      | #define CSIDL_MYVIDEO                   0x000e        // "My Videos" folder |   | #define CSIDL_MYVIDEO                   0x000e        // "My Videos" folder | 
      | #define CSIDL_DESKTOPDIRECTORY          0x0010        // <user name>\Desktop |   | #define CSIDL_DESKTOPDIRECTORY          0x0010        // <user name>\Desktop | 
      | #define CSIDL_DRIVES                    0x0011        // My Computer |   | #define CSIDL_DRIVES                    0x0011        // My Computer | 
      | #define CSIDL_NETWORK                   0x0012        // Network Neighborhood (M
y Network Places) |   | #define CSIDL_NETWORK                   0x0012        // Network Neighborhood (M
y Network Places) | 
      | #define CSIDL_NETHOOD                   0x0013        // <user name>\nethood |   | #define CSIDL_NETHOOD                   0x0013        // <user name>\nethood | 
      | #define CSIDL_FONTS                     0x0014        // windows\fonts |   | #define CSIDL_FONTS                     0x0014        // windows\fonts | 
      | #define CSIDL_TEMPLATES                 0x0015 |   | #define CSIDL_TEMPLATES                 0x0015 | 
      | #define CSIDL_COMMON_STARTMENU          0x0016        // All Users\Start Menu |   | #define CSIDL_COMMON_STARTMENU          0x0016        // All Users\Start Menu | 
      | #define CSIDL_COMMON_PROGRAMS           0X0017        // All Users\Start Menu\Pr
ograms |   | #define CSIDL_COMMON_PROGRAMS           0X0017        // All Users\Start Menu\Pr
ograms | 
       |   |  | 
      | skipping to change at line 1843 |   | skipping to change at line 1156 | 
      | #define CSIDL_COMMON_OEM_LINKS          0x003a        // Links to All Users OEM 
specific apps |   | #define CSIDL_COMMON_OEM_LINKS          0x003a        // Links to All Users OEM 
specific apps | 
      | #define CSIDL_CDBURN_AREA               0x003b        // USERPROFILE\Local Setti
ngs\Application Data\Microsoft\CD Burning |   | #define CSIDL_CDBURN_AREA               0x003b        // USERPROFILE\Local Setti
ngs\Application Data\Microsoft\CD Burning | 
      | // unused                               0x003c |   | // unused                               0x003c | 
      | #define CSIDL_COMPUTERSNEARME           0x003d        // Computers Near Me (comp
utered from Workgroup membership) |   | #define CSIDL_COMPUTERSNEARME           0x003d        // Computers Near Me (comp
utered from Workgroup membership) | 
       |   |  | 
      | #ifndef _SHFOLDER_H_ |   | #ifndef _SHFOLDER_H_ | 
      | #define CSIDL_FLAG_CREATE               0x8000        // combine with CSIDL_ val
ue to force folder creation in SHGetFolderPath() |   | #define CSIDL_FLAG_CREATE               0x8000        // combine with CSIDL_ val
ue to force folder creation in SHGetFolderPath() | 
      | #endif // _SHFOLDER_H_ |   | #endif // _SHFOLDER_H_ | 
       |   |  | 
      | #define CSIDL_FLAG_DONT_VERIFY          0x4000        // combine with CSIDL_ val
ue to return an unverified folder path |   | #define CSIDL_FLAG_DONT_VERIFY          0x4000        // combine with CSIDL_ val
ue to return an unverified folder path | 
       | 
       |   | #define CSIDL_FLAG_DONT_UNEXPAND        0x2000        // combine with CSIDL_ val | 
       |   | ue to avoid unexpanding environment variables | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define CSIDL_FLAG_NO_ALIAS             0x1000        // combine with CSIDL_ val
ue to insure non-alias versions of the pidl |   | #define CSIDL_FLAG_NO_ALIAS             0x1000        // combine with CSIDL_ val
ue to insure non-alias versions of the pidl | 
      | #define CSIDL_FLAG_PER_USER_INIT        0x0800        // combine with CSIDL_ val
ue to indicate per-user init (eg. upgrade) |   | #define CSIDL_FLAG_PER_USER_INIT        0x0800        // combine with CSIDL_ val
ue to indicate per-user init (eg. upgrade) | 
       | 
       |   | #endif  // NTDDI_WINXP | 
      | #define CSIDL_FLAG_MASK                 0xFF00        // mask for all possible f
lag values |   | #define CSIDL_FLAG_MASK                 0xFF00        // mask for all possible f
lag values | 
       |   |  | 
       | 
      | SHSTDAPI SHGetSpecialFolderLocation(HWND hwnd, int csidl, LPITEMIDLIST *ppidl); |   | SHSTDAPI SHGetSpecialFolderLocation(HWND hwnd, int csidl, __out PIDLIST_ABSOLUTE | 
      |                                                                                  |   |  *ppidl); | 
      | #if (_WIN32_IE >= 0x0400) |   |  | 
      | SHSTDAPI_(void) SHFlushSFCache(void); |   |  | 
      | SHSTDAPI_(LPITEMIDLIST) SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate) |   |  | 
      | ; |   |  | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) SHGetSpecialFolderPathA(HWND hwnd, LPSTR pszPath, int csidl, BOO |   | SHSTDAPI_(PIDLIST_ABSOLUTE) SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCre | 
      | L fCreate); |   | ate); | 
      | SHSTDAPI_(BOOL) SHGetSpecialFolderPathW(HWND hwnd, LPWSTR pszPath, int csidl, BO |   | SHSTDAPI_(BOOL) SHGetSpecialFolderPathA(HWND hwnd, __out_ecount(MAX_PATH) LPSTR  | 
      | OL fCreate); |   | pszPath, int csidl, BOOL fCreate); | 
       |   | SHSTDAPI_(BOOL) SHGetSpecialFolderPathW(HWND hwnd, __out_ecount(MAX_PATH) LPWSTR | 
       |   |  pszPath, int csidl, BOOL fCreate); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetSpecialFolderPath  SHGetSpecialFolderPathW |   | #define SHGetSpecialFolderPath  SHGetSpecialFolderPathW | 
      | #else |   | #else | 
      | #define SHGetSpecialFolderPath  SHGetSpecialFolderPathA |   | #define SHGetSpecialFolderPath  SHGetSpecialFolderPathA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   | SHSTDAPI_(void) SHFlushSFCache(void); | 
       |   |  | 
      | typedef enum { |   | typedef enum { | 
      |     SHGFP_TYPE_CURRENT  = 0,   // current value for user, verify it exists |   |     SHGFP_TYPE_CURRENT  = 0,   // current value for user, verify it exists | 
      |     SHGFP_TYPE_DEFAULT  = 1,   // default value, may not exist |   |     SHGFP_TYPE_DEFAULT  = 1,   // default value, may not exist | 
      | } SHGFP_TYPE; |   | } SHGFP_TYPE; | 
       |   |  | 
       | 
      | SHFOLDERAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, |   | SHFOLDERAPI SHGetFolderPathA(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, | 
      |  LPSTR pszPath); |   |  __out_ecount(MAX_PATH) LPSTR pszPath); | 
      | SHFOLDERAPI SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, |   | SHFOLDERAPI SHGetFolderPathW(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, | 
      |  LPWSTR pszPath); |   |  __out_ecount(MAX_PATH) LPWSTR pszPath); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetFolderPath  SHGetFolderPathW |   | #define SHGetFolderPath  SHGetFolderPathW | 
      | #else |   | #else | 
      | #define SHGetFolderPath  SHGetFolderPathA |   | #define SHGetFolderPath  SHGetFolderPathA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, |   | SHSTDAPI SHGetFolderLocation(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, | 
      |  LPITEMIDLIST *ppidl); |   |  __out PIDLIST_ABSOLUTE *ppidl); | 
       |   | SHSTDAPI SHSetFolderPathA(int csidl, HANDLE hToken, DWORD dwFlags, LPCSTR pszPat | 
       |   | h); | 
       |   | SHSTDAPI SHSetFolderPathW(int csidl, HANDLE hToken, DWORD dwFlags, LPCWSTR pszPa | 
       |   | th); | 
       |   | #ifdef UNICODE | 
       |   | #define SHSetFolderPath  SHSetFolderPathW | 
       |   | #else | 
       |   | #define SHSetFolderPath  SHSetFolderPathA | 
       |   | #endif // !UNICODE | 
       |   | #endif  // NTDDI_WIN2K | 
       |   |  | 
       | 
      | SHFOLDERAPI SHGetFolderPathAndSubDirA(HWND hwnd, int csidl, HANDLE hToken, DWORD |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |  dwFlags, LPCSTR pszSubDir, LPSTR pszPath); |   | SHSTDAPI SHGetFolderPathAndSubDirA(HWND hwnd, int csidl, HANDLE hToken, DWORD dw | 
      | SHFOLDERAPI SHGetFolderPathAndSubDirW(HWND hwnd, int csidl, HANDLE hToken, DWORD |   | Flags, LPCSTR pszSubDir, __out_ecount(MAX_PATH) LPSTR pszPath); | 
      |  dwFlags, LPCWSTR pszSubDir, LPWSTR pszPath); |   | SHSTDAPI SHGetFolderPathAndSubDirW(HWND hwnd, int csidl, HANDLE hToken, DWORD dw | 
       |   | Flags, LPCWSTR pszSubDir, __out_ecount(MAX_PATH) LPWSTR pszPath); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirW |   | #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirW | 
      | #else |   | #else | 
      | #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirA |   | #define SHGetFolderPathAndSubDir  SHGetFolderPathAndSubDirA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
       |   | #endif | 
       |   |  | 
       | 
      | #endif      // _WIN32_IE >= 0x0500 |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       | 
      | #endif      // _WIN32_IE >= 0x0400 |   | // | 
       |   | //  KNOWNFOLDERID based APIs | 
       |   | // | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   | #define KF_FLAG_CREATE              0x00008000  // Make sure that the folder alr | 
       |   | eady exists or create it and apply security specified in folder definition | 
       |   |                                                 // If folder can not be created  | 
       |   | then function will return failure and no folder path (IDList) will be returned | 
       |   |                                                 // If folder is located on the n | 
       |   | etwork the function may take long time to execute | 
       |   |  | 
       |   | #define KF_FLAG_DONT_VERIFY         0x00004000  // If this flag is specified the | 
       |   | n the folder path is returned and no verification is performed | 
       |   |                                                 // Use this flag is you want to  | 
       |   | get folder's path (IDList) and do not need to verify folder's existence | 
       |   |                                                 // | 
       |   |                                                 // If this flag is NOT specified | 
       |   |  then Known Folder API will try to verify that the folder exists | 
       |   |                                                 //     If folder does not exist  | 
       |   | or can not be accessed then function will return failure and no folder path (IDL | 
       |   | ist) will be returned | 
       |   |                                                 //     If folder is located on t | 
       |   | he network the function may take long time to execute | 
       |   |  | 
       |   | #define KF_FLAG_DONT_UNEXPAND       0x00002000  // Set folder path as is and do  | 
       |   | not try to substitute parts of the path with environments variables. | 
       |   |                                                 // If flag is not specified then | 
       |   |  Known Folder will try to replace parts of the path with some | 
       |   |                                                 // known environment variables ( | 
       |   | %USERPROFILE%, %APPDATA% etc.) | 
       |   |  | 
       |   | #define KF_FLAG_NO_ALIAS            0x00001000  // Get file system based IDList  | 
       |   | if available. If the flag is not specified the Known Folder API | 
       |   |                                                 // will try to return aliased ID | 
       |   | List by default. Example for FOLDERID_Documents - | 
       |   |                                                 // Aliased - [desktop]\[user]\[D | 
       |   | ocuments] - exact location is determined by shell namespace layout and might cha | 
       |   | nge | 
       |   |                                                 // Non aliased - [desktop]\[comp | 
       |   | uter]\[disk_c]\[users]\[user]\[Documents] - location is determined by folder loc | 
       |   | ation in the file system | 
       |   |  | 
       |   | #define KF_FLAG_INIT                0x00000800  // Initialize the folder with de | 
       |   | sktop.ini settings | 
       |   |                                                 // If folder can not be initiali | 
       |   | zed then function will return failure and no folder path will be returned | 
       |   |                                                 // If folder is located on the n | 
       |   | etwork the function may take long time to execute | 
       |   |  | 
       |   | #define KF_FLAG_DEFAULT_PATH        0x00000400  // Get the default path, will al | 
       |   | so verify folder existence unless KF_FLAG_DONT_VERIFY is also specified | 
       |   | #define KF_FLAG_NOT_PARENT_RELATIVE 0x00000200  // Get the not-parent-relative d | 
       |   | efault path. Only valid with KF_FLAG_DEFAULT_PATH | 
       |   |  | 
       |   | #define KF_FLAG_SIMPLE_IDLIST       0x00000100  // Build simple pidl | 
       |   |  | 
       |   | STDAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, | 
       |   |                              DWORD dwFlags, | 
       |   |                              HANDLE hToken, | 
       |   |                              __out PIDLIST_ABSOLUTE *ppidl); | 
       |   |  | 
       |   | STDAPI SHSetKnownFolderPath(REFKNOWNFOLDERID rfid, | 
       |   |                          DWORD dwFlags, | 
       |   |                          HANDLE hToken, | 
       |   |                          __in_opt PCWSTR pszPath); | 
       |   |  | 
       |   | STDAPI SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, | 
       |   |                          DWORD dwFlags, | 
       |   |                          HANDLE hToken, | 
       |   |                          __out PWSTR *ppszPath); // free *ppszPath with CoTaskMe | 
       |   | mFree | 
       |   |  | 
       |   | #endif  // NTDDI_LONGHORN | 
       |   |                                                                                  | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | #define FCS_READ                    0x00000001 |   | #define FCS_READ                    0x00000001 | 
      | #define FCS_FORCEWRITE              0x00000002 |   | #define FCS_FORCEWRITE              0x00000002 | 
      | #define FCS_WRITE                   (FCS_READ | FCS_FORCEWRITE) |   | #define FCS_WRITE                   (FCS_READ | FCS_FORCEWRITE) | 
       |   |  | 
      | #define FCS_FLAG_DRAGDROP           2 |   | #define FCS_FLAG_DRAGDROP           2 | 
       |   |  | 
      | // Mask which values have been retreived or being set. |   | // Mask which values have been retreived or being set. | 
       | 
      | #define FCSM_VIEWID                 0x00000001 |   | #define FCSM_VIEWID                 0x00000001    // deprecated | 
      | #define FCSM_WEBVIEWTEMPLATE        0x00000002 |   | #define FCSM_WEBVIEWTEMPLATE        0x00000002  // deprecated | 
      | #define FCSM_INFOTIP                0x00000004 |   | #define FCSM_INFOTIP                0x00000004 | 
      | #define FCSM_CLSID                  0x00000008 |   | #define FCSM_CLSID                  0x00000008 | 
      | #define FCSM_ICONFILE               0x00000010 |   | #define FCSM_ICONFILE               0x00000010 | 
      | #define FCSM_LOGO                   0x00000020 |   | #define FCSM_LOGO                   0x00000020 | 
      | #define FCSM_FLAGS                  0x00000040 |   | #define FCSM_FLAGS                  0x00000040 | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
       | 
      | // Used by SHGetSetFolderCustomSettingsA |   | // Used by SHGetSetFolderCustomSettings | 
      | typedef struct |   |  | 
      | { |   |  | 
      |     DWORD           dwSize; |   |  | 
      |     DWORD           dwMask;             // IN/OUT   Which Attributes to Get/Set |   |  | 
      |     SHELLVIEWID*    pvid;               // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
      |     // The folder's WebView template path |   |  | 
      |     LPSTR           pszWebViewTemplate;  // OUT - if dwReadWrite is FCS_READ, IN |   |  | 
      |  - otherwise |   |  | 
      |     DWORD           cchWebViewTemplate;  // IN - Specifies the size of the buffe |   |  | 
      | r pointed to by pszWebViewTemplate |   |  | 
      |                                         // Ignored if dwReadWrite is FCS_READ |   |  | 
      |     LPSTR           pszWebViewTemplateVersion;  // currently IN only |   |  | 
      |     // Infotip for the folder |   |  | 
      |     LPSTR           pszInfoTip;         // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
      |     DWORD           cchInfoTip;         // IN - Specifies the size of the buffer |   |  | 
      |  pointed to by pszInfoTip |   |  | 
      |                                         // Ignored if dwReadWrite is FCS_READ |   |  | 
      |     // CLSID that points to more info in the registry |   |  | 
      |     CLSID*          pclsid;             // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
      |     // Other flags for the folder. Takes FCS_FLAG_* values |   |  | 
      |     DWORD           dwFlags;            // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
       |   |  | 
      |     LPSTR           pszIconFile;        // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
      |     DWORD           cchIconFile;        // IN - Specifies the size of the buffer |   |  | 
      |  pointed to by pszIconFile |   |  | 
      |                                         // Ignored if dwReadWrite is FCS_READ |   |  | 
       |   |  | 
      |     int             iIconIndex;         // OUT - if dwReadWrite is FCS_READ, IN  |   |  | 
      | - otherwise |   |  | 
       |   |  | 
      |     LPSTR           pszLogo;        // OUT - if dwReadWrite is FCS_READ, IN - ot |   |  | 
      | herwise |   |  | 
      |     DWORD           cchLogo;        // IN - Specifies the size of the buffer poi |   |  | 
      | nted to by pszIconFile |   |  | 
      |                                         // Ignored if dwReadWrite is FCS_READ |   |  | 
       |   |  | 
      | } SHFOLDERCUSTOMSETTINGSA, *LPSHFOLDERCUSTOMSETTINGSA; |   |  | 
       |   |  | 
      | // Used by SHGetSetFolderCustomSettingsW |   |  | 
      | typedef struct |   | typedef struct | 
      | { |   | { | 
      |     DWORD           dwSize; |   |     DWORD           dwSize; | 
      |     DWORD           dwMask;              // IN/OUT  Which Attributes to Get/Set |   |     DWORD           dwMask;              // IN/OUT  Which Attributes to Get/Set | 
      |     SHELLVIEWID*    pvid;                // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise |   |     SHELLVIEWID*    pvid;                // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise | 
      |     // The folder's WebView template path |   |     // The folder's WebView template path | 
      |     LPWSTR          pszWebViewTemplate;   // OUT - if dwReadWrite is FCS_READ, I
N - otherwise |   |     LPWSTR          pszWebViewTemplate;   // OUT - if dwReadWrite is FCS_READ, I
N - otherwise | 
      |     DWORD           cchWebViewTemplate;   // IN - Specifies the size of the buff
er pointed to by pszWebViewTemplate |   |     DWORD           cchWebViewTemplate;   // IN - Specifies the size of the buff
er pointed to by pszWebViewTemplate | 
      |                                          // Ignored if dwReadWrite is FCS_READ |   |                                          // Ignored if dwReadWrite is FCS_READ | 
      |     LPWSTR           pszWebViewTemplateVersion;  // currently IN only |   |     LPWSTR           pszWebViewTemplateVersion;  // currently IN only | 
       |   |  | 
      | skipping to change at line 1969 |   | skipping to change at line 1309 | 
       |   |  | 
      |     LPWSTR           pszIconFile;        // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise |   |     LPWSTR           pszIconFile;        // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise | 
      |     DWORD            cchIconFile;        // IN - Specifies the size of the buffe
r pointed to by pszIconFile |   |     DWORD            cchIconFile;        // IN - Specifies the size of the buffe
r pointed to by pszIconFile | 
      |                                          // Ignored if dwReadWrite is FCS_READ |   |                                          // Ignored if dwReadWrite is FCS_READ | 
       |   |  | 
      |     int              iIconIndex;         // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise |   |     int              iIconIndex;         // OUT - if dwReadWrite is FCS_READ, IN
 - otherwise | 
       |   |  | 
      |     LPWSTR           pszLogo;        // OUT - if dwReadWrite is FCS_READ, IN - o
therwise |   |     LPWSTR           pszLogo;        // OUT - if dwReadWrite is FCS_READ, IN - o
therwise | 
      |     DWORD            cchLogo;        // IN - Specifies the size of the buffer po
inted to by pszIconFile |   |     DWORD            cchLogo;        // IN - Specifies the size of the buffer po
inted to by pszIconFile | 
      |                                          // Ignored if dwReadWrite is FCS_READ |   |                                          // Ignored if dwReadWrite is FCS_READ | 
       | 
      | } SHFOLDERCUSTOMSETTINGSW, *LPSHFOLDERCUSTOMSETTINGSW; |   | } SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
      | // Gets/Sets the Folder Custom Settings for pszPath based on dwReadWrite. dwRead
Write can be FCS_READ/FCS_WRITE/FCS_FORCEWRITE |   | // Gets/Sets the Folder Custom Settings for pszPath based on dwReadWrite. dwRead
Write can be FCS_READ/FCS_WRITE/FCS_FORCEWRITE | 
       | 
      | SHSTDAPI SHGetSetFolderCustomSettingsA(LPSHFOLDERCUSTOMSETTINGSA pfcs, LPCSTR ps |   | SHSTDAPI SHGetSetFolderCustomSettings(__inout LPSHFOLDERCUSTOMSETTINGS pfcs, LPC | 
      | zPath, DWORD dwReadWrite); |   | WSTR pszPath, DWORD dwReadWrite); | 
      | SHSTDAPI SHGetSetFolderCustomSettingsW(LPSHFOLDERCUSTOMSETTINGSW pfcs, LPCWSTR p |   |  | 
      | szPath, DWORD dwReadWrite); |   |  | 
      |                                                                                  |   |  | 
      | #ifdef UNICODE |   |  | 
      | #define SHFOLDERCUSTOMSETTINGS          SHFOLDERCUSTOMSETTINGSW |   |  | 
      | #define SHGetSetFolderCustomSettings    SHGetSetFolderCustomSettingsW |   |  | 
      | #define LPSHFOLDERCUSTOMSETTINGS        LPSHFOLDERCUSTOMSETTINGSW |   |  | 
      | #else |   |  | 
      | #define SHFOLDERCUSTOMSETTINGS          SHFOLDERCUSTOMSETTINGSA |   |  | 
      | #define SHGetSetFolderCustomSettings    SHGetSetFolderCustomSettingsA |   |  | 
      | #define LPSHFOLDERCUSTOMSETTINGS        LPSHFOLDERCUSTOMSETTINGSA |   |  | 
      | #endif |   |  | 
       |   |  | 
       | 
      | #endif  // _WIN32_IE >= 0x0500 |   | #endif  // NTDDI_WIN2K | 
       |   |  | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // |   | // | 
      | // SHBrowseForFolder API |   | // SHBrowseForFolder API | 
      | // |   | // | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
       |   |  | 
      | typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM 
lpData); |   | typedef int (CALLBACK* BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM 
lpData); | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
      | typedef struct _browseinfoA { |   | typedef struct _browseinfoA { | 
      |     HWND        hwndOwner; |   |     HWND        hwndOwner; | 
       | 
      |     LPCITEMIDLIST pidlRoot; |   |     PCIDLIST_ABSOLUTE pidlRoot; | 
      |     LPSTR        pszDisplayName;        // Return display name of item selected. |   |     LPSTR        pszDisplayName;        // Return display name of item selected. | 
      |     LPCSTR       lpszTitle;                     // text to go in the banner over
 the tree. |   |     LPCSTR       lpszTitle;                     // text to go in the banner over
 the tree. | 
      |     UINT         ulFlags;                       // Flags that control the return
 stuff |   |     UINT         ulFlags;                       // Flags that control the return
 stuff | 
      |     BFFCALLBACK  lpfn; |   |     BFFCALLBACK  lpfn; | 
      |     LPARAM       lParam;                        // extra info that's passed back
 in callbacks |   |     LPARAM       lParam;                        // extra info that's passed back
 in callbacks | 
      |     int          iImage;                        // output var: where to return t
he Image index. |   |     int          iImage;                        // output var: where to return t
he Image index. | 
      | } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA; |   | } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA; | 
       |   |  | 
      | typedef struct _browseinfoW { |   | typedef struct _browseinfoW { | 
      |     HWND        hwndOwner; |   |     HWND        hwndOwner; | 
       | 
      |     LPCITEMIDLIST pidlRoot; |   |     PCIDLIST_ABSOLUTE pidlRoot; | 
      |     LPWSTR       pszDisplayName;        // Return display name of item selected. |   |     LPWSTR       pszDisplayName;        // Return display name of item selected. | 
      |     LPCWSTR      lpszTitle;                     // text to go in the banner over
 the tree. |   |     LPCWSTR      lpszTitle;                     // text to go in the banner over
 the tree. | 
      |     UINT         ulFlags;                       // Flags that control the return
 stuff |   |     UINT         ulFlags;                       // Flags that control the return
 stuff | 
      |     BFFCALLBACK  lpfn; |   |     BFFCALLBACK  lpfn; | 
      |     LPARAM       lParam;                        // extra info that's passed back
 in callbacks |   |     LPARAM       lParam;                        // extra info that's passed back
 in callbacks | 
      |     int          iImage;                        // output var: where to return t
he Image index. |   |     int          iImage;                        // output var: where to return t
he Image index. | 
      | } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; |   | } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
       |   |  | 
      | skipping to change at line 2076 |   | skipping to change at line 1405 | 
       |   |  | 
      | // messages to browser |   | // messages to browser | 
      | #define BFFM_SETSTATUSTEXTA     (WM_USER + 100) |   | #define BFFM_SETSTATUSTEXTA     (WM_USER + 100) | 
      | #define BFFM_ENABLEOK           (WM_USER + 101) |   | #define BFFM_ENABLEOK           (WM_USER + 101) | 
      | #define BFFM_SETSELECTIONA      (WM_USER + 102) |   | #define BFFM_SETSELECTIONA      (WM_USER + 102) | 
      | #define BFFM_SETSELECTIONW      (WM_USER + 103) |   | #define BFFM_SETSELECTIONW      (WM_USER + 103) | 
      | #define BFFM_SETSTATUSTEXTW     (WM_USER + 104) |   | #define BFFM_SETSTATUSTEXTW     (WM_USER + 104) | 
      | #define BFFM_SETOKTEXT          (WM_USER + 105) // Unicode only |   | #define BFFM_SETOKTEXT          (WM_USER + 105) // Unicode only | 
      | #define BFFM_SETEXPANDED        (WM_USER + 106) // Unicode only |   | #define BFFM_SETEXPANDED        (WM_USER + 106) // Unicode only | 
       |   |  | 
       | 
      | SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderA(LPBROWSEINFOA lpbi); |   | SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderA(LPBROWSEINFOA lpbi); | 
      | SHSTDAPI_(LPITEMIDLIST) SHBrowseForFolderW(LPBROWSEINFOW lpbi); |   | SHSTDAPI_(PIDLIST_ABSOLUTE) SHBrowseForFolderW(LPBROWSEINFOW lpbi); | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHBrowseForFolder   SHBrowseForFolderW |   | #define SHBrowseForFolder   SHBrowseForFolderW | 
      | #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTW |   | #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTW | 
      | #define BFFM_SETSELECTION   BFFM_SETSELECTIONW |   | #define BFFM_SETSELECTION   BFFM_SETSELECTIONW | 
       |   |  | 
      | #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW |   | #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW | 
      | #else |   | #else | 
      | #define SHBrowseForFolder   SHBrowseForFolderA |   | #define SHBrowseForFolder   SHBrowseForFolderA | 
      | #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTA |   | #define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTA | 
      | #define BFFM_SETSELECTION   BFFM_SETSELECTIONA |   | #define BFFM_SETSELECTION   BFFM_SETSELECTIONA | 
       |   |  | 
      | #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA |   | #define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA | 
      | #endif |   | #endif | 
       |   |  | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // |   | // | 
      | // SHLoadInProc |   | // SHLoadInProc | 
      | // |   | // | 
       | 
      | //   When this function is called, the shell calls CoCreateInstance |   | //   This function is no longer implemented. It will return E_NOTIMPL. | 
      | //  (or equivalent) with CLSCTX_INPROC_SERVER and the specified CLSID |   |  | 
      | //  from within the shell's process and release it immediately. |   |  | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
       |   |  | 
      | SHSTDAPI SHLoadInProc(REFCLSID rclsid); |   | SHSTDAPI SHLoadInProc(REFCLSID rclsid); | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0600) |   |  | 
       |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // SHEnableServiceObject |   |  | 
      | // |   |  | 
      | //   Like SHLoadInProc, but gives control over the object's lifetime |   |  | 
      | //  via fEnable parameter.  TRUE tells the shell to create the object |   |  | 
      | //  and hold onto it, FALSE tells the shell to look for the previously |   |  | 
      | //  created instance of the object and release it. |   |  | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | SHSTDAPI SHEnableServiceObject(REFCLSID rclsid, BOOL fEnable); |   |  | 
       |   |  | 
      | #endif |   |  | 
      |                                                                                  |   |  | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // |   | // | 
      | // Internet Shortcut Object |   | // Internet Shortcut Object | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // Cmds for CGID_ShortCut |   | // Cmds for CGID_ShortCut | 
       | 
      | enum { |   | #if (_WIN32_IE >= _WIN32_IE_IE501) | 
      |     ISHCUTCMDID_DOWNLOADICON  = 0, |   | enum | 
       |   | { | 
       |   |     ISHCUTCMDID_DOWNLOADICON      = 0, | 
      |     ISHCUTCMDID_INTSHORTCUTCREATE = 1, |   |     ISHCUTCMDID_INTSHORTCUTCREATE = 1, | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
       |   |     ISHCUTCMDID_COMMITHISTORY     = 2, | 
       |   |     ISHCUTCMDID_SETUSERAWURL      = 3, | 
       |   | #endif | 
      | }; |   | }; | 
      | #define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE |   | #define CMDID_INTSHORTCUTCREATE ISHCUTCMDID_INTSHORTCUTCREATE | 
       | 
       |   | #endif | 
       |   |  | 
      | // |   | // | 
       | 
      | //  Helper function which returns a IShellFolder interface to the desktop |   | // Helper function which returns a IShellFolder interface to the desktop | 
      | // folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop. |   | // folder. This is equivalent to call CoCreateInstance with CLSID_ShellDesktop. | 
      | // |   | // | 
       | 
      | //  CoCreateInstance(CLSID_Desktop, NULL, |   | //  CoCreateInstance(CLSID_Desktop, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pshf)); | 
      | //                   CLSCTX_INPROC, IID_IShellFolder, &pshf); |   |  | 
      | // |   | // | 
       | 
      | SHSTDAPI SHGetDesktopFolder(IShellFolder **ppshf); |   | SHSTDAPI SHGetDesktopFolder(__out IShellFolder **ppshf); | 
       |   |  | 
      | // IShellFolder IBindCtx* parameters. the IUnknown for these are |   |  | 
      | // accessed through IBindCtx::RegisterObjectParam/GetObjectParam |   |  | 
      | // use this to provide the data needed create IDLists through |   |  | 
      | // IShellFolder::ParseDisplayName(). this data applies to the last element |   |  | 
      | // of the name that is parsed (c:\foo\bar.txt, data applies to bar.txt) |   |  | 
      | // this makes creating these IDLists much faster that suppling the name only |   |  | 
       |   |  | 
      | #define STR_FILE_SYS_BIND_DATA      L"File System Bind Data" |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IFileSystemBindData |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IFileSystemBindData, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
       | 
      |     // *** IFileSystemBindData methods *** |   | // this interface is deprecated, data sources should | 
      |     STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW *pfd) PURE; |   | // implement IShellFolder2::GetDetailsOf()/GetDetailsEx() instead | 
      |     STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW *pfd) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellDetails |   | #define INTERFACE   IShellDetails | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellDetails, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellDetails, IUnknown, "000214EC-0000-0000-c000-0000000
00046") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellDetails methods *** |   |     // *** IShellDetails methods *** | 
       | 
      |     STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS
 *pDetails) PURE; |   |     STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, __out SHEL
LDETAILS *pDetails) PURE; | 
      |     STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; |   |     STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE; | 
      | }; |   | }; | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // IObjMgr interface |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   | // | 
      | // IObjMgr::Append(punk) |   | // IObjMgr::Append(punk) | 
      | //   This function adds an object to the end of a list of objects. |   | //   This function adds an object to the end of a list of objects. | 
      | // |   | // | 
      | // IObjMgr::Remove(punk) |   | // IObjMgr::Remove(punk) | 
      | //   This function removes an object from a list of objects. |   | //   This function removes an object from a list of objects. | 
      | // |   | // | 
      | // This is implemented by CLSID_ACLMulti so each AutoComplete List |   | // This is implemented by CLSID_ACLMulti so each AutoComplete List | 
      | // (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added. |   | // (CLSID_ACLHistory, CLSID_ACListISF, CLSID_ACLMRU) can be added. | 
      | // CLSID_ACLMulti's IEnumString will then be the union of the results |   | // CLSID_ACLMulti's IEnumString will then be the union of the results | 
      | // from the COM Objects added. |   | // from the COM Objects added. | 
       | 
      | //------------------------------------------------------------------------- |   | // | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IObjMgr |   | #define INTERFACE IObjMgr | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IObjMgr, IUnknown) |   | DECLARE_INTERFACE_IID_(IObjMgr, IUnknown, "00BB2761-6A77-11D0-A535-00C04FD7D062"
) | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IObjMgr specific methods *** |   |     // *** IObjMgr specific methods *** | 
       | 
      |     STDMETHOD(Append) (THIS_ IUnknown *punk) PURE; |   |     STDMETHOD(Append) (THIS_ __in IUnknown *punk) PURE; | 
      |     STDMETHOD(Remove) (THIS_ IUnknown *punk) PURE; |   |     STDMETHOD(Remove) (THIS_ __in IUnknown *punk) PURE; | 
      | }; |   | }; | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // ICurrentWorkingDirectory interface |   |  | 
      | // |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   | // | 
      | // ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize) |   | // ICurrentWorkingDirectory::GetDirectory(LPWSTR pwzPath, DWORD cchSize) | 
      | //   This function gets the Current Working Directory from a COM object that |   | //   This function gets the Current Working Directory from a COM object that | 
      | //   stores such state. |   | //   stores such state. | 
      | // |   | // | 
      | // ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath) |   | // ICurrentWorkingDirectory::SetDirectory(LPCWSTR pwzPath) | 
      | //   This function sets the Current Working Directory of a COM object that |   | //   This function sets the Current Working Directory of a COM object that | 
      | //   stores such state. |   | //   stores such state. | 
      | // |   | // | 
      | // This function can be used generically.  One COM object that implements it |   | // This function can be used generically.  One COM object that implements it | 
      | // is CLSID_ACListISF so that the AutoComplete engine can complete relative |   | // is CLSID_ACListISF so that the AutoComplete engine can complete relative | 
      | // paths.  SetDirectory() will set the "Current Working Directory" and |   | // paths.  SetDirectory() will set the "Current Working Directory" and | 
      | // AutoComplete with then complete both absolute and relative paths. |   | // AutoComplete with then complete both absolute and relative paths. | 
      | // For Example, if ::SetDirectory(L"C:\Program Files") is called, then |   | // For Example, if ::SetDirectory(L"C:\Program Files") is called, then | 
      | // the user can AutoComplete "..\winnt".  In order to set the current |   | // the user can AutoComplete "..\winnt".  In order to set the current | 
      | // working directory for non-file system paths, "ftp://ftp.microsoft.com/" or |   | // working directory for non-file system paths, "ftp://ftp.microsoft.com/" or | 
      | // "Control Panel" for example, use IPersistFolder. |   | // "Control Panel" for example, use IPersistFolder. | 
       | 
      | //------------------------------------------------------------------------- |   | // | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE ICurrentWorkingDirectory |   | #define INTERFACE ICurrentWorkingDirectory | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(ICurrentWorkingDirectory, IUnknown) |   | DECLARE_INTERFACE_IID_(ICurrentWorkingDirectory, IUnknown, "91956D21-9276-11d1-9
21A-006097DF5BD4") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** ICurrentWorkingDirectory specific methods *** |   |     // *** ICurrentWorkingDirectory specific methods *** | 
       | 
      |     STDMETHOD(GetDirectory) (THIS_ LPWSTR pwzPath, DWORD cchSize) PURE; |   |     STDMETHOD(GetDirectory) (THIS_ __out_ecount(cchSize) LPWSTR pwzPath, DWORD c
chSize) PURE; | 
      |     STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE; |   |     STDMETHOD(SetDirectory) (THIS_ LPCWSTR pwzPath) PURE; | 
      | }; |   | }; | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   | // | 
       | 
      | // IACList interface |   | // IACList::Expand(LPCWSTR) | 
      | // |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   |  | 
      | // IObjMgr::Expand(LPCOLESTR) |   |  | 
      | //   This function tells an autocomplete list to expand a specific string. |   | //   This function tells an autocomplete list to expand a specific string. | 
      | // |   | // | 
      | // If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete) |   | // If the user enters a multi-level path, AutoComplete (CLSID_AutoComplete) | 
      | // will use this interface to tell the "AutoComplete Lists" where to expand |   | // will use this interface to tell the "AutoComplete Lists" where to expand | 
      | // the results. |   | // the results. | 
      | // |   | // | 
      | // For Example, if the user enters "C:\Program Files\Micros", AutoComplete |   | // For Example, if the user enters "C:\Program Files\Micros", AutoComplete | 
      | // first completely enumerate the "AutoComplete Lists" via IEnumString.  Then it |   | // first completely enumerate the "AutoComplete Lists" via IEnumString.  Then it | 
      | // will call the "AutoComplete Lists" with IACList::Expand(L"C:\Program Files"). |   | // will call the "AutoComplete Lists" with IACList::Expand(L"C:\Program Files"). | 
      | // It will then enumerate the IEnumString interface again to get results in |   | // It will then enumerate the IEnumString interface again to get results in | 
      | // that directory. |   | // that directory. | 
       | 
      | //------------------------------------------------------------------------- |   | // | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IACList |   | #define INTERFACE IACList | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IACList, IUnknown) |   | DECLARE_INTERFACE_IID_(IACList, IUnknown, "77A130B0-94FD-11D0-A544-00C04FD7d062"
) | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; |   |     STDMETHOD_(ULONG, AddRef) (THIS) PURE; | 
      |     STDMETHOD_(ULONG, Release) (THIS) PURE; |   |     STDMETHOD_(ULONG, Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IACList specific methods *** |   |     // *** IACList specific methods *** | 
       | 
      |     STDMETHOD(Expand) (THIS_ LPCOLESTR pszExpand) PURE; |   |     STDMETHOD(Expand) (THIS_ LPCWSTR pszExpand) PURE; | 
      | }; |   | }; | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   | // This interface exists to allow the caller to set filter criteria | 
      | // |   |  | 
      | // IACList2 interface |   |  | 
      | // |   |  | 
      | // [Description] |   |  | 
      | //              This interface exists to allow the caller to set filter criteria |   |  | 
      | // for an AutoComplete List.  AutoComplete Lists generates the list of |   | // for an AutoComplete List.  AutoComplete Lists generates the list of | 
      | // possible AutoComplete completions.  CLSID_ACListISF is one AutoComplete |   | // possible AutoComplete completions.  CLSID_ACListISF is one AutoComplete | 
      | // List COM object that implements this interface. |   | // List COM object that implements this interface. | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IACList2 |   | #define INTERFACE IACList2 | 
       |   |  | 
      | typedef enum _tagAUTOCOMPLETELISTOPTIONS |   | typedef enum _tagAUTOCOMPLETELISTOPTIONS | 
      | { |   | { | 
      |     ACLO_NONE            = 0,    // don't enumerate anything |   |     ACLO_NONE            = 0,    // don't enumerate anything | 
      |     ACLO_CURRENTDIR      = 1,    // enumerate current directory |   |     ACLO_CURRENTDIR      = 1,    // enumerate current directory | 
      |     ACLO_MYCOMPUTER      = 2,    // enumerate MyComputer |   |     ACLO_MYCOMPUTER      = 2,    // enumerate MyComputer | 
      |     ACLO_DESKTOP         = 4,    // enumerate Desktop Folder |   |     ACLO_DESKTOP         = 4,    // enumerate Desktop Folder | 
      |     ACLO_FAVORITES       = 8,    // enumerate Favorites Folder |   |     ACLO_FAVORITES       = 8,    // enumerate Favorites Folder | 
      |     ACLO_FILESYSONLY     = 16,   // enumerate only the file system |   |     ACLO_FILESYSONLY     = 16,   // enumerate only the file system | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE60) | 
      |     ACLO_FILESYSDIRS     = 32,   // enumerate only the file system dirs, UNC sha
res, and UNC servers. |   |     ACLO_FILESYSDIRS     = 32,   // enumerate only the file system dirs, UNC sha
res, and UNC servers. | 
       | 
       |   | #endif | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
       |   |     ACLO_VIRTUALNAMESPACE = 64,  // enumereate on the virual namespace | 
       |   | #endif | 
      | } AUTOCOMPLETELISTOPTIONS; |   | } AUTOCOMPLETELISTOPTIONS; | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IACList2, IACList) |   | DECLARE_INTERFACE_IID_(IACList2, IACList, "470141a0-5186-11d2-bbb6-0060977b464c"
) | 
      | { |   | { | 
      |     // *** IACList2 specific methods *** |   |     // *** IACList2 specific methods *** | 
      |     STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; |   |     STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE; | 
       | 
      |     STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE; |   |     STDMETHOD(GetOptions)(THIS_ __out DWORD* pdwFlag) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | /*-------------------------------------------------------------------------*\ |   | /*-------------------------------------------------------------------------*\ | 
      |     INTERFACE: IProgressDialog |   |     INTERFACE: IProgressDialog | 
       |   |  | 
      |     DESCRIPTION: |   |     DESCRIPTION: | 
      |         CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create |   |         CLSID_ProgressDialog/IProgressDialog exist to allow a caller to create | 
      |     a progress dialog, set it's title, animation, text lines, progress, and |   |     a progress dialog, set it's title, animation, text lines, progress, and | 
       | 
      |     it will do all the work of updating on a background thread, being modless, |   |     it will do all the work of updating on a background thread, being modeless, | 
      |     handling the user cancelling the operation, and estimating the time remainin |   |     handling the user canceling the operation, and estimating the time remaining | 
      | g |   |  | 
      |     until the operation completes. |   |     until the operation completes. | 
       |   |  | 
      |     USAGE: |   |     USAGE: | 
      |         This is how the dialog is used during operations that require progress |   |         This is how the dialog is used during operations that require progress | 
      |     and the ability to cancel: |   |     and the ability to cancel: | 
      |     { |   |     { | 
      |         DWORD dwComplete, dwTotal; |   |         DWORD dwComplete, dwTotal; | 
      |         IProgressDialog * ppd; |   |         IProgressDialog * ppd; | 
      |         CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_I
ProgressDialog, (void **)&ppd); |   |         CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_I
ProgressDialog, (void **)&ppd); | 
      |         ppd->SetTitle(L"My Slow Operation");                                // S
et the title of the dialog. |   |         ppd->SetTitle(L"My Slow Operation");                                // S
et the title of the dialog. | 
       |   |  | 
      | skipping to change at line 2370 |   | skipping to change at line 1646 | 
       |   |  | 
      |             ppd->SetProgress(dwCompleted, dwTotal); |   |             ppd->SetProgress(dwCompleted, dwTotal); | 
      |         } |   |         } | 
       |   |  | 
      |         ppd->StopProgressDialog(); |   |         ppd->StopProgressDialog(); | 
      |         ppd->Release(); |   |         ppd->Release(); | 
      |     } |   |     } | 
      | \*-------------------------------------------------------------------------*/ |   | \*-------------------------------------------------------------------------*/ | 
       |   |  | 
      | // Flags for IProgressDialog::StartProgressDialog() (dwFlags) |   | // Flags for IProgressDialog::StartProgressDialog() (dwFlags) | 
       | 
       |   | // The flag space includes OPPROGDLG_ and PROGDLG_ values, please guarantee they
 don't conflict. See shobjidl.idl for OPPROGDLG_* | 
      | #define PROGDLG_NORMAL          0x00000000      // default normal progress dlg b
ehavior |   | #define PROGDLG_NORMAL          0x00000000      // default normal progress dlg b
ehavior | 
      | #define PROGDLG_MODAL           0x00000001      // the dialog is modal to its hw
ndParent (default is modeless) |   | #define PROGDLG_MODAL           0x00000001      // the dialog is modal to its hw
ndParent (default is modeless) | 
      | #define PROGDLG_AUTOTIME        0x00000002      // automatically updates the "Li
ne3" text with the "time remaining" (you cant call SetLine3 if you passs this!) |   | #define PROGDLG_AUTOTIME        0x00000002      // automatically updates the "Li
ne3" text with the "time remaining" (you cant call SetLine3 if you passs this!) | 
      | #define PROGDLG_NOTIME          0x00000004      // we dont show the "time remain
ing" if this is set. We need this if dwTotal < dwCompleted for sparse files |   | #define PROGDLG_NOTIME          0x00000004      // we dont show the "time remain
ing" if this is set. We need this if dwTotal < dwCompleted for sparse files | 
      | #define PROGDLG_NOMINIMIZE      0x00000008      // Do not have a minimize button
 in the caption bar. |   | #define PROGDLG_NOMINIMIZE      0x00000008      // Do not have a minimize button
 in the caption bar. | 
      | #define PROGDLG_NOPROGRESSBAR   0x00000010      // Don't display the progress ba
r |   | #define PROGDLG_NOPROGRESSBAR   0x00000010      // Don't display the progress ba
r | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
       |   | #define PROGDLG_MARQUEEPROGRESS 0x00000020      // Use marquee progress (comctl3 | 
       |   | 2 v6 required) | 
       |   | #define PROGDLG_NOCANCEL        0x00000040      // No cancel button (operation c | 
       |   | annot be canceled) (use sparingly) | 
       |   | #endif | 
       |   |  | 
      | // Time Actions (dwTimerAction) |   | // Time Actions (dwTimerAction) | 
      | #define PDTIMER_RESET       0x00000001       // Reset the timer so the progress 
will be calculated from now until the first ::SetProgress() is called so |   | #define PDTIMER_RESET       0x00000001       // Reset the timer so the progress 
will be calculated from now until the first ::SetProgress() is called so | 
      |                                              // those this time will correspond 
to the values passed to ::SetProgress().  Only do this before ::SetProgress() is
 called. |   |                                              // those this time will correspond 
to the values passed to ::SetProgress().  Only do this before ::SetProgress() is
 called. | 
       | 
       |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
       |   | #define PDTIMER_PAUSE       0x00000002       // Progress has been suspended | 
       |   | #define PDTIMER_RESUME      0x00000003       // Progress has resumed | 
       |   | #endif | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IProgressDialog |   | #define INTERFACE   IProgressDialog | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IProgressDialog, IUnknown) |   | DECLARE_INTERFACE_IID_(IProgressDialog, IUnknown, "EBBC7C04-315E-11d2-B62F-00609
7DF5BD4") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IProgressDialog specific methods |   |     // *** IProgressDialog specific methods | 
       | 
      |     STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown * punkEnableM
odless, DWORD dwFlags, LPCVOID pvResevered) PURE; |   |     STDMETHOD(StartProgressDialog)(THIS_ __in_opt HWND hwndParent, __in_opt IUnk
nown * punkEnableModless, DWORD dwFlags, __reserved LPCVOID pvResevered) PURE; | 
      |     STDMETHOD(StopProgressDialog)(THIS) PURE; |   |     STDMETHOD(StopProgressDialog)(THIS) PURE; | 
      |     STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE; |   |     STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE; | 
      |     STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PU
RE; |   |     STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstAnimation, UINT idAnimation) PU
RE; | 
      |     STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE; |   |     STDMETHOD_(BOOL,HasUserCancelled) (THIS) PURE; | 
      |     STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE; |   |     STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE; | 
      |     STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) P
URE; |   |     STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) P
URE; | 
       | 
      |     STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPa |   |     STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL fCompactPa | 
      | th, LPCVOID pvResevered) PURE; |   | th, __reserved LPCVOID pvResevered) PURE; | 
      |     STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID pvResevered) PUR |   |     STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, __reserved LPCVOID pvRes | 
      | E; |   | evered) PURE; | 
      |     STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID pvResevered) PURE; |   |     STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, __reserved LPCVOID pvResevered)  | 
      | }; |   | PURE; | 
       |   |  | 
      | //========================================================================== |   |  | 
      | // IInputObjectSite/IInputObject interfaces |   |  | 
      | // |   |  | 
      | //  These interfaces allow us (or ISVs) to install/update external Internet |   |  | 
      | // Toolbar for IE and the shell. The frame will simply get the CLSID from |   |  | 
      | // registry (to be defined) and CoCreateInstance it. |   |  | 
      | // |   |  | 
      | //========================================================================== |   |  | 
       |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // IInputObjectSite interface |   |  | 
      | // |   |  | 
      | //   A site implements this interface so the object can communicate |   |  | 
      | // focus change to it. |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   |  | 
      | // IInputObjectSite::OnFocusChangeIS(punkObj, fSetFocus) |   |  | 
      | //   Object (punkObj) is getting or losing the focus. |   |  | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IInputObjectSite |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IInputObjectSite, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IInputObjectSite specific methods *** |   |  | 
      |     STDMETHOD(OnFocusChangeIS)(THIS_ IUnknown* punkObj, BOOL fSetFocus) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // IInputObject interface |   |  | 
      | // |   |  | 
      | //   An object implements this interface so the site can communicate |   |  | 
      | // activation and accelerator events to it. |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   |  | 
      | // IInputObject::UIActivateIO(fActivate, lpMsg) |   |  | 
      | //   Activates or deactivates the object.  lpMsg may be NULL.  Returns |   |  | 
      | //   S_OK if the activation succeeded. |   |  | 
      | // |   |  | 
      | // IInputObject::HasFocusIO() |   |  | 
      | //   Returns S_OK if the object has the focus, S_FALSE if not. |   |  | 
      | // |   |  | 
      | // IInputObject::TranslateAcceleratorIO(lpMsg) |   |  | 
      | //   Allow the object to process the message.  Returns S_OK if the |   |  | 
      | //   message was processed (eaten). |   |  | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IInputObject |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_(IInputObject, IUnknown) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |  | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IInputObject specific methods *** |   |  | 
      |     STDMETHOD(UIActivateIO)(THIS_ BOOL fActivate, LPMSG lpMsg) PURE; |   |  | 
      |     STDMETHOD(HasFocusIO)(THIS) PURE; |   |  | 
      |     STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE; |   |  | 
      | }; |   | }; | 
       |   |  | 
      | //========================================================================== |   | //========================================================================== | 
      | // IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces |   | // IDockingWindowSite/IDockingWindow/IDockingWindowFrame interfaces | 
      | // IInputObjectSite/IInputObject interfaces |   | // IInputObjectSite/IInputObject interfaces | 
      | // |   | // | 
      | //  These interfaces allow us (or ISVs) to install/update external Internet |   | //  These interfaces allow us (or ISVs) to install/update external Internet | 
      | // Toolbar for IE and the shell. The frame will simply get the CLSID from |   | // Toolbar for IE and the shell. The frame will simply get the CLSID from | 
      | // registry (to be defined) and CoCreateInstance it. |   | // registry (to be defined) and CoCreateInstance it. | 
      | // |   | // | 
       |   |  | 
      | skipping to change at line 2515 |   | skipping to change at line 1725 | 
      | // |   | // | 
      | // IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw) |   | // IDockingWindowSite::SetBorderSpaceDW(punkObj, pbw) | 
      | //   Object requests that the site set the border spacing to the size |   | //   Object requests that the site set the border spacing to the size | 
      | //   specified in *pbw. |   | //   specified in *pbw. | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IDockingWindowSite |   | #define INTERFACE   IDockingWindowSite | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IDockingWindowSite, IOleWindow) |   | DECLARE_INTERFACE_IID_(IDockingWindowSite, IOleWindow, "2a342fc2-7b26-11d0-8ca9-
00a0c92dbfe8") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IOleWindow methods *** |   |     // *** IOleWindow methods *** | 
      |     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; |   |     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; | 
      |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; |   |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | 
       |   |  | 
       |   |  | 
      | skipping to change at line 2551 |   | skipping to change at line 1761 | 
      | // |   | // | 
      | // IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv) |   | // IDockingWindowFrame::FindToolbar(pwszItem, riid, ppv) | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
       |   |  | 
      | // flags for RemoveToolbar |   | // flags for RemoveToolbar | 
      | #define DWFRF_NORMAL            0x0000 |   | #define DWFRF_NORMAL            0x0000 | 
      | #define DWFRF_DELETECONFIGDATA  0x0001 |   | #define DWFRF_DELETECONFIGDATA  0x0001 | 
       |   |  | 
      | // flags for AddToolbar |   | // flags for AddToolbar | 
       | 
      | #define DWFAF_HIDDEN  0x0001   // add hidden |   | #define DWFAF_HIDDEN    0x0001   // add hidden | 
       |   | #define DWFAF_GROUP1    0x0002   // insert at end of group 1 | 
       |   | #define DWFAF_GROUP2    0x0004   // insert at end of group 2 | 
       |   | #define DWFAF_AUTOHIDE  0x0010   // The toolbar will be subject to AutoHide in F | 
       |   | ull Screen mode | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IDockingWindowFrame |   | #define INTERFACE   IDockingWindowFrame | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IDockingWindowFrame, IOleWindow) |   | DECLARE_INTERFACE_IID_(IDockingWindowFrame, IOleWindow, "47d2657a-7b27-11d0-8ca9
-00a0c92dbfe8") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IOleWindow methods *** |   |     // *** IOleWindow methods *** | 
      |     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; |   |     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; | 
      |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; |   |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | 
       |   |  | 
      |     // *** IDockingWindowFrame methods *** |   |     // *** IDockingWindowFrame methods *** | 
      |     STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAd
dFlags) PURE; |   |     STDMETHOD(AddToolbar) (THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAd
dFlags) PURE; | 
      |     STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE
; |   |     STDMETHOD(RemoveToolbar) (THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE
; | 
      |     STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PUR
E; |   |     STDMETHOD(FindToolbar) (THIS_ LPCWSTR pwszItem, REFIID riid, void **ppv) PUR
E; | 
      | }; |   | }; | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
       |   |  | 
       | 
      | //------------------------------------------------------------------------- |   |  | 
      | // |   |  | 
      | // IRunnableTask interface |   |  | 
      | // |   |  | 
      | //   This is a free threaded interface used for putting items on a background |   |  | 
      | // scheduler for execution within the view.  It allows a scheduler to start and |   |  | 
      | // stop tasks on as many worker threads as it deems necessary. |   |  | 
      | // |   |  | 
      | // Run(), Kill() and Suspend() may be called from different threads. |   |  | 
      | // |   |  | 
      | // [Member functions] |   |  | 
      | // |   |  | 
      | // IRunnableTask::Run(void) |   |  | 
      | //   Initiate the task to run.  This should return E_PENDING if the task |   |  | 
      | //   has been suspended. |   |  | 
      | // |   |  | 
      | // IRunnableTask::Kill(void) |   |  | 
      | // |   |  | 
      | // IRunnableTask::Suspend(void) |   |  | 
      | // |   |  | 
      | // IRunnableTask::Resume(void) |   |  | 
      | // |   |  | 
      | // IRunnableTask::IsRunning(void) |   |  | 
      | // |   |  | 
      | //------------------------------------------------------------------------- |   |  | 
       |   |  | 
      | // Convenient state values |   |  | 
      | #define IRTIR_TASK_NOT_RUNNING  0 |   |  | 
      | #define IRTIR_TASK_RUNNING      1 |   |  | 
      | #define IRTIR_TASK_SUSPENDED    2 |   |  | 
      | #define IRTIR_TASK_PENDING      3 |   |  | 
      | #define IRTIR_TASK_FINISHED     4 |   |  | 
       |   |  | 
      | #undef  INTERFACE |   |  | 
      | #define INTERFACE   IRunnableTask |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_( IRunnableTask, IUnknown ) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef)(THIS) PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release)(THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IRunnableTask methods *** |   |  | 
      |     STDMETHOD (Run)(THIS) PURE; |   |  | 
      |     STDMETHOD (Kill)(THIS_ BOOL fWait ) PURE; |   |  | 
      |     STDMETHOD (Suspend)(THIS) PURE; |   |  | 
      |     STDMETHOD (Resume)(THIS) PURE; |   |  | 
      |     STDMETHOD_(ULONG, IsRunning)(THIS) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IRunnableTask * LPRUNNABLETASK; |   |  | 
      | #endif |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   |  | 
       |   |  | 
      | #define TASKOWNERID     GUID |   |  | 
      | #define REFTASKOWNERID  REFGUID |   |  | 
       |   |  | 
      | // ---IShellTaskScheduler |   |  | 
      | // An interface for interacting with and controlling a task scheduler. This |   |  | 
      | // interface does not need to be free-threaded unless the items in the queue |   |  | 
      | // interact with the scheduler as well as the main execution thread on which the |   |  | 
      | // task scheduler was created. |   |  | 
       |   |  | 
      | // IShellTaskScheduler::AddTask() |   |  | 
      | //      Adds Tasks to the scheduler's background queue. The TASKOWNERID allow pa |   |  | 
      | rticular types |   |  | 
      | //      of tasks to be grouped so that they can be counted or removed. The lPara |   |  | 
      | m allows the task |   |  | 
      | //      to be associated with a particular item (for example an item in a listvi |   |  | 
      | ew). |   |  | 
      | // IShellTaskScheduler::RemoveTasks() |   |  | 
      | //      Removes tasks from the scheduler's queue. These can be sepcified in term |   |  | 
      | s of their TASKOWNERID |   |  | 
      | //      or their LPARAM, or both, or neither (TOID_NULL && ITSAT_DEFAULT_LPARAM  |   |  | 
      | results in all tasks being |   |  | 
      | //      removed). If a task that matches is currently running and ITaskScheduler |   |  | 
      | ::Status() has been |   |  | 
      | //      passeed ITSSFLAG_KILL_ON_DESTROY then the scheduler will attempt to kill |   |  | 
      |  the current task. The |   |  | 
      | //      fWaitIfRunning parameter is then passed to IRunnableTask::Kill(). |   |  | 
      | // IShellTaskScheduler::CountTasks() |   |  | 
      | //      Counts the tasks in the queue depending upon the TASKOWNERID and the LPA |   |  | 
      | RAM passed. (TOID_NULL and |   |  | 
      | //      ITSAT_DEFAULT_LPARAM will count all tasks in the queue) |   |  | 
      | // IShellTaskScheduler::Status() |   |  | 
      | //      This sets the ReleaseStatus for the current task and the background thre |   |  | 
      | ad timeout. When |   |  | 
      | //      ITaskScheduler::RemoveTasks() is called and there is a task currently ru |   |  | 
      | nning that matches |   |  | 
      | //      ITSSFLAG_COMPLETE_ON_DESTROY will cause TRUE to be passed to the task's  |   |  | 
      | IRunnableTask::Kill(). |   |  | 
      | //      The dwThreadTimeout parameter if not set to the default will cause the b |   |  | 
      | ackground thread to |   |  | 
      | //      die if no new tasks have been added to the queue in the timeout period.  |   |  | 
      | The Thread will be |   |  | 
      | //      recreated when the next new task is added. |   |  | 
       |   |  | 
      | //////////////////////// |   |  | 
      | // Status() flags, |   |  | 
      | // wait for the current task to complete before deleting the scheduler |   |  | 
      | #define ITSSFLAG_COMPLETE_ON_DESTROY        0x0000 |   |  | 
       |   |  | 
      | // kill the current task (if there is one) when the task scheduler is deleted |   |  | 
      | #define ITSSFLAG_KILL_ON_DESTROY            0x0001 |   |  | 
       |   |  | 
      | #define ITSSFLAG_SUPPORTS_TERMINATE         0x0002 |   |  | 
       |   |  | 
      | #define ITSSFLAG_FLAGS_MASK                 0x0003 |   |  | 
       |   |  | 
      | // set the timeout for killing the thread when the object is terminated. |   |  | 
      | // this timeout can be used to stop the object from blocking the system |   |  | 
      | // indefinitely. |   |  | 
      | #define ITSSFLAG_THREAD_TERMINATE_TIMEOUT   0x0010 |   |  | 
       |   |  | 
      | // set the timeout for threads that are idle in the thread pool |   |  | 
      | #define ITSSFLAG_THREAD_POOL_TIMEOUT        0x0020 |   |  | 
       |   |  | 
      | // The default timeout passed to release Status to determine how long the thread |   |  | 
      | // can be asleep before the thread is expired |   |  | 
      | #define ITSS_THREAD_DESTROY_DEFAULT_TIMEOUT     (60*1000) |   |  | 
       |   |  | 
      | // default, we won't kill it... |   |  | 
      | #define ITSS_THREAD_TERMINATE_TIMEOUT           (INFINITE) |   |  | 
       |   |  | 
      | // there is no change to the thread timeout |   |  | 
      | #define ITSS_THREAD_TIMEOUT_NO_CHANGE           (INFINITE - 1) |   |  | 
       |   |  | 
      | // the LPARAM allows task to be associated with items thus all tasks owned by a |   |  | 
      | // particular item can be accessed by passing a non default value for this param |   |  | 
      | eter |   |  | 
      | #define ITSAT_DEFAULT_LPARAM        0xffffffff |   |  | 
       |   |  | 
      | // Task priorities |   |  | 
      | // --------------- |   |  | 
      | // This depends on the cooperation of tasks currently under execution. New tasks |   |  | 
      |  will |   |  | 
      | // be inserted in the queue in priority order. If a task of a low priority is cu |   |  | 
      | rrently |   |  | 
      | // under execution when a higher priority task is added, the scheduler will atte |   |  | 
      | mpt |   |  | 
      | // to suspend the task currently under execution. It will be resumed when the ot |   |  | 
      | her tasks |   |  | 
      | // have been completed. |   |  | 
      | #define ITSAT_DEFAULT_PRIORITY      0x10000000 |   |  | 
      | #define ITSAT_MAX_PRIORITY          0x7fffffff |   |  | 
      | #define ITSAT_MIN_PRIORITY          0x00000000 |   |  | 
       |   |  | 
      | #define TOID_NULL   CLSID_NULL |   |  | 
       |   |  | 
      | #undef INTERFACE |   |  | 
      | #define INTERFACE IShellTaskScheduler |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_( IShellTaskScheduler, IUnknown ) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef)(THIS) PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release)(THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IShellTaskScheduler methods *** |   |  | 
      |     STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask, |   |  | 
      |                REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                DWORD dwPriority ) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                BOOL fWaitIfRunning ) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE |   |  | 
      | ; |   |  | 
      | }; |   |  | 
       |   |  | 
      | typedef IShellTaskScheduler * LPSHELLTASKSCHEDULER; |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0501) |   |  | 
       |   |  | 
      | #define ITSSFLAG_TASK_PLACEINFRONT 0x00000001 |   |  | 
      | #define ITSSFLAG_TASK_PLACEINBACK  0x00000002 |   |  | 
       |   |  | 
      | #undef INTERFACE |   |  | 
      | #define INTERFACE IShellTaskScheduler2 |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_( IShellTaskScheduler2, IShellTaskScheduler ) |   |  | 
      | { |   |  | 
      |     // *** IUnknown methods *** |   |  | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef)(THIS) PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release)(THIS) PURE; |   |  | 
       |   |  | 
      |     // *** IShellTaskScheduler methods *** |   |  | 
      |     STDMETHOD (AddTask)(THIS_ IRunnableTask * pTask, |   |  | 
      |                REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                DWORD dwPriority ) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD (RemoveTasks)(THIS_ REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                BOOL fWaitIfRunning ) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD_(UINT, CountTasks)(THIS_ REFTASKOWNERID rtoid) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD (Status)(THIS_ DWORD dwReleaseStatus, DWORD dwThreadTimeout ) PURE |   |  | 
      | ; |   |  | 
       |   |  | 
      |     // *** IShellTaskScheduler2 methods *** |   |  | 
      |     STDMETHOD (AddTask2)(THIS_ IRunnableTask * pTask, |   |  | 
      |                REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                DWORD dwPriority, |   |  | 
      |                DWORD grfFlags ) PURE; |   |  | 
       |   |  | 
      |     STDMETHOD (MoveTask)(THIS_ REFTASKOWNERID rtoid, |   |  | 
      |                DWORD_PTR lParam, |   |  | 
      |                DWORD dwPriority, |   |  | 
      |                DWORD grfFlags ) PURE; |   |  | 
      | }; |   |  | 
       |   |  | 
      | #endif // (_WIN32_IE >= 0x0501) |   |  | 
       |   |  | 
      | #endif // (_WIN32_IE >= 0x0400) |   |  | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   |  | 
      |                                                                                  |   |  | 
      | /* ***************** IThumbnailCapture |   | /* ***************** IThumbnailCapture | 
      |  * CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specifi
ed |   |  * CaptureThumbnail : takes an IHTMLDocument2 and returns a thumbnail of specifi
ed | 
      |  *                    size as an hbitmap |   |  *                    size as an hbitmap | 
      |  */ |   |  */ | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IThumbnailCapture |   | #define INTERFACE   IThumbnailCapture | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_ ( IThumbnailCapture, IUnknown ) |   | DECLARE_INTERFACE_IID_(IThumbnailCapture, IUnknown, "4ea39266-7211-409f-b622-f63
dbd16c533") | 
      | { |   | { | 
      |     // *** IThumbnailCapture methods *** |   |     // *** IThumbnailCapture methods *** | 
      |     STDMETHOD (CaptureThumbnail)    ( THIS_ const SIZE * pMaxSize, |   |     STDMETHOD (CaptureThumbnail)    ( THIS_ const SIZE * pMaxSize, | 
      |                                       IUnknown * pHTMLDoc2, |   |                                       IUnknown * pHTMLDoc2, | 
      |                                       HBITMAP * phbmThumbnail ) PURE; |   |                                       HBITMAP * phbmThumbnail ) PURE; | 
      | }; |   | }; | 
      | typedef IThumbnailCapture * LPTHUMBNAILCAPTURE; |   | typedef IThumbnailCapture * LPTHUMBNAILCAPTURE; | 
       |   |  | 
      | #endif |   | #endif | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN) | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
      | typedef struct _EnumImageStoreDATAtag |   | typedef struct _EnumImageStoreDATAtag | 
      | { |   | { | 
      |     WCHAR     szPath[MAX_PATH]; |   |     WCHAR     szPath[MAX_PATH]; | 
      |     FILETIME  ftTimeStamp; |   |     FILETIME  ftTimeStamp; | 
      | } ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA; |   | } ENUMSHELLIMAGESTOREDATA, * PENUMSHELLIMAGESTOREDATA; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IEnumShellImageStore |   | #define INTERFACE   IEnumShellImageStore | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_( IEnumShellImageStore, IUnknown ) |   | DECLARE_INTERFACE_IID_( IEnumShellImageStore, IUnknown, "6DFD582B-92E3-11D1-98A3
-00C04FB687DA" ) | 
      | { |   | { | 
      |     STDMETHOD ( QueryInterface ) ( THIS_ REFIID riid, void **ppv ) PURE; |   |     STDMETHOD ( QueryInterface ) ( THIS_ REFIID riid, void **ppv ) PURE; | 
      |     STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; |   |     STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; | 
      |     STDMETHOD_( ULONG, Release ) ( THIS ) PURE; |   |     STDMETHOD_( ULONG, Release ) ( THIS ) PURE; | 
       |   |  | 
      |     STDMETHOD ( Reset ) ( THIS ) PURE; |   |     STDMETHOD ( Reset ) ( THIS ) PURE; | 
      |     STDMETHOD ( Next ) ( THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA * prgElt, UL
ONG * pceltFetched ) PURE; |   |     STDMETHOD ( Next ) ( THIS_ ULONG celt, PENUMSHELLIMAGESTOREDATA * prgElt, UL
ONG * pceltFetched ) PURE; | 
      |     STDMETHOD ( Skip ) ( THIS_ ULONG celt ) PURE; |   |     STDMETHOD ( Skip ) ( THIS_ ULONG celt ) PURE; | 
      |     STDMETHOD ( Clone ) ( THIS_ IEnumShellImageStore ** ppEnum ) PURE; |   |     STDMETHOD ( Clone ) ( THIS_ IEnumShellImageStore ** ppEnum ) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | skipping to change at line 2840 |   | skipping to change at line 1845 | 
       |   |  | 
      | // flags used to determine the capabilities of the storage for the images |   | // flags used to determine the capabilities of the storage for the images | 
      | #define SHIMSTCAPFLAG_LOCKABLE    0x0001       // does the store require/support
 locking |   | #define SHIMSTCAPFLAG_LOCKABLE    0x0001       // does the store require/support
 locking | 
      | #define SHIMSTCAPFLAG_PURGEABLE   0x0002       // does the store require dead it
ems purging externally ? |   | #define SHIMSTCAPFLAG_PURGEABLE   0x0002       // does the store require dead it
ems purging externally ? | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellImageStore |   | #define INTERFACE   IShellImageStore | 
       |   |  | 
      | // this interface is used to manipulate the Image cache. It can potentially be u
sed |   | // this interface is used to manipulate the Image cache. It can potentially be u
sed | 
      | // in a free threaded manner in conjunction with the Lock parameter to Open and 
close |   | // in a free threaded manner in conjunction with the Lock parameter to Open and 
close | 
       | 
      | DECLARE_INTERFACE_( IShellImageStore, IUnknown ) |   | DECLARE_INTERFACE_IID_( IShellImageStore, IUnknown, "48C8118C-B924-11D1-98D5-00C
04FB687DA" ) | 
      | { |   | { | 
      |     STDMETHOD ( QueryInterface )( THIS_ REFIID riid, void **ppv ) PURE; |   |     STDMETHOD ( QueryInterface )( THIS_ REFIID riid, void **ppv ) PURE; | 
      |     STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; |   |     STDMETHOD_( ULONG, AddRef ) ( THIS ) PURE; | 
      |     STDMETHOD_( ULONG, Release ) ( THIS ) PURE; |   |     STDMETHOD_( ULONG, Release ) ( THIS ) PURE; | 
       |   |  | 
      |     // if the lock parameter is used, then all other calls into |   |     // if the lock parameter is used, then all other calls into | 
      |     // open and/or create will block until the lock is released. |   |     // open and/or create will block until the lock is released. | 
      |     STDMETHOD ( Open ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; |   |     STDMETHOD ( Open ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; | 
      |     STDMETHOD ( Create ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; |   |     STDMETHOD ( Create ) ( THIS_ DWORD dwMode, DWORD * pdwLock ) PURE; | 
       |   |  | 
       |   |  | 
      | skipping to change at line 2870 |   | skipping to change at line 1875 | 
       |   |  | 
      |     STDMETHOD ( AddEntry ) ( THIS_ LPCWSTR pszName, const FILETIME * pftTimeStam
p, DWORD dwMode, HBITMAP hImage ) PURE; |   |     STDMETHOD ( AddEntry ) ( THIS_ LPCWSTR pszName, const FILETIME * pftTimeStam
p, DWORD dwMode, HBITMAP hImage ) PURE; | 
      |     STDMETHOD ( GetEntry ) ( THIS_ LPCWSTR pszName, DWORD dwMode, HBITMAP * phIm
age ) PURE; |   |     STDMETHOD ( GetEntry ) ( THIS_ LPCWSTR pszName, DWORD dwMode, HBITMAP * phIm
age ) PURE; | 
      |     STDMETHOD ( DeleteEntry ) ( THIS_ LPCWSTR pszName ) PURE; |   |     STDMETHOD ( DeleteEntry ) ( THIS_ LPCWSTR pszName ) PURE; | 
      |     STDMETHOD ( IsEntryInStore ) ( THIS_ LPCWSTR pszName, FILETIME * pftTimeStam
p ) PURE; |   |     STDMETHOD ( IsEntryInStore ) ( THIS_ LPCWSTR pszName, FILETIME * pftTimeStam
p ) PURE; | 
       |   |  | 
      |     STDMETHOD ( Enum ) ( THIS_ LPENUMSHELLIMAGESTORE * ppEnum ) PURE; |   |     STDMETHOD ( Enum ) ( THIS_ LPENUMSHELLIMAGESTORE * ppEnum ) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IShellImageStore * LPSHELLIMAGESTORE; |   | typedef IShellImageStore * LPSHELLIMAGESTORE; | 
       | 
      | #endif |   |                                                                                  | 
       |   | #endif  // (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN) | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
       |   |  | 
      | ////  IShellFolderBand |   | ////  IShellFolderBand | 
       |   |  | 
      | // Field mask |   | // Field mask | 
      | #define ISFB_MASK_STATE          0x00000001 // TRUE if dwStateMask and dwState i
s valid |   | #define ISFB_MASK_STATE          0x00000001 // TRUE if dwStateMask and dwState i
s valid | 
      | #define ISFB_MASK_BKCOLOR        0x00000002 // TRUE if crBkgnd field is valid |   | #define ISFB_MASK_BKCOLOR        0x00000002 // TRUE if crBkgnd field is valid | 
      | #define ISFB_MASK_VIEWMODE       0x00000004 // TRUE if wViewMode field is valid |   | #define ISFB_MASK_VIEWMODE       0x00000004 // TRUE if wViewMode field is valid | 
      | #define ISFB_MASK_SHELLFOLDER    0x00000008 |   | #define ISFB_MASK_SHELLFOLDER    0x00000008 | 
       |   |  | 
      | skipping to change at line 2896 |   | skipping to change at line 1902 | 
      | #define ISFB_STATE_ALLOWRENAME   0x00000002 |   | #define ISFB_STATE_ALLOWRENAME   0x00000002 | 
      | #define ISFB_STATE_NOSHOWTEXT    0x00000004 // TRUE if _fNoShowText |   | #define ISFB_STATE_NOSHOWTEXT    0x00000004 // TRUE if _fNoShowText | 
      | #define ISFB_STATE_CHANNELBAR    0x00000010 // TRUE if we want NavigateTarget su
pport |   | #define ISFB_STATE_CHANNELBAR    0x00000010 // TRUE if we want NavigateTarget su
pport | 
      | #define ISFB_STATE_QLINKSMODE    0x00000020 // TRUE if we want to turn off drag 
& drop onto content items |   | #define ISFB_STATE_QLINKSMODE    0x00000020 // TRUE if we want to turn off drag 
& drop onto content items | 
      | #define ISFB_STATE_FULLOPEN      0x00000040 // TRUE if band should maximize when
 opened |   | #define ISFB_STATE_FULLOPEN      0x00000040 // TRUE if band should maximize when
 opened | 
      | #define ISFB_STATE_NONAMESORT    0x00000080 // TRUE if band should _not_ sort ic
ons by name |   | #define ISFB_STATE_NONAMESORT    0x00000080 // TRUE if band should _not_ sort ic
ons by name | 
      | #define ISFB_STATE_BTNMINSIZE    0x00000100 // TRUE if band should report min th
ickness of button |   | #define ISFB_STATE_BTNMINSIZE    0x00000100 // TRUE if band should report min th
ickness of button | 
       |   |  | 
      | #define ISFBVIEWMODE_SMALLICONS   0x0001 |   | #define ISFBVIEWMODE_SMALLICONS   0x0001 | 
      | #define ISFBVIEWMODE_LARGEICONS   0x0002 |   | #define ISFBVIEWMODE_LARGEICONS   0x0002 | 
       | 
       |   | #if (_WIN32_IE < _WIN32_IE_IE70) | 
      | #define ISFBVIEWMODE_LOGOS        0x0003 |   | #define ISFBVIEWMODE_LOGOS        0x0003 | 
       | 
       |   | #endif | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
      | typedef struct { |   | typedef struct { | 
      |     DWORD       dwMask;       // [in] ISFB_MASK mask of valid fields from crBkgn
d on |   |     DWORD       dwMask;       // [in] ISFB_MASK mask of valid fields from crBkgn
d on | 
      |     DWORD       dwStateMask;  // [in] ISFB_STATE mask of dwState bits being set/
queried |   |     DWORD       dwStateMask;  // [in] ISFB_STATE mask of dwState bits being set/
queried | 
      |     DWORD       dwState;      // [in/out] ISFB_STATE bits |   |     DWORD       dwState;      // [in/out] ISFB_STATE bits | 
      |     COLORREF    crBkgnd;      // [in/out] |   |     COLORREF    crBkgnd;      // [in/out] | 
      |     COLORREF    crBtnLt;      // [in/out] |   |     COLORREF    crBtnLt;      // [in/out] | 
      |     COLORREF    crBtnDk;      // [in/out] |   |     COLORREF    crBtnDk;      // [in/out] | 
      |     WORD        wViewMode;    // [in/out] |   |     WORD        wViewMode;    // [in/out] | 
      |     WORD        wAlign;       // not used (yet) |   |     WORD        wAlign;       // not used (yet) | 
      |     IShellFolder * psf;       // [out] |   |     IShellFolder * psf;       // [out] | 
       | 
      |     LPITEMIDLIST   pidl;      // [out] |   |     PIDLIST_ABSOLUTE pidl;      // [out] | 
      | } BANDINFOSFB, *PBANDINFOSFB; |   | } BANDINFOSFB, *PBANDINFOSFB; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IShellFolderBand |   | #define INTERFACE IShellFolderBand | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellFolderBand, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellFolderBand, IUnknown, "7FE80CC8-C247-11d0-B93A-00A0
C90312E1") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellFolderBand Methods *** |   |     // *** IShellFolderBand Methods *** | 
       | 
      |     STDMETHOD(InitializeSFB)(THIS_ IShellFolder *psf, LPCITEMIDLIST pidl) PURE; |   |     STDMETHOD(InitializeSFB)(THIS_ __in_opt IShellFolder *psf, __in_opt PCIDLIST | 
      |     STDMETHOD(SetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; |   | _ABSOLUTE pidl) PURE; | 
      |     STDMETHOD(GetBandInfoSFB)(THIS_ PBANDINFOSFB pbi) PURE; |   |     STDMETHOD(SetBandInfoSFB)(THIS_ __in PBANDINFOSFB pbi) PURE; | 
       |   |     STDMETHOD(GetBandInfoSFB)(THIS_ __inout PBANDINFOSFB pbi) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | // Command Target IDs |   | // Command Target IDs | 
      | enum { |   | enum { | 
      |     SFBID_PIDLCHANGED, |   |     SFBID_PIDLCHANGED, | 
      | }; |   | }; | 
       |   |  | 
      | ////  IDeskBarClient |   | ////  IDeskBarClient | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IDeskBarClient |   | #define INTERFACE   IDeskBarClient | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IDeskBarClient, IOleWindow) |   | DECLARE_INTERFACE_IID_(IDeskBarClient, IOleWindow, "EB0FE175-1A3A-11D0-89B3-00A0
C90A90AC") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IOleWindow methods *** |   |     // *** IOleWindow methods *** | 
       | 
      |     STDMETHOD(GetWindow) (THIS_ HWND * lphwnd) PURE; |   |     STDMETHOD(GetWindow) (THIS_ __out HWND * lphwnd) PURE; | 
      |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; |   |     STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE; | 
       |   |  | 
      |     // *** IDeskBarClient methods *** |   |     // *** IDeskBarClient methods *** | 
       | 
      |     STDMETHOD(SetDeskBarSite)   (THIS_ IUnknown* punkSite) PURE; |   |     STDMETHOD(SetDeskBarSite) (THIS_ __in_opt IUnknown* punkSite) PURE; | 
      |     STDMETHOD(SetModeDBC)          (THIS_ DWORD dwMode) PURE; |   |     STDMETHOD(SetModeDBC) (THIS_ DWORD dwMode) PURE; | 
      |     STDMETHOD(UIActivateDBC)    (THIS_ DWORD dwState) PURE; |   |     STDMETHOD(UIActivateDBC) (THIS_ DWORD dwState) PURE; | 
      |     STDMETHOD(GetSize)    (THIS_ DWORD dwWhich, LPRECT prc) PURE; |   |     STDMETHOD(GetSize) (THIS_ DWORD dwWhich, __out LPRECT prc) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #define DBC_GS_IDEAL          0  // get the ideal size |   | #define DBC_GS_IDEAL          0  // get the ideal size | 
      | #define DBC_GS_SIZEDOWN       1  // clip the height of a rect to a multiple of t
he rebar's integral size |   | #define DBC_GS_SIZEDOWN       1  // clip the height of a rect to a multiple of t
he rebar's integral size | 
       |   |  | 
      | #define DBC_HIDE        0 // Band is hidden (being destroyed) |   | #define DBC_HIDE        0 // Band is hidden (being destroyed) | 
      | #define DBC_SHOW        1 // Band is visible |   | #define DBC_SHOW        1 // Band is visible | 
      | #define DBC_SHOWOBSCURE 2 // Band is completely obscured |   | #define DBC_SHOWOBSCURE 2 // Band is completely obscured | 
       |   |  | 
      | enum { |   | enum { | 
      |     DBCID_EMPTY = 0,        // bandsite is empty |   |     DBCID_EMPTY = 0,        // bandsite is empty | 
      |     DBCID_ONDRAG = 1,       // (down)DragMoveEnter/Leave vaIn:I4:eDrag |   |     DBCID_ONDRAG = 1,       // (down)DragMoveEnter/Leave vaIn:I4:eDrag | 
      |     DBCID_CLSIDOFBAR = 2,   // clsid of bar inside |   |     DBCID_CLSIDOFBAR = 2,   // clsid of bar inside | 
      |     DBCID_RESIZE = 3,       // resize from keyboard |   |     DBCID_RESIZE = 3,       // resize from keyboard | 
      |     DBCID_GETBAR = 4,       // returns vaOut:VT_UNKNOWN of hosting dockbar (IDes
kBar) |   |     DBCID_GETBAR = 4,       // returns vaOut:VT_UNKNOWN of hosting dockbar (IDes
kBar) | 
      | }; |   | }; | 
       |   |  | 
       | 
      | #endif // (_WIN32_IE > 0x0400) |   | #endif // _WIN32_IE > 0x0400 | 
       |   |  | 
      | #if (_WIN32_IE >= 0x400) |   | #if (_WIN32_IE >= 0x400) | 
      | // |   | // | 
      | // We need to make sure that WININET.H is included before this interface is |   | // We need to make sure that WININET.H is included before this interface is | 
      | // used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH |   | // used because the COMPONENT structure uses INTERNET_MAX_URL_LENGTH | 
      | // |   | // | 
      | #ifdef _WININET_ |   | #ifdef _WININET_ | 
      | // |   | // | 
      | //  Flags and structures used by IActiveDesktop |   | //  Flags and structures used by IActiveDesktop | 
      | // |   | // | 
       |   |  | 
      | skipping to change at line 3116 |   | skipping to change at line 2124 | 
      | // Flags for IActiveDesktop::ApplyChanges() |   | // Flags for IActiveDesktop::ApplyChanges() | 
      | #define AD_APPLY_SAVE             0x00000001 |   | #define AD_APPLY_SAVE             0x00000001 | 
      | #define AD_APPLY_HTMLGEN          0x00000002 |   | #define AD_APPLY_HTMLGEN          0x00000002 | 
      | #define AD_APPLY_REFRESH          0x00000004 |   | #define AD_APPLY_REFRESH          0x00000004 | 
      | #define AD_APPLY_ALL              (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_R
EFRESH) |   | #define AD_APPLY_ALL              (AD_APPLY_SAVE | AD_APPLY_HTMLGEN | AD_APPLY_R
EFRESH) | 
      | #define AD_APPLY_FORCE            0x00000008 |   | #define AD_APPLY_FORCE            0x00000008 | 
      | #define AD_APPLY_BUFFERED_REFRESH 0x00000010 |   | #define AD_APPLY_BUFFERED_REFRESH 0x00000010 | 
      | #define AD_APPLY_DYNAMICREFRESH   0x00000020 |   | #define AD_APPLY_DYNAMICREFRESH   0x00000020 | 
       |   |  | 
      | //////////////////////////////////////////// |   | //////////////////////////////////////////// | 
       | 
       |   | // Flags for IActiveDesktop::GetWallpaper() | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define AD_GETWP_BMP            0x00000000 | 
       |   | #define AD_GETWP_IMAGE          0x00000001 | 
       |   | #define AD_GETWP_LAST_APPLIED   0x00000002 | 
       |   | #endif | 
       |   |  | 
       |   | //////////////////////////////////////////// | 
      | // Flags for IActiveDesktop::GetWallpaperOptions() |   | // Flags for IActiveDesktop::GetWallpaperOptions() | 
      | //           IActiveDesktop::SetWallpaperOptions() |   | //           IActiveDesktop::SetWallpaperOptions() | 
      | #define WPSTYLE_CENTER      0 |   | #define WPSTYLE_CENTER      0 | 
      | #define WPSTYLE_TILE        1 |   | #define WPSTYLE_TILE        1 | 
      | #define WPSTYLE_STRETCH     2 |   | #define WPSTYLE_STRETCH     2 | 
      | #define WPSTYLE_MAX         3 |   | #define WPSTYLE_MAX         3 | 
       |   |  | 
      | //////////////////////////////////////////// |   | //////////////////////////////////////////// | 
      | // Flags for IActiveDesktop::ModifyComponent() |   | // Flags for IActiveDesktop::ModifyComponent() | 
       |   |  | 
       |   |  | 
      | skipping to change at line 3173 |   | skipping to change at line 2189 | 
      | #define COMPONENT_DEFAULT_LEFT    (0xFFFF) |   | #define COMPONENT_DEFAULT_LEFT    (0xFFFF) | 
      | #define COMPONENT_DEFAULT_TOP     (0xFFFF) |   | #define COMPONENT_DEFAULT_TOP     (0xFFFF) | 
       |   |  | 
      | // |   | // | 
      | //  Interface for manipulating the Active Desktop. |   | //  Interface for manipulating the Active Desktop. | 
      | // |   | // | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IActiveDesktop |   | #define INTERFACE IActiveDesktop | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_( IActiveDesktop, IUnknown ) |   | DECLARE_INTERFACE_IID_(IActiveDesktop, IUnknown, "f490eb00-1240-11d1-9888-006097
deacf9") | 
      | { |   | { | 
      |     // IUnknown methods |   |     // IUnknown methods | 
       | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | 
      |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; | 
       |   |  | 
      |     // IActiveDesktop methods |   |     // IActiveDesktop methods | 
      |     STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE; |   |     STDMETHOD (ApplyChanges)(THIS_ DWORD dwFlags) PURE; | 
       | 
      |     STDMETHOD (GetWallpaper)(THIS_ LPWSTR pwszWallpaper, UINT cchWallpaper, DWOR
D dwReserved) PURE; |   |     STDMETHOD (GetWallpaper)(THIS_ __out_ecount(cchWallpaper) LPWSTR pwszWallpap
er, UINT cchWallpaper, DWORD dwFlags) PURE; | 
      |     STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE
; |   |     STDMETHOD (SetWallpaper)(THIS_ LPCWSTR pwszWallpaper, DWORD dwReserved) PURE
; | 
       | 
      |     STDMETHOD (GetWallpaperOptions)(THIS_ LPWALLPAPEROPT pwpo, DWORD dwReserved) |   |     STDMETHOD (GetWallpaperOptions)(THIS_ __inout LPWALLPAPEROPT pwpo, DWORD dwR | 
      |  PURE; |   | eserved) PURE; | 
      |     STDMETHOD (SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT pwpo, DWORD dwReserved |   |     STDMETHOD (SetWallpaperOptions)(THIS_ __in LPCWALLPAPEROPT pwpo, DWORD dwRes | 
      | ) PURE; |   | erved) PURE; | 
      |     STDMETHOD (GetPattern)(THIS_ LPWSTR pwszPattern, UINT cchPattern, DWORD dwRe |   |     STDMETHOD (GetPattern)(THIS_ __out_ecount(cchPattern) LPWSTR pwszPattern, UI | 
      | served) PURE; |   | NT cchPattern, DWORD dwReserved) PURE; | 
      |     STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE; |   |     STDMETHOD (SetPattern)(THIS_ LPCWSTR pwszPattern, DWORD dwReserved) PURE; | 
       | 
      |     STDMETHOD (GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT pco, DWORD dwReserve |   |     STDMETHOD (GetDesktopItemOptions)(THIS_ __inout LPCOMPONENTSOPT pco, DWORD d | 
      | d) PURE; |   | wReserved) PURE; | 
      |     STDMETHOD (SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT pco, DWORD dwReserv |   |     STDMETHOD (SetDesktopItemOptions)(THIS_ __in LPCCOMPONENTSOPT pco, DWORD dwR | 
      | ed) PURE; |   | eserved) PURE; | 
      |     STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE; |   |     STDMETHOD (AddDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserved)  | 
      |     STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, LPCOMPONENT pcomp, DWORD d |   | PURE; | 
      | wReserved) PURE; |   |     STDMETHOD (AddDesktopItemWithUI)(THIS_ HWND hwnd, __in LPCOMPONENT pcomp, DW | 
      |     STDMETHOD (ModifyDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwFlags) PURE; |   | ORD dwReserved) PURE; | 
      |     STDMETHOD (RemoveDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PU |   |     STDMETHOD (ModifyDesktopItem)(THIS_ __inout LPCCOMPONENT pcomp, DWORD dwFlag | 
      | RE; |   | s) PURE; | 
      |     STDMETHOD (GetDesktopItemCount)(THIS_ LPINT lpiCount, DWORD dwReserved) PURE |   |     STDMETHOD (RemoveDesktopItem)(THIS_ __in LPCCOMPONENT pcomp, DWORD dwReserve | 
      | ; |   | d) PURE; | 
      |     STDMETHOD (GetDesktopItem)(THIS_ int nComponent, LPCOMPONENT pcomp, DWORD dw |   |     STDMETHOD (GetDesktopItemCount)(THIS_ __out LPINT lpiCount, DWORD dwReserved | 
      | Reserved) PURE; |   | ) PURE; | 
      |     STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, LPCOMPONENT pcomp, DWOR |   |     STDMETHOD (GetDesktopItem)(THIS_ int nComponent, __inout LPCOMPONENT pcomp,  | 
      | D dwReserved) PURE; |   | DWORD dwReserved) PURE; | 
      |     STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, LPCOMPONENT  |   |     STDMETHOD (GetDesktopItemByID)(THIS_ ULONG_PTR dwID, __inout LPCOMPONENT pco | 
      | pcomp, DWORD dwReserved) PURE; |   | mp, DWORD dwReserved) PURE; | 
      |     STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, LPCOMPONENT pcomp, DW |   |     STDMETHOD (GenerateDesktopItemHtml)(THIS_ LPCWSTR pwszFileName, __in LPCOMPO | 
      | ORD dwFlags) PURE; |   | NENT pcomp, DWORD dwReserved) PURE; | 
      |     STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, LPCOMPONENT pco |   |     STDMETHOD (AddUrl)(THIS_ HWND hwnd, LPCWSTR pszSource, __in LPCOMPONENT pcom | 
      | mp, DWORD dwReserved) PURE; |   | p, DWORD dwFlags) PURE; | 
       |   |     STDMETHOD (GetDesktopItemBySource)(THIS_ LPCWSTR pwszSource, __inout LPCOMPO | 
       |   | NENT pcomp, DWORD dwReserved) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IActiveDesktop * LPACTIVEDESKTOP; |   | typedef IActiveDesktop * LPACTIVEDESKTOP; | 
       |   |  | 
      | // Flags for SetSafeMode |   | // Flags for SetSafeMode | 
      | #define SSM_CLEAR   0x0000 |   | #define SSM_CLEAR   0x0000 | 
      | #define SSM_SET     0x0001 |   | #define SSM_SET     0x0001 | 
      | #define SSM_REFRESH 0x0002 |   | #define SSM_REFRESH 0x0002 | 
      | #define SSM_UPDATE  0x0004 |   | #define SSM_UPDATE  0x0004 | 
       |   |  | 
       |   |  | 
      | skipping to change at line 3223 |   | skipping to change at line 2239 | 
      | #define SCHEME_LOCAL            0x0004 |   | #define SCHEME_LOCAL            0x0004 | 
      | #define SCHEME_GLOBAL           0x0008 |   | #define SCHEME_GLOBAL           0x0008 | 
      | #define SCHEME_REFRESH          0x0010 |   | #define SCHEME_REFRESH          0x0010 | 
      | #define SCHEME_UPDATE           0x0020 |   | #define SCHEME_UPDATE           0x0020 | 
      | #define SCHEME_DONOTUSE 0x0040 // used to be SCHEME_ENUMERATE; no longer support
ed |   | #define SCHEME_DONOTUSE 0x0040 // used to be SCHEME_ENUMERATE; no longer support
ed | 
      | #define SCHEME_CREATE           0x0080 |   | #define SCHEME_CREATE           0x0080 | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IActiveDesktopP |   | #define INTERFACE IActiveDesktopP | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_( IActiveDesktopP, IUnknown ) |   | DECLARE_INTERFACE_IID_(IActiveDesktopP, IUnknown, "52502EE0-EC80-11D0-89AB-00C04
FC2972D") | 
      | { |   | { | 
      |     // IUnknown methods |   |     // IUnknown methods | 
       | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | 
      |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; | 
       |   |  | 
      |     // IActiveDesktopP methods |   |     // IActiveDesktopP methods | 
      |     STDMETHOD (SetSafeMode)(THIS_ DWORD dwFlags) PURE; |   |     STDMETHOD (SetSafeMode)(THIS_ DWORD dwFlags) PURE; | 
      |     STDMETHOD (EnsureUpdateHTML)(THIS) PURE; |   |     STDMETHOD (EnsureUpdateHTML)(THIS) PURE; | 
      |     STDMETHOD (SetScheme)(THIS_ LPCWSTR pwszSchemeName, DWORD dwFlags) PURE; |   |     STDMETHOD (SetScheme)(THIS_ LPCWSTR pwszSchemeName, DWORD dwFlags) PURE; | 
       | 
      |     STDMETHOD (GetScheme)(THIS_ LPWSTR pwszSchemeName, DWORD *lpdwcchBuffer, DWO
RD dwFlags) PURE; |   |     STDMETHOD (GetScheme)(THIS_ __out_ecount(*lpdwcchBuffer) LPWSTR pwszSchemeNa
me, __inout DWORD *lpdwcchBuffer, DWORD dwFlags) PURE; | 
      |     // |   |     // | 
      | }; |   | }; | 
       |   |  | 
      | typedef IActiveDesktopP * LPACTIVEDESKTOPP; |   | typedef IActiveDesktopP * LPACTIVEDESKTOPP; | 
       |   |  | 
      | //Flags for GetObjectFlags |   | //Flags for GetObjectFlags | 
      | #define GADOF_DIRTY    0x00000001 |   | #define GADOF_DIRTY    0x00000001 | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IADesktopP2 |   | #define INTERFACE IADesktopP2 | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_( IADesktopP2, IUnknown ) |   | DECLARE_INTERFACE_IID_(IADesktopP2, IUnknown, "B22754E2-4574-11d1-9888-006097DEA
CF9") | 
      | { |   | { | 
      |     // IUnknown methods |   |     // IUnknown methods | 
       | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; | 
      |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; |   |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; | 
       |   |  | 
      |     // IADesktopP2 methods |   |     // IADesktopP2 methods | 
      |     STDMETHOD (ReReadWallpaper)(THIS) PURE; |   |     STDMETHOD (ReReadWallpaper)(THIS) PURE; | 
       | 
      |     STDMETHOD (GetADObjectFlags)(THIS_ DWORD *lpdwFlags, DWORD dwMask) PURE; |   |     STDMETHOD (GetADObjectFlags)(THIS_ __out DWORD *lpdwFlags, DWORD dwMask) PUR
E; | 
      |     STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE; |   |     STDMETHOD (UpdateAllDesktopSubscriptions)(THIS) PURE; | 
       | 
      |     STDMETHOD (MakeDynamicChanges)(THIS_ IOleObject *pOleObj) PURE; |   |     STDMETHOD (MakeDynamicChanges)(THIS_ __in IOleObject *pOleObj) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | typedef IADesktopP2 * LPADESKTOPP2; |   | typedef IADesktopP2 * LPADESKTOPP2; | 
       |   |  | 
      | #endif // _WININET_ |   | #endif // _WININET_ | 
       |   |  | 
      | #if (_WIN32_IE >= 0x0500) |   | #if (_WIN32_IE >= 0x0500) | 
       |   |  | 
      | #define MAX_COLUMN_NAME_LEN 80 |   | #define MAX_COLUMN_NAME_LEN 80 | 
      | #define MAX_COLUMN_DESC_LEN 128 |   | #define MAX_COLUMN_DESC_LEN 128 | 
       |   |  | 
      | skipping to change at line 3311 |   | skipping to change at line 2327 | 
      | } SHCOLUMNDATA, *LPSHCOLUMNDATA; |   | } SHCOLUMNDATA, *LPSHCOLUMNDATA; | 
      | typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA; |   | typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
      | #undef INTERFACE |   | #undef INTERFACE | 
      | #define INTERFACE IColumnProvider |   | #define INTERFACE IColumnProvider | 
       |   |  | 
      | // Note: these objects must be threadsafe!  GetItemData _will_ be called |   | // Note: these objects must be threadsafe!  GetItemData _will_ be called | 
      | // simultaneously from multiple threads. |   | // simultaneously from multiple threads. | 
       | 
      | DECLARE_INTERFACE_(IColumnProvider, IUnknown) |   | DECLARE_INTERFACE_IID_(IColumnProvider, IUnknown, "E8025004-1C42-11d2-BE2C-00A0C
9A83DA1") | 
      | { |   | { | 
      |     // IUnknown methods |   |     // IUnknown methods | 
       | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG, AddRef)(THIS) PURE; |   |     STDMETHOD_(ULONG, AddRef)(THIS) PURE; | 
      |     STDMETHOD_(ULONG, Release)(THIS) PURE; |   |     STDMETHOD_(ULONG, Release)(THIS) PURE; | 
       |   |  | 
      |     // IColumnProvider methods |   |     // IColumnProvider methods | 
      |     STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE; |   |     STDMETHOD (Initialize)(THIS_ LPCSHCOLUMNINIT psci) PURE; | 
       | 
      |     STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, SHCOLUMNINFO *psci) PURE; |   |     STDMETHOD (GetColumnInfo)(THIS_ DWORD dwIndex, __out SHCOLUMNINFO *psci) PUR | 
      |     STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, VAR |   | E; | 
      | IANT *pvarData) PURE; |   |     STDMETHOD (GetItemData)(THIS_ LPCSHCOLUMNID pscid, LPCSHCOLUMNDATA pscd, __o | 
      | }; |   | ut VARIANT *pvarData) PURE; | 
       |   |  | 
      | /////////////////////////////////////////////////////// |   |  | 
      | // |   |  | 
      | // Drag and Drop helper |   |  | 
      | // |   |  | 
      | // Purpose: To expose the Shell drag images |   |  | 
      | // |   |  | 
      | // This interface is implemented in the shell by CLSID_DragDropHelper. |   |  | 
      | // |   |  | 
      | // To use: |   |  | 
      | //   If you are the source of a drag (i.e. in response to LV_DRAGBEGIN or |   |  | 
      | //    equivelent begin drag message) call |   |  | 
      | //    IDragSourceHelper::InitializeFromWindow |   |  | 
      | //              (<hwnd of window supporting DI_GETDRAGIMAGE>, |   |  | 
      | //               <pointer to POINT indicating offset to the mouse from |   |  | 
      | //                  the upper left corner of the image>, |   |  | 
      | //               <pointer to data object>) |   |  | 
      | // |   |  | 
      | //      NOTE: The Data object must support IDataObject::SetData with multiple |   |  | 
      | //            data types and GetData must implement data type cloning |   |  | 
      | //            (Including HGLOBAL), not just aliasing. |   |  | 
      | // |   |  | 
      | //   If you wish to have an image while over your application add the |   |  | 
      | //    IDragImages::Dr* calls to your IDropTarget implementation. For Example: |   |  | 
      | // |   |  | 
      | //    STDMETHODIMP CUserDropTarget::DragEnter(IDataObject* pDataObject, |   |  | 
      | //                                            DWORD grfKeyState, |   |  | 
      | //                                            POINTL pt, DWORD* pdwEffect) |   |  | 
      | //    { |   |  | 
      | //          // Process your DragEnter |   |  | 
      | //          // Call IDragImages::DragEnter last. |   |  | 
      | //          _pDropTargetHelper->DragEnter(_hwndDragOver, pDataObject, |   |  | 
      | //                                        (POINT*)&pt, *pdwEffect); |   |  | 
      | //          return hres; |   |  | 
      | //    } |   |  | 
      | // |   |  | 
      | // |   |  | 
      | //   If you wish to be able to source a drag image from a custom control, |   |  | 
      | //     implement a handler for the RegisterWindowMessage(DI_GETDRAGIMAGE). |   |  | 
      | //     The LPARAM is a pointer to an SHDRAGIMAGE structure. |   |  | 
      | // |   |  | 
      | //      sizeDragImage  -   Calculate the length and width required to render |   |  | 
      | //                          the images. |   |  | 
      | //      ptOffset       -   Calculate the offset from the upper left corner to |   |  | 
      | //                          the mouse cursor within the image |   |  | 
      | //      hbmpDragImage  -   CreateBitmap( sizeDragImage.cx, sizeDragImage.cy, |   |  | 
      | //                           GetDeviceCaps(hdcScreen, PLANES), |   |  | 
      | //                           GetDeviceCaps(hdcScreen, BITSPIXEL), |   |  | 
      | //                           NULL); |   |  | 
      | // |   |  | 
      | //   Drag Images will only be displayed on Windows NT 5.0 or later. |   |  | 
      | // |   |  | 
      | // |   |  | 
      | //   Note about IDropTargetHelper::Show - This method is provided for |   |  | 
      | //     showing/hiding the Drag image in low color depth video modes. When |   |  | 
      | //     painting to a window that is currently being dragged over (i.e. For |   |  | 
      | //     indicating a selection) you need to hide the drag image by calling this |   |  | 
      | //     method passing FALSE. After the window is done painting, Show the image |   |  | 
      | //     again by passing TRUE. |   |  | 
       |   |  | 
      | #include <pshpack8.h> |   |  | 
       |   |  | 
      | typedef struct |   |  | 
      | { |   |  | 
      |     SIZE        sizeDragImage;      // OUT - The length and Width of the |   |  | 
      |                                     //        rendered image |   |  | 
      |     POINT       ptOffset;           // OUT - The Offset from the mouse cursor to |   |  | 
      |                                     //        the upper left corner of the image |   |  | 
      |     HBITMAP     hbmpDragImage;      // OUT - The Bitmap containing the rendered |   |  | 
      |                                     //        drag images |   |  | 
      |     COLORREF    crColorKey;         // OUT - The COLORREF that has been blitted |   |  | 
      |                                     //        to the background of the images |   |  | 
      | } SHDRAGIMAGE, *LPSHDRAGIMAGE; |   |  | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   |  | 
       |   |  | 
      | // This is sent to a window to get the rendered images to a bitmap |   |  | 
      | // Call RegisterWindowMessage to get the ID |   |  | 
      | #define DI_GETDRAGIMAGE     TEXT("ShellGetDragImage") |   |  | 
       |   |  | 
      | #undef INTERFACE |   |  | 
      | #define INTERFACE IDropTargetHelper |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_( IDropTargetHelper, IUnknown ) |   |  | 
      | { |   |  | 
      |     // IUnknown methods |   |  | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; |   |  | 
       |   |  | 
      |     // IDropTargetHelper |   |  | 
      |     STDMETHOD (DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, |   |  | 
      |                           POINT* ppt, DWORD dwEffect) PURE; |   |  | 
      |     STDMETHOD (DragLeave)(THIS) PURE; |   |  | 
      |     STDMETHOD (DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE; |   |  | 
      |     STDMETHOD (Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, |   |  | 
      |                      DWORD dwEffect) PURE; |   |  | 
      |     STDMETHOD (Show)(THIS_ BOOL fShow) PURE; |   |  | 
      |                                                                                  |   |  | 
      | }; |   | }; | 
       |   |  | 
       | 
      | #undef INTERFACE |   | #endif // _WIN32_IE >= 0x0500 | 
      | #define INTERFACE IDragSourceHelper |   |  | 
       |   |  | 
      | DECLARE_INTERFACE_( IDragSourceHelper, IUnknown ) |   |  | 
      | { |   |  | 
      |     // IUnknown methods |   |  | 
      |     STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |  | 
      |     STDMETHOD_(ULONG, AddRef) ( THIS ) PURE; |   |  | 
      |     STDMETHOD_(ULONG, Release) ( THIS ) PURE; |   |  | 
       |   |  | 
      |     // IDragSourceHelper |   |  | 
      |     STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, |   |  | 
      |                                      IDataObject* pDataObject) PURE; |   |  | 
      |     STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, |   |  | 
      |                                      IDataObject* pDataObject) PURE; |   |  | 
      | }; |   |  | 
      | #endif // (_WIN32_IE >= 0x0500) |   |  | 
      | #endif // _WIN32_IE |   | #endif // _WIN32_IE | 
       |   |  | 
      | //========================================================================== |   | //========================================================================== | 
      | // Clipboard format which may be supported by IDataObject from system |   | // Clipboard format which may be supported by IDataObject from system | 
      | // defined shell folders (such as directories, network, ...). |   | // defined shell folders (such as directories, network, ...). | 
      | //========================================================================== |   | //========================================================================== | 
       |   |  | 
       | 
      | #define CFSTR_SHELLIDLIST                   TEXT("Shell IDList Array")      // C |   | #define CFSTR_SHELLIDLIST                   TEXT("Shell IDList Array")           | 
      | F_IDLIST |   |         // CF_IDLIST | 
      | #define CFSTR_SHELLIDLISTOFFSET             TEXT("Shell Object Offsets")    // C |   | #define CFSTR_SHELLIDLISTOFFSET             TEXT("Shell Object Offsets")         | 
      | F_OBJECTPOSITIONS |   |         // CF_OBJECTPOSITIONS | 
      | #define CFSTR_NETRESOURCES                  TEXT("Net Resource")            // C |   | #define CFSTR_NETRESOURCES                  TEXT("Net Resource")                 | 
      | F_NETRESOURCE |   |         // CF_NETRESOURCE | 
      | #define CFSTR_FILEDESCRIPTORA               TEXT("FileGroupDescriptor")     // C |   | #define CFSTR_FILEDESCRIPTORA               TEXT("FileGroupDescriptor")          | 
      | F_FILEGROUPDESCRIPTORA |   |         // CF_FILEGROUPDESCRIPTORA | 
      | #define CFSTR_FILEDESCRIPTORW               TEXT("FileGroupDescriptorW")    // C |   | #define CFSTR_FILEDESCRIPTORW               TEXT("FileGroupDescriptorW")         | 
      | F_FILEGROUPDESCRIPTORW |   |         // CF_FILEGROUPDESCRIPTORW | 
      | #define CFSTR_FILECONTENTS                  TEXT("FileContents")            // C |   | #define CFSTR_FILECONTENTS                  TEXT("FileContents")                 | 
      | F_FILECONTENTS |   |         // CF_FILECONTENTS | 
      | #define CFSTR_FILENAMEA                     TEXT("FileName")                // C |   | #define CFSTR_FILENAMEA                     TEXT("FileName")                     | 
      | F_FILENAMEA |   |         // CF_FILENAMEA | 
      | #define CFSTR_FILENAMEW                     TEXT("FileNameW")               // C |   | #define CFSTR_FILENAMEW                     TEXT("FileNameW")                    | 
      | F_FILENAMEW |   |         // CF_FILENAMEW | 
      | #define CFSTR_PRINTERGROUP                  TEXT("PrinterFriendlyName")     // C |   | #define CFSTR_PRINTERGROUP                  TEXT("PrinterFriendlyName")          | 
      | F_PRINTERS |   |         // CF_PRINTERS | 
      | #define CFSTR_FILENAMEMAPA                  TEXT("FileNameMap")             // C |   | #define CFSTR_FILENAMEMAPA                  TEXT("FileNameMap")                  | 
      | F_FILENAMEMAPA |   |         // CF_FILENAMEMAPA | 
      | #define CFSTR_FILENAMEMAPW                  TEXT("FileNameMapW")            // C |   | #define CFSTR_FILENAMEMAPW                  TEXT("FileNameMapW")                 | 
      | F_FILENAMEMAPW |   |         // CF_FILENAMEMAPW | 
      | #define CFSTR_SHELLURL                      TEXT("UniformResourceLocator") |   | #define CFSTR_SHELLURL                      TEXT("UniformResourceLocator") | 
      | #define CFSTR_INETURLA                      CFSTR_SHELLURL |   | #define CFSTR_INETURLA                      CFSTR_SHELLURL | 
      | #define CFSTR_INETURLW                      TEXT("UniformResourceLocatorW") |   | #define CFSTR_INETURLW                      TEXT("UniformResourceLocatorW") | 
      | #define CFSTR_PREFERREDDROPEFFECT           TEXT("Preferred DropEffect") |   | #define CFSTR_PREFERREDDROPEFFECT           TEXT("Preferred DropEffect") | 
      | #define CFSTR_PERFORMEDDROPEFFECT           TEXT("Performed DropEffect") |   | #define CFSTR_PERFORMEDDROPEFFECT           TEXT("Performed DropEffect") | 
      | #define CFSTR_PASTESUCCEEDED                TEXT("Paste Succeeded") |   | #define CFSTR_PASTESUCCEEDED                TEXT("Paste Succeeded") | 
      | #define CFSTR_INDRAGLOOP                    TEXT("InShellDragLoop") |   | #define CFSTR_INDRAGLOOP                    TEXT("InShellDragLoop") | 
       | 
      | #define CFSTR_DRAGCONTEXT                   TEXT("DragContext") |   |  | 
      | #define CFSTR_MOUNTEDVOLUME                 TEXT("MountedVolume") |   | #define CFSTR_MOUNTEDVOLUME                 TEXT("MountedVolume") | 
      | #define CFSTR_PERSISTEDDATAOBJECT           TEXT("PersistedDataObject") |   | #define CFSTR_PERSISTEDDATAOBJECT           TEXT("PersistedDataObject") | 
       | 
      | #define CFSTR_TARGETCLSID                           TEXT("TargetCLSID")         
                // HGLOBAL with a CLSID of the drop target |   | #define CFSTR_TARGETCLSID                   TEXT("TargetCLSID")                 
        // HGLOBAL with a CLSID of the drop target | 
      | #define CFSTR_LOGICALPERFORMEDDROPEFFECT    TEXT("Logical Performed DropEffect") |   | #define CFSTR_LOGICALPERFORMEDDROPEFFECT    TEXT("Logical Performed DropEffect") | 
       | 
      | #define CFSTR_AUTOPLAY_SHELLIDLISTS         TEXT("Autoplay Enumerated IDList Arr |   | #define CFSTR_AUTOPLAY_SHELLIDLISTS         TEXT("Autoplay Enumerated IDList Arr | 
      | ay")  //  (HGLOBAL with LPIDA) |   | ay")    // (HGLOBAL with LPIDA) | 
      | #define CFSTR_UNTRUSTEDDRAGDROP             TEXT("UntrustedDragDrop") //  DWORD |   | #define CFSTR_UNTRUSTEDDRAGDROP             TEXT("UntrustedDragDrop")            | 
       |   |         //  DWORD | 
       |   | #define CFSTR_FILE_ATTRIBUTES_ARRAY         TEXT("File Attributes Array")        | 
       |   |         // (FILE_ATTRIBUTES_ARRAY format on HGLOBAL) | 
       |   | #define CFSTR_INVOKECOMMAND_DROPPARAM       TEXT("InvokeCommand DropParam")      | 
       |   |         // (HGLOBAL with LPWSTR) | 
       |   | #define CFSTR_SHELLDROPHANDLER              TEXT("DropHandlerCLSID")             | 
       |   |         // (HGLOBAL with CLSID of drop handler) | 
       |   | #define CFSTR_DROPDESCRIPTION               TEXT("DropDescription")              | 
       |   |         // (HGLOBAL with DROPDESCRIPTION) | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORW |   | #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORW | 
      | #define CFSTR_FILENAME          CFSTR_FILENAMEW |   | #define CFSTR_FILENAME          CFSTR_FILENAMEW | 
      | #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPW |   | #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPW | 
      | #define CFSTR_INETURL           CFSTR_INETURLW |   | #define CFSTR_INETURL           CFSTR_INETURLW | 
      | #else |   | #else | 
      | #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORA |   | #define CFSTR_FILEDESCRIPTOR    CFSTR_FILEDESCRIPTORA | 
      | #define CFSTR_FILENAME          CFSTR_FILENAMEA |   | #define CFSTR_FILENAME          CFSTR_FILENAMEA | 
      | #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPA |   | #define CFSTR_FILENAMEMAP       CFSTR_FILENAMEMAPA | 
       |   |  | 
      | skipping to change at line 3509 |   | skipping to change at line 2412 | 
       |   |  | 
      | // |   | // | 
      | // format of CF_IDLIST |   | // format of CF_IDLIST | 
      | // |   | // | 
      | typedef struct _IDA { |   | typedef struct _IDA { | 
      |     UINT cidl;          // number of relative IDList |   |     UINT cidl;          // number of relative IDList | 
      |     UINT aoffset[1];    // [0]: folder IDList, [1]-[cidl]: item IDList |   |     UINT aoffset[1];    // [0]: folder IDList, [1]-[cidl]: item IDList | 
      | } CIDA, * LPIDA; |   | } CIDA, * LPIDA; | 
       |   |  | 
      | // |   | // | 
       | 
      | // FILEDESCRIPTOR.dwFlags field indicate which fields are to be used |   | // FILEDESCRIPTOR.dwFlags field indicate which fields are valid in the FILEDESCR
IPTOR struct | 
      | // |   | // | 
      | typedef enum { |   | typedef enum { | 
       | 
      |     FD_CLSID            = 0x0001, |   |     FD_CLSID            = 0x00000001, | 
      |     FD_SIZEPOINT        = 0x0002, |   |     FD_SIZEPOINT        = 0x00000002, | 
      |     FD_ATTRIBUTES       = 0x0004, |   |     FD_ATTRIBUTES       = 0x00000004, | 
      |     FD_CREATETIME       = 0x0008, |   |     FD_CREATETIME       = 0x00000008, | 
      |     FD_ACCESSTIME       = 0x0010, |   |     FD_ACCESSTIME       = 0x00000010, | 
      |     FD_WRITESTIME       = 0x0020, |   |     FD_WRITESTIME       = 0x00000020, | 
      |     FD_FILESIZE         = 0x0040, |   |     FD_FILESIZE         = 0x00000040, | 
      |     FD_PROGRESSUI       = 0x4000,       // Show Progress UI w/Drag and Drop |   |     FD_PROGRESSUI       = 0x00004000,       // Show Progress UI w/Drag and Drop | 
      |     FD_LINKUI           = 0x8000,       // 'link' UI is prefered |   |     FD_LINKUI           = 0x00008000,       // 'link' UI is prefered | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     FD_UNICODE          = 0x80000000,       // this descriptor is UNICODE | 
       |   | #endif | 
      | } FD_FLAGS; |   | } FD_FLAGS; | 
       |   |  | 
       | 
      | typedef struct _FILEDESCRIPTORA { // fod |   | typedef struct _FILEDESCRIPTORA { | 
      |     DWORD dwFlags; |   |     DWORD dwFlags; | 
       | 
      |                                                                                  |   |  | 
      |     CLSID clsid; |   |     CLSID clsid; | 
      |     SIZEL sizel; |   |     SIZEL sizel; | 
      |     POINTL pointl; |   |     POINTL pointl; | 
       | 
      |                                                                                  |   |  | 
      |     DWORD dwFileAttributes; |   |     DWORD dwFileAttributes; | 
      |     FILETIME ftCreationTime; |   |     FILETIME ftCreationTime; | 
      |     FILETIME ftLastAccessTime; |   |     FILETIME ftLastAccessTime; | 
      |     FILETIME ftLastWriteTime; |   |     FILETIME ftLastWriteTime; | 
      |     DWORD nFileSizeHigh; |   |     DWORD nFileSizeHigh; | 
      |     DWORD nFileSizeLow; |   |     DWORD nFileSizeLow; | 
      |     CHAR   cFileName[ MAX_PATH ]; |   |     CHAR   cFileName[ MAX_PATH ]; | 
      | } FILEDESCRIPTORA, *LPFILEDESCRIPTORA; |   | } FILEDESCRIPTORA, *LPFILEDESCRIPTORA; | 
       |   |  | 
       | 
      | typedef struct _FILEDESCRIPTORW { // fod |   | typedef struct _FILEDESCRIPTORW { | 
      |     DWORD dwFlags; |   |     DWORD dwFlags; | 
       |   |  | 
      |     CLSID clsid; |   |     CLSID clsid; | 
      |     SIZEL sizel; |   |     SIZEL sizel; | 
      |     POINTL pointl; |   |     POINTL pointl; | 
       |   |  | 
      |     DWORD dwFileAttributes; |   |     DWORD dwFileAttributes; | 
      |     FILETIME ftCreationTime; |   |     FILETIME ftCreationTime; | 
      |     FILETIME ftLastAccessTime; |   |     FILETIME ftLastAccessTime; | 
      |     FILETIME ftLastWriteTime; |   |     FILETIME ftLastWriteTime; | 
       |   |  | 
      | skipping to change at line 3597 |   | skipping to change at line 2501 | 
      | // friendly names |   | // friendly names | 
      | // |   | // | 
      | typedef struct _DROPFILES { |   | typedef struct _DROPFILES { | 
      |    DWORD pFiles;                       // offset of file list |   |    DWORD pFiles;                       // offset of file list | 
      |    POINT pt;                           // drop point (client coords) |   |    POINT pt;                           // drop point (client coords) | 
      |    BOOL fNC;                           // is it on NonClient area |   |    BOOL fNC;                           // is it on NonClient area | 
      |                                        // and pt is in screen coords |   |                                        // and pt is in screen coords | 
      |    BOOL fWide;                         // WIDE character switch |   |    BOOL fWide;                         // WIDE character switch | 
      | } DROPFILES, *LPDROPFILES; |   | } DROPFILES, *LPDROPFILES; | 
       |   |  | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | typedef struct | 
       |   | { | 
       |   |     UINT cItems;                    // number of items in rgdwFileAttributes arr | 
       |   | ay | 
       |   |     DWORD dwSumFileAttributes;      // all of the attributes ORed together | 
       |   |     DWORD dwProductFileAttributes;  // all of the attributes ANDed together | 
       |   |     DWORD rgdwFileAttributes[1];    // array | 
       |   | } FILE_ATTRIBUTES_ARRAY;            // clipboard format definition for CFSTR_FIL | 
       |   | E_ATTRIBUTES_ARRAY | 
       |   | #endif | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | typedef enum | 
       |   | { | 
       |   |     DROPIMAGE_INVALID             = -1,                // no drop image at all | 
       |   |     DROPIMAGE_NONE                = 0,                 // red "no" circle | 
       |   |     DROPIMAGE_COPY                = DROPEFFECT_COPY,   // plus for copy | 
       |   |     DROPIMAGE_MOVE                = DROPEFFECT_MOVE,   // movement arrow for mov | 
       |   | e | 
       |   |     DROPIMAGE_LINK                = DROPEFFECT_LINK,   // link arrow for link | 
       |   |     DROPIMAGE_LABEL               = 6,                 // tag icon to indicate m | 
       |   | etadata will be changed | 
       |   |     DROPIMAGE_WARNING             = 7,                 // yellow exclamation, so | 
       |   | mething is amiss with the operation | 
       |   | } DROPIMAGETYPE; | 
       |   |  | 
       |   | typedef struct | 
       |   | { | 
       |   |     DROPIMAGETYPE type;                 // indicates the stock image to use | 
       |   |  | 
       |   | // text such as "Move to %1" | 
       |   |     WCHAR szMessage[MAX_PATH]; | 
       |   |  | 
       |   | // text such as "Documents", inserted as specified by szMessage | 
       |   |     WCHAR szInsert[MAX_PATH]; | 
       |   |  | 
       |   | // some UI coloring is applied to the text in szInsert, if used by specifying %1 | 
       |   |  in szMessage. | 
       |   | // %% and %1 are the subset of FormatMessage markers that are processed here. | 
       |   | } DROPDESCRIPTION; | 
       |   |  | 
       |   | #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |                                                                                  | 
      | //====== File System Notification APIs =============================== |   | //====== File System Notification APIs =============================== | 
      | // |   | // | 
      | typedef struct _SHChangeNotifyEntry |   | typedef struct _SHChangeNotifyEntry | 
      | { |   | { | 
       | 
      |     LPCITEMIDLIST pidl; |   |     PCIDLIST_ABSOLUTE pidl; | 
      |     BOOL   fRecursive; |   |     BOOL   fRecursive; | 
      | } SHChangeNotifyEntry; |   | } SHChangeNotifyEntry; | 
       |   |  | 
      | // |   | // | 
      | //  File System Notification flags |   | //  File System Notification flags | 
      | // |   | // | 
       |   |  | 
       | 
       |   | #define SHCNRF_InterruptLevel      0x0001 | 
       |   | #define SHCNRF_ShellLevel          0x0002 | 
       |   | #define SHCNRF_RecursiveInterrupt  0x1000 | 
       |   | #define SHCNRF_NewDelivery         0x8000 | 
       |   |                                                                                  | 
      | #define SHCNE_RENAMEITEM          0x00000001L |   | #define SHCNE_RENAMEITEM          0x00000001L | 
      | #define SHCNE_CREATE              0x00000002L |   | #define SHCNE_CREATE              0x00000002L | 
      | #define SHCNE_DELETE              0x00000004L |   | #define SHCNE_DELETE              0x00000004L | 
      | #define SHCNE_MKDIR               0x00000008L |   | #define SHCNE_MKDIR               0x00000008L | 
      | #define SHCNE_RMDIR               0x00000010L |   | #define SHCNE_RMDIR               0x00000010L | 
      | #define SHCNE_MEDIAINSERTED       0x00000020L |   | #define SHCNE_MEDIAINSERTED       0x00000020L | 
      | #define SHCNE_MEDIAREMOVED        0x00000040L |   | #define SHCNE_MEDIAREMOVED        0x00000040L | 
      | #define SHCNE_DRIVEREMOVED        0x00000080L |   | #define SHCNE_DRIVEREMOVED        0x00000080L | 
      | #define SHCNE_DRIVEADD            0x00000100L |   | #define SHCNE_DRIVEADD            0x00000100L | 
      | #define SHCNE_NETSHARE            0x00000200L |   | #define SHCNE_NETSHARE            0x00000200L | 
       |   |  | 
      | skipping to change at line 3643 |   | skipping to change at line 2590 | 
      | // of SHChangeNotify (called "pidl2" below), which if present, must also |   | // of SHChangeNotify (called "pidl2" below), which if present, must also | 
      | // be in LPITEMIDLIST format. |   | // be in LPITEMIDLIST format. | 
      | // |   | // | 
      | // Unlike the standard events, the extended events are ORDINALs, so we |   | // Unlike the standard events, the extended events are ORDINALs, so we | 
      | // don't run out of bits.  Extended events follow the SHCNEE_* naming |   | // don't run out of bits.  Extended events follow the SHCNEE_* naming | 
      | // convention. |   | // convention. | 
      | // |   | // | 
      | // The dwItem2 parameter varies according to the extended event. |   | // The dwItem2 parameter varies according to the extended event. | 
       |   |  | 
      | #define SHCNE_EXTENDED_EVENT      0x04000000L |   | #define SHCNE_EXTENDED_EVENT      0x04000000L | 
       | 
      | #endif      // (_WIN32_IE >= 0x0400) |   | #endif      // _WIN32_IE >= 0x0400 | 
       |   |  | 
      | #define SHCNE_ASSOCCHANGED        0x08000000L |   | #define SHCNE_ASSOCCHANGED        0x08000000L | 
       |   |  | 
      | #define SHCNE_DISKEVENTS          0x0002381FL |   | #define SHCNE_DISKEVENTS          0x0002381FL | 
      | #define SHCNE_GLOBALEVENTS        0x0C0581E0L // Events that dont match pidls fi
rst |   | #define SHCNE_GLOBALEVENTS        0x0C0581E0L // Events that dont match pidls fi
rst | 
      | #define SHCNE_ALLEVENTS           0x7FFFFFFFL |   | #define SHCNE_ALLEVENTS           0x7FFFFFFFL | 
      | #define SHCNE_INTERRUPT           0x80000000L // The presence of this flag indic
ates |   | #define SHCNE_INTERRUPT           0x80000000L // The presence of this flag indic
ates | 
      |                                             // that the event was generated by a
n |   |                                             // that the event was generated by a
n | 
      |                                             // interrupt.  It is stripped out be
fore |   |                                             // interrupt.  It is stripped out be
fore | 
      |                                             // the clients of SHCNNotify_ see it
. |   |                                             // the clients of SHCNNotify_ see it
. | 
       |   |  | 
      | skipping to change at line 3676 |   | skipping to change at line 2623 | 
      | #define SHCNF_IDLIST      0x0000        // LPITEMIDLIST |   | #define SHCNF_IDLIST      0x0000        // LPITEMIDLIST | 
      | #define SHCNF_PATHA       0x0001        // path name |   | #define SHCNF_PATHA       0x0001        // path name | 
      | #define SHCNF_PRINTERA    0x0002        // printer friendly name |   | #define SHCNF_PRINTERA    0x0002        // printer friendly name | 
      | #define SHCNF_DWORD       0x0003        // DWORD |   | #define SHCNF_DWORD       0x0003        // DWORD | 
      | #define SHCNF_PATHW       0x0005        // path name |   | #define SHCNF_PATHW       0x0005        // path name | 
      | #define SHCNF_PRINTERW    0x0006        // printer friendly name |   | #define SHCNF_PRINTERW    0x0006        // printer friendly name | 
      | #define SHCNF_TYPE        0x00FF |   | #define SHCNF_TYPE        0x00FF | 
      | #define SHCNF_FLUSH       0x1000 |   | #define SHCNF_FLUSH       0x1000 | 
      | #define SHCNF_FLUSHNOWAIT 0x2000 |   | #define SHCNF_FLUSHNOWAIT 0x2000 | 
       |   |  | 
       | 
       |   | #define SHCNF_NOTIFYRECURSIVE      0x10000 // Notify clients registered for any  | 
       |   | child | 
       |   |                                                                                  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHCNF_PATH      SHCNF_PATHW |   | #define SHCNF_PATH      SHCNF_PATHW | 
      | #define SHCNF_PRINTER   SHCNF_PRINTERW |   | #define SHCNF_PRINTER   SHCNF_PRINTERW | 
      | #else |   | #else | 
      | #define SHCNF_PATH      SHCNF_PATHA |   | #define SHCNF_PATH      SHCNF_PATHA | 
      | #define SHCNF_PRINTER   SHCNF_PRINTERA |   | #define SHCNF_PRINTER   SHCNF_PRINTERA | 
      | #endif |   | #endif | 
       |   |  | 
      | // |   | // | 
      | //  APIs |   | //  APIs | 
      | // |   | // | 
      | SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCV
OID dwItem2); |   | SHSTDAPI_(void) SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCV
OID dwItem2); | 
       |   |  | 
      | // |   | // | 
      | // IShellChangeNotify |   | // IShellChangeNotify | 
      | // |   | // | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE  IShellChangeNotify |   | #define INTERFACE  IShellChangeNotify | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellChangeNotify, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellChangeNotify, IUnknown, "D82BE2B1-5764-11D0-A96E-00
C04FD705A2") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellChangeNotify methods *** |   |     // *** IShellChangeNotify methods *** | 
       | 
      |     STDMETHOD(OnChange) (THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST p
idl2) PURE; |   |     STDMETHOD(OnChange) (THIS_ LONG lEvent, PCIDLIST_ABSOLUTE pidl1, PCIDLIST_AB
SOLUTE pidl2) PURE; | 
      | } ; |   | } ; | 
       |   |  | 
      | // |   | // | 
      | // IQueryInfo |   | // IQueryInfo | 
      | // |   | // | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
      | // |   | // | 
      | // IQueryInfo interface |   | // IQueryInfo interface | 
      | // |   | // | 
      | // [Methods] |   | // [Methods] | 
      | //              ::GetInfoTip() |   | //              ::GetInfoTip() | 
      | //------------------------------------------------------------------------- |   | //------------------------------------------------------------------------- | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE  IQueryInfo |   | #define INTERFACE  IQueryInfo | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IQueryInfo, IUnknown) |   | DECLARE_INTERFACE_IID_(IQueryInfo, IUnknown, "00021500-0000-0000-c000-0000000000
46") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IQueryInfo methods *** |   |     // *** IQueryInfo methods *** | 
       | 
      |     STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR **ppwszTip) PURE; |   |     STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, __out WCHAR **ppwszTip) PURE; | 
      |     STDMETHOD(GetInfoFlags)(THIS_ DWORD *pdwFlags) PURE; |   |     STDMETHOD(GetInfoFlags)(THIS_ __out DWORD *pdwFlags) PURE; | 
      | } ; |   | } ; | 
       |   |  | 
      | #define QITIPF_DEFAULT          0x00000000 |   | #define QITIPF_DEFAULT          0x00000000 | 
      | #define QITIPF_USENAME          0x00000001 |   | #define QITIPF_USENAME          0x00000001 | 
      | #define QITIPF_LINKNOTARGET     0x00000002 |   | #define QITIPF_LINKNOTARGET     0x00000002 | 
      | #define QITIPF_LINKUSETARGET    0x00000004 |   | #define QITIPF_LINKUSETARGET    0x00000004 | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define QITIPF_USESLOWTIP       0x00000008  // Flag says it's OK to take a long 
time generating tip |   | #define QITIPF_USESLOWTIP       0x00000008  // Flag says it's OK to take a long 
time generating tip | 
       | 
       |   | #endif | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define QITIPF_SINGLELINE       0x00000010 | 
       |   | #endif | 
       |   |  | 
       | 
      | #define QIF_CACHED           0x00000001 |   | #define QIF_CACHED              0x00000001 | 
      | #define QIF_DONTEXPANDFOLDER 0x00000002 |   | #define QIF_DONTEXPANDFOLDER    0x00000002 | 
       |   |  | 
      | // |   | // | 
      | // SHAddToRecentDocs |   | // SHAddToRecentDocs | 
      | // |   | // | 
      | #define SHARD_PIDL      0x00000001L |   | #define SHARD_PIDL      0x00000001L | 
      | #define SHARD_PATHA     0x00000002L |   | #define SHARD_PATHA     0x00000002L | 
      | #define SHARD_PATHW     0x00000003L |   | #define SHARD_PATHW     0x00000003L | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHARD_PATH  SHARD_PATHW |   | #define SHARD_PATH  SHARD_PATHW | 
       |   |  | 
      | skipping to change at line 3763 |   | skipping to change at line 2717 | 
       |   |  | 
      | SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv); |   | SHSTDAPI_(void) SHAddToRecentDocs(UINT uFlags, LPCVOID pv); | 
       |   |  | 
      | typedef struct _SHChangeDWORDAsIDList { |   | typedef struct _SHChangeDWORDAsIDList { | 
      |     USHORT   cb; |   |     USHORT   cb; | 
      |     DWORD    dwItem1; |   |     DWORD    dwItem1; | 
      |     DWORD    dwItem2; |   |     DWORD    dwItem2; | 
      |     USHORT   cbZero; |   |     USHORT   cbZero; | 
      | } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; |   | } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList; | 
       |   |  | 
       | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | typedef struct _SHChangeUpdateImageIDList { |   | typedef struct _SHChangeUpdateImageIDList { | 
      |     USHORT cb; |   |     USHORT cb; | 
      |     int iIconIndex; |   |     int iIconIndex; | 
      |     int iCurIndex; |   |     int iCurIndex; | 
      |     UINT uFlags; |   |     UINT uFlags; | 
      |     DWORD dwProcessID; |   |     DWORD dwProcessID; | 
      |     WCHAR szName[MAX_PATH]; |   |     WCHAR szName[MAX_PATH]; | 
      |     USHORT cbZero; |   |     USHORT cbZero; | 
      | } SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList; |   | } SHChangeUpdateImageIDList, * LPSHChangeUpdateImageIDList; | 
       | 
      |                                                                                  |   | SHSTDAPI_(int) SHHandleUpdateImage(PCIDLIST_ABSOLUTE pidlExtra); | 
      | SHSTDAPI_(int)  SHHandleUpdateImage( LPCITEMIDLIST pidlExtra ); |   |  | 
       |   |  | 
      | typedef struct _SHChangeProductKeyAsIDList { |   | typedef struct _SHChangeProductKeyAsIDList { | 
      |     USHORT cb; |   |     USHORT cb; | 
      |     WCHAR wszProductKey[39]; |   |     WCHAR wszProductKey[39]; | 
      |     USHORT cbZero; |   |     USHORT cbZero; | 
      | } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; |   | } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList; | 
       |   |  | 
      | SHSTDAPI_(void) SHUpdateImageA(LPCSTR pszHashItem, int iIndex, UINT uFlags, int 
iImageIndex); |   | SHSTDAPI_(void) SHUpdateImageA(LPCSTR pszHashItem, int iIndex, UINT uFlags, int 
iImageIndex); | 
      | SHSTDAPI_(void) SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int
 iImageIndex); |   | SHSTDAPI_(void) SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int
 iImageIndex); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHUpdateImage  SHUpdateImageW |   | #define SHUpdateImage  SHUpdateImageW | 
      | #else |   | #else | 
      | #define SHUpdateImage  SHUpdateImageA |   | #define SHUpdateImage  SHUpdateImageA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | #endif /* _WIN32_IE */ |   | #endif /* NTDDI_WIN2K */ | 
       |   |  | 
       | 
      | SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, U
INT wMsg, int cEntries, SHChangeNotifyEntry *pshcne); |   | SHSTDAPI_(ULONG) SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, U
INT wMsg, int cEntries, const SHChangeNotifyEntry *pshcne); | 
      | SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID); |   | SHSTDAPI_(BOOL) SHChangeNotifyDeregister(unsigned long ulID); | 
       | 
      | SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dw |   |                                                                                  | 
      | ProcessId, LPITEMIDLIST **pppidl, LONG *plEvent); |   | typedef enum | 
       |   | { | 
       |   |     SCNRT_ENABLE  = 0, | 
       |   |     SCNRT_DISABLE = 1, | 
       |   | } SCNRT_STATUS; | 
       |   |  | 
       |   | //  use SHChangeNotifyRegisterThread() to enable Async Register and Deregister. | 
       |   | //  call with SCNRT_ENABLE at the thread proc begining and SCNRT_DISABLE at the  | 
       |   | end | 
       |   | //  the call with SCNRT_DISABLE can block while it synchronizes with the main Ch | 
       |   | angeNotify thread | 
       |   | STDAPI_(void) SHChangeNotifyRegisterThread(SCNRT_STATUS status); | 
       |   |                                                                                  | 
       |   | SHSTDAPI_(HANDLE) SHChangeNotification_Lock(HANDLE hChange, DWORD dwProcId, __de | 
       |   | ref_opt_out_ecount(2) PIDLIST_ABSOLUTE **pppidl, __out_opt LONG *plEvent); | 
      | SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock); |   | SHSTDAPI_(BOOL) SHChangeNotification_Unlock(HANDLE hLock); | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
      | // The pidls that are given to the view via the ChangeNotifyEvents are simple Pi
dls, |   | // The pidls that are given to the view via the ChangeNotifyEvents are simple Pi
dls, | 
      | // SHGetRealIDL() will convert them to true PIDLs. |   | // SHGetRealIDL() will convert them to true PIDLs. | 
       | 
      | SHSTDAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST  |   | SHSTDAPI SHGetRealIDL(IShellFolder *psf, PCUITEMID_CHILD pidlSimple, __out PITEM | 
      | * ppidlReal); |   | ID_CHILD *ppidlReal); | 
      | #endif // (_WIN32_IE >= 0x0400) |   | #endif // _WIN32_IE >= 0x0400 | 
       |   |  | 
       | 
      | SHSTDAPI SHGetInstanceExplorer(IUnknown **ppunk); |   | SHSTDAPI SHGetInstanceExplorer(__out IUnknown **ppunk); | 
       |   |  | 
      | // |   | // | 
      | // SHGetDataFromIDListA/W |   | // SHGetDataFromIDListA/W | 
      | // |   | // | 
      | // SHGetDataFromIDList nFormat values TCHAR |   | // SHGetDataFromIDList nFormat values TCHAR | 
      | #define SHGDFIL_FINDDATA        1 |   | #define SHGDFIL_FINDDATA        1 | 
      | #define SHGDFIL_NETRESOURCE     2 |   | #define SHGDFIL_NETRESOURCE     2 | 
      | #define SHGDFIL_DESCRIPTIONID   3 |   | #define SHGDFIL_DESCRIPTIONID   3 | 
       |   |  | 
      | #define SHDID_ROOT_REGITEM          1 |   | #define SHDID_ROOT_REGITEM          1 | 
       |   |  | 
      | skipping to change at line 3829 |   | skipping to change at line 2794 | 
      | #define SHDID_COMPUTER_FIXED        8 |   | #define SHDID_COMPUTER_FIXED        8 | 
      | #define SHDID_COMPUTER_NETDRIVE     9 |   | #define SHDID_COMPUTER_NETDRIVE     9 | 
      | #define SHDID_COMPUTER_CDROM        10 |   | #define SHDID_COMPUTER_CDROM        10 | 
      | #define SHDID_COMPUTER_RAMDISK      11 |   | #define SHDID_COMPUTER_RAMDISK      11 | 
      | #define SHDID_COMPUTER_OTHER        12 |   | #define SHDID_COMPUTER_OTHER        12 | 
      | #define SHDID_NET_DOMAIN            13 |   | #define SHDID_NET_DOMAIN            13 | 
      | #define SHDID_NET_SERVER            14 |   | #define SHDID_NET_SERVER            14 | 
      | #define SHDID_NET_SHARE             15 |   | #define SHDID_NET_SHARE             15 | 
      | #define SHDID_NET_RESTOFNET         16 |   | #define SHDID_NET_RESTOFNET         16 | 
      | #define SHDID_NET_OTHER             17 |   | #define SHDID_NET_OTHER             17 | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define SHDID_COMPUTER_IMAGING      18 |   | #define SHDID_COMPUTER_IMAGING      18 | 
      | #define SHDID_COMPUTER_AUDIO        19 |   | #define SHDID_COMPUTER_AUDIO        19 | 
      | #define SHDID_COMPUTER_SHAREDDOCS   20 |   | #define SHDID_COMPUTER_SHAREDDOCS   20 | 
       | 
       |   | #endif | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define SHDID_MOBILE_DEVICE         21  // PDA/PalmPC | 
       |   | #endif | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
      | typedef struct _SHDESCRIPTIONID { |   | typedef struct _SHDESCRIPTIONID { | 
      |     DWORD   dwDescriptionId; |   |     DWORD   dwDescriptionId; | 
      |     CLSID   clsid; |   |     CLSID   clsid; | 
      | } SHDESCRIPTIONID, *LPSHDESCRIPTIONID; |   | } SHDESCRIPTIONID, *LPSHDESCRIPTIONID; | 
       |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
       | 
      | // these delegate to IShellFolder2::GetItemData() |   | // these delegate to IShellFolder2::GetDetailsEx() | 
       |   |  | 
       | 
      | SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat |   | SHSTDAPI SHGetDataFromIDListA(IShellFolder *psf, PCUITEMID_CHILD pidl, int nForm | 
      | , void *pv, int cb); |   | at, __out_bcount(cb) void *pv, int cb); | 
      | SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, LPCITEMIDLIST pidl, int nFormat |   | SHSTDAPI SHGetDataFromIDListW(IShellFolder *psf, PCUITEMID_CHILD pidl, int nForm | 
      | , void *pv, int cb); |   | at, __out_bcount(cb) void *pv, int cb); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHGetDataFromIDList  SHGetDataFromIDListW |   | #define SHGetDataFromIDList  SHGetDataFromIDListW | 
      | #else |   | #else | 
      | #define SHGetDataFromIDList  SHGetDataFromIDListA |   | #define SHGetDataFromIDList  SHGetDataFromIDListA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | //=========================================================================== |   | //=========================================================================== | 
       |   |  | 
      | // PathResolve flags |   | // PathResolve flags | 
      | #define PRF_VERIFYEXISTS            0x0001 |   | #define PRF_VERIFYEXISTS            0x0001 | 
      | #define PRF_TRYPROGRAMEXTENSIONS    (0x0002 | PRF_VERIFYEXISTS) |   | #define PRF_TRYPROGRAMEXTENSIONS    (0x0002 | PRF_VERIFYEXISTS) | 
      | #define PRF_FIRSTDIRDEF             0x0004 |   | #define PRF_FIRSTDIRDEF             0x0004 | 
      | #define PRF_DONTFINDLNK             0x0008      // if PRF_TRYPROGRAMEXTENSIONS i
s specified |   | #define PRF_DONTFINDLNK             0x0008      // if PRF_TRYPROGRAMEXTENSIONS i
s specified | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | 
       |   | #define PRF_REQUIREABSOLUTE         0x0010 | 
       |   | #endif | 
       |   |                                                                                  | 
      | SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn); |   | SHSTDAPI_(int) RestartDialog(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn); | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWOR
D dwReasonCode); |   | SHSTDAPI_(int) RestartDialogEx(HWND hwnd, LPCWSTR lpPrompt, DWORD dwReturn, DWOR
D dwReasonCode); | 
       | 
       |   | #endif | 
       |   |  | 
       | 
      | SHSTDAPI SHCoCreateInstance(LPCWSTR pszCLSID, const CLSID *pclsid, IUnknown *pUn |   | SHSTDAPI SHCoCreateInstance(__in_opt LPCWSTR pszCLSID, __in_opt const CLSID *pcl | 
      | kOuter, REFIID riid, void **ppv); |   | sid, __in_opt IUnknown *pUnkOuter, __in REFIID riid, __deref_out void **ppv); | 
      | // For CallCPLEntry16 |   |                                                                                  | 
      | // |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
      | DECLARE_HANDLE(FARPROC16); |   | SHSTDAPI SHCreateDataObject(__in PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, __in_e | 
      | SHSTDAPI_(LRESULT) CallCPLEntry16(HINSTANCE hinst, FARPROC16 lpfnEntry, HWND hwn |   | count_opt(cidl) PCUITEMID_CHILD_ARRAY apidl, __in_opt IDataObject *pdtInner, REF | 
      | dCPL, UINT msg, LPARAM lParam1, LPARAM lParam2); |   | IID riid, __deref_out void **ppv); | 
      | SHSTDAPI SHCreateStdEnumFmtEtc(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC |   | #endif | 
      |  **ppenumFormatEtc); |   | SHSTDAPI CIDLData_CreateFromIDArray(__in PCIDLIST_ABSOLUTE pidlFolder, UINT cidl | 
      | SHSTDAPI SHDoDragDrop(HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD d |   | , __in_ecount_opt(cidl) PCUIDLIST_RELATIVE_ARRAY apidl, __out IDataObject **ppdt | 
      | wEffect, DWORD *pdwEffect); |   | obj); | 
       |   | SHSTDAPI SHCreateStdEnumFmtEtc(UINT cfmt, __in_ecount(cfmt) const FORMATETC afmt | 
       |   | [], __out IEnumFORMATETC **ppenumFormatEtc); | 
       |   | SHSTDAPI SHDoDragDrop(HWND hwnd, IDataObject *pdata, IDropSource *pdsrc, DWORD d | 
       |   | wEffect, __out DWORD *pdwEffect); | 
      | // stuff for doing auto scrolling |   | // stuff for doing auto scrolling | 
      | #define NUM_POINTS      3 |   | #define NUM_POINTS      3 | 
      | typedef struct {        // asd |   | typedef struct {        // asd | 
      |     int iNextSample; |   |     int iNextSample; | 
      |     DWORD dwLastScroll; |   |     DWORD dwLastScroll; | 
      |     BOOL bFull; |   |     BOOL bFull; | 
      |     POINT pts[NUM_POINTS]; |   |     POINT pts[NUM_POINTS]; | 
      |     DWORD dwTimes[NUM_POINTS]; |   |     DWORD dwTimes[NUM_POINTS]; | 
      | } AUTO_SCROLL_DATA; |   | } AUTO_SCROLL_DATA; | 
       |   |  | 
       |   |  | 
      | skipping to change at line 3908 |   | skipping to change at line 2885 | 
      |     BOOL fAdminsCreateCommonGroups : 1;  // NT: Administrators create comon grou
ps |   |     BOOL fAdminsCreateCommonGroups : 1;  // NT: Administrators create comon grou
ps | 
      |     UINT fUnusedFlags : 7; |   |     UINT fUnusedFlags : 7; | 
       |   |  | 
      |     UINT fMenuEnumFilter; |   |     UINT fMenuEnumFilter; | 
       |   |  | 
      | } CABINETSTATE, * LPCABINETSTATE; |   | } CABINETSTATE, * LPCABINETSTATE; | 
       |   |  | 
      | #define CABINETSTATE_VERSION 2 |   | #define CABINETSTATE_VERSION 2 | 
       |   |  | 
      | // APIs for reading and writing the cabinet state. |   | // APIs for reading and writing the cabinet state. | 
       | 
      | SHSTDAPI_(BOOL) ReadCabinetState( LPCABINETSTATE lpState, int iSize ); |   | SHSTDAPI_(BOOL) ReadCabinetState(__out_bcount(cLength) CABINETSTATE *pcs, int cL | 
      | SHSTDAPI_(BOOL) WriteCabinetState( LPCABINETSTATE lpState ); |   | ength); | 
      | SHSTDAPI_(BOOL) PathMakeUniqueName(LPWSTR pszUniqueName, UINT cchMax, LPCWSTR ps |   | SHSTDAPI_(BOOL) WriteCabinetState(__in CABINETSTATE *pcs); | 
      | zTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir); |   | SHSTDAPI_(BOOL) PathMakeUniqueName(__out_ecount(cchMax) LPWSTR pszUniqueName, UI | 
      | SHSTDAPI_(void) PathQualify(LPWSTR psz); |   | NT cchMax, LPCWSTR pszTemplate, LPCWSTR pszLongPlate, LPCWSTR pszDir); | 
       |   | SHSTDAPI_(void) PathQualify(__inout LPWSTR psz); | 
      | SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath); |   | SHSTDAPI_(BOOL) PathIsExe(LPCWSTR pszPath); | 
      | SHSTDAPI_(BOOL) PathIsSlowA(LPCSTR pszFile, DWORD dwAttr); |   | SHSTDAPI_(BOOL) PathIsSlowA(LPCSTR pszFile, DWORD dwAttr); | 
      | SHSTDAPI_(BOOL) PathIsSlowW(LPCWSTR pszFile, DWORD dwAttr); |   | SHSTDAPI_(BOOL) PathIsSlowW(LPCWSTR pszFile, DWORD dwAttr); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define PathIsSlow  PathIsSlowW |   | #define PathIsSlow  PathIsSlowW | 
      | #else |   | #else | 
      | #define PathIsSlow  PathIsSlowA |   | #define PathIsSlow  PathIsSlowA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | // |   | // | 
      | //  Return codes from PathCleanupSpec.  Negative return values are |   | //  Return codes from PathCleanupSpec.  Negative return values are | 
      | //  unrecoverable errors |   | //  unrecoverable errors | 
      | // |   | // | 
      | #define PCS_FATAL           0x80000000 |   | #define PCS_FATAL           0x80000000 | 
      | #define PCS_REPLACEDCHAR    0x00000001 |   | #define PCS_REPLACEDCHAR    0x00000001 | 
      | #define PCS_REMOVEDCHAR     0x00000002 |   | #define PCS_REMOVEDCHAR     0x00000002 | 
      | #define PCS_TRUNCATED       0x00000004 |   | #define PCS_TRUNCATED       0x00000004 | 
      | #define PCS_PATHTOOLONG     0x00000008  // Always combined with FATAL |   | #define PCS_PATHTOOLONG     0x00000008  // Always combined with FATAL | 
       |   |  | 
       | 
      | SHSTDAPI_(int) PathCleanupSpec(LPCWSTR pszDir, LPWSTR pszSpec); |   | SHSTDAPI_(int) PathCleanupSpec(LPCWSTR pszDir, __inout LPWSTR pszSpec); | 
      | SHSTDAPI_(int) PathResolve(LPWSTR pszPath, LPCWSTR dirs[], UINT fFlags); |   | SHSTDAPI_(int) PathResolve(__out_ecount(MAX_PATH) LPWSTR lpszPath, __in_opt __nu | 
      | SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, LPWSTR pszFilePath, UINT cbFile |   | llterminated LPCWSTR dirs[], UINT fFlags); | 
      | Path, |   | SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, __inout_ecount(cchFilePath) LPW | 
       |   | STR pszFilePath, UINT cchFilePath, | 
      |                                       LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, 
LPCWSTR pszFilters, LPCWSTR pszTitle); |   |                                       LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, 
LPCWSTR pszFilters, LPCWSTR pszTitle); | 
      | SHSTDAPI_(int) DriveType(int iDrive); |   | SHSTDAPI_(int) DriveType(int iDrive); | 
       |   |  | 
      | SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet); |   | SHSTDAPI_(int) RealDriveType(int iDrive, BOOL fOKToHitNet); | 
      | SHSTDAPI_(int) IsNetDrive(int iDrive); |   | SHSTDAPI_(int) IsNetDrive(int iDrive); | 
      | // Flags for Shell_MergeMenus |   | // Flags for Shell_MergeMenus | 
      | #define MM_ADDSEPARATOR         0x00000001L |   | #define MM_ADDSEPARATOR         0x00000001L | 
      | #define MM_SUBMENUSHAVEIDS      0x00000002L |   | #define MM_SUBMENUSHAVEIDS      0x00000002L | 
      | #define MM_DONTREMOVESEPS       0x00000004L |   | #define MM_DONTREMOVESEPS       0x00000004L | 
       |   |  | 
      | SHSTDAPI_(UINT) Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI
DAdjust, UINT uIDAdjustMax, ULONG uFlags); |   | SHSTDAPI_(UINT) Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI
DAdjust, UINT uIDAdjustMax, ULONG uFlags); | 
       |   |  | 
      | /* |   | /* | 
       | 
      |  * The SHObjectProperties API provides an easy way to invoke |   |  * The SHObjectProperties API provides an easy way to invoke the Properties | 
      |  *   the Properties context menu command on shell objects. |   |  *   context menu command on a subset of the shell item namespace. | 
      |  * |   |  * | 
      |  *   PARAMETERS |   |  *   PARAMETERS | 
      |  * |   |  * | 
       | 
      |  *     hwnd    The window handle of the window which will own the dialog |   |  *     hwnd              The window handle of the window which will own the dial | 
      |  *     dwType       A SHOP_ value as defined below |   | og | 
      |  *     lpObject     Name of the object, see SHOP_ values below |   |  *     shopObjectType    A SHOP_ value as defined below | 
      |  *     lpPage       The name of the property sheet page to open to or NULL. |   |  *     pszObjectName     Name of the object, see SHOP_ values below | 
       |   |  *     pszPropertyPage   The name of the property sheet page to open to or NULL. | 
      |  * |   |  * | 
      |  *   RETURN |   |  *   RETURN | 
      |  * |   |  * | 
      |  *     TRUE if the Properties command was invoked |   |  *     TRUE if the Properties command was invoked | 
      |  */ |   |  */ | 
       | 
      | SHSTDAPI_(BOOL) SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR lpObject, LP
CWSTR lpPage); |   | SHSTDAPI_(BOOL) SHObjectProperties(__in_opt HWND hwnd, __in DWORD shopObjectType
, __in PCWSTR pszObjectName, __in_opt PCWSTR pszPropertyPage); | 
       |   |  | 
       | 
      | #define SHOP_PRINTERNAME 0x00000001  // lpObject points to a printer friendly na |   | #define SHOP_PRINTERNAME 0x00000001  // pszObjectName points to a printer friend | 
      | me |   | ly name | 
      | #define SHOP_FILEPATH    0x00000002  // lpObject points to a fully qualified pat |   | #define SHOP_FILEPATH    0x00000002  // pszObjectName points to a fully qualifie | 
      | h+file name |   | d path+file name | 
      | #define SHOP_VOLUMEGUID  0x00000004  // lpObject points to a Volume GUID |   | #define SHOP_VOLUMEGUID  0x00000004  // pszObjectName points to a Volume GUID | 
       |   |  | 
      | /* |   | /* | 
      |  * The SHFormatDrive API provides access to the Shell |   |  * The SHFormatDrive API provides access to the Shell | 
      |  *   format dialog. This allows apps which want to format disks |   |  *   format dialog. This allows apps which want to format disks | 
      |  *   to bring up the same dialog that the Shell does to do it. |   |  *   to bring up the same dialog that the Shell does to do it. | 
      |  * |   |  * | 
      |  *   This dialog is not sub-classable. You cannot put custom |   |  *   This dialog is not sub-classable. You cannot put custom | 
      |  *   controls in it. If you want this ability, you will have |   |  *   controls in it. If you want this ability, you will have | 
      |  *   to write your own front end for the DMaint_FormatDrive |   |  *   to write your own front end for the DMaint_FormatDrive | 
      |  *   engine. |   |  *   engine. | 
       |   |  | 
      | skipping to change at line 4058 |   | skipping to change at line 3036 | 
      | // |   | // | 
      | #define SHFMT_ERROR     0xFFFFFFFFL     // Error on last format, drive may be fo
rmatable |   | #define SHFMT_ERROR     0xFFFFFFFFL     // Error on last format, drive may be fo
rmatable | 
      | #define SHFMT_CANCEL    0xFFFFFFFEL     // Last format was canceled |   | #define SHFMT_CANCEL    0xFFFFFFFEL     // Last format was canceled | 
      | #define SHFMT_NOFORMAT  0xFFFFFFFDL     // Drive is not formatable |   | #define SHFMT_NOFORMAT  0xFFFFFFFDL     // Drive is not formatable | 
       |   |  | 
      | #ifndef HPSXA_DEFINED |   | #ifndef HPSXA_DEFINED | 
      | #define HPSXA_DEFINED |   | #define HPSXA_DEFINED | 
      | DECLARE_HANDLE( HPSXA ); |   | DECLARE_HANDLE( HPSXA ); | 
      | #endif |   | #endif | 
      | WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey
, UINT max_iface ); |   | WINSHELLAPI HPSXA WINAPI SHCreatePropSheetExtArray( HKEY hKey, LPCWSTR pszSubKey
, UINT max_iface ); | 
       | 
      | WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray( HPSXA hpsxa ); |   | WINSHELLAPI void WINAPI SHDestroyPropSheetExtArray(__in HPSXA hpsxa ); | 
      | WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray( HPSXA hpsxa, LPFNADDPROPSHEE |   | WINSHELLAPI UINT WINAPI SHAddFromPropSheetExtArray(__in HPSXA hpsxa, LPFNADDPROP | 
      | TPAGE lpfnAddPage, LPARAM lParam ); |   | SHEETPAGE lpfnAddPage, LPARAM lParam ); | 
      | WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray( HPSXA hpsxa, UINT uPageI |   | WINSHELLAPI UINT WINAPI SHReplaceFromPropSheetExtArray(__in HPSXA hpsxa, UINT uP | 
      | D, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam ); |   | ageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam ); | 
      | SHSTDAPI_(LPITEMIDLIST) ILClone(LPCITEMIDLIST pidl); |   |                                                                                  | 
      | SHSTDAPI_(LPITEMIDLIST) ILGetNext(LPCITEMIDLIST pidl); |   | SHSTDAPI_(PIDLIST_RELATIVE)     ILClone(__in PCUIDLIST_RELATIVE pidl); | 
      | SHSTDAPI_(UINT)         ILGetSize(LPCITEMIDLIST pidl); |   | SHSTDAPI_(PITEMID_CHILD)        ILCloneFirst(__in PCUIDLIST_RELATIVE pidl); | 
      | SHSTDAPI_(LPITEMIDLIST) ILFindLastID(LPCITEMIDLIST pidl); |   | SHSTDAPI_(PIDLIST_ABSOLUTE)     ILCombine(__in PCIDLIST_ABSOLUTE pidl1, __in PCU | 
      | SHSTDAPI_(BOOL)         ILRemoveLastID(LPITEMIDLIST pidl); |   | IDLIST_RELATIVE pidl2); | 
      | SHSTDAPI_(LPITEMIDLIST) ILAppendID(LPITEMIDLIST pidl, LPCSHITEMID pmkid, BOOL fA |   | SHSTDAPI_(void)                 ILFree(__in_opt PIDLIST_RELATIVE pidl); | 
      | ppend); |   | SHSTDAPI_(PUIDLIST_RELATIVE)    ILGetNext(__in PCUIDLIST_RELATIVE pidl); | 
      | SHSTDAPI_(void)         ILFree(LPITEMIDLIST pidl); |   | SHSTDAPI_(UINT)                 ILGetSize(__in PCUIDLIST_RELATIVE pidl); | 
      | SHSTDAPI_(LPITEMIDLIST) ILCloneFirst(LPCITEMIDLIST pidl); |   | SHSTDAPI_(PUIDLIST_RELATIVE)    ILFindChild(__in PCIDLIST_ABSOLUTE pidlParent, _ | 
      | SHSTDAPI_(BOOL)         ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); |   | _in PCIDLIST_ABSOLUTE pidlChild); | 
      | SHSTDAPI_(BOOL)         ILIsParent(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOO |   | SHSTDAPI_(__out PUITEMID_CHILD) ILFindLastID(__in PCUIDLIST_RELATIVE pidl); | 
      | L fImmediate); |   | SHSTDAPI_(BOOL)                 ILRemoveLastID(__inout PUIDLIST_RELATIVE pidl); | 
      | SHSTDAPI_(LPITEMIDLIST) ILFindChild(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidl |   | SHSTDAPI_(BOOL)                 ILIsEqual(__in PCIDLIST_ABSOLUTE pidl1, __in PCI | 
      | Child); |   | DLIST_ABSOLUTE pidl2); | 
      | SHSTDAPI_(LPITEMIDLIST) ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); |   | SHSTDAPI_(BOOL)                 ILIsParent(__in PCIDLIST_ABSOLUTE pidl1, __in PC | 
      | SHSTDAPI                ILLoadFromStream(IStream *pstm, LPITEMIDLIST *pidl); |   | IDLIST_ABSOLUTE pidl2, BOOL fImmediate); | 
      | SHSTDAPI                ILSaveToStream(IStream *pstm, LPCITEMIDLIST pidl); |   | SHSTDAPI                        ILSaveToStream(__in IStream *pstm, __in PCUIDLIS | 
       |   | T_RELATIVE pidl); | 
       |   | DECLSPEC_DEPRECATED SHSTDAPI    ILLoadFromStream(__in IStream *pstm, __inout PID | 
       |   | LIST_RELATIVE *pidl); | 
       |   | SHSTDAPI                        ILLoadFromStreamEx(__in IStream *pstm, __deref_o | 
       |   | ut PIDLIST_RELATIVE *pidl); | 
       |   |                                                                                  | 
      | #if (_WIN32_IE >= 0x0400) |   | #if (_WIN32_IE >= 0x0400) | 
       |   |  | 
       | 
      | SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathA(LPCSTR pszPath); |   | SHSTDAPI_(PIDLIST_ABSOLUTE)     ILCreateFromPathA(LPCSTR pszPath); | 
      | SHSTDAPI_(LPITEMIDLIST) ILCreateFromPathW(LPCWSTR pszPath); |   | SHSTDAPI_(PIDLIST_ABSOLUTE)     ILCreateFromPathW(LPCWSTR pszPath); | 
       |   |  | 
      | #ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH |   | #ifdef NO_WRAPPERS_FOR_ILCREATEFROMPATH | 
       | 
      | SHSTDAPI_(LPITEMIDLIST) ILCreateFromPath(LPCTSTR pszPath); |   | SHSTDAPI_(PIDLIST_ABSOLUTE)     ILCreateFromPath(LPCTSTR pszPath); | 
      | #else |   | #else | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
       | 
      | #define ILCreateFromPath  ILCreateFromPathW |   | #define ILCreateFromPath        ILCreateFromPathW | 
      | #else |   | #else | 
       | 
      | #define ILCreateFromPath  ILCreateFromPathA |   | #define ILCreateFromPath        ILCreateFromPathA | 
      | #endif // !UNICODE |   | #endif  // !UNICODE | 
      | #endif |   | #endif  // NO_WRAPPERS_FOR_ILCREATEFROMPATH | 
       |   |  | 
       | 
      | #endif |   | #endif  // (_WIN32_IE >= 0x0400) | 
      | SHSTDAPI SHILCreateFromPath(LPCWSTR szPath, LPITEMIDLIST *ppidl, DWORD *rgfInOut |   |                                                                                  | 
      | ); |   | SHSTDAPI SHILCreateFromPath(LPCWSTR pszPath, __out PIDLIST_ABSOLUTE *ppidl, __in | 
       |   | out_opt DWORD *rgfInOut); | 
       |   |  | 
       |   | #define VOID_OFFSET(pv, cb)     ((void*)(((BYTE*)(pv))+(cb))) | 
       |   |  | 
       |   | #if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) | 
       |   |  | 
       |   | } // extern "C" | 
       |   |  | 
       |   | inline PIDLIST_ABSOLUTE ILCloneFull(__in PCUIDLIST_ABSOLUTE pidl) { return reint | 
       |   | erpret_cast<PIDLIST_ABSOLUTE>(ILClone(pidl)); } | 
       |   | inline PITEMID_CHILD    ILCloneChild(__in PCUITEMID_CHILD pidl)   { return ILClo | 
       |   | neFirst(pidl); } | 
       |   |  | 
       |   | inline HRESULT ILLoadFromStreamEx(__in IStream *pstm, __deref_out PIDLIST_ABSOLU | 
       |   | TE *ppidl) { return ILLoadFromStreamEx(pstm, reinterpret_cast<PIDLIST_RELATIVE*> | 
       |   | (ppidl)); } | 
       |   | inline HRESULT ILLoadFromStreamEx(__in IStream *pstm, __deref_out PITEMID_CHILD  | 
       |   | *ppidl)    { return ILLoadFromStreamEx(pstm, reinterpret_cast<PIDLIST_RELATIVE*> | 
       |   | (ppidl)); } | 
       |   |  | 
       |   | inline PCUIDLIST_RELATIVE ILSkip(__in PCUIDLIST_RELATIVE pidl, UINT cb) { return | 
       |   |  reinterpret_cast<PCUIDLIST_RELATIVE>(VOID_OFFSET(pidl, cb)); } | 
       |   | inline PUIDLIST_RELATIVE  ILSkip(__in PUIDLIST_RELATIVE  pidl, UINT cb) { return | 
       |   |  const_cast<PUIDLIST_RELATIVE>(ILSkip(const_cast<PCUIDLIST_RELATIVE>(pidl), cb)) | 
       |   | ; } | 
       |   |  | 
       |   | inline PCUIDLIST_RELATIVE ILNext(__in PCUIDLIST_RELATIVE pidl) { return ILSkip(p | 
       |   | idl, pidl->mkid.cb); } | 
       |   | inline PUIDLIST_RELATIVE  ILNext(__in PUIDLIST_RELATIVE  pidl) { return const_ca | 
       |   | st<PUIDLIST_RELATIVE>(ILNext(const_cast<PCUIDLIST_RELATIVE>(pidl))); } | 
       |   |  | 
       |   | inline BOOL ILIsAligned(__in PCUIDLIST_RELATIVE pidl)       { return (((DWORD_PT | 
       |   | R)(pidl) & (sizeof(void*) - 1)) == 0); } | 
       |   |  | 
       |   | inline BOOL ILIsEmpty(__in_opt PCUIDLIST_RELATIVE pidl)     { return ((pidl == N | 
       |   | ULL) || (pidl->mkid.cb==0)); } | 
       |   |  | 
       |   | // ILIsChild does not guarantee that pidl is non-null or non-empty. | 
       |   | inline BOOL ILIsChild(__in_opt PCUIDLIST_RELATIVE pidl)         { return (ILIsEm | 
       |   | pty(pidl) || ILIsEmpty(ILNext(pidl))); } | 
       |   |  | 
       |   | extern "C" { | 
       |   |  | 
       |   | #else // !defined(STRICT_TYPED_ITEMIDS) || !defined(__cplusplus) | 
       |   |  | 
       |   | #define ILCloneFull             ILClone | 
       |   | #define ILCloneChild            ILCloneFirst | 
       |   |  | 
       |   | #define ILSkip(pidl, cb)        ((PUIDLIST_RELATIVE)VOID_OFFSET((pidl), (cb))) | 
       |   | #define ILNext(pidl)            ILSkip(pidl, (pidl)->mkid.cb) | 
       |   |  | 
       |   | #define ILIsAligned(pidl)       (((DWORD_PTR)(pidl) & (sizeof(void*) - 1)) == 0) | 
       |   |  | 
       |   | #define ILIsEmpty(pidl)         ((pidl) == NULL || (pidl)->mkid.cb==0) | 
       |   |  | 
       |   | // ILIsChild does not guarantee that pidl is non-null or non-empty. | 
       |   | #define ILIsChild(pidl)         (ILIsEmpty(pidl) || ILIsEmpty(ILNext(pidl))) | 
       |   |  | 
       |   | #endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus) | 
       |   |  | 
       |   | SHSTDAPI_(PIDLIST_RELATIVE) ILAppendID(PIDLIST_RELATIVE pidl, LPCSHITEMID pmkid, | 
       |   |  BOOL fAppend); | 
       |   |  | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2K && NTDDI_VERSION < NTDDI_LONGHORN) | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IDefViewFrame |   | #define INTERFACE   IDefViewFrame | 
       | 
      | DECLARE_INTERFACE_(IDefViewFrame, IUnknown) |   | DECLARE_INTERFACE_IID_(IDefViewFrame, IUnknown, "710EB7A0-45ED-11D0-924A-0020AFC
7AC4D") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
       | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, __out void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IDefViewFrame methods *** |   |     // *** IDefViewFrame methods *** | 
       | 
      |     STDMETHOD(GetWindowLV) (THIS_ HWND * phwnd) PURE; |   |     STDMETHOD(GetWindowLV) (THIS_ __out HWND * phwnd) PURE; | 
      |     STDMETHOD(ReleaseWindowLV) (THIS) PURE; |   |     STDMETHOD(ReleaseWindowLV) (THIS) PURE; | 
       | 
      |     STDMETHOD(GetShellFolder)(THIS_ IShellFolder **ppsf) PURE; |   |     STDMETHOD(GetShellFolder)(THIS_ __out IShellFolder **ppsf) PURE; | 
      | }; |   | }; | 
       | 
      |                                                                                  |   | #endif | 
      | //=========================================================================== |   | //=========================================================================== | 
      | // Shell restrictions. (Parameter for SHRestricted) |   | // Shell restrictions. (Parameter for SHRestricted) | 
       | 
       |   | // SHRestricted has been deprecated in favor of SHWindowsPolicy | 
       |   | //--- do not add restrictions here, see winpolicy.cpp c_rgWindowsPolicies | 
      | typedef enum RESTRICTIONS |   | typedef enum RESTRICTIONS | 
      | { |   | { | 
      |     REST_NONE                       = 0x00000000, |   |     REST_NONE                       = 0x00000000, | 
      |     REST_NORUN                      = 0x00000001, |   |     REST_NORUN                      = 0x00000001, | 
      |     REST_NOCLOSE                    = 0x00000002, |   |     REST_NOCLOSE                    = 0x00000002, | 
      |     REST_NOSAVESET                  = 0x00000004, |   |     REST_NOSAVESET                  = 0x00000004, | 
      |     REST_NOFILEMENU                 = 0x00000008, |   |     REST_NOFILEMENU                 = 0x00000008, | 
      |     REST_NOSETFOLDERS               = 0x00000010, |   |     REST_NOSETFOLDERS               = 0x00000010, | 
      |     REST_NOSETTASKBAR               = 0x00000020, |   |     REST_NOSETTASKBAR               = 0x00000020, | 
      |     REST_NODESKTOP                  = 0x00000040, |   |     REST_NODESKTOP                  = 0x00000040, | 
       |   |  | 
      | skipping to change at line 4162 |   | skipping to change at line 3193 | 
      |     REST_NOCHANGINGWALLPAPER        = 0x40000011, |   |     REST_NOCHANGINGWALLPAPER        = 0x40000011, | 
      |     REST_NODESKCOMP                 = 0x40000012, |   |     REST_NODESKCOMP                 = 0x40000012, | 
      |     REST_NOADDDESKCOMP              = 0x40000013, |   |     REST_NOADDDESKCOMP              = 0x40000013, | 
      |     REST_NODELDESKCOMP              = 0x40000014, |   |     REST_NODELDESKCOMP              = 0x40000014, | 
      |     REST_NOCLOSEDESKCOMP            = 0x40000015, |   |     REST_NOCLOSEDESKCOMP            = 0x40000015, | 
      |     REST_NOCLOSE_DRAGDROPBAND       = 0x40000016,   // Disable Close and Drag & 
Drop on ALL Bands |   |     REST_NOCLOSE_DRAGDROPBAND       = 0x40000016,   // Disable Close and Drag & 
Drop on ALL Bands | 
      |     REST_NOMOVINGBAND               = 0x40000017,   // Disable Moving ALL Bands |   |     REST_NOMOVINGBAND               = 0x40000017,   // Disable Moving ALL Bands | 
      |     REST_NOEDITDESKCOMP             = 0x40000018, |   |     REST_NOEDITDESKCOMP             = 0x40000018, | 
      |     REST_NORESOLVESEARCH            = 0x40000019, |   |     REST_NORESOLVESEARCH            = 0x40000019, | 
      |     REST_NORESOLVETRACK             = 0x4000001A, |   |     REST_NORESOLVETRACK             = 0x4000001A, | 
       | 
      |     REST_FORCECOPYACLWITHFILE       = 0X4000001B, |   |     REST_FORCECOPYACLWITHFILE       = 0x4000001B, | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      |     REST_NOLOGO3CHANNELNOTIFY       = 0x4000001C, |   |     REST_NOLOGO3CHANNELNOTIFY       = 0x4000001C, | 
       | 
       |   | #endif | 
      |     REST_NOFORGETSOFTWAREUPDATE     = 0x4000001D, |   |     REST_NOFORGETSOFTWAREUPDATE     = 0x4000001D, | 
      |     REST_NOSETACTIVEDESKTOP         = 0x4000001E,   // No Active desktop on Sett
ings Menu |   |     REST_NOSETACTIVEDESKTOP         = 0x4000001E,   // No Active desktop on Sett
ings Menu | 
      |     REST_NOUPDATEWINDOWS            = 0x4000001F,   // No Windows Update on Sett
ings Menu |   |     REST_NOUPDATEWINDOWS            = 0x4000001F,   // No Windows Update on Sett
ings Menu | 
      |     REST_NOCHANGESTARMENU           = 0x40000020,   // No Context menu or Drag a
nd Drop on Start menu |   |     REST_NOCHANGESTARMENU           = 0x40000020,   // No Context menu or Drag a
nd Drop on Start menu | 
      |     REST_NOFOLDEROPTIONS            = 0x40000021,   // No Folder Options on Sett
ings Menu |   |     REST_NOFOLDEROPTIONS            = 0x40000021,   // No Folder Options on Sett
ings Menu | 
      |     REST_HASFINDCOMPUTERS           = 0x40000022,   // Show Start/Search/Compute
rs |   |     REST_HASFINDCOMPUTERS           = 0x40000022,   // Show Start/Search/Compute
rs | 
      |     REST_INTELLIMENUS               = 0x40000023, |   |     REST_INTELLIMENUS               = 0x40000023, | 
      |     REST_RUNDLGMEMCHECKBOX          = 0x40000024, |   |     REST_RUNDLGMEMCHECKBOX          = 0x40000024, | 
      |     REST_ARP_ShowPostSetup          = 0x40000025,   // ARP: Show Post-Setup page |   |     REST_ARP_ShowPostSetup          = 0x40000025,   // ARP: Show Post-Setup page | 
      |     REST_NOCSC                      = 0x40000026,   // Disable the ClientSide ca
ching on SM |   |     REST_NOCSC                      = 0x40000026,   // Disable the ClientSide ca
ching on SM | 
       |   |  | 
      | skipping to change at line 4196 |   | skipping to change at line 3229 | 
      |     REST_NOWEBVIEW                  = 0x40000033,   // Disable Web View |   |     REST_NOWEBVIEW                  = 0x40000033,   // Disable Web View | 
      |     REST_NOCUSTOMIZETHISFOLDER      = 0x40000034,   // Disable Customize This Fo
lder |   |     REST_NOCUSTOMIZETHISFOLDER      = 0x40000034,   // Disable Customize This Fo
lder | 
      |     REST_NOENCRYPTION               = 0x40000035,   // Don't allow file encrypti
on |   |     REST_NOENCRYPTION               = 0x40000035,   // Don't allow file encrypti
on | 
      | //  Do NOT use me                     0x40000036, |   | //  Do NOT use me                     0x40000036, | 
      |     REST_DONTSHOWSUPERHIDDEN        = 0x40000037,   // don't show super hidden f
iles |   |     REST_DONTSHOWSUPERHIDDEN        = 0x40000037,   // don't show super hidden f
iles | 
      |     REST_NOSHELLSEARCHBUTTON        = 0x40000038, |   |     REST_NOSHELLSEARCHBUTTON        = 0x40000038, | 
      |     REST_NOHARDWARETAB              = 0x40000039,   // No Hardware tab on Drives
 or in control panel |   |     REST_NOHARDWARETAB              = 0x40000039,   // No Hardware tab on Drives
 or in control panel | 
      |     REST_NORUNASINSTALLPROMPT       = 0x4000003A,   // Don't bring up "Run As" p
rompt for install programs |   |     REST_NORUNASINSTALLPROMPT       = 0x4000003A,   // Don't bring up "Run As" p
rompt for install programs | 
      |     REST_PROMPTRUNASINSTALLNETPATH  = 0x4000003B,   // Force the  "Run As" promp
t for install programs on unc/network shares |   |     REST_PROMPTRUNASINSTALLNETPATH  = 0x4000003B,   // Force the  "Run As" promp
t for install programs on unc/network shares | 
      |     REST_NOMANAGEMYCOMPUTERVERB     = 0x4000003C,   // No Manage verb on My Comp
uter |   |     REST_NOMANAGEMYCOMPUTERVERB     = 0x4000003C,   // No Manage verb on My Comp
uter | 
       | 
      |     REST_NORECENTDOCSNETHOOD        = 0x4000003D,   // dont add the recent docs 
shares to nethood |   | //  Do NOT use me                     0x4000003D, | 
      |     REST_DISALLOWRUN                = 0x4000003E,   // don't allow certain apps 
to be run |   |     REST_DISALLOWRUN                = 0x4000003E,   // don't allow certain apps 
to be run | 
      |     REST_NOWELCOMESCREEN            = 0x4000003F,   // don't allow the welcome s
creen to be displayed. |   |     REST_NOWELCOMESCREEN            = 0x4000003F,   // don't allow the welcome s
creen to be displayed. | 
      |     REST_RESTRICTCPL                = 0x40000040,   // only allow certain cpls t
o be run |   |     REST_RESTRICTCPL                = 0x40000040,   // only allow certain cpls t
o be run | 
      |     REST_DISALLOWCPL                = 0x40000041,   // don't allow certain cpls 
to be run |   |     REST_DISALLOWCPL                = 0x40000041,   // don't allow certain cpls 
to be run | 
      |     REST_NOSMBALLOONTIP             = 0x40000042,   // No Start Menu Balloon Tip |   |     REST_NOSMBALLOONTIP             = 0x40000042,   // No Start Menu Balloon Tip | 
      |     REST_NOSMHELP                   = 0x40000043,   // No Help on the Start Menu |   |     REST_NOSMHELP                   = 0x40000043,   // No Help on the Start Menu | 
      |     REST_NOWINKEYS                  = 0x40000044,   // No Windows-X Hot keys |   |     REST_NOWINKEYS                  = 0x40000044,   // No Windows-X Hot keys | 
      |     REST_NOENCRYPTONMOVE            = 0x40000045,   // Don't automatically try t
o encrypt files that are moved to encryped directories |   |     REST_NOENCRYPTONMOVE            = 0x40000045,   // Don't automatically try t
o encrypt files that are moved to encryped directories | 
      |     REST_NOLOCALMACHINERUN          = 0x40000046,   // ignore HKLM\sw\ms\win\cv\
Run and all of it's sub keys |   |     REST_NOLOCALMACHINERUN          = 0x40000046,   // ignore HKLM\sw\ms\win\cv\
Run and all of it's sub keys | 
      |     REST_NOCURRENTUSERRUN           = 0x40000047,   // ignore HKCU\sw\ms\win\cv\
Run and all of it's sub keys |   |     REST_NOCURRENTUSERRUN           = 0x40000047,   // ignore HKCU\sw\ms\win\cv\
Run and all of it's sub keys | 
      |     REST_NOLOCALMACHINERUNONCE      = 0x40000048,   // ignore HKLM\sw\ms\win\cv\
RunOnce and all of it's sub keys |   |     REST_NOLOCALMACHINERUNONCE      = 0x40000048,   // ignore HKLM\sw\ms\win\cv\
RunOnce and all of it's sub keys | 
      |     REST_NOCURRENTUSERRUNONCE       = 0x40000049,   // ignore HKCU\sw\ms\win\cv\
RunOnce and all of it's sub keys |   |     REST_NOCURRENTUSERRUNONCE       = 0x40000049,   // ignore HKCU\sw\ms\win\cv\
RunOnce and all of it's sub keys | 
      |     REST_FORCEACTIVEDESKTOPON       = 0x4000004A,   // Force ActiveDesktop to be
 turned ON all the time. |   |     REST_FORCEACTIVEDESKTOPON       = 0x4000004A,   // Force ActiveDesktop to be
 turned ON all the time. | 
       | 
      |     REST_NOCOMPUTERSNEARME          = 0x4000004B,   // removes the "Computers ne
ar me" link |   | //  Do NOT use me                     0x4000004B, | 
      |     REST_NOVIEWONDRIVE              = 0x4000004C,   // disallows CreateViewObjec
t() on specified drives (CFSFolder only) |   |     REST_NOVIEWONDRIVE              = 0x4000004C,   // disallows CreateViewObjec
t() on specified drives (CFSFolder only) | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) || defined(IE_BACKCOMPAT_VERSION) | 
      |     REST_NONETCRAWL                 = 0x4000004D,   // disables the crawling of 
the WNet namespace. |   |     REST_NONETCRAWL                 = 0x4000004D,   // disables the crawling of 
the WNet namespace. | 
      |     REST_NOSHAREDDOCUMENTS          = 0x4000004E,   // don't auto share the Shar
ed Documents/create link |   |     REST_NOSHAREDDOCUMENTS          = 0x4000004E,   // don't auto share the Shar
ed Documents/create link | 
       | 
       |   | #endif  // NTDDI_WINXP | 
      |     REST_NOSMMYDOCS                 = 0x4000004F,   // Don't show the My Documen
ts item on the Start Menu. |   |     REST_NOSMMYDOCS                 = 0x4000004F,   // Don't show the My Documen
ts item on the Start Menu. | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |     REST_NOSMMYPICS                 = 0x40000050,   // Don't show the My Picture
s item on the Start Menu |   |     REST_NOSMMYPICS                 = 0x40000050,   // Don't show the My Picture
s item on the Start Menu | 
      |     REST_ALLOWBITBUCKDRIVES         = 0x40000051,   // Bit mask indicating which
 which drives have bit bucket support |   |     REST_ALLOWBITBUCKDRIVES         = 0x40000051,   // Bit mask indicating which
 which drives have bit bucket support | 
      |     REST_NONLEGACYSHELLMODE         = 0x40000052,   // new consumer shell modes |   |     REST_NONLEGACYSHELLMODE         = 0x40000052,   // new consumer shell modes | 
      |     REST_NOCONTROLPANELBARRICADE    = 0x40000053,   // The webview barricade in 
Control Panel |   |     REST_NOCONTROLPANELBARRICADE    = 0x40000053,   // The webview barricade in 
Control Panel | 
      |     REST_NOSTARTPAGE                = 0x40000054,   // Whistler Start Page on de
sktop. |   |     REST_NOSTARTPAGE                = 0x40000054,   // Whistler Start Page on de
sktop. | 
      |     REST_NOAUTOTRAYNOTIFY           = 0x40000055,   // Whistler auto-tray notify
 feature |   |     REST_NOAUTOTRAYNOTIFY           = 0x40000055,   // Whistler auto-tray notify
 feature | 
      |     REST_NOTASKGROUPING             = 0x40000056,   // Whistler taskbar button g
rouping feature |   |     REST_NOTASKGROUPING             = 0x40000056,   // Whistler taskbar button g
rouping feature | 
      |     REST_NOCDBURNING                = 0x40000057,   // whistler cd burning featu
re |   |     REST_NOCDBURNING                = 0x40000057,   // whistler cd burning featu
re | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | 
      |     REST_MYCOMPNOPROP               = 0x40000058,   // disables Properties on My
 Computer's context menu |   |     REST_MYCOMPNOPROP               = 0x40000058,   // disables Properties on My
 Computer's context menu | 
      |     REST_MYDOCSNOPROP               = 0x40000059,   // disables Properties on My
 Documents' context menu |   |     REST_MYDOCSNOPROP               = 0x40000059,   // disables Properties on My
 Documents' context menu | 
       | 
       |   | #endif  // NTDDI_WIN2KSP3 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |     REST_NOSTARTPANEL               = 0x4000005A,   // Windows start panel (New 
start menu) for Whistler. |   |     REST_NOSTARTPANEL               = 0x4000005A,   // Windows start panel (New 
start menu) for Whistler. | 
      |     REST_NODISPLAYAPPEARANCEPAGE    = 0x4000005B,   // disable Themes and Appear
ance tabs in the Display Control Panel. |   |     REST_NODISPLAYAPPEARANCEPAGE    = 0x4000005B,   // disable Themes and Appear
ance tabs in the Display Control Panel. | 
      |     REST_NOTHEMESTAB                = 0x4000005C,   // disable the Themes tab in
 the Display Control Panel. |   |     REST_NOTHEMESTAB                = 0x4000005C,   // disable the Themes tab in
 the Display Control Panel. | 
      |     REST_NOVISUALSTYLECHOICE        = 0x4000005D,   // disable the visual style 
drop down in the Appearance tab of the Display Control Panel. |   |     REST_NOVISUALSTYLECHOICE        = 0x4000005D,   // disable the visual style 
drop down in the Appearance tab of the Display Control Panel. | 
      |     REST_NOSIZECHOICE               = 0x4000005E,   // disable the size drop dow
n in the Appearance tab of the Display Control Panel. |   |     REST_NOSIZECHOICE               = 0x4000005E,   // disable the size drop dow
n in the Appearance tab of the Display Control Panel. | 
      |     REST_NOCOLORCHOICE              = 0x4000005F,   // disable the color drop do
wn in the Appearance tab of the Display Control Panel. |   |     REST_NOCOLORCHOICE              = 0x4000005F,   // disable the color drop do
wn in the Appearance tab of the Display Control Panel. | 
      |     REST_SETVISUALSTYLE             = 0x40000060,   // Load the specified file a
s the visual style. |   |     REST_SETVISUALSTYLE             = 0x40000060,   // Load the specified file a
s the visual style. | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | 
      |     REST_STARTRUNNOHOMEPATH         = 0x40000061,   // dont use the %HOMEPATH% e
nv var for the Start-Run dialog |   |     REST_STARTRUNNOHOMEPATH         = 0x40000061,   // dont use the %HOMEPATH% e
nv var for the Start-Run dialog | 
       | 
       |   | #endif  // NTDDI_WIN2KSP3 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |     REST_NOUSERNAMEINSTARTPANEL     = 0x40000062,   // don't show the username i
s the startpanel. |   |     REST_NOUSERNAMEINSTARTPANEL     = 0x40000062,   // don't show the username i
s the startpanel. | 
      |     REST_NOMYCOMPUTERICON           = 0x40000063,   // don't show my computer an
ywhere, hide its contents |   |     REST_NOMYCOMPUTERICON           = 0x40000063,   // don't show my computer an
ywhere, hide its contents | 
      |     REST_NOSMNETWORKPLACES          = 0x40000064,   // don't show network places
 in startpanel. |   |     REST_NOSMNETWORKPLACES          = 0x40000064,   // don't show network places
 in startpanel. | 
      |     REST_NOSMPINNEDLIST             = 0x40000065,   // don't show the pinned lis
t in startpanel. |   |     REST_NOSMPINNEDLIST             = 0x40000065,   // don't show the pinned lis
t in startpanel. | 
      |     REST_NOSMMYMUSIC                = 0x40000066,   // don't show MyMusic folder
 in startpanel |   |     REST_NOSMMYMUSIC                = 0x40000066,   // don't show MyMusic folder
 in startpanel | 
      |     REST_NOSMEJECTPC                = 0x40000067,   // don't show "Undoc PC" com
mand in startmenu |   |     REST_NOSMEJECTPC                = 0x40000067,   // don't show "Undoc PC" com
mand in startmenu | 
      |     REST_NOSMMOREPROGRAMS           = 0x40000068,   // don't show "More Programs
" button in StartPanel. |   |     REST_NOSMMOREPROGRAMS           = 0x40000068,   // don't show "More Programs
" button in StartPanel. | 
      |     REST_NOSMMFUPROGRAMS            = 0x40000069,   // don't show the MFU progra
ms list in StartPanel. |   |     REST_NOSMMFUPROGRAMS            = 0x40000069,   // don't show the MFU progra
ms list in StartPanel. | 
      |     REST_NOTRAYITEMSDISPLAY         = 0x4000006A,   // disables the display of t
he system tray |   |     REST_NOTRAYITEMSDISPLAY         = 0x4000006A,   // disables the display of t
he system tray | 
      |     REST_NOTOOLBARSONTASKBAR        = 0x4000006B,   // disables toolbar display 
on the taskbar |   |     REST_NOTOOLBARSONTASKBAR        = 0x4000006B,   // disables toolbar display 
on the taskbar | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | 
      |     REST_NOSMCONFIGUREPROGRAMS      = 0x4000006F,   // No Configure Programs on 
Settings Menu |   |     REST_NOSMCONFIGUREPROGRAMS      = 0x4000006F,   // No Configure Programs on 
Settings Menu | 
       | 
       |   | #endif  // NTDDI_WIN2KSP3 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |     REST_HIDECLOCK                  = 0x40000070,   // don't show the clock |   |     REST_HIDECLOCK                  = 0x40000070,   // don't show the clock | 
      |     REST_NOLOWDISKSPACECHECKS       = 0x40000071,   // disable the low disk spac
e checking |   |     REST_NOLOWDISKSPACECHECKS       = 0x40000071,   // disable the low disk spac
e checking | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP4) | 
      |     REST_NOENTIRENETWORK            = 0x40000072,   // removes the "Entire Netwo
rk" link (i.e. from "My Network Places") |   |     REST_NOENTIRENETWORK            = 0x40000072,   // removes the "Entire Netwo
rk" link (i.e. from "My Network Places") | 
       | 
       |   | #endif  // NTDDI_WIN2KSP4 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |     REST_NODESKTOPCLEANUP           = 0x40000073,   // disable the desktop clean
up wizard |   |     REST_NODESKTOPCLEANUP           = 0x40000073,   // disable the desktop clean
up wizard | 
      |     REST_BITBUCKNUKEONDELETE        = 0x40000074,   // disables recycling of fil
es |   |     REST_BITBUCKNUKEONDELETE        = 0x40000074,   // disables recycling of fil
es | 
      |     REST_BITBUCKCONFIRMDELETE       = 0x40000075,   // always show the delete co
nfirmation dialog when deleting files |   |     REST_BITBUCKCONFIRMDELETE       = 0x40000075,   // always show the delete co
nfirmation dialog when deleting files | 
      |     REST_BITBUCKNOPROP              = 0x40000076,   // disables Properties on Re
cycle Bin's context menu |   |     REST_BITBUCKNOPROP              = 0x40000076,   // disables Properties on Re
cycle Bin's context menu | 
      |     REST_NODISPBACKGROUND           = 0x40000077,   // disables the Desktop tab 
in the Display CPL |   |     REST_NODISPBACKGROUND           = 0x40000077,   // disables the Desktop tab 
in the Display CPL | 
      |     REST_NODISPSCREENSAVEPG         = 0x40000078,   // disables the Screen Saver
 tab in the Display CPL |   |     REST_NODISPSCREENSAVEPG         = 0x40000078,   // disables the Screen Saver
 tab in the Display CPL | 
      |     REST_NODISPSETTINGSPG           = 0x40000079,   // disables the Settings tab
 in the Display CPL |   |     REST_NODISPSETTINGSPG           = 0x40000079,   // disables the Settings tab
 in the Display CPL | 
      |     REST_NODISPSCREENSAVEPREVIEW    = 0x4000007A,   // disables the screen saver
 on the Screen Saver tab in the Display CPL |   |     REST_NODISPSCREENSAVEPREVIEW    = 0x4000007A,   // disables the screen saver
 on the Screen Saver tab in the Display CPL | 
      |     REST_NODISPLAYCPL               = 0x4000007B,   // disables the Display CPL |   |     REST_NODISPLAYCPL               = 0x4000007B,   // disables the Display CPL | 
      |     REST_HIDERUNASVERB              = 0x4000007C,   // hides the "Run As..." con
text menu item |   |     REST_HIDERUNASVERB              = 0x4000007C,   // hides the "Run As..." con
text menu item | 
      |     REST_NOTHUMBNAILCACHE           = 0x4000007D,   // disables use of the thumb
nail cache |   |     REST_NOTHUMBNAILCACHE           = 0x4000007D,   // disables use of the thumb
nail cache | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP1) || defined(IE_BACKCOMPAT_VERSION) | 
      |     REST_NOSTRCMPLOGICAL            = 0x4000007E,   // dont use StrCmpLogical() 
instead use default CompareString() |   |     REST_NOSTRCMPLOGICAL            = 0x4000007E,   // dont use StrCmpLogical() 
instead use default CompareString() | 
      |     REST_NOPUBLISHWIZARD            = 0x4000007F,   // disables publishing wizar
d (WPW) |   |     REST_NOPUBLISHWIZARD            = 0x4000007F,   // disables publishing wizar
d (WPW) | 
      |     REST_NOONLINEPRINTSWIZARD       = 0x40000080,   // disables online prints wi
zard (OPW) |   |     REST_NOONLINEPRINTSWIZARD       = 0x40000080,   // disables online prints wi
zard (OPW) | 
      |     REST_NOWEBSERVICES              = 0x40000081,   // disables the web specifie
d services for both OPW and WPW |   |     REST_NOWEBSERVICES              = 0x40000081,   // disables the web specifie
d services for both OPW and WPW | 
       | 
       |   | #endif  // NTDDI_WINXPSP1 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | 
      |     REST_ALLOWUNHASHEDWEBVIEW       = 0x40000082,   // allow the user to be prom
ted to accept web view templates that don't already have an md5 hash in the regi
stry |   |     REST_ALLOWUNHASHEDWEBVIEW       = 0x40000082,   // allow the user to be prom
ted to accept web view templates that don't already have an md5 hash in the regi
stry | 
       | 
       |   | #endif  // NTDDI_WIN2KSP3 | 
      |     REST_ALLOWLEGACYWEBVIEW         = 0x40000083,   // allow legacy webview temp
late to be shown. |   |     REST_ALLOWLEGACYWEBVIEW         = 0x40000083,   // allow legacy webview temp
late to be shown. | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) | 
      |     REST_REVERTWEBVIEWSECURITY      = 0x40000084,   // disable added webview sec
urity measures (revert to w2k functionality). |   |     REST_REVERTWEBVIEWSECURITY      = 0x40000084,   // disable added webview sec
urity measures (revert to w2k functionality). | 
       | 
       |   | #endif  // NTDDI_WIN2KSP3 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WIN2KSP4) | 
      |     REST_INHERITCONSOLEHANDLES      = 0x40000086,   // ShellExec() will check fo
r the current process and target process being console processes to inherit hand
les |   |     REST_INHERITCONSOLEHANDLES      = 0x40000086,   // ShellExec() will check fo
r the current process and target process being console processes to inherit hand
les | 
       | 
       |   | #endif  // NTDDI_WIN2KSP4 | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_LONGHORN) | 
      |     REST_SORTMAXITEMCOUNT           = 0x40000087,   // Do not sort views with mo
re items than this key. Useful for viewing big amount of files in one folder. |   |     REST_SORTMAXITEMCOUNT           = 0x40000087,   // Do not sort views with mo
re items than this key. Useful for viewing big amount of files in one folder. | 
       | 
       |   | #endif | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | 
      |     REST_NOREMOTERECURSIVEEVENTS    = 0x40000089,   // Dont register network cha
nge events recursively to avoid network traffic |   |     REST_NOREMOTERECURSIVEEVENTS    = 0x40000089,   // Dont register network cha
nge events recursively to avoid network traffic | 
       | 
      |     REST_NOREMOTECHANGENOTIFY       = 0x40000091,   // Do not register for remot |   | #endif  // NTDDI_WINXPSP2 | 
      | e change notifies |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | 
       |   |     REST_NOREMOTECHANGENOTIFY       = 0x40000091,   // Do not notify for remote  | 
       |   | changy notifies | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      |     REST_NOSIMPLENETIDLIST          = 0x40000092,   // No simple network IDLists |   |     REST_NOSIMPLENETIDLIST          = 0x40000092,   // No simple network IDLists | 
       | 
       |   | #endif | 
      |     REST_NOENUMENTIRENETWORK        = 0x40000093,   // Don't enumerate entire ne
twork if we happen to get to it (in conjunction with REST_NOENTIRENETWORK) |   |     REST_NOENUMENTIRENETWORK        = 0x40000093,   // Don't enumerate entire ne
twork if we happen to get to it (in conjunction with REST_NOENTIRENETWORK) | 
       | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      |     REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094,   // Disable Thumbnail for Net
work files in DUI Details pane |   |     REST_NODETAILSTHUMBNAILONNETWORK= 0x40000094,   // Disable Thumbnail for Net
work files in DUI Details pane | 
       | 
       |   | #endif | 
      |     REST_NOINTERNETOPENWITH         = 0x40000095,   // dont allow looking on the
 internet for file associations |   |     REST_NOINTERNETOPENWITH         = 0x40000095,   // dont allow looking on the
 internet for file associations | 
       | 
      |     REST_ALLOWLEGACYLMZBEHAVIOR     = 0x4000009A,   // allowable LMZ behavior fo |   | #endif  // NTDDI_WINXPSP2 | 
      | r ActiveX objects changed in XPSP2, this policy gets the pre-XPSP2 behavior |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | 
      |     REST_DONTRETRYBADNETNAME        = 0x4000009B,   // In Network Places: if pro
vider returns ERROR_BAD_NET_NAME, give up |   |     REST_DONTRETRYBADNETNAME        = 0x4000009B,   // In Network Places: if pro
vider returns ERROR_BAD_NET_NAME, give up | 
      |     REST_ALLOWFILECLSIDJUNCTIONS    = 0x4000009C,   // re-enable legacy support 
for file.{guid} junctions in FileSystem Folder |   |     REST_ALLOWFILECLSIDJUNCTIONS    = 0x4000009C,   // re-enable legacy support 
for file.{guid} junctions in FileSystem Folder | 
      |     REST_NOUPNPINSTALL              = 0x4000009D,   // disable "install UPnP" ta
sk in My Net Places |   |     REST_NOUPNPINSTALL              = 0x4000009D,   // disable "install UPnP" ta
sk in My Net Places | 
       | 
       |   | #endif  // NTDDI_WINXPSP2 | 
       |   |     REST_ARP_DONTGROUPPATCHES       = 0x400000AC,   //List individual patches in | 
       |   |  Add/Remove Programs | 
       |   |     REST_ARP_NOCHOOSEPROGRAMSPAGE   = 0x400000AD,   //Choose programs page | 
       |   |  | 
      |     REST_NODISCONNECT               = 0x41000001,   // No Disconnect option in S
tart menu |   |     REST_NODISCONNECT               = 0x41000001,   // No Disconnect option in S
tart menu | 
      |     REST_NOSECURITY                 = 0x41000002,   // No Security option in sta
rt menu |   |     REST_NOSECURITY                 = 0x41000002,   // No Security option in sta
rt menu | 
      |     REST_NOFILEASSOCIATE            = 0x41000003,   // Do not allow user to chan
ge file association |   |     REST_NOFILEASSOCIATE            = 0x41000003,   // Do not allow user to chan
ge file association | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | 
      |     REST_ALLOWCOMMENTTOGGLE         = 0x41000004,   // Allow the user to toggle 
the positions of the Comment and the Computer Name |   |     REST_ALLOWCOMMENTTOGGLE         = 0x41000004,   // Allow the user to toggle 
the positions of the Comment and the Computer Name | 
       | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      |     REST_USEDESKTOPINICACHE         = 0x41000005,   // Cache desktop.ini entries
 from network folders |   |     REST_USEDESKTOPINICACHE         = 0x41000005,   // Cache desktop.ini entries
 from network folders | 
       | 
       |   | #endif  // NTDDI_LONGHORN | 
       |   | #endif  // NTDDI_WINXPSP2 | 
      | } RESTRICTIONS; |   | } RESTRICTIONS; | 
      | SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValu
e, DWORD grfMode); |   | SHSTDAPI_(IStream *) OpenRegStream(HKEY hkey, LPCWSTR pszSubkey, LPCWSTR pszValu
e, DWORD grfMode); | 
       | 
      | SHSTDAPI_(BOOL) SHFindFiles(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile |   | SHSTDAPI_(BOOL) SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidl | 
      | ); |   | SaveFile); | 
      | SHSTDAPI_(void) PathGetShortPath(LPWSTR pszLongPath); |   | SHSTDAPI_(void) PathGetShortPath(__inout_ecount(MAX_PATH) LPWSTR pszLongPath); | 
      | SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(LPWSTR  pszUniqueName, LPCWSTR pszP |   | SHSTDAPI_(BOOL) PathYetAnotherMakeUniqueName(__out_ecount(MAX_PATH) LPWSTR  pszU | 
      | ath, LPCWSTR pszShort, LPCWSTR pszFileSpec); |   | niqueName, LPCWSTR pszPath, LPCWSTR pszShort, LPCWSTR pszFileSpec); | 
      | SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath); |   | SHSTDAPI_(BOOL) Win32DeleteFile(LPCWSTR pszPath); | 
       | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      | // |   | // | 
      | // Path processing function |   | // Path processing function | 
      | // |   | // | 
      | #define PPCF_ADDQUOTES               0x00000001        // return a quoted name i
f required |   | #define PPCF_ADDQUOTES               0x00000001        // return a quoted name i
f required | 
      | #define PPCF_ADDARGUMENTS            0x00000003        // appends arguments (and
 wraps in quotes if required) |   | #define PPCF_ADDARGUMENTS            0x00000003        // appends arguments (and
 wraps in quotes if required) | 
      | #define PPCF_NODIRECTORIES           0x00000010        // don't match to directo
ries |   | #define PPCF_NODIRECTORIES           0x00000010        // don't match to directo
ries | 
      | #define PPCF_FORCEQUALIFY            0x00000040        // qualify even non-relat
ive names |   | #define PPCF_FORCEQUALIFY            0x00000040        // qualify even non-relat
ive names | 
      | #define PPCF_LONGESTPOSSIBLE         0x00000080        // always find the longes
t possible name |   | #define PPCF_LONGESTPOSSIBLE         0x00000080        // always find the longes
t possible name | 
       |   |  | 
      | SHSTDAPI_(LONG) PathProcessCommand(LPCWSTR lpSrc, LPWSTR lpDest, int iMax, DWORD
 dwFlags); |   | SHSTDAPI_(LONG) PathProcessCommand(LPCWSTR lpSrc, LPWSTR lpDest, int iMax, DWORD
 dwFlags); | 
       | 
       |   | #endif | 
      | SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest); |   | SHSTDAPI_(DWORD) SHRestricted(RESTRICTIONS rest); | 
       | 
      | SHSTDAPI_(BOOL) SignalFileOpen(LPCITEMIDLIST pidl); |   | SHSTDAPI_(BOOL) SignalFileOpen(PCIDLIST_ABSOLUTE pidl); | 
      | SHSTDAPI_(LPITEMIDLIST) SHSimpleIDListFromPath(LPCWSTR pszPath); |   | SHSTDAPI_(PIDLIST_ABSOLUTE) SHSimpleIDListFromPath(LPCWSTR pszPath); | 
       |   |                                                                                  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | SHSTDAPI AssocGetDetailsOfPropKey(__in IShellFolder *psf, __in PCUITEMID_CHILD p | 
       |   | idl, __in const PROPERTYKEY *pkey, __out VARIANT *pv, __out_opt BOOL *pfFoundPro | 
       |   | pKey); | 
       |   | #endif | 
       |   |  | 
       |   | #if (NTDDI_VERSION < NTDDI_LONGHORN) | 
      | SHSTDAPI SHLoadOLE(LPARAM lParam); |   | SHSTDAPI SHLoadOLE(LPARAM lParam); | 
       | 
      | SHSTDAPI SHStartNetConnectionDialogA(HWND hwnd, LPCSTR pszRemoteName, DWORD dwTy |   | #endif | 
      | pe); |   |  | 
      | SHSTDAPI SHStartNetConnectionDialogW(HWND hwnd, LPCWSTR pszRemoteName, DWORD dwT |   | // both ANSI and UNICODE | 
      | ype); |   | SHSTDAPI SHStartNetConnectionDialogA(HWND hwnd, __in_opt LPCSTR pszRemoteName, D | 
       |   | WORD dwType); | 
       |   | // both ANSI and UNICODE | 
       |   | SHSTDAPI SHStartNetConnectionDialogW(HWND hwnd, __in_opt LPCWSTR pszRemoteName,  | 
       |   | DWORD dwType); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHStartNetConnectionDialog  SHStartNetConnectionDialogW |   | #define SHStartNetConnectionDialog  SHStartNetConnectionDialogW | 
      | #else |   | #else | 
      | #define SHStartNetConnectionDialog  SHStartNetConnectionDialogA |   | #define SHStartNetConnectionDialog  SHStartNetConnectionDialogA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | SHSTDAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, |   | SHSTDAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags, | 
       | 
      |                            HICON *phiconLarge, HICON *phiconSmall, UINT nIconSiz
e); |   |                            __out_opt HICON *phiconLarge, __out_opt HICON *phicon
Small, UINT nIconSize); | 
      | SHSTDAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, |   | SHSTDAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, | 
       | 
      |                            HICON *phiconLarge, HICON *phiconSmall, UINT nIconSiz
e); |   |                            __out_opt HICON *phiconLarge, __out_opt HICON *phicon
Small, UINT nIconSize); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHDefExtractIcon  SHDefExtractIconW |   | #define SHDefExtractIcon  SHDefExtractIconW | 
      | #else |   | #else | 
      | #define SHDefExtractIcon  SHDefExtractIconA |   | #define SHDefExtractIcon  SHDefExtractIconA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
      | SHSTDAPI_(BOOL) Shell_GetImageLists(HIMAGELIST *phiml, HIMAGELIST *phimlSmall); |   |                                                                                  | 
      | SHSTDAPI_(int)  Shell_GetCachedImageIndex(LPCWSTR pszIconPath, int iIconIndex, U |   | // Elevation | 
      | INT uIconFlags); |   |  | 
       |   | // OpenAsInfo flags | 
       |   | enum tagOPEN_AS_INFO_FLAGS { | 
       |   |     OAIF_ALLOW_REGISTRATION = 0x00000001,     // enable the "always use this fil | 
       |   | e" checkbox (NOTE if you don't pass this, it will be disabled) | 
       |   |     OAIF_REGISTER_EXT       = 0x00000002,     // do the registration after the u | 
       |   | ser hits "ok" | 
       |   |     OAIF_EXEC               = 0x00000004,     // execute file after registering | 
       |   |     OAIF_FORCE_REGISTRATION = 0x00000008,     // force the "always use this file | 
       |   | " checkbox to be checked (normally, you won't use the OAIF_ALLOW_REGISTRATION wh | 
       |   | en you pass this) | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     OAIF_HIDE_REGISTRATION  = 0x00000020,     // hide the "always use this file" | 
       |   |  checkbox | 
       |   |     OAIF_URL_PROTOCOL       = 0x00000040,     // the "extension" passed is actua | 
       |   | lly a protocol, and open with should show apps registered as capable of handling | 
       |   |  that protocol | 
       |   | #endif | 
       |   | }; | 
       |   | typedef int OPEN_AS_INFO_FLAGS; | 
       |   |  | 
       |   | #include <pshpack8.h> | 
       |   |  | 
       |   | typedef struct _openasinfo | 
       |   | { | 
       |   |     LPCTSTR pcszFile;               // [in] file name, or protocol name if | 
       |   |                                     //      OAIF_URL_PROTOCOL is set. | 
       |   |     LPCTSTR pcszClass;              // [in] file class description. NULL means | 
       |   |                                     //      use pcszFile's extension. ignored | 
       |   |                                     //      if OAIF_URL_PROTOCOL is set. | 
       |   |     OPEN_AS_INFO_FLAGS oaifInFlags; // [in] input flags from OPEN_AS_INFO_FLAGS  | 
       |   | enumeration | 
       |   | } OPENASINFO, * POPENASINFO; | 
       |   |  | 
       |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
       |   | SHSTDAPI SHOpenWithDialog(__in HWND hwndParent, __in const OPENASINFO* poainfo); | 
       |   |                                                                                  | 
       |   | SHSTDAPI_(BOOL) Shell_GetImageLists(__out_opt HIMAGELIST *phiml, __out_opt HIMAG | 
       |   | ELIST *phimlSmall); | 
       |   | SHSTDAPI_(int)  Shell_GetCachedImageIndex(LPCWSTR pwszIconPath, int iIconIndex,  | 
       |   | UINT uIconFlags); | 
       |   | SHSTDAPI_(int)  Shell_GetCachedImageIndexA(LPCSTR pszIconPath, int iIconIndex, U | 
       |   | INT uIconFlags); | 
       |   | SHSTDAPI_(int)  Shell_GetCachedImageIndexW(LPCWSTR pszIconPath, int iIconIndex,  | 
       |   | UINT uIconFlags); | 
       |   | #ifdef UNICODE | 
       |   | #define Shell_GetCachedImageIndex  Shell_GetCachedImageIndexW | 
       |   | #else | 
       |   | #define Shell_GetCachedImageIndex  Shell_GetCachedImageIndexA | 
       |   | #endif // !UNICODE | 
       |   |  | 
      | // |   | // | 
      | // IDocViewSite |   | // IDocViewSite | 
      | // |   | // | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE  IDocViewSite |   | #define INTERFACE  IDocViewSite | 
       | 
      | DECLARE_INTERFACE_(IDocViewSite, IUnknown) |   | DECLARE_INTERFACE_IID_(IDocViewSite, IUnknown, "87D605E0-C511-11CF-89A9-00A0C905
4129") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef)(THIS) PURE; |   |     STDMETHOD_(ULONG,AddRef)(THIS) PURE; | 
      |     STDMETHOD_(ULONG,Release)(THIS) PURE; |   |     STDMETHOD_(ULONG,Release)(THIS) PURE; | 
       |   |  | 
      |     // *** IDocViewSite methods *** |   |     // *** IDocViewSite methods *** | 
      |     STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE; |   |     STDMETHOD(OnSetTitle) (THIS_ VARIANTARG *pvTitle) PURE; | 
       |   |  | 
      | } ; |   | } ; | 
       | 
      | #define VALIDATEUNC_NOUI        0x0002          // don't bring up UI |   |  | 
      | #define VALIDATEUNC_CONNECT     0x0001          // connect a drive letter |   | #define VALIDATEUNC_CONNECT     0x0001          // connect a drive letter | 
       | 
       |   | #define VALIDATEUNC_NOUI        0x0002          // don't bring up UI | 
      | #define VALIDATEUNC_PRINT       0x0004          // validate as print share inste
ad of disk share |   | #define VALIDATEUNC_PRINT       0x0004          // validate as print share inste
ad of disk share | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define VALIDATEUNC_PERSIST     0x0008          // the connection should be made | 
       |   |  persistent | 
       |   | #define VALIDATEUNC_VALID       0x000F          // valid flags | 
       |   | #else | 
      | #define VALIDATEUNC_VALID       0x0007          // valid flags |   | #define VALIDATEUNC_VALID       0x0007          // valid flags | 
       | 
       |   | #endif | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, LPWSTR pszFile, UINT fConnect); |   | SHSTDAPI_(BOOL) SHValidateUNC(HWND hwndOwner, __inout LPWSTR pszFile, UINT fConn
ect); | 
      | #define OPENPROPS_NONE          0x0000 |   | #define OPENPROPS_NONE          0x0000 | 
      | #define OPENPROPS_INHIBITPIF    0x8000 |   | #define OPENPROPS_INHIBITPIF    0x8000 | 
      | #define GETPROPS_NONE           0x0000 |   | #define GETPROPS_NONE           0x0000 | 
      | #define SETPROPS_NONE           0x0000 |   | #define SETPROPS_NONE           0x0000 | 
      | #define CLOSEPROPS_NONE         0x0000 |   | #define CLOSEPROPS_NONE         0x0000 | 
      | #define CLOSEPROPS_DISCARD      0x0001 |   | #define CLOSEPROPS_DISCARD      0x0001 | 
       |   |  | 
      | #define PIFNAMESIZE     30 |   | #define PIFNAMESIZE     30 | 
      | #define PIFSTARTLOCSIZE 63 |   | #define PIFSTARTLOCSIZE 63 | 
      | #define PIFDEFPATHSIZE  64 |   | #define PIFDEFPATHSIZE  64 | 
       |   |  | 
      | skipping to change at line 4378 |   | skipping to change at line 3512 | 
      |     WORD    wIconIndex;                     // index of icon within file |   |     WORD    wIconIndex;                     // index of icon within file | 
      |     DWORD   dwEnhModeFlags;                 // reserved enh-mode flags |   |     DWORD   dwEnhModeFlags;                 // reserved enh-mode flags | 
      |     DWORD   dwRealModeFlags;                // real-mode flags (see RMOPT_*) |   |     DWORD   dwRealModeFlags;                // real-mode flags (see RMOPT_*) | 
      |     CHAR    achOtherFile[PIFDEFFILESIZE];   // name of "other" file in directory |   |     CHAR    achOtherFile[PIFDEFFILESIZE];   // name of "other" file in directory | 
      |     CHAR    achPIFFile[PIFMAXFILEPATH];     // name of PIF file |   |     CHAR    achPIFFile[PIFMAXFILEPATH];     // name of PIF file | 
      | } PROPPRG; |   | } PROPPRG; | 
      | typedef UNALIGNED PROPPRG *PPROPPRG; |   | typedef UNALIGNED PROPPRG *PPROPPRG; | 
      | typedef UNALIGNED PROPPRG FAR *LPPROPPRG; |   | typedef UNALIGNED PROPPRG FAR *LPPROPPRG; | 
      | typedef const UNALIGNED PROPPRG FAR *LPCPROPPRG; |   | typedef const UNALIGNED PROPPRG FAR *LPCPROPPRG; | 
       |   |  | 
       | 
      | SHSTDAPI_(HANDLE) PifMgr_OpenProperties(LPCWSTR pszApp, LPCWSTR pszPIF, UINT hIn |   | SHSTDAPI_(HANDLE) PifMgr_OpenProperties(LPCWSTR pszApp, __in_opt LPCWSTR pszPIF, | 
      | f, UINT flOpt); |   |  UINT hInf, UINT flOpt); | 
      | SHSTDAPI_(int)    PifMgr_GetProperties(HANDLE hProps, LPCSTR pszGroup, void *lpP |   | SHSTDAPI_(int)    PifMgr_GetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR p | 
      | rops, int cbProps, UINT flOpt); |   | szGroup, __out_bcount_opt(cbProps) void *lpProps, int cbProps, UINT flOpt); | 
      | SHSTDAPI_(int)    PifMgr_SetProperties(HANDLE hProps, LPCSTR pszGroup, const VOI |   | SHSTDAPI_(int)    PifMgr_SetProperties(__in_opt HANDLE hProps, __in_opt LPCSTR p | 
      | D *lpProps, int cbProps, UINT flOpt); |   | szGroup, __in_bcount(cbProps) const void *lpProps, int cbProps, UINT flOpt); | 
      | SHSTDAPI_(HANDLE) PifMgr_CloseProperties(HANDLE hProps, UINT flOpt); |   | SHSTDAPI_(HANDLE) PifMgr_CloseProperties(__in_opt HANDLE hProps, UINT flOpt); | 
       |   |  | 
      | SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk); |   | SHSTDAPI_(void) SHSetInstanceExplorer(IUnknown *punk); | 
      | SHSTDAPI_(BOOL) IsUserAnAdmin(void); |   | SHSTDAPI_(BOOL) IsUserAnAdmin(void); | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IInitializeObject |   | #define INTERFACE   IInitializeObject | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IInitializeObject, IUnknown) |   | DECLARE_INTERFACE_IID_(IInitializeObject, IUnknown, "4622AD16-FF23-11d0-8D34-00A
0C90F2719") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IInitializeObject methods |   |     // *** IInitializeObject methods | 
      |     STDMETHOD(Initialize)(THIS) PURE; |   |     STDMETHOD(Initialize)(THIS) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | enum |   | enum | 
      | { |   | { | 
      |     BMICON_LARGE = 0, |   |     BMICON_LARGE = 0, | 
      |     BMICON_SMALL |   |     BMICON_SMALL | 
      | }; |   | }; | 
       |   |  | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IBanneredBar |   | #define INTERFACE   IBanneredBar | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IBanneredBar, IUnknown) |   | DECLARE_INTERFACE_IID_(IBanneredBar, IUnknown, "596A9A94-013E-11d1-8D34-00A0C90F
2719") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IBanneredBar methods *** |   |     // *** IBanneredBar methods *** | 
      |     STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE; |   |     STDMETHOD(SetIconSize)(THIS_ DWORD iIcon) PURE; | 
      |     STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE; |   |     STDMETHOD(GetIconSize)(THIS_ DWORD* piIcon) PURE; | 
      |     STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE; |   |     STDMETHOD(SetBitmap)(THIS_ HBITMAP hBitmap) PURE; | 
      |     STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE; |   |     STDMETHOD(GetBitmap)(THIS_ HBITMAP* phBitmap) PURE; | 
       |   |  | 
      | }; |   | }; | 
       |   |  | 
      | SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lP
aram); |   | SHSTDAPI_(LRESULT) SHShellFolderView_Message(HWND hwndMain, UINT uMsg, LPARAM lP
aram); | 
       |   |  | 
      | // |   | // | 
       | 
      | // Callback interface for the IShellFolderView |   | // Callback interface for the IShellView object returned from SHCreateShellFolde | 
       |   | rView. | 
       |   |                                                                                  | 
      | // |   | // | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE   IShellFolderViewCB |   | #define INTERFACE   IShellFolderViewCB | 
       |   |  | 
       | 
      | DECLARE_INTERFACE_(IShellFolderViewCB, IUnknown) |   | DECLARE_INTERFACE_IID_(IShellFolderViewCB, IUnknown, "2047E320-F2A9-11CE-AE65-08
002B2E1262") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
      |     STDMETHOD_(ULONG,Release) (THIS) PURE; |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
      |     // *** IShellFolderViewCB methods *** |   |     // *** IShellFolderViewCB methods *** | 
      |     STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; |   |     STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       |   |  | 
       | 
      | #undef UNSIZED_ARRAY2 |   |  | 
      | #undef EMPTY_SIZE2 |   |  | 
      | #define UNSIZED_ARRAY2 |   |  | 
      | #define EMPTY_SIZE2 UNSIZED_ARRAY2 |   |  | 
      |                                                                                  |   |  | 
      | #define QCMINFO_PLACE_BEFORE    0 |   | #define QCMINFO_PLACE_BEFORE    0 | 
      | #define QCMINFO_PLACE_AFTER     1 |   | #define QCMINFO_PLACE_AFTER     1 | 
      | typedef struct _QCMINFO_IDMAP_PLACEMENT |   | typedef struct _QCMINFO_IDMAP_PLACEMENT | 
      | { |   | { | 
      |     UINT id; |   |     UINT id; | 
      |     UINT fFlags; |   |     UINT fFlags; | 
      | } QCMINFO_IDMAP_PLACEMENT; |   | } QCMINFO_IDMAP_PLACEMENT; | 
       |   |  | 
      | typedef struct _QCMINFO_IDMAP |   | typedef struct _QCMINFO_IDMAP | 
      | { |   | { | 
       |   |  | 
      | skipping to change at line 4488 |   | skipping to change at line 3618 | 
      | #define TBIF_DEFAULT      0x00000000 |   | #define TBIF_DEFAULT      0x00000000 | 
      | #define TBIF_INTERNETBAR  0x00010000 |   | #define TBIF_INTERNETBAR  0x00010000 | 
      | #define TBIF_STANDARDTOOLBAR   0x00020000 |   | #define TBIF_STANDARDTOOLBAR   0x00020000 | 
      | #define TBIF_NOTOOLBAR  0x00030000 |   | #define TBIF_NOTOOLBAR  0x00030000 | 
       |   |  | 
      | typedef struct _TBINFO |   | typedef struct _TBINFO | 
      | { |   | { | 
      |     UINT        cbuttons;       // out |   |     UINT        cbuttons;       // out | 
      |     UINT        uFlags;         // out (one of TBIF_ flags) |   |     UINT        uFlags;         // out (one of TBIF_ flags) | 
      | } TBINFO; |   | } TBINFO; | 
       | 
       |   | typedef TBINFO * LPTBINFO; | 
       |   |  | 
      | typedef struct _DETAILSINFO |   | typedef struct _DETAILSINFO | 
      | { |   | { | 
       | 
      |     LPCITEMIDLIST pidl; |   |     PCUITEMID_CHILD pidl; | 
      |     int fmt; |   |     int fmt; | 
      |     int cxChar; |   |     int cxChar; | 
      |     STRRET str; |   |     STRRET str; | 
      |     int iImage; |   |     int iImage; | 
      | } DETAILSINFO; |   | } DETAILSINFO; | 
       | 
       |   | typedef DETAILSINFO *PDETAILSINFO; | 
       |   |  | 
      | typedef struct _SFVM_PROPPAGE_DATA |   | typedef struct _SFVM_PROPPAGE_DATA | 
      | { |   | { | 
      |     DWORD                dwReserved; |   |     DWORD                dwReserved; | 
      |     LPFNADDPROPSHEETPAGE pfn; |   |     LPFNADDPROPSHEETPAGE pfn; | 
      |     LPARAM               lParam; |   |     LPARAM               lParam; | 
      | } SFVM_PROPPAGE_DATA; |   | } SFVM_PROPPAGE_DATA; | 
       |   |  | 
      | typedef struct _SFVM_HELPTOPIC_DATA |   | typedef struct _SFVM_HELPTOPIC_DATA | 
      | { |   | { | 
       |   |  | 
      | skipping to change at line 4535 |   | skipping to change at line 3667 | 
      | #define SFVM_DEFVIEWMODE          27    // -                  FOLDERVIEWMODE* |   | #define SFVM_DEFVIEWMODE          27    // -                  FOLDERVIEWMODE* | 
      | #define SFVM_UNMERGEMENU          28    // -                  hmenu |   | #define SFVM_UNMERGEMENU          28    // -                  hmenu | 
      | #define SFVM_UPDATESTATUSBAR      31    // fInitialize        - |   | #define SFVM_UPDATESTATUSBAR      31    // fInitialize        - | 
      | #define SFVM_BACKGROUNDENUM       32    // -                  - |   | #define SFVM_BACKGROUNDENUM       32    // -                  - | 
      | #define SFVM_DIDDRAGDROP          36    // dwEffect           IDataObject * |   | #define SFVM_DIDDRAGDROP          36    // dwEffect           IDataObject * | 
      | #define SFVM_SETISFV              39    // -                  IShellFolderView* |   | #define SFVM_SETISFV              39    // -                  IShellFolderView* | 
      | #define SFVM_THISIDLIST           41    // -                  LPITMIDLIST* |   | #define SFVM_THISIDLIST           41    // -                  LPITMIDLIST* | 
      | #define SFVM_ADDPROPERTYPAGES     47    // -                  SFVM_PROPPAGE_DATA
 * |   | #define SFVM_ADDPROPERTYPAGES     47    // -                  SFVM_PROPPAGE_DATA
 * | 
      | #define SFVM_BACKGROUNDENUMDONE   48    // -                  - |   | #define SFVM_BACKGROUNDENUMDONE   48    // -                  - | 
      | #define SFVM_GETNOTIFY            49    // LPITEMIDLIST*      LONG* |   | #define SFVM_GETNOTIFY            49    // LPITEMIDLIST*      LONG* | 
       | 
       |   | // Note: SFVM_QUERYSTANDARDVIEWS NOT USED: must use SFVM_GETVIEWDATA instead | 
      | #define SFVM_GETSORTDEFAULTS      53    // iDirection         iParamSort |   | #define SFVM_GETSORTDEFAULTS      53    // iDirection         iParamSort | 
      | #define SFVM_SIZE                 57    // -                  - |   | #define SFVM_SIZE                 57    // -                  - | 
      | #define SFVM_GETZONE              58    // -                  DWORD* |   | #define SFVM_GETZONE              58    // -                  DWORD* | 
      | #define SFVM_GETPANE              59    // Pane ID            DWORD* |   | #define SFVM_GETPANE              59    // Pane ID            DWORD* | 
      | #define SFVM_GETHELPTOPIC         63    // -                  SFVM_HELPTOPIC_DAT
A * |   | #define SFVM_GETHELPTOPIC         63    // -                  SFVM_HELPTOPIC_DAT
A * | 
      | #define SFVM_GETANIMATION         68    // HINSTANCE *        WCHAR * |   | #define SFVM_GETANIMATION         68    // HINSTANCE *        WCHAR * | 
       | 
       |   |                                                                                  | 
       |   | // IShellFolderView | 
       |   | // | 
       |   | // Deprecated: use IFolderView and IFolderView2 instead. | 
       |   | // | 
       |   | // IShellFolderView is supported by the IShellView object returned from SHCreate | 
       |   | ShellFolderView. | 
       |   | // | 
       |   | // Warnings: | 
       |   | //  - Some methods on this interface do not follow standard COM rules. | 
       |   | //  - Some methods can be used to configure the IShellView or cause it to behave | 
       |   |  incorrectly. | 
       |   | //  - Few of these methods have parameter or range validation, so callers can ca | 
       |   | use the IShellView to fault. | 
       |   |  | 
       |   | typedef struct _ITEMSPACING | 
       |   | { | 
       |   |     int cxSmall; | 
       |   |     int cySmall; | 
       |   |     int cxLarge; | 
       |   |     int cyLarge; | 
       |   | } ITEMSPACING; | 
       |   |  | 
       |   | // defines for IShellFolderView::SetObjectCount | 
       |   | #define SFVSOC_INVALIDATE_ALL   0x00000001  // Assumed to reset only what is nec | 
       |   | cessary... | 
       |   | #define SFVSOC_NOSCROLL         LVSICF_NOSCROLL | 
       |   |  | 
       |   | // defines for IShellFolderView::SelectItems() | 
       |   | #define SFVS_SELECT_NONE        0x0 // unselect all | 
       |   | #define SFVS_SELECT_ALLITEMS    0x1 // select all | 
       |   | #define SFVS_SELECT_INVERT      0x2 // Inver the selection | 
       |   |  | 
       |   | #undef  INTERFACE | 
       |   | #define INTERFACE   IShellFolderView | 
       |   |  | 
       |   | DECLARE_INTERFACE_IID_(IShellFolderView, IUnknown, "37A378C0-F82D-11CE-AE65-0800 | 
       |   | 2B2E1262") | 
       |   | { | 
       |   |     // *** IUnknown methods *** | 
       |   |     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE; | 
       |   |     STDMETHOD_(ULONG,AddRef) (THIS)  PURE; | 
       |   |     STDMETHOD_(ULONG,Release) (THIS) PURE; | 
       |   |  | 
       |   |     // *** IShellFolderView methods *** | 
       |   |     STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE; // use IFolderView2::Se | 
       |   | tSortColumns | 
       |   |     STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE; // use IFolderV | 
       |   | iew2::GetSortColumns | 
       |   |     STDMETHOD(ArrangeGrid) (THIS) PURE; // select Arrange by Grid | 
       |   |     STDMETHOD(AutoArrange) (THIS) PURE; // select Auto Arrange | 
       |   |     STDMETHOD(GetAutoArrange) (THIS) PURE; // use IFolderView::GetAutoArrange | 
       |   |     STDMETHOD(AddObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; // item | 
       |   | s added here may disappear (the data source is the final arbiter of which items  | 
       |   | are available to the view) | 
       |   |     STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE; // use I | 
       |   | FolderView::Item | 
       |   |     STDMETHOD(RemoveObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; // i | 
       |   | tems removed here may reappear (the data source is the final arbiter of which it | 
       |   | ems are available to the view) | 
       |   |     STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE; // use IFolderView::It | 
       |   | emCount | 
       |   |     STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE; // not imp | 
       |   | lemented on Vista.  Sends LVM_SETITEMCOUNT with WPARAM=uCount and LPARAM=dwFlags | 
       |   |  to listview on XP. | 
       |   |     STDMETHOD(UpdateObject) (THIS_ PUITEMID_CHILD pidlOld, PUITEMID_CHILD pidlNe | 
       |   | w, UINT *puItem) PURE; // swaps ITEMID_CHILDs, returning new index.  Changes may | 
       |   |  be discarded (the data source is the final arbiter of which items are available | 
       |   |  to the view) | 
       |   |     STDMETHOD(RefreshObject) (THIS_ PUITEMID_CHILD pidl, UINT *puItem) PURE; //  | 
       |   | tickles the listview to re-draw the item | 
       |   |     STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE; // sends WM_SETREDRAW to the | 
       |   |  listview | 
       |   |     STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE; // use IFolderVie | 
       |   | w2::GetSelection | 
       |   |     // NOTE: GetSelectedObjects hands out const pointers to internal ITEMID_CHIL | 
       |   | D structures. The caller is expected to act on them immediately (and not cache t | 
       |   | hem).  LocalFree the array, but not the items it contains. | 
       |   |     STDMETHOD(GetSelectedObjects) (THIS_ PCUITEMID_CHILD **pppidl, UINT *puItems | 
       |   | ) PURE; // use IFolderView2::GetSelection. | 
       |   |     STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE; // use IFol | 
       |   | derView2::IsMoveInSameFolder | 
       |   |     STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE; // returns point correspond | 
       |   | ing to drag-and-drop operation | 
       |   |     STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE; // returns point correspond | 
       |   | ing to drag-and-drop operation | 
       |   |     STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE; // not implement | 
       |   | ed | 
       |   |     STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE; // use  | 
       |   | IFolderView::SelectAndPositionItems | 
       |   |     STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE; // returns  | 
       |   | S_OK if drag-and-drop is on the background, S_FALSE otherwise | 
       |   |     STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE; // if bMove is TRUE, this a | 
       |   | ttempts to cut (edit.cut, ctrl-x) the current selection.  bMove of FALSE is not  | 
       |   | supported. | 
       |   |     STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE; // copies points | 
       |   |  of current selection in to data object.  Call is not needed if drag operation w | 
       |   | as originated by the IShellView. | 
       |   |     STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE; // use IFolder | 
       |   | View::GetSpacing instead.  GetItemSpacing returns the spacing for small and larg | 
       |   | e view modes only, returning S_OK if the current view mode is is positionable, S | 
       |   | _FALSE otherwise. | 
       |   |     STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB | 
       |   | ** ppOldCB) PURE; // replace the IShellFolderViewCB that the IShellView uses | 
       |   |     STDMETHOD(Select) ( THIS_  UINT dwFlags ) PURE; // SFVS_ select flags: selec | 
       |   | t all, select none, invert selection | 
       |   |     STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE; // does nothing, re | 
       |   | turns S_OK. | 
       |   |     STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE; // replaces the | 
       |   |  IShellView's internal automation object. | 
       |   | } ; | 
       |   |                                                                                  | 
      | // SHCreateShellFolderView struct |   | // SHCreateShellFolderView struct | 
      | typedef struct _SFV_CREATE |   | typedef struct _SFV_CREATE | 
      | { |   | { | 
       | 
      |     UINT            cbSize; |   |     UINT            cbSize;     // must be sizeof(SFV_CREATE) | 
      |     IShellFolder*   pshf; |   |     IShellFolder*   pshf;       // IShellFolder the IShellView will use | 
      |     IShellView*     psvOuter; |   |     IShellView*     psvOuter;   // optional: IShellView to pass to psfvcb | 
      |     IShellFolderViewCB* psfvcb; // No callback if NULL |   |     IShellFolderViewCB* psfvcb; // No callback if NULL | 
      | } SFV_CREATE; |   | } SFV_CREATE; | 
       |   |  | 
       | 
      | SHSTDAPI SHCreateShellFolderView(const SFV_CREATE* pcsfv, IShellView **ppsv); |   | SHSTDAPI SHCreateShellFolderView(__in const SFV_CREATE* pcsfv, __deref_out IShel
lView ** ppsv); | 
      | typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder *psf, HWND hwnd, |   | typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder *psf, HWND hwnd, | 
      |                                              IDataObject *pdtobj, UINT uMsg, WPA
RAM wParam, LPARAM lParam); |   |                                              IDataObject *pdtobj, UINT uMsg, WPA
RAM wParam, LPARAM lParam); | 
       |   |  | 
       | 
      | SHSTDAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, |   | SHSTDAPI CDefFolderMenu_Create2(__in PCIDLIST_ABSOLUTE pidlFolder, __in_opt HWND | 
      |                                 UINT cidl, LPCITEMIDLIST *apidl, |   |  hwnd, | 
      |                                 IShellFolder *psf, LPFNDFMCALLBACK lpfn, |   |                                 __in_opt UINT cidl, __in_ecount_opt(cidl) PCUITE | 
      |                                 UINT nKeys, const HKEY *ahkeyClsKeys, |   | MID_CHILD_ARRAY apidl, | 
      |                                 IContextMenu **ppcm); |   |                                 __in IShellFolder *psf, __in LPFNDFMCALLBACK pfn | 
       |   | , | 
       |   |                                 __in UINT nKeys, __in_ecount(nKeys) const HKEY * | 
       |   | ahkeys, | 
       |   |                                 __deref_out IContextMenu **ppcm); | 
       |   | typedef struct { | 
       |   |     HWND hwnd; | 
       |   |     IContextMenuCB *pcmcb;          // optional: callback object | 
       |   |     PCIDLIST_ABSOLUTE pidlFolder;   // optional: IDList to folder of the items,  | 
       |   | computed from psf if NULL | 
       |   |     IShellFolder *psf;              // folder of the items | 
       |   |     UINT cidl;                      // # of items in apidl | 
       |   |     PCUITEMID_CHILD_ARRAY apidl;    // items operating on, used to get IDataObje | 
       |   | ct and IAssociationArray | 
       |   |     IUnknown *punkAssociationInfo;  // optional: IQueryAssociations, specifies w | 
       |   | here to load extensions from, computed from apidl if NULL | 
       |   |     UINT cKeys;                     // # of items in aKeys, may be zero | 
       |   |     const HKEY *aKeys;              // optional: specifies where to load extensi | 
       |   | ons from | 
       |   | } DEFCONTEXTMENU; | 
       |   |  | 
       | 
      | SHSTDAPI_(BOOL) SHOpenPropSheetA(LPCSTR pszCaption, HKEY ahkeys[], UINT cikeys, |   | // creates object that implements IContextMenu/IContextMenu2/IContextMenu3, typi | 
      |                                  const CLSID * pclsidDefault, IDataObject *pdtob |   | cally | 
      | j, |   | // used in the implemetnation of ::GetUIObjectOf() | 
      |                                  IShellBrowser *psb, LPCSTR pStartPage); |   |  | 
      | SHSTDAPI_(BOOL) SHOpenPropSheetW(LPCWSTR pszCaption, HKEY ahkeys[], UINT cikeys, |   | SHSTDAPI SHCreateDefaultContextMenu(__in const DEFCONTEXTMENU *pdcm, __in REFIID | 
      |                                  const CLSID * pclsidDefault, IDataObject *pdtob |   |  riid, __deref_out void **ppv); | 
      | j, |   |                                                                                  | 
      |                                  IShellBrowser *psb, LPCWSTR pStartPage); |   | SHSTDAPI_(BOOL) SHOpenPropSheetA(__in_opt LPCSTR pszCaption, __in_ecount_opt(cik | 
       |   | eys) HKEY ahkeys[], UINT cikeys, | 
       |   |                                  __in_opt const CLSID * pclsidDefault, __in IDat | 
       |   | aObject *pdtobj, | 
       |   |                                  __in_opt IShellBrowser *psb, __in_opt LPCSTR pS | 
       |   | tartPage); | 
       |   | SHSTDAPI_(BOOL) SHOpenPropSheetW(__in_opt LPCWSTR pszCaption, __in_ecount_opt(ci | 
       |   | keys) HKEY ahkeys[], UINT cikeys, | 
       |   |                                  __in_opt const CLSID * pclsidDefault, __in IDat | 
       |   | aObject *pdtobj, | 
       |   |                                  __in_opt IShellBrowser *psb, __in_opt LPCWSTR p | 
       |   | StartPage); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHOpenPropSheet  SHOpenPropSheetW |   | #define SHOpenPropSheet  SHOpenPropSheetW | 
      | #else |   | #else | 
      | #define SHOpenPropSheet  SHOpenPropSheetA |   | #define SHOpenPropSheet  SHOpenPropSheetA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       | 
       |   |                                                                                  | 
       |   | // structure for lParam of DFM_INFOKECOMMANDEX | 
       |   | typedef struct | 
       |   | { | 
       |   |     DWORD  cbSize; | 
       |   |     DWORD  fMask;   // CMIC_MASK_ values for the invoke | 
       |   |     LPARAM lParam;  // same as lParam of DFM_INFOKECOMMAND | 
       |   |     UINT idCmdFirst; | 
       |   |     UINT idDefMax; | 
       |   |     LPCMINVOKECOMMANDINFO pici; // the whole thing so you can re-invoke on a chi | 
       |   | ld | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     IUnknown *punkSite;         // site pointer for context menu handler | 
       |   | #endif | 
       |   | } DFMICS, *PDFMICS; | 
       |   |  | 
       |   | // Note on context menus ranges: | 
       |   | //  Standard Items // DFM_MERGECONTEXTMENU, context menu extensions, DFM_MERGECO | 
       |   | NTEXTMENU_TOP | 
       |   | //  Separator | 
       |   | //  View Items   // context menu extensions can get here | 
       |   | //  Separator | 
       |   | //  (defcm S_FALSE "default" items, if applicable) | 
       |   | //  Separator | 
       |   | //  Folder Items // context menu extensions can get here | 
       |   | //  Separator | 
       |   | //  Bottom Items // DFM_MERGECONTEXTMENU_BOTTOM | 
       |   |                                                                                  | 
      | //                                  uMsg       wParam       lParam |   | //                                  uMsg       wParam       lParam | 
      | #define DFM_MERGECONTEXTMENU         1      // uFlags       LPQCMINFO |   | #define DFM_MERGECONTEXTMENU         1      // uFlags       LPQCMINFO | 
      | #define DFM_INVOKECOMMAND            2      // idCmd        pszArgs |   | #define DFM_INVOKECOMMAND            2      // idCmd        pszArgs | 
       | 
       |   | #define DFM_GETHELPTEXT              5      // idCmd,cchMax pszText -Ansi | 
       |   | #define DFM_WM_MEASUREITEM           6      // ---from the message--- | 
       |   | #define DFM_WM_DRAWITEM              7      // ---from the message--- | 
       |   | #define DFM_WM_INITMENUPOPUP         8      // ---from the message--- | 
       |   | #define DFM_VALIDATECMD              9      // idCmd        0 | 
       |   | #define DFM_MERGECONTEXTMENU_TOP     10     // uFlags       LPQCMINFO | 
       |   | #define DFM_GETHELPTEXTW             11     // idCmd,cchMax pszText -Unicode | 
       |   | #define DFM_INVOKECOMMANDEX          12     // idCmd        PDFMICS | 
       |   | #define DFM_MAPCOMMANDNAME           13     // idCmd *      pszCommandName | 
      | #define DFM_GETDEFSTATICID           14     // idCmd *      0 |   | #define DFM_GETDEFSTATICID           14     // idCmd *      0 | 
       | 
       |   | #define DFM_GETVERBW                 15     // idCmd,cchMax pszText -Unicode | 
       |   | #define DFM_GETVERBA                 16     // idCmd,cchMax pszText -Ansi | 
       |   | #define DFM_MERGECONTEXTMENU_BOTTOM  17     // uFlags       LPQCMINFO | 
       |   |                                                                                  | 
      | // Commands from DFM_INVOKECOMMAND when strings are passed in |   | // Commands from DFM_INVOKECOMMAND when strings are passed in | 
       | 
       |   | #define DFM_CMD_DELETE          ((UINT)-1) | 
       |   | #define DFM_CMD_MOVE            ((UINT)-2) | 
       |   | #define DFM_CMD_COPY            ((UINT)-3) | 
       |   | #define DFM_CMD_LINK            ((UINT)-4) | 
      | #define DFM_CMD_PROPERTIES      ((UINT)-5) |   | #define DFM_CMD_PROPERTIES      ((UINT)-5) | 
       | 
      | typedef TBINFO * LPTBINFO; |   | #define DFM_CMD_NEWFOLDER       ((UINT)-6) | 
       |   | #define DFM_CMD_PASTE           ((UINT)-7) | 
      | typedef DETAILSINFO *PDETAILSINFO; |   | #define DFM_CMD_VIEWLIST        ((UINT)-8) | 
       |   | #define DFM_CMD_VIEWDETAILS     ((UINT)-9) | 
       |   | #define DFM_CMD_PASTELINK       ((UINT)-10) | 
       |   | #define DFM_CMD_PASTESPECIAL    ((UINT)-11) | 
       |   | #define DFM_CMD_MODALPROP       ((UINT)-12) | 
       |   | #define DFM_CMD_RENAME          ((UINT)-13) | 
       |   |  | 
      | typedef HRESULT (CALLBACK * LPFNVIEWCALLBACK)(IShellView *psvOuter, |   | typedef HRESULT (CALLBACK * LPFNVIEWCALLBACK)(IShellView *psvOuter, | 
      |                                                 IShellFolder *psf, |   |                                                 IShellFolder *psf, | 
      |                                                 HWND hwndMain, |   |                                                 HWND hwndMain, | 
      |                                                 UINT uMsg, |   |                                                 UINT uMsg, | 
      |                                                 WPARAM wParam, |   |                                                 WPARAM wParam, | 
      |                                                 LPARAM lParam); |   |                                                 LPARAM lParam); | 
       |   |  | 
      | // SHCreateShellFolderViewEx struct |   | // SHCreateShellFolderViewEx struct | 
      | typedef struct _CSFV |   | typedef struct _CSFV | 
      | { |   | { | 
       | 
      |     UINT            cbSize; |   |     UINT              cbSize; | 
      |     IShellFolder *  pshf; |   |     IShellFolder *    pshf; | 
      |     IShellView *    psvOuter; |   |     IShellView *      psvOuter; | 
      |     LPCITEMIDLIST   pidl; |   |     PCIDLIST_ABSOLUTE pidl; | 
      |     LONG            lEvents; |   |     LONG              lEvents; | 
      |     LPFNVIEWCALLBACK pfnCallback;       // No callback if NULL |   |     LPFNVIEWCALLBACK  pfnCallback;       // No callback if NULL | 
      |     FOLDERVIEWMODE  fvm; |   |     FOLDERVIEWMODE    fvm; | 
      | } CSFV, * LPCSFV; |   | } CSFV, * LPCSFV; | 
       |   |  | 
      | // Tell the FolderView to rearrange.  The lParam will be passed to |   | // Tell the FolderView to rearrange.  The lParam will be passed to | 
      | // IShellFolder::CompareIDs |   | // IShellFolder::CompareIDs | 
      | #define SFVM_REARRANGE          0x00000001 |   | #define SFVM_REARRANGE          0x00000001 | 
      | #define ShellFolderView_ReArrange(_hwnd, _lparam) \ |   | #define ShellFolderView_ReArrange(_hwnd, _lparam) \ | 
      |         (BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam) |   |         (BOOL)SHShellFolderView_Message(_hwnd, SFVM_REARRANGE, _lparam) | 
      | // Add an OBJECT into the view |   | // Add an OBJECT into the view | 
      | #define SFVM_ADDOBJECT         0x00000003 |   | #define SFVM_ADDOBJECT         0x00000003 | 
      | #define ShellFolderView_AddObject(_hwnd, _pidl) \ |   | #define ShellFolderView_AddObject(_hwnd, _pidl) \ | 
       | 
      |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)_pidl) |   |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_ADDOBJECT, (LPARAM)(_pidl)
) | 
      | // Remove an OBJECT into the view |   | // Remove an OBJECT into the view | 
      | #define SFVM_REMOVEOBJECT         0x00000006 |   | #define SFVM_REMOVEOBJECT         0x00000006 | 
      | #define ShellFolderView_RemoveObject(_hwnd, _pidl) \ |   | #define ShellFolderView_RemoveObject(_hwnd, _pidl) \ | 
       | 
      |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)_pid
l) |   |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_REMOVEOBJECT, (LPARAM)(_pi
dl)) | 
       |   |  | 
      | // updates an object by passing in pointer to two PIDLS, the first |   | // updates an object by passing in pointer to two PIDLS, the first | 
      | // is the old pidl, the second one is the one with update information. |   | // is the old pidl, the second one is the one with update information. | 
      | // |   | // | 
      | // _ppidl[1] must be a *copy* of a pidl, as control over the lifetime |   | // _ppidl[1] must be a *copy* of a pidl, as control over the lifetime | 
      | // of the pidl belongs to the view after successful completion of |   | // of the pidl belongs to the view after successful completion of | 
      | // this call.  (Unsuccessful completion (a -1 return) implies failure |   | // this call.  (Unsuccessful completion (a -1 return) implies failure | 
      | // and the caller must free the memory.)  Win95 waits a while before |   | // and the caller must free the memory.)  Win95 waits a while before | 
      | // freeing the pidl, IE4 frees the pidl immediately. |   | // freeing the pidl, IE4 frees the pidl immediately. | 
      | // IShellFolderView::UpdateObject does not suffer from this problem. |   | // IShellFolderView::UpdateObject does not suffer from this problem. | 
      | // |   | // | 
      | #define SFVM_UPDATEOBJECT         0x00000007 |   | #define SFVM_UPDATEOBJECT         0x00000007 | 
      | #define ShellFolderView_UpdateObject(_hwnd, _ppidl) \ |   | #define ShellFolderView_UpdateObject(_hwnd, _ppidl) \ | 
       | 
      |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)_ppi
dl) |   |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_UPDATEOBJECT, (LPARAM)(_pp
idl)) | 
       |   |  | 
      | // Returns an array of the selected IDS to the caller. |   | // Returns an array of the selected IDS to the caller. | 
      | //     lparam is a pointer to receive the idlists into |   | //     lparam is a pointer to receive the idlists into | 
      | //     return value is the count of items in the array. |   | //     return value is the count of items in the array. | 
      | #define SFVM_GETSELECTEDOBJECTS 0x00000009 |   | #define SFVM_GETSELECTEDOBJECTS 0x00000009 | 
      | #define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \ |   | #define ShellFolderView_GetSelectedObjects(_hwnd, ppidl) \ | 
       | 
      |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARA
M)ppidl) |   |         (LPARAM)SHShellFolderView_Message(_hwnd, SFVM_GETSELECTEDOBJECTS, (LPARA
M)(ppidl)) | 
      | typedef struct _SFV_SETITEMPOS |   | typedef struct _SFV_SETITEMPOS | 
      | { |   | { | 
       | 
      |         LPCITEMIDLIST pidl; |   |         PCUITEMID_CHILD pidl; | 
      |         POINT pt; |   |         POINT pt; | 
       | 
      | } SFV_SETITEMPOS, *LPSFV_SETITEMPOS; |   | } SFV_SETITEMPOS; | 
       |   | typedef SFV_SETITEMPOS *LPSFV_SETITEMPOS; | 
       |   | typedef const SFV_SETITEMPOS *PCSFV_SETITEMPOS; | 
       |   |  | 
      | // Sets the position of an item in the viewer |   | // Sets the position of an item in the viewer | 
      | //     lparam is a pointer to a SVF_SETITEMPOS |   | //     lparam is a pointer to a SVF_SETITEMPOS | 
      | //     return value is unused |   | //     return value is unused | 
      | #define SFVM_SETITEMPOS         0x0000000e |   | #define SFVM_SETITEMPOS         0x0000000e | 
      | #define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \ |   | #define ShellFolderView_SetItemPos(_hwnd, _pidl, _x, _y) \ | 
      | {       SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \ |   | {       SFV_SETITEMPOS _sip = {_pidl, {_x, _y}}; \ | 
      |         SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEM
POS)&_sip);} |   |         SHShellFolderView_Message(_hwnd, SFVM_SETITEMPOS, (LPARAM)(LPSFV_SETITEM
POS)&_sip);} | 
      | //  Notifies a ShellView when one of its objects get put on the clipboard |   | //  Notifies a ShellView when one of its objects get put on the clipboard | 
      | //  as a result of a menu command. |   | //  as a result of a menu command. | 
      | // |   | // | 
      | // |   | // | 
      | //     lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY) |   | //     lparam is the dwEffect (DROPEFFECT_MOVE, DROPEFFECT_COPY) | 
      | //     return value is void. |   | //     return value is void. | 
      | #define SFVM_SETCLIPBOARD       0x00000010 |   | #define SFVM_SETCLIPBOARD       0x00000010 | 
      | #define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \ |   | #define ShellFolderView_SetClipboard(_hwnd, _dwEffect) \ | 
      |         (void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD
)(_dwEffect)) |   |         (void)SHShellFolderView_Message(_hwnd, SFVM_SETCLIPBOARD, (LPARAM)(DWORD
)(_dwEffect)) | 
      | #define SFVM_SETPOINTS           0x00000017 |   | #define SFVM_SETPOINTS           0x00000017 | 
      | #define ShellFolderView_SetPoints(_hwnd, _pdtobj) \ |   | #define ShellFolderView_SetPoints(_hwnd, _pdtobj) \ | 
       | 
      |         (void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)_pdtobj) |   |         (void)SHShellFolderView_Message(_hwnd, SFVM_SETPOINTS, (LPARAM)(_pdtobj)
) | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
      | SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT
 idCmdFirst, UINT idCmdLast); |   | SHSTDAPI_(IContextMenu *) SHFind_InitMenuPopup(HMENU hmenu, HWND hwndOwner, UINT
 idCmdFirst, UINT idCmdLast); | 
       | 
      | SHSTDAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, IShellView ** ppsv); |   | SHSTDAPI SHCreateShellFolderViewEx(LPCSFV pcsfv, __out IShellView ** ppsv); | 
       |   |  | 
       | 
      | // |   | // Legacy PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with | 
      | // PROPIDs for Internet Shortcuts (FMTID_Intshcut) to be used with |   | // IPropertySetStorage/IPropertyStorage. | 
      | // IPropertySetStorage/IPropertyStorage |   |  | 
      | // |   | // | 
      | // The known property ids and their variant types are: |   | // The known property ids and their variant types are: | 
      | //      PID_IS_URL          [VT_LPWSTR]   URL |   | //      PID_IS_URL          [VT_LPWSTR]   URL | 
      | //      PID_IS_NAME         [VT_LPWSTR]   Name of the internet shortcut |   | //      PID_IS_NAME         [VT_LPWSTR]   Name of the internet shortcut | 
      | //      PID_IS_WORKINGDIR   [VT_LPWSTR]   Working directory for the shortcut |   | //      PID_IS_WORKINGDIR   [VT_LPWSTR]   Working directory for the shortcut | 
      | //      PID_IS_HOTKEY       [VT_UI2]      Hotkey for the shortcut |   | //      PID_IS_HOTKEY       [VT_UI2]      Hotkey for the shortcut | 
      | //      PID_IS_SHOWCMD      [VT_I4]       Show command for shortcut |   | //      PID_IS_SHOWCMD      [VT_I4]       Show command for shortcut | 
      | //      PID_IS_ICONINDEX    [VT_I4]       Index into file that has icon |   | //      PID_IS_ICONINDEX    [VT_I4]       Index into file that has icon | 
      | //      PID_IS_ICONFILE     [VT_LPWSTR]   File that has the icon |   | //      PID_IS_ICONFILE     [VT_LPWSTR]   File that has the icon | 
      | //      PID_IS_WHATSNEW     [VT_LPWSTR]   What's New text |   | //      PID_IS_WHATSNEW     [VT_LPWSTR]   What's New text | 
      | //      PID_IS_AUTHOR       [VT_LPWSTR]   Author |   | //      PID_IS_AUTHOR       [VT_LPWSTR]   Author | 
      | //      PID_IS_DESCRIPTION  [VT_LPWSTR]   Description text of site |   | //      PID_IS_DESCRIPTION  [VT_LPWSTR]   Description text of site | 
      | //      PID_IS_COMMENT      [VT_LPWSTR]   User annotated comment |   | //      PID_IS_COMMENT      [VT_LPWSTR]   User annotated comment | 
       | 
      | // |   |  | 
       |   |  | 
      | #define PID_IS_URL           2 |   | #define PID_IS_URL           2 | 
      | #define PID_IS_NAME          4 |   | #define PID_IS_NAME          4 | 
      | #define PID_IS_WORKINGDIR    5 |   | #define PID_IS_WORKINGDIR    5 | 
      | #define PID_IS_HOTKEY        6 |   | #define PID_IS_HOTKEY        6 | 
      | #define PID_IS_SHOWCMD       7 |   | #define PID_IS_SHOWCMD       7 | 
      | #define PID_IS_ICONINDEX     8 |   | #define PID_IS_ICONINDEX     8 | 
      | #define PID_IS_ICONFILE      9 |   | #define PID_IS_ICONFILE      9 | 
      | #define PID_IS_WHATSNEW      10 |   | #define PID_IS_WHATSNEW      10 | 
      | #define PID_IS_AUTHOR        11 |   | #define PID_IS_AUTHOR        11 | 
      | #define PID_IS_DESCRIPTION   12 |   | #define PID_IS_DESCRIPTION   12 | 
      | #define PID_IS_COMMENT       13 |   | #define PID_IS_COMMENT       13 | 
       |   |  | 
       | 
      | // |   |  | 
      | // PROPIDs for Internet Sites (FMTID_InternetSite) to be used with |   | // PROPIDs for Internet Sites (FMTID_InternetSite) to be used with | 
      | // IPropertySetStorage/IPropertyStorage |   | // IPropertySetStorage/IPropertyStorage | 
      | // |   | // | 
      | // The known property ids and their variant types are: |   | // The known property ids and their variant types are: | 
      | //      PID_INTSITE_WHATSNEW     [VT_LPWSTR]   What's New text |   | //      PID_INTSITE_WHATSNEW     [VT_LPWSTR]   What's New text | 
      | //      PID_INTSITE_AUTHOR       [VT_LPWSTR]   Author |   | //      PID_INTSITE_AUTHOR       [VT_LPWSTR]   Author | 
      | //      PID_INTSITE_LASTVISIT    [VT_FILETIME] Time site was last visited |   | //      PID_INTSITE_LASTVISIT    [VT_FILETIME] Time site was last visited | 
      | //      PID_INTSITE_LASTMOD      [VT_FILETIME] Time site was last modified |   | //      PID_INTSITE_LASTMOD      [VT_FILETIME] Time site was last modified | 
      | //      PID_INTSITE_VISITCOUNT   [VT_UI4]      Number of times user has visited |   | //      PID_INTSITE_VISITCOUNT   [VT_UI4]      Number of times user has visited | 
      | //      PID_INTSITE_DESCRIPTION  [VT_LPWSTR]   Description text of site |   | //      PID_INTSITE_DESCRIPTION  [VT_LPWSTR]   Description text of site | 
      | //      PID_INTSITE_COMMENT      [VT_LPWSTR]   User annotated comment |   | //      PID_INTSITE_COMMENT      [VT_LPWSTR]   User annotated comment | 
      | //      PID_INTSITE_RECURSE      [VT_UI4]      Levels to recurse (0-3) |   | //      PID_INTSITE_RECURSE      [VT_UI4]      Levels to recurse (0-3) | 
      | //      PID_INTSITE_WATCH        [VT_UI4]      PIDISM_ flags |   | //      PID_INTSITE_WATCH        [VT_UI4]      PIDISM_ flags | 
      | //      PID_INTSITE_SUBSCRIPTION [VT_UI8]      Subscription cookie |   | //      PID_INTSITE_SUBSCRIPTION [VT_UI8]      Subscription cookie | 
      | //      PID_INTSITE_URL          [VT_LPWSTR]   URL |   | //      PID_INTSITE_URL          [VT_LPWSTR]   URL | 
      | //      PID_INTSITE_TITLE        [VT_LPWSTR]   Title |   | //      PID_INTSITE_TITLE        [VT_LPWSTR]   Title | 
      | //      PID_INTSITE_CODEPAGE     [VT_UI4]      Codepage of the document |   | //      PID_INTSITE_CODEPAGE     [VT_UI4]      Codepage of the document | 
      | //      PID_INTSITE_TRACKING     [VT_UI4]      Tracking |   | //      PID_INTSITE_TRACKING     [VT_UI4]      Tracking | 
      | //      PID_INTSITE_ICONINDEX    [VT_I4]       Retrieve the index to the icon |   | //      PID_INTSITE_ICONINDEX    [VT_I4]       Retrieve the index to the icon | 
      | //      PID_INTSITE_ICONFILE     [VT_LPWSTR]   Retrieve the file containing the 
icon index. |   | //      PID_INTSITE_ICONFILE     [VT_LPWSTR]   Retrieve the file containing the 
icon index. | 
       | 
       |   | //      PID_INTSITE_RAWURL       [VT_LPWSTR]   The raw, un-encoded, unicode url. | 
       |   |  | 
      | #define PID_INTSITE_WHATSNEW      2 |   | #define PID_INTSITE_WHATSNEW      2 | 
      | #define PID_INTSITE_AUTHOR        3 |   | #define PID_INTSITE_AUTHOR        3 | 
      | #define PID_INTSITE_LASTVISIT     4 |   | #define PID_INTSITE_LASTVISIT     4 | 
      | #define PID_INTSITE_LASTMOD       5 |   | #define PID_INTSITE_LASTMOD       5 | 
      | #define PID_INTSITE_VISITCOUNT    6 |   | #define PID_INTSITE_VISITCOUNT    6 | 
      | #define PID_INTSITE_DESCRIPTION   7 |   | #define PID_INTSITE_DESCRIPTION   7 | 
      | #define PID_INTSITE_COMMENT       8 |   | #define PID_INTSITE_COMMENT       8 | 
      | #define PID_INTSITE_FLAGS         9 |   | #define PID_INTSITE_FLAGS         9 | 
      | #define PID_INTSITE_CONTENTLEN    10 |   | #define PID_INTSITE_CONTENTLEN    10 | 
       |   |  | 
      | skipping to change at line 4788 |   | skipping to change at line 4056 | 
       |   |  | 
      |     UINT   version; |   |     UINT   version; | 
       |   |  | 
      |     // new for win2k. need notUsed var to calc the right size of ie4 struct |   |     // new for win2k. need notUsed var to calc the right size of ie4 struct | 
      |     // FIELD_OFFSET does not work on bit fields |   |     // FIELD_OFFSET does not work on bit fields | 
      |     UINT uNotUsed; // feel free to rename and use |   |     UINT uNotUsed; // feel free to rename and use | 
      |     BOOL fSepProcess: 1; |   |     BOOL fSepProcess: 1; | 
       |   |  | 
      |     // new for Whistler. |   |     // new for Whistler. | 
      |     BOOL fStartPanelOn: 1;       //Indicates if the Whistler StartPanel mode is 
ON or OFF. |   |     BOOL fStartPanelOn: 1;       //Indicates if the Whistler StartPanel mode is 
ON or OFF. | 
       | 
      |                                                                                  |   |  | 
      |     BOOL fShowStartPage: 1;      //Indicates if the Whistler StartPage on deskto
p is ON or OFF. |   |     BOOL fShowStartPage: 1;      //Indicates if the Whistler StartPage on deskto
p is ON or OFF. | 
       |   |  | 
       | 
      |     UINT fSpareFlags : 13; |   |     // new for Longhorn | 
       |   |     BOOL fAutoCheckSelect: 1; | 
       |   |     BOOL fIconsOnly: 1; | 
       |   |     BOOL fShowTypeOverlay: 1; | 
       |   |                                                                                  | 
       |   |     UINT fSpareFlags : 11; | 
       |   |  | 
      | } SHELLSTATEA, *LPSHELLSTATEA; |   | } SHELLSTATEA, *LPSHELLSTATEA; | 
       |   |  | 
      | typedef struct { |   | typedef struct { | 
      |     BOOL fShowAllObjects : 1; |   |     BOOL fShowAllObjects : 1; | 
      |     BOOL fShowExtensions : 1; |   |     BOOL fShowExtensions : 1; | 
      |     BOOL fNoConfirmRecycle : 1; |   |     BOOL fNoConfirmRecycle : 1; | 
      |     BOOL fShowSysFiles : 1; |   |     BOOL fShowSysFiles : 1; | 
      |     BOOL fShowCompColor : 1; |   |     BOOL fShowCompColor : 1; | 
      |     BOOL fDoubleClickInWebView : 1; |   |     BOOL fDoubleClickInWebView : 1; | 
       |   |  | 
      | skipping to change at line 4829 |   | skipping to change at line 4101 | 
      |     int    iSortDirection; |   |     int    iSortDirection; | 
      |     UINT   version; |   |     UINT   version; | 
       |   |  | 
      |     // new for win2k. need notUsed var to calc the right size of ie4 struct |   |     // new for win2k. need notUsed var to calc the right size of ie4 struct | 
      |     // FIELD_OFFSET does not work on bit fields |   |     // FIELD_OFFSET does not work on bit fields | 
      |     UINT uNotUsed; // feel free to rename and use |   |     UINT uNotUsed; // feel free to rename and use | 
      |     BOOL fSepProcess: 1; |   |     BOOL fSepProcess: 1; | 
       |   |  | 
      |     // new for Whistler. |   |     // new for Whistler. | 
      |     BOOL fStartPanelOn: 1;       //Indicates if the Whistler StartPage mode is O
N or OFF. |   |     BOOL fStartPanelOn: 1;       //Indicates if the Whistler StartPage mode is O
N or OFF. | 
       | 
      |                                                                                  |   |  | 
      |     BOOL fShowStartPage: 1;      //Indicates if the Whistler StartPage on deskto
p is ON or OFF. |   |     BOOL fShowStartPage: 1;      //Indicates if the Whistler StartPage on deskto
p is ON or OFF. | 
       |   |  | 
       | 
       |   |     // new for Longhorn | 
       |   |     BOOL fAutoCheckSelect: 1; | 
       |   |     BOOL fIconsOnly: 1; | 
       |   |     BOOL fShowTypeOverlay: 1; | 
       |   |                                                                                  | 
      |     // If you need a new flag, steal a bit from from fSpareFlags. |   |     // If you need a new flag, steal a bit from from fSpareFlags. | 
       | 
      |     UINT fSpareFlags : 13; |   |     UINT fSpareFlags : 11; | 
       |   |  | 
      | } SHELLSTATEW, *LPSHELLSTATEW; |   | } SHELLSTATEW, *LPSHELLSTATEW; | 
       |   |  | 
      | #define SHELLSTATEVERSION_IE4   9 |   | #define SHELLSTATEVERSION_IE4   9 | 
      | #define SHELLSTATEVERSION_WIN2K 10 |   | #define SHELLSTATEVERSION_WIN2K 10 | 
       |   |  | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHELLSTATE   SHELLSTATEW |   | #define SHELLSTATE   SHELLSTATEW | 
      | #define LPSHELLSTATE LPSHELLSTATEW |   | #define LPSHELLSTATE LPSHELLSTATEW | 
      | #else |   | #else | 
      | #define SHELLSTATE   SHELLSTATEA |   | #define SHELLSTATE   SHELLSTATEA | 
      | #define LPSHELLSTATE LPSHELLSTATEA |   | #define LPSHELLSTATE LPSHELLSTATEA | 
      | #endif |   | #endif | 
       |   |  | 
      | #define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET(SHELLSTATE,lParamSort) |   | #define SHELLSTATE_SIZE_WIN95 FIELD_OFFSET(SHELLSTATE,lParamSort) | 
      | #define SHELLSTATE_SIZE_NT4   FIELD_OFFSET(SHELLSTATE,version) |   | #define SHELLSTATE_SIZE_NT4   FIELD_OFFSET(SHELLSTATE,version) | 
      | #define SHELLSTATE_SIZE_IE4   FIELD_OFFSET(SHELLSTATE,uNotUsed) |   | #define SHELLSTATE_SIZE_IE4   FIELD_OFFSET(SHELLSTATE,uNotUsed) | 
      | #define SHELLSTATE_SIZE_WIN2K sizeof(SHELLSTATE) |   | #define SHELLSTATE_SIZE_WIN2K sizeof(SHELLSTATE) | 
       |   |  | 
       | 
      | SHSTDAPI_(void) SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet); |   | SHSTDAPI_(void) SHGetSetSettings(__inout_opt LPSHELLSTATE lpss, DWORD dwMask, BO
OL bSet); | 
       |   |  | 
      | // |   | // | 
      | //  SysFiles are these windows special files: |   | //  SysFiles are these windows special files: | 
      | //      "dll sys vxd 386 drv" |   | //      "dll sys vxd 386 drv" | 
      | // |   | // | 
      | //  hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute |   | //  hidden files are files with the FILE_ATTRIBUTE_HIDDEN attribute | 
      | // |   | // | 
      | //  system files are files with the FILE_ATTRIBUTE_SYSTEM attribute |   | //  system files are files with the FILE_ATTRIBUTE_SYSTEM attribute | 
      | // |   | // | 
      | //      fShowAllObjects fShowSysFiles   Result |   | //      fShowAllObjects fShowSysFiles   Result | 
       |   |  | 
      | skipping to change at line 4884 |   | skipping to change at line 4160 | 
      |     BOOL fShowSysFiles : 1; |   |     BOOL fShowSysFiles : 1; | 
      |     BOOL fShowCompColor : 1; |   |     BOOL fShowCompColor : 1; | 
      |     BOOL fDoubleClickInWebView : 1; |   |     BOOL fDoubleClickInWebView : 1; | 
      |     BOOL fDesktopHTML : 1; |   |     BOOL fDesktopHTML : 1; | 
      |     BOOL fWin95Classic : 1; |   |     BOOL fWin95Classic : 1; | 
      |     BOOL fDontPrettyPath : 1; |   |     BOOL fDontPrettyPath : 1; | 
      |     BOOL fShowAttribCol : 1; |   |     BOOL fShowAttribCol : 1; | 
      |     BOOL fMapNetDrvBtn : 1; |   |     BOOL fMapNetDrvBtn : 1; | 
      |     BOOL fShowInfoTip : 1; |   |     BOOL fShowInfoTip : 1; | 
      |     BOOL fHideIcons : 1; |   |     BOOL fHideIcons : 1; | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |     BOOL fAutoCheckSelect: 1; | 
       |   |     BOOL fIconsOnly: 1; | 
       |   |     UINT fRestFlags : 1; | 
       |   | #else | 
      |     UINT fRestFlags : 3; |   |     UINT fRestFlags : 3; | 
       | 
       |   | #endif | 
      | } SHELLFLAGSTATE, *LPSHELLFLAGSTATE; |   | } SHELLFLAGSTATE, *LPSHELLFLAGSTATE; | 
       |   |  | 
      | #define SSF_SHOWALLOBJECTS          0x00000001 |   | #define SSF_SHOWALLOBJECTS          0x00000001 | 
      | #define SSF_SHOWEXTENSIONS          0x00000002 |   | #define SSF_SHOWEXTENSIONS          0x00000002 | 
      | #define SSF_HIDDENFILEEXTS          0x00000004 |   | #define SSF_HIDDENFILEEXTS          0x00000004 | 
      | #define SSF_SERVERADMINUI           0x00000004 |   | #define SSF_SERVERADMINUI           0x00000004 | 
      | #define SSF_SHOWCOMPCOLOR           0x00000008 |   | #define SSF_SHOWCOMPCOLOR           0x00000008 | 
      | #define SSF_SORTCOLUMNS             0x00000010 |   | #define SSF_SORTCOLUMNS             0x00000010 | 
      | #define SSF_SHOWSYSFILES            0x00000020 |   | #define SSF_SHOWSYSFILES            0x00000020 | 
      | #define SSF_DOUBLECLICKINWEBVIEW    0x00000080 |   | #define SSF_DOUBLECLICKINWEBVIEW    0x00000080 | 
       |   |  | 
      | skipping to change at line 4907 |   | skipping to change at line 4189 | 
      | #define SSF_WIN95CLASSIC            0x00000400 |   | #define SSF_WIN95CLASSIC            0x00000400 | 
      | #define SSF_DONTPRETTYPATH          0x00000800 |   | #define SSF_DONTPRETTYPATH          0x00000800 | 
      | #define SSF_SHOWINFOTIP             0x00002000 |   | #define SSF_SHOWINFOTIP             0x00002000 | 
      | #define SSF_MAPNETDRVBUTTON         0x00001000 |   | #define SSF_MAPNETDRVBUTTON         0x00001000 | 
      | #define SSF_NOCONFIRMRECYCLE        0x00008000 |   | #define SSF_NOCONFIRMRECYCLE        0x00008000 | 
      | #define SSF_HIDEICONS               0x00004000 |   | #define SSF_HIDEICONS               0x00004000 | 
      | #define SSF_FILTER                  0x00010000 |   | #define SSF_FILTER                  0x00010000 | 
      | #define SSF_WEBVIEW                 0x00020000 |   | #define SSF_WEBVIEW                 0x00020000 | 
      | #define SSF_SHOWSUPERHIDDEN         0x00040000 |   | #define SSF_SHOWSUPERHIDDEN         0x00040000 | 
      | #define SSF_SEPPROCESS              0x00080000 |   | #define SSF_SEPPROCESS              0x00080000 | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define SSF_NONETCRAWLING           0x00100000 |   | #define SSF_NONETCRAWLING           0x00100000 | 
      | #define SSF_STARTPANELON            0x00200000 |   | #define SSF_STARTPANELON            0x00200000 | 
      | #define SSF_SHOWSTARTPAGE           0x00400000 |   | #define SSF_SHOWSTARTPAGE           0x00400000 | 
       | 
       |   | #endif  // NTDDI_WINXP | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   | #define SSF_AUTOCHECKSELECT         0x00800000 | 
       |   |  | 
       |   | #define SSF_ICONSONLY               0x01000000 | 
       |   | #define SSF_SHOWTYPEOVERLAY         0x02000000 | 
       |   |  | 
       |   | #endif  // NTDDI_LONGHORN | 
       |   |  | 
       | 
      | // SHGetSettings(LPSHELLFLAGSTATE lpss, DWORD dwMask) |   |  | 
      | // |   | // | 
      | // Specify the bits you are interested in in dwMask and they will be |   | // Specify the bits you are interested in in dwMask and they will be | 
      | // filled out in the lpss structure. |   | // filled out in the lpss structure. | 
      | // |   | // | 
      | // When these settings change, a WM_SETTINGCHANGE message is sent |   | // When these settings change, a WM_SETTINGCHANGE message is sent | 
      | // with the string lParam value of "ShellState". |   | // with the string lParam value of "ShellState". | 
      | // |   | // | 
       | 
      | SHSTDAPI_(void) SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask); |   | SHSTDAPI_(void) SHGetSettings(__out SHELLFLAGSTATE *psfs, DWORD dwMask); | 
       |   |  | 
       | 
      | // SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLIST *pp
idlLast) |   |  | 
      | // |   | // | 
      | // Given a pidl, you can get an interface pointer (as specified by riid) of the 
pidl's parent folder (in ppv) |   | // Given a pidl, you can get an interface pointer (as specified by riid) of the 
pidl's parent folder (in ppv) | 
      | // If ppidlLast is non-NULL, you can also get the pidl of the last item. |   | // If ppidlLast is non-NULL, you can also get the pidl of the last item. | 
      | // |   | // | 
       | 
      | SHSTDAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, void **ppv, LPCITEMIDLI |   | SHSTDAPI SHBindToParent(PCIDLIST_ABSOLUTE pidl, REFIID riid, __out void **ppv, _ | 
      | ST *ppidlLast); |   | _out_opt PCUITEMID_CHILD *ppidlLast); | 
       |   |                                                                                  | 
       |   | #if (NTDDI_VERSION >= NTDDI_LONGHORN) | 
       |   |  | 
       |   | // Same as SHBindToParent, except you also specify which root to use. | 
       |   | SHSTDAPI SHBindToFolderIDListParent(IShellFolder *psfRoot, PCUIDLIST_RELATIVE pi | 
       |   | dl, REFIID riid, __out void **ppv, __out_opt PCUITEMID_CHILD *ppidlLast); | 
       |   |  | 
       |   | // same as SHBindToFolderIDListParent but with a IBindCtx *pbc; | 
       |   | SHSTDAPI SHBindToFolderIDListParentEx(IShellFolder *psfRoot, PCUIDLIST_RELATIVE  | 
       |   | pidl, __in_opt IBindCtx *ppbc, REFIID riid, __out void **ppv, __out_opt PCUITEMI | 
       |   | D_CHILD *ppidlLast); | 
       |   |  | 
       |   | // helper function that gets the desktop object, then calls BindToObject on that | 
       |   | SHSTDAPI SHBindToObject(__in_opt IShellFolder *psf, __in PCUIDLIST_RELATIVE pidl | 
       |   | , __in_opt IBindCtx *pbc, __in REFIID riid, __deref_out void **ppv); | 
       |   |  | 
       |   | #endif // NTDDI_LONGHORN | 
       |   |  | 
       | 
      | // SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppid
l, SFGAOF sfgaoIn, SFGAOF *psfgaoOut) |   |  | 
      | // |   | // | 
      | //  given a string it will call psfDesktop->ParseDisplayName() to try and create
 a pidl |   | //  given a string it will call psfDesktop->ParseDisplayName() to try and create
 a pidl | 
      | //  if no pbc specified, it uses the preferred options for parsing. |   | //  if no pbc specified, it uses the preferred options for parsing. | 
      | //  this includes mapping file system paths to their appropriate aliased locatio
n (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES)) |   | //  this includes mapping file system paths to their appropriate aliased locatio
n (RegisterObjectParam(STR_PARSE_TRANSLATE_ALIASES)) | 
      | //  psfgaoOut is optional for SFGAO attributes |   | //  psfgaoOut is optional for SFGAO attributes | 
      | // |   | // | 
       | 
      | SHSTDAPI SHParseDisplayName(PCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl,  |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | SFGAOF sfgaoIn, SFGAOF *psfgaoOut); |   | SHSTDAPI SHParseDisplayName(PCWSTR pszName, __in_opt IBindCtx *pbc, __out PIDLIS | 
       |   | T_ABSOLUTE *ppidl, SFGAOF sfgaoIn, __out_opt SFGAOF *psfgaoOut); | 
       |   | #endif // NTDDI_WINXP | 
       |   |  | 
       | 
      | // SHPathPrepareForWrite(HWND hwnd, IUnknown *punkEnableModless, LPCTSTR pszPath
, DWORD dwFlags) |   |  | 
      | // |   | // | 
       | 
      | // DESCRIPTION: |   | // This API will make its best effort to prepare the path for the caller.  This  | 
      | //     This API will prepare the path for the caller.  This includes: |   | includes: | 
      | // 1. Prompting for the ejectable media to be re-inserted. (Floppy, CD-ROM, ZIP 
drive, etc.) |   | // 1. Prompting for the ejectable media to be re-inserted. (Floppy, CD-ROM, ZIP 
drive, etc.) | 
      | // 2. Prompting for the media to be formatted. (Floppy, hard drive, etc.) |   | // 2. Prompting for the media to be formatted. (Floppy, hard drive, etc.) | 
      | // 3. Remount mapped drives if the connection was lost. (\\unc\share mapped to N
: becomes disconnected) |   | // 3. Remount mapped drives if the connection was lost. (\\unc\share mapped to N
: becomes disconnected) | 
      | // 4. If the path doesn't exist, create it.  (SHPPFW_DIRCREATE and SHPPFW_ASKDIR
CREATE) |   | // 4. If the path doesn't exist, create it.  (SHPPFW_DIRCREATE and SHPPFW_ASKDIR
CREATE) | 
      | // 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set) |   | // 5. Display an error if the media is read only. (SHPPFW_NOWRITECHECK not set) | 
      | // |   | // | 
      | // PARAMETERS: |   | // PARAMETERS: | 
      | //      hwnd: Parernt window for UI.  NULL means don't display UI. OPTIONAL |   | //      hwnd: Parernt window for UI.  NULL means don't display UI. OPTIONAL | 
      | //      punkEnableModless: Parent that will be set to modal during UI using IOle
InPlaceActiveObject::EnableModeless(). OPTIONAL |   | //      punkEnableModless: Parent that will be set to modal during UI using IOle
InPlaceActiveObject::EnableModeless(). OPTIONAL | 
      | //      pszPath: Path to verify is valid for writting.  This can be a UNC or fil
e drive path.  The path |   | //      pszPath: Path to verify is valid for writting.  This can be a UNC or fil
e drive path.  The path | 
      | //               should only contain directories.  Pass SHPPFW_IGNOREFILENAME if
 the last path segment |   | //               should only contain directories.  Pass SHPPFW_IGNOREFILENAME if
 the last path segment | 
      | //               is always filename to ignore. |   | //               is always filename to ignore. | 
      | //      dwFlags: SHPPFW_* Flags to modify behavior |   | //      dwFlags: SHPPFW_* Flags to modify behavior | 
       | 
      | // |   |                                                                                  | 
      | //------------------------------------------------------------------------- |   |  | 
      | #define SHPPFW_NONE             0x00000000 |   | #define SHPPFW_NONE             0x00000000 | 
      | #define SHPPFW_DEFAULT          SHPPFW_DIRCREATE        // May change |   | #define SHPPFW_DEFAULT          SHPPFW_DIRCREATE        // May change | 
      | #define SHPPFW_DIRCREATE        0x00000001              // Create the directory 
if it doesn't exist without asking the user. |   | #define SHPPFW_DIRCREATE        0x00000001              // Create the directory 
if it doesn't exist without asking the user. | 
      | #define SHPPFW_ASKDIRCREATE     0x00000002              // Create the directory 
if it doesn't exist after asking the user. |   | #define SHPPFW_ASKDIRCREATE     0x00000002              // Create the directory 
if it doesn't exist after asking the user. | 
      | #define SHPPFW_IGNOREFILENAME   0x00000004              // Ignore the last item 
in pszPath because it's a file.  Example: pszPath="C:\DirA\DirB", only use "C:\D
irA". |   | #define SHPPFW_IGNOREFILENAME   0x00000004              // Ignore the last item 
in pszPath because it's a file.  Example: pszPath="C:\DirA\DirB", only use "C:\D
irA". | 
      | #define SHPPFW_NOWRITECHECK     0x00000008              // Caller only needs to 
read from the drive, so don't check if it's READ ONLY. |   | #define SHPPFW_NOWRITECHECK     0x00000008              // Caller only needs to 
read from the drive, so don't check if it's READ ONLY. | 
       | 
       |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      | #define SHPPFW_MEDIACHECKONLY   0x00000010              // do the retrys on the 
media (or net path), return errors if the file can't be found |   | #define SHPPFW_MEDIACHECKONLY   0x00000010              // do the retrys on the 
media (or net path), return errors if the file can't be found | 
       | 
       |   | #endif // NTDDI_WINXP | 
       |   |  | 
      | SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR p
szPath, DWORD dwFlags); |   | SHSTDAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *punkEnableModless, LPCSTR p
szPath, DWORD dwFlags); | 
      | SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR 
pszPath, DWORD dwFlags); |   | SHSTDAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *punkEnableModless, LPCWSTR 
pszPath, DWORD dwFlags); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHPathPrepareForWrite  SHPathPrepareForWriteW |   | #define SHPathPrepareForWrite  SHPathPrepareForWriteW | 
      | #else |   | #else | 
      | #define SHPathPrepareForWrite  SHPathPrepareForWriteA |   | #define SHPathPrepareForWrite  SHPathPrepareForWriteA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
       |   |  | 
      | //-------------------------------------------------------------------------- |   | //-------------------------------------------------------------------------- | 
      | // |   | // | 
      | // Interface used for exposing the INI file methods on a shortcut file |   | // Interface used for exposing the INI file methods on a shortcut file | 
      | // |   | // | 
      | // |   | // | 
      | //-------------------------------------------------------------------------- |   | //-------------------------------------------------------------------------- | 
      | #undef  INTERFACE |   | #undef  INTERFACE | 
      | #define INTERFACE  INamedPropertyBag |   | #define INTERFACE  INamedPropertyBag | 
       | 
      | DECLARE_INTERFACE_(INamedPropertyBag, IUnknown) |   | DECLARE_INTERFACE_IID_(INamedPropertyBag, IUnknown, "FB700430-952C-11d1-946F-000
000000000") | 
      | { |   | { | 
      |     // *** IUnknown methods *** |   |     // *** IUnknown methods *** | 
      |     STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void **ppv) PURE; |   |     STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void **ppv) PURE; | 
      |     STDMETHOD_(ULONG,AddRef)    (THIS) PURE; |   |     STDMETHOD_(ULONG,AddRef)    (THIS) PURE; | 
      |     STDMETHOD_(ULONG,Release)   (THIS) PURE; |   |     STDMETHOD_(ULONG,Release)   (THIS) PURE; | 
      |     // *** INamedPropertyBag methods *** |   |     // *** INamedPropertyBag methods *** | 
       | 
      |     STDMETHOD(ReadPropertyNPB) (THIS_  /* [in] */ LPCOLESTR pszBagname, |   |     STDMETHOD(ReadPropertyNPB) (THIS_  /* [in] */ LPCWSTR pszBagname, | 
      |                             /* [in] */ LPCOLESTR pszPropName, |   |                             /* [in] */ LPCWSTR pszPropName, | 
      |                             /* [out][in] */ PROPVARIANT *pVar) PURE; |   |                             /* [out][in] */ PROPVARIANT *pVar) PURE; | 
       |   |  | 
       | 
      |     STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, |   |     STDMETHOD(WritePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname, | 
      |                            /* [in] */ LPCOLESTR pszPropName, |   |                            /* [in] */ LPCWSTR pszPropName, | 
      |                            /* [in] */ PROPVARIANT  *pVar) PURE; |   |                            /* [in] */ PROPVARIANT  *pVar) PURE; | 
       |   |  | 
       | 
      |     STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCOLESTR pszBagname, |   |     STDMETHOD(RemovePropertyNPB)(THIS_ /* [in] */ LPCWSTR pszBagname, | 
      |                           /* [in] */ LPCOLESTR pszPropName) PURE; |   |                           /* [in] */ LPCWSTR pszPropName) PURE; | 
      | }; |   | }; | 
       |   |  | 
      | #ifdef __urlmon_h__ |   | #ifdef __urlmon_h__ | 
      | //    NOTE: urlmon.h must be included before shlobj.h to access this function. |   | //    NOTE: urlmon.h must be included before shlobj.h to access this function. | 
      | // |   | // | 
      | //    SoftwareUpdateMessageBox |   | //    SoftwareUpdateMessageBox | 
      | // |   | // | 
      | //    Provides a standard message box for the alerting the user that a software |   | //    Provides a standard message box for the alerting the user that a software | 
      | //    update is available or installed. No UI will be displayed if there is no |   | //    update is available or installed. No UI will be displayed if there is no | 
      | //    update available or if the available update version is less than or equal |   | //    update available or if the available update version is less than or equal | 
       |   |  | 
      | skipping to change at line 5038 |   | skipping to change at line 4340 | 
      | // |   | // | 
      | //    IDIGNORE - There is no pending software update. Note: There is |   | //    IDIGNORE - There is no pending software update. Note: There is | 
      | //               no Ignore button in the standard UI. This occurs if the availab
le |   | //               no Ignore button in the standard UI. This occurs if the availab
le | 
      | //               version is less than the installed version or is not present or
 if the |   | //               version is less than the installed version or is not present or
 if the | 
      | //               Advertised version is greater than or equal to the update versi
on. |   | //               Advertised version is greater than or equal to the update versi
on. | 
      | // |   | // | 
      | //    IDABORT  - An error occured. Call GetSoftwareUpdateInfo() for a more speci
fic HRESULT. |   | //    IDABORT  - An error occured. Call GetSoftwareUpdateInfo() for a more speci
fic HRESULT. | 
      | //               Note: There is no Abort button in the standard UI. |   | //               Note: There is no Abort button in the standard UI. | 
       |   |  | 
      | SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd, |   | SHDOCAPI_(DWORD) SoftwareUpdateMessageBox( HWND hWnd, | 
       | 
      |                                            LPCWSTR szDistUnit, |   |                                            LPCWSTR pszDistUnit, | 
      |                                            DWORD dwFlags, |   |                                            DWORD dwFlags, | 
       | 
      |                                            LPSOFTDISTINFO psdi ); |   |                                            __out_opt LPSOFTDISTINFO psdi ); | 
      | #endif // if __urlmon_h__ |   | #endif // if __urlmon_h__ | 
       |   |  | 
      | //  SHPropStgCreate() |   | //  SHPropStgCreate() | 
      | //  Wrap of IPropertySetStorage::Open/Create |   | //  Wrap of IPropertySetStorage::Open/Create | 
      | // |   | // | 
      | //  This function ensures proper handling of code page retrieval/assignment |   | //  This function ensures proper handling of code page retrieval/assignment | 
      | //  for the requested property set operation. |   | //  for the requested property set operation. | 
      | // |   | // | 
      | //  psstg,          //  Address of IPropertySetStorage vtable |   | //  psstg,          //  Address of IPropertySetStorage vtable | 
      | //  fmtid,          //  property set ID |   | //  fmtid,          //  property set ID | 
      | //  pclsid,         //  class ID associated with the set. This can be NULL |   | //  pclsid,         //  class ID associated with the set. This can be NULL | 
      | //  grfFlags,       //  PROPSETFLAG_xxx.  All sets containing ansi bytes should 
be created with |   | //  grfFlags,       //  PROPSETFLAG_xxx.  All sets containing ansi bytes should 
be created with | 
      |                     //  PROPSETFLAG_ANSI, otherwise PROPSETFLAG_DEFAULT. |   |                     //  PROPSETFLAG_ANSI, otherwise PROPSETFLAG_DEFAULT. | 
      | //  grfMode,        //  STGM_ flags.  Must contain STGM_DIRECT|STGM_EXCLUSIVE. |   | //  grfMode,        //  STGM_ flags.  Must contain STGM_DIRECT|STGM_EXCLUSIVE. | 
      | //  dwDisposition,  //  OPEN_EXISTING. OPEN_ALWAYS, CREATE_NEW, or CREATE_ALWAYS |   | //  dwDisposition,  //  OPEN_EXISTING. OPEN_ALWAYS, CREATE_NEW, or CREATE_ALWAYS | 
      | //  IPropertyStorage** ppstg,  // Address to receive requested vtable |   | //  IPropertyStorage** ppstg,  // Address to receive requested vtable | 
      | //  puCodePage      //  Optional address to receive the code page ID for the set
. |   | //  puCodePage      //  Optional address to receive the code page ID for the set
. | 
      | // |   | // | 
       | 
      | SHSTDAPI SHPropStgCreate( IPropertySetStorage* psstg, REFFMTID fmtid, CLSID* pcl
sid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, OUT IPropertyStorage** 
ppstg, OUT OPTIONAL UINT* puCodePage ); |   | SHSTDAPI SHPropStgCreate( IPropertySetStorage* psstg, REFFMTID fmtid, const CLSI
D *pclsid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, __out IPropertySt
orage** ppstg, __out_opt UINT* puCodePage ); | 
       |   |  | 
      | //  SHPropStgReadMultiple() |   | //  SHPropStgReadMultiple() | 
      | //  IPropertyStorage::ReadMultiple wrap |   | //  IPropertyStorage::ReadMultiple wrap | 
      | // |   | // | 
      | //  The wrap ensures ANSI/UNICODE translations are handled properly for |   | //  The wrap ensures ANSI/UNICODE translations are handled properly for | 
      | //  legacy property sets. |   | //  legacy property sets. | 
      | // |   | // | 
      | //  pps,       // address of IPropertyStorage vtable. |   | //  pps,       // address of IPropertyStorage vtable. | 
      | //  uCodePage, //Code page value retrieved from SHCreatePropertySet |   | //  uCodePage, //Code page value retrieved from SHCreatePropertySet | 
      | //  cpspec,    //Count of properties being read |   | //  cpspec,    //Count of properties being read | 
      | //  rgpspec,   //Array of the properties to be read |   | //  rgpspec,   //Array of the properties to be read | 
      | //  rgvar      //Array of PROPVARIANTs containing the property values on return |   | //  rgvar      //Array of PROPVARIANTs containing the property values on return | 
      | // |   | // | 
       | 
      | SHSTDAPI SHPropStgReadMultiple( IPropertyStorage* pps, UINT uCodePage, ULONG cps
pec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[] ); |   | SHSTDAPI SHPropStgReadMultiple( IPropertyStorage* pps, UINT uCodePage, ULONG cps
pec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __out_ecount_full(cpspec) PRO
PVARIANT rgvar[] ); | 
       |   |  | 
      | //  SHPropStgWriteMultiple() |   | //  SHPropStgWriteMultiple() | 
      | //  IPropertyStorage::WriteMultiple wrap |   | //  IPropertyStorage::WriteMultiple wrap | 
      | // |   | // | 
      | //  The wrap ensures ANSI/UNICODE translations are handled properly for |   | //  The wrap ensures ANSI/UNICODE translations are handled properly for | 
      | //  legacy property sets. |   | //  legacy property sets. | 
      | // |   | // | 
      | //  pps,       // address of IPropertyStorage vtable. |   | //  pps,       // address of IPropertyStorage vtable. | 
      | //  uCodePage, // code page retrieved from SHCreatePropertySet. |   | //  uCodePage, // code page retrieved from SHCreatePropertySet. | 
      | //  cpspec,    // The number of properties being set |   | //  cpspec,    // The number of properties being set | 
      | //  rgpspec,   // Property specifiers |   | //  rgpspec,   // Property specifiers | 
      | //  rgvar,     // Array of PROPVARIANT values |   | //  rgvar,     // Array of PROPVARIANT values | 
      | //  propidNameFirst // Minimum value for property identifiers. This value should
 be >= PID_FIRST_USABLE |   | //  propidNameFirst // Minimum value for property identifiers. This value should
 be >= PID_FIRST_USABLE | 
      | // |   | // | 
       | 
      | SHSTDAPI SHPropStgWriteMultiple( IPropertyStorage* pps, UINT* puCodePage, ULONG 
cpspec, PROPSPEC const rgpspec[], PROPVARIANT rgvar[], PROPID propidNameFirst ); |   | SHSTDAPI SHPropStgWriteMultiple( IPropertyStorage* pps, __inout_opt UINT* puCode
Page, ULONG cpspec, __in_ecount(cpspec) PROPSPEC const rgpspec[], __inout_ecount
(cpspec) PROPVARIANT rgvar[], PROPID propidNameFirst ); | 
       |   |  | 
       | 
      | SHSTDAPI SHCreateFileExtractIconA(LPCSTR pszFile, DWORD dwFileAttributes, REFIID |   | #if (NTDDI_VERSION >= NTDDI_WINXP) | 
      |  riid, void **ppv); |   | SHSTDAPI SHCreateFileExtractIconA(LPCSTR pszFile, DWORD dwFileAttributes, REFIID | 
      | SHSTDAPI SHCreateFileExtractIconW(LPCWSTR pszFile, DWORD dwFileAttributes, REFII |   |  riid, __out void **ppv); | 
      | D riid, void **ppv); |   | SHSTDAPI SHCreateFileExtractIconW(LPCWSTR pszFile, DWORD dwFileAttributes, REFII | 
       |   | D riid, __out void **ppv); | 
      | #ifdef UNICODE |   | #ifdef UNICODE | 
      | #define SHCreateFileExtractIcon  SHCreateFileExtractIconW |   | #define SHCreateFileExtractIcon  SHCreateFileExtractIconW | 
      | #else |   | #else | 
      | #define SHCreateFileExtractIcon  SHCreateFileExtractIconA |   | #define SHCreateFileExtractIcon  SHCreateFileExtractIconA | 
      | #endif // !UNICODE |   | #endif // !UNICODE | 
      | #include <pshpack8.h> |   | #include <pshpack8.h> | 
       | 
       |   | #include <poppack.h>        /* Return to byte packing */ | 
      | SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf); |   | SHSTDAPI SHLimitInputEdit(HWND hwndEdit, IShellFolder *psf); | 
       | 
       |   | STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, __ | 
       |   | out_opt DWORD *pdwAttributes, __out_opt UINT *pcItems); | 
       |   | #endif  // NTDDI_WINXP | 
       |   |  | 
       | 
      | #if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500) |   | #if (NTDDI_VERSION >= NTDDI_WIN2K) | 
       |   |  | 
      | // |   | // | 
      | // The SHMultiFileProperties API displays a property sheet for a |   | // The SHMultiFileProperties API displays a property sheet for a | 
      | // set of files specified in an IDList Array. |   | // set of files specified in an IDList Array. | 
      | // |   | // | 
      | // Parameters: |   | // Parameters: | 
      | //      pdtobj  - Data object containing list of files.  The data |   | //      pdtobj  - Data object containing list of files.  The data | 
      | //                object must provide the "Shell IDList Array" |   | //                object must provide the "Shell IDList Array" | 
      | //                clipboard format.  The parent folder's implementation of |   | //                clipboard format.  The parent folder's implementation of | 
      | //                IShellFolder::GetDisplayNameOf must return a fully-qualified |   | //                IShellFolder::GetDisplayNameOf must return a fully-qualified | 
      | //                filesystem path for each item in response to the |   | //                filesystem path for each item in response to the | 
      | //                SHGDN_FORPARSING flag. |   | //                SHGDN_FORPARSING flag. | 
      | // |   | // | 
      | //      dwFlags - Reserved for future use.  Should be set to 0. |   | //      dwFlags - Reserved for future use.  Should be set to 0. | 
      | // |   | // | 
      | // Returns: |   | // Returns: | 
      | //      S_OK |   | //      S_OK | 
      | // |   | // | 
      | SHSTDAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD dwFlags); |   | SHSTDAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD dwFlags); | 
       |   |  | 
       | 
      | #endif |   | #endif  // NTDDI_WIN2K | 
      |                                                                                  |   |  | 
      | #if (_WIN32_IE >= 0x0600) |   |  | 
      | // |   |  | 
      | // |   |  | 
      | typedef void (CALLBACK *PFNASYNCICONTASKBALLBACK)(LPCITEMIDLIST pidl, LPVOID pvD |   |  | 
      | ata, LPVOID pvHint, INT iIconIndex, INT iOpenIconIndex); |   |  | 
       |   |  | 
      | // HRESULT SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFold |   |  | 
      | er *psf, LPCITEMIDLIST pidl, UINT flags, |   |  | 
      | //                                            PFNASYNCICONTASKBALLBACK pfn, LPVO |   |  | 
      | ID pvData, LPVOID pvHint, int *piIndex, int *piIndexSel); |   |  | 
      | // A usefull function for asynchronously mapping idlist into index into system |   |  | 
      | // image list.  Optionally it can also look up the index of the selected icon. |   |  | 
      | // pts          Task scheduler interface to use to create the background task |   |  | 
      | // psf          Shell folder relating to the pidl |   |  | 
      | // pidl         Item whose icon is requested |   |  | 
      | // flags        GIL_ flags |   |  | 
      | // pfn          Function called back when the background task is done |   |  | 
      | // pvData       User data passed back in the (*pfn) callback |   |  | 
      | // pvHint       User data passed back in the (*pfn) callback |   |  | 
      | // piIndex      Icon index returned. This is the temporary index if the function |   |  | 
      |  returns E_PENDING. The final index will be provided thru the callback |   |  | 
      | // piIndexSel   Optional icon index for the open icon case (GIL_OPENICON). |   |  | 
      | // |   |  | 
      | // Returns S_OK if all the requested info was available. E_PENDING means that yo |   |  | 
      | u get temporary icons, and will be called back |   |  | 
      | //              asynchronously with the final icons. Other failure code means th |   |  | 
      | e function failed. |   |  | 
      | SHSTDAPI SHMapIDListToImageListIndexAsync(IShellTaskScheduler* pts, IShellFolder |   |  | 
      |  *psf, LPCITEMIDLIST pidl, UINT flags, |   |  | 
      |                                             PFNASYNCICONTASKBALLBACK pfn, LPVOID |   |  | 
      |  pvData, LPVOID pvHint, int *piIndex, int *piIndexSel); |   |  | 
      | #endif // (_WIN32_IE >= 0x0600) |   |  | 
       |   |  | 
      | // A usefull function in Defview for mapping idlist into index into system |   | // A usefull function in Defview for mapping idlist into index into system | 
      | // image list.  Optionally it can also look up the index of the selected |   | // image list.  Optionally it can also look up the index of the selected | 
      | // icon. |   | // icon. | 
       | 
      | SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, LPCITEMIDLIST
 pidl, int *piIndexSel); |   | SHSTDAPI_(int) SHMapPIDLToSystemImageListIndex(IShellFolder *pshf, PCUITEMID_CHI
LD pidl, __out_opt int *piIndexSel); | 
       |   |  | 
       | 
      | STDAPI SHCLSIDFromString(PCWSTR lpsz, CLSID *pclsid); |   | SHSTDAPI SHCLSIDFromString(LPCWSTR psz, __out CLSID *pclsid); | 
      | STDAPI SHFlushClipboard(void); |   | SHSTDAPI SHCreateQueryCancelAutoPlayMoniker(__out IMoniker** ppmoniker);    // d | 
      | STDAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker** ppmoniker); |   | eprecated: use CreateClassMoniker(CLSID_YourOwnClsid, ...) | 
      | HINSTANCE WINAPI SHGetShellStyleHInstance(void); |   |  | 
      | STDAPI_(void) PerUserInit(void); |   | STDAPI_(void) PerUserInit(void); | 
       | 
      | WINSHELLAPI BOOL    WINAPI SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgP
arent); |   | SHSTDAPI_(BOOL)SHRunControlPanel(LPCWSTR lpcszCmdLine, HWND hwndMsgParent); | 
       |   |  | 
       | 
      | WINSHELLAPI int   WINAPI PickIconDlg(HWND hwnd, LPWSTR pszIconPath, UINT cbIconP |   | SHSTDAPI_(int) PickIconDlg(HWND hwnd, __inout_ecount(cchIconPath) LPWSTR pszIcon | 
      | ath, int *piIconIndex); |   | Path, UINT cchIconPath, __inout_opt int *piIconIndex); | 
       |   |                                                                                  | 
       |   | #include <pshpack8.h> | 
       |   |  | 
      | typedef struct tagAAMENUFILENAME |   | typedef struct tagAAMENUFILENAME | 
      | { |   | { | 
      |   SHORT  cbTotal; |   |   SHORT  cbTotal; | 
      |   BYTE   rgbReserved[12]; |   |   BYTE   rgbReserved[12]; | 
       | 
      |   WCHAR  szFileName[1];        // variable length string |   |   WCHAR  szFileName[1];     // variable length string | 
      | } AASHELLMENUFILENAME, *LPAASHELLMENUFILENAME; |   | } AASHELLMENUFILENAME, *LPAASHELLMENUFILENAME; | 
       |   |  | 
      | typedef struct tagAASHELLMENUITEM |   | typedef struct tagAASHELLMENUITEM | 
      | { |   | { | 
      |   void*  lpReserved1; |   |   void*  lpReserved1; | 
      |   int    iReserved; |   |   int    iReserved; | 
      |   UINT   uiReserved; |   |   UINT   uiReserved; | 
      |   LPAASHELLMENUFILENAME lpName; // name of file |   |   LPAASHELLMENUFILENAME lpName; // name of file | 
       | 
      |   LPWSTR psz;                  // text to use if no file |   |   LPWSTR psz;           // text to use if no file | 
      | } AASHELLMENUITEM, *LPAASHELLMENUITEM; |   | } AASHELLMENUITEM, *LPAASHELLMENUITEM; | 
       |   |  | 
       | 
      | STDAPI SHGetAttributesFromDataObject(IDataObject *pdo, DWORD dwAttributeMask, DW |   |  | 
      | ORD *pdwAttributes, UINT *pcItems); |   |  | 
      |                                                                                  |   |  | 
      | #include <poppack.h>        /* Return to byte packing */ |   | #include <poppack.h>        /* Return to byte packing */ | 
       |   |  | 
       | 
      | #ifdef __cplusplus |   | #if (_WIN32_IE >= _WIN32_IE_IE70) | 
      | } |   | typedef enum tagIESHORTCUTFLAGS | 
      |                                                                                  |   | { | 
      | #endif  /* __cplusplus */ |   |     IESHORTCUT_NEWBROWSER    = 0x01, | 
       |   |     IESHORTCUT_OPENNEWTAB    = 0x02, | 
       |   |     IESHORTCUT_FORCENAVIGATE = 0x04, | 
       |   |     IESHORTCUT_BACKGROUNDTAB = 0x08, | 
       |   | } IESHORTCUTFLAGS; | 
       |   | #endif // _WIN32_IE_IE70 | 
       |   |  | 
       | 
      | #include <poppack.h> |   | #if (_WIN32_IE >= _WIN32_IE_XP) | 
       |   |  | 
       | 
      | SHDOCAPI_(BOOL) ImportPrivacySettings( LPCWSTR szFilename, |   | SHDOCAPI_(BOOL) ImportPrivacySettings(LPCWSTR pszFilename, __inout BOOL* pfParse | 
      |                             IN OUT BOOL* pfParsePrivacyPreferences, IN OUT BOOL* |   | PrivacyPreferences, __inout BOOL* pfParsePerSiteRules); | 
      |  pfParsePerSiteRules); |   |  | 
      | #ifndef IEnumPrivacyRecords |   | #ifndef IEnumPrivacyRecords | 
      | typedef interface IEnumPrivacyRecords IEnumPrivacyRecords; |   | typedef interface IEnumPrivacyRecords IEnumPrivacyRecords; | 
      | #endif |   | #endif | 
       | 
      | SHDOCAPI DoPrivacyDlg( HWND hwndParent, LPOLESTR pszUrl, IEnumPrivacyRecords *pP |   | SHDOCAPI DoPrivacyDlg(HWND hwndOwner, __in LPWSTR pszUrl, __in IEnumPrivacyRecor | 
      | rivacyEnum, BOOL fReportAllSites); |   | ds *pPrivacyEnum, BOOL fReportAllSites); | 
       |   |                                                                                  | 
       |   | #endif  // _WIN32_IE_XP | 
       |   |  | 
       |   | #include <poppack.h> | 
       |   |  | 
       |   | #ifdef __cplusplus | 
       |   | } | 
       |   | #endif  /* __cplusplus */ | 
       |   |  | 
      | #endif // _SHLOBJ_H_ |   | #endif // _SHLOBJ_H_ | 
      |   |  | 
     |  End of changes. 377 change blocks.  | 
     | 1943 lines changed or deleted |   | 1335 lines changed or added | 
      |