ReactOS 0.4.17-dev-573-g8315b8c
precomp.h File Reference
#include <stdarg.h>
#include <assert.h>
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <winuser.h>
#include <wincon.h>
#include <commdlg.h>
#include <ddeml.h>
#include <userenv.h>
#include <shlwapi.h>
#include <wininet.h>
#include <shlobj.h>
#include <shobjidl.h>
#include <emptyvc.h>
#include <ndk/rtlfuncs.h>
#include <fmifs/fmifs.h>
#include <tchar.h>
#include <strsafe.h>
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atlstr.h>
#include <atlsimpcoll.h>
#include <atlcoll.h>
#include <powrprof.h>
#include <winnetwk.h>
#include <objsafe.h>
#include <regstr.h>
#include <comctl32_undoc.h>
#include <shlguid_undoc.h>
#include <shlobj_undoc.h>
#include <shlwapi_undoc.h>
#include <ishellfolder_helpers.h>
#include <shellapi.h>
#include <undocshell.h>
#include <browseui_undoc.h>
#include <shellutils.h>
#include "shellrecyclebin/recyclebin.h"
#include "wine/pidl.h"
#include "debughlp.h"
#include "wine/shell32_main.h"
#include "shresdef.h"
#include "wine/cpanel.h"
#include "CActiveDesktop.h"
#include "CEnumIDListBase.h"
#include "shfldr.h"
#include "CShellItem.h"
#include "CShellItemArray.h"
#include "CSimpleShellItemArray.h"
#include "CShellLink.h"
#include "CFolderItemVerbs.h"
#include "CFolderItems.h"
#include "CFolder.h"
#include "CShellDispatch.h"
#include "CShellLibrary.h"
#include "CDropTargetHelper.h"
#include "CFolderOptions.h"
#include "folders/CFSFolder.h"
#include "folders/CDrivesFolder.h"
#include "folders/CDesktopFolder.h"
#include "folders/CControlPanelFolder.h"
#include "folders/CMyDocsFolder.h"
#include "folders/CNetFolder.h"
#include "folders/CFontsFolder.h"
#include "folders/CPrinterFolder.h"
#include "folders/CAdminToolsFolder.h"
#include "folders/CRecycleBin.h"
#include "folders/CRecycleBinFolderViewCB.h"
#include "droptargets/CexeDropHandler.h"
#include "droptargets/CFSDropTarget.h"
#include "COpenWithMenu.h"
#include "CNewMenu.h"
#include "CSendToMenu.h"
#include "CCopyMoveToMenu.h"
#include "CCopyAsPathMenu.h"
#include "dialogs/filedefext.h"
#include "dialogs/drvdefext.h"
#include "CQueryAssociations.h"
#include "shellmenu/CMenuBand.h"
#include "shellmenu/CMenuDeskBar.h"
#include "shellmenu/CMenuSite.h"
#include "shellmenu/CMergedFolder.h"
#include "shellmenu/shellmenu.h"
#include "CUserEventTimer.h"
#include "CUserNotification.h"
#include "dialogs/folder_options.h"
#include "shelldesktop/CChangeNotifyServer.h"
#include "utils.h"
#include <wine/debug.h>
#include <wine/unicode.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _DCMENTRY
 
class  CStubWindow32
 

Macros

#define COBJMACROS
 
#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define NTOS_MODE_USER
 
#define ShellMessageBoxW   ShellMessageBoxWrapW
 
#define VERBKEY_CCHMAX   64
 
#define MAX_PROPERTY_SHEET_PAGE   32
 
#define SHV_CHANGE_NOTIFY   (WM_USER + 0x1111)
 
#define SHV_UPDATESTATUSBAR   (WM_USER + 0x1112)
 
#define DCMA_Create()   ( (HDCMA)DSA_Create(sizeof(DCMENTRY), 4) )
 
#define DCMA_GetEntry(hDCMA, iItem)   ( (DCMENTRY*)DSA_GetItemPtr((HDSA)(hDCMA), (iItem)) )
 
#define SHELL_ExecuteControlPanelCPL(hwnd, cpl)   SHELL32_RunControlPanel((cpl), (hwnd))
 
#define CSTUBWINDOW32_CLASSNAME   _T("StubWindow32")
 

Typedefs

typedef HDSA HDCMA
 
typedef struct _DCMENTRY DCMENTRY
 
typedef enum _FILEOPCALLBACKEVENT FILEOPCALLBACKEVENT
 
typedef HRESULT(CALLBACKFILEOPCALLBACK) (FILEOPCALLBACKEVENT Event, LPCWSTR Source, LPCWSTR Destination, UINT Attributes, HRESULT hr, void *CallerData)
 

Enumerations

enum  _FILEOPCALLBACKEVENT {
  FOCE_STARTOPERATIONS , FOCE_FINISHOPERATIONS , FOCE_PREMOVEITEM , FOCE_POSTMOVEITEM ,
  FOCE_PRECOPYITEM , FOCE_POSTCOPYITEM , FOCE_PREDELETEITEM , FOCE_POSTDELETEITEM ,
  FOCE_PRERENAMEITEM , FOCE_POSTRENAMEITEM , FOCE_PRENEWITEM , FOCE_POSTNEWITEM
}
 

Functions

BOOL CALLBACK AddPropSheetPageCallback (HPROPSHEETPAGE hPage, LPARAM lParam)
 
static HRESULT AddPropSheetPage (HPROPSHEETPAGE hPage, LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
 
template<class T >
static UINT CALLBACK PropSheetPageLifetimeCallback (HWND hWnd, UINT uMsg, PROPSHEETPAGEW *pPSP)
 
HRESULT SHELL32_ShowPropertiesDialog (IDataObject *pdtobj)
 
HRESULT SHELL32_ShowFilesystemItemPropertiesDialogAsync (IDataObject *pDO)
 
HRESULT SHELL32_ShowFilesystemItemsPropertiesDialogAsync (HWND hOwner, IDataObject *pDO)
 
HRESULT SHELL32_ShowShellExtensionProperties (const CLSID *pClsid, IDataObject *pDO)
 
HRESULT SHELL_ShowItemIDListProperties (LPCITEMIDLIST pidl)
 
void DCMA_Destroy (HDCMA hDCMA)
 
HRESULT DCMA_InvokeCommand (HDCMA hDCMA, CMINVOKECOMMANDINFO *pICI)
 
UINT DCMA_InsertMenuItems (_In_ HDCMA hDCMA, _In_ HDCIA hDCIA, _In_opt_ LPCITEMIDLIST pidlFolder, _In_opt_ IDataObject *pDO, _In_opt_ HKEY *pKeys, _In_opt_ UINT nKeys, _In_ QCMINFO *pQCMI, _In_opt_ UINT fCmf, _In_opt_ IUnknown *pUnkSite)
 
HRESULT SHELL32_DefaultContextMenuCallBack (IShellFolder *psf, IDataObject *pdo, UINT msg)
 
PCSTR MapFcidmCmdToVerb (_In_ UINT_PTR CmdId)
 
UINT MapVerbToDfmCmd (_In_ LPCSTR verba)
 
UINT GetDfmCmd (_In_ IContextMenu *pCM, _In_ LPCSTR verba)
 
EXTERN_C BOOL WINAPI SHELL32_RunControlPanel (_In_ PCWSTR commandLine, _In_opt_ HWND parent)
 
void PostCabinetMessage (UINT Msg, WPARAM wParam, LPARAM lParam)
 
BOOL BindCtx_ContainsObject (_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName)
 
DWORD BindCtx_GetMode (_In_ IBindCtx *pbc, _In_ DWORD dwDefault)
 
BOOL SHSkipJunctionBinding (_In_ IBindCtx *pbc, _In_ CLSID *pclsid)
 
HRESULT SHIsFileSysBindCtx (_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData)
 
BOOL Shell_FailForceReturn (_In_ HRESULT hr)
 
EXTERN_C INT Shell_ParseSpecialFolder (_In_ LPCWSTR pszStart, _Out_ LPWSTR *ppch, _Out_ INT *pcch)
 
SHSTDAPI SHBindToObject (_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
 
EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem (_In_opt_ HWND hWnd, _In_ PCIDLIST_ABSOLUTE pidl, _In_ REFIID riid, _Out_ void **ppvObj)
 
HRESULT SHELL_DisplayNameOf (_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ UINT Flags, _Out_ PWSTR *ppStr)
 
DWORD SHGetAttributes (_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
 
HRESULT SHELL_GetIDListTarget (_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl)
 
HRESULT SHCoInitializeAnyApartment (VOID)
 
HRESULT SHGetNameAndFlagsW (_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
 
EXTERN_C HWND BindCtx_GetUIWindow (_In_ IBindCtx *pBindCtx)
 
EXTERN_C HRESULT BindCtx_RegisterObjectParam (_In_ IBindCtx *pBindCtx, _In_ LPOLESTR pszKey, _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc)
 
BOOL PathIsDotOrDotDotW (_In_ LPCWSTR pszPath)
 
BOOL PathIsValidElement (_In_ LPCWSTR pszPath)
 
BOOL PathIsDosDevice (_In_ LPCWSTR pszName)
 
HRESULT SHELL32_GetDllFromRundll32CommandLine (LPCWSTR pszCmd, LPWSTR pszOut, SIZE_T cchMax)
 
HRESULT SHILAppend (_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
 
HRESULT DataObject_GetHIDACount (IDataObject *pdo)
 
PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull (_In_ const CIDA *pCIDA, _In_ UINT Index)
 
PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem (_In_ IDataObject *pDO, _In_ UINT Index)
 
HRESULT SHELL_CloneDataObject (_In_ IDataObject *pDO, _Out_ IDataObject **ppDO)
 
DWORD DataObj_GetDWORD (IDataObject *pdtobj, UINT cf, DWORD dwDefault)
 
HRESULT DataObj_SetDWORD (IDataObject *pdtobj, UINT cf, DWORD dwValue)
 
EXTERN_C HRESULT IUnknown_InitializeCommand (_In_ IUnknown *pUnk, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB)
 
EXTERN_C HRESULT InvokeIExecuteCommand (_In_ IExecuteCommand *pEC, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB, _In_opt_ IShellItemArray *pSIA, _In_opt_ LPCMINVOKECOMMANDINFOEX pICI, _In_opt_ IUnknown *pSite)
 
EXTERN_C HRESULT InvokeIExecuteCommandWithDataObject (_In_ IExecuteCommand *pEC, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB, _In_ IDataObject *pDO, _In_opt_ LPCMINVOKECOMMANDINFOEX pICI, _In_opt_ IUnknown *pSite)
 
int SHELL32_FileOperation (LPSHFILEOPSTRUCTW lpFileOp, FILEOPCALLBACK Callback, void *CallerData)
 
HRESULT SHELL_SingleFileOperation (HWND hWnd, UINT Op, PCWSTR Src, PCWSTR Dest, UINT Flags, PWSTR *ppNewName)
 

Variables

const GUID CLSID_AdminFolderShortcut
 
const GUID CLSID_FontsFolderShortcut
 
const GUID CLSID_StartMenu
 
const GUID CLSID_MenuBandSite
 
const GUID CLSID_OpenWith
 
const GUID CLSID_UnixFolder
 
const GUID CLSID_UnixDosFolder
 
const GUID SHELL32_AdvtShortcutProduct
 
const GUID SHELL32_AdvtShortcutComponent
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 9 of file precomp.h.

◆ COBJMACROS

#define COBJMACROS

Definition at line 7 of file precomp.h.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 10 of file precomp.h.

◆ CSTUBWINDOW32_CLASSNAME

#define CSTUBWINDOW32_CLASSNAME   _T("StubWindow32")

Definition at line 228 of file precomp.h.

◆ DCMA_Create

#define DCMA_Create ( )    ( (HDCMA)DSA_Create(sizeof(DCMENTRY), 4) )

Definition at line 195 of file precomp.h.

◆ DCMA_GetEntry

#define DCMA_GetEntry (   hDCMA,
  iItem 
)    ( (DCMENTRY*)DSA_GetItemPtr((HDSA)(hDCMA), (iItem)) )

Definition at line 197 of file precomp.h.

◆ MAX_PROPERTY_SHEET_PAGE

#define MAX_PROPERTY_SHEET_PAGE   32

Definition at line 137 of file precomp.h.

◆ NTOS_MODE_USER

#define NTOS_MODE_USER

Definition at line 11 of file precomp.h.

◆ SHELL_ExecuteControlPanelCPL

#define SHELL_ExecuteControlPanelCPL (   hwnd,
  cpl 
)    SHELL32_RunControlPanel((cpl), (hwnd))

Definition at line 223 of file precomp.h.

◆ ShellMessageBoxW

#define ShellMessageBoxW   ShellMessageBoxWrapW

Definition at line 63 of file precomp.h.

◆ SHV_CHANGE_NOTIFY

#define SHV_CHANGE_NOTIFY   (WM_USER + 0x1111)

Definition at line 139 of file precomp.h.

◆ SHV_UPDATESTATUSBAR

#define SHV_UPDATESTATUSBAR   (WM_USER + 0x1112)

Definition at line 140 of file precomp.h.

◆ VERBKEY_CCHMAX

#define VERBKEY_CCHMAX   64

Definition at line 135 of file precomp.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 8 of file precomp.h.

Typedef Documentation

◆ DCMENTRY

◆ FILEOPCALLBACK

Definition at line 357 of file precomp.h.

◆ FILEOPCALLBACKEVENT

◆ HDCMA

typedef HDSA HDCMA

Definition at line 188 of file precomp.h.

Enumeration Type Documentation

◆ _FILEOPCALLBACKEVENT

Enumerator
FOCE_STARTOPERATIONS 
FOCE_FINISHOPERATIONS 
FOCE_PREMOVEITEM 
FOCE_POSTMOVEITEM 
FOCE_PRECOPYITEM 
FOCE_POSTCOPYITEM 
FOCE_PREDELETEITEM 
FOCE_POSTDELETEITEM 
FOCE_PRERENAMEITEM 
FOCE_POSTRENAMEITEM 
FOCE_PRENEWITEM 
FOCE_POSTNEWITEM 

Definition at line 343 of file precomp.h.

343 {
enum _FILEOPCALLBACKEVENT FILEOPCALLBACKEVENT
@ FOCE_PRERENAMEITEM
Definition: precomp.h:352
@ FOCE_POSTDELETEITEM
Definition: precomp.h:351
@ FOCE_PREMOVEITEM
Definition: precomp.h:346
@ FOCE_STARTOPERATIONS
Definition: precomp.h:344
@ FOCE_PRENEWITEM
Definition: precomp.h:354
@ FOCE_FINISHOPERATIONS
Definition: precomp.h:345
@ FOCE_POSTRENAMEITEM
Definition: precomp.h:353
@ FOCE_POSTNEWITEM
Definition: precomp.h:355
@ FOCE_POSTMOVEITEM
Definition: precomp.h:347
@ FOCE_PRECOPYITEM
Definition: precomp.h:348
@ FOCE_PREDELETEITEM
Definition: precomp.h:350
@ FOCE_POSTCOPYITEM
Definition: precomp.h:349

Function Documentation

◆ AddPropSheetPage()

static HRESULT AddPropSheetPage ( HPROPSHEETPAGE  hPage,
LPFNSVADDPROPSHEETPAGE  pfnAddPage,
LPARAM  lParam 
)
inlinestatic

Definition at line 159 of file precomp.h.

160{
161 if (!hPage)
162 return E_FAIL;
163 if (pfnAddPage(hPage, lParam))
164 return S_OK;
166 return E_FAIL;
167}
LPARAM lParam
Definition: combotst.c:139
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage)
Definition: propsheet.c:3189
#define S_OK
Definition: intsafe.h:52

Referenced by CDrvDefExt::AddMainPage(), CShellLink::AddPages(), CFileDefExt::AddPages(), CFolderOptions::AddPages(), and RecycleBin_AddPropSheetPages().

◆ AddPropSheetPageCallback()

BOOL CALLBACK AddPropSheetPageCallback ( HPROPSHEETPAGE  hPage,
LPARAM  lParam 
)
inline

Definition at line 145 of file precomp.h.

146{
148
149 if (pHeader->nPages < MAX_PROPERTY_SHEET_PAGE)
150 {
151 pHeader->phpage[pHeader->nPages++] = hPage;
152 return TRUE;
153 }
154
155 return FALSE;
156}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_PROPERTY_SHEET_PAGE
Definition: precomp.h:137
FxContextHeader * pHeader
Definition: handleapi.cpp:604

Referenced by AddPropSheetHandlerPages().

◆ BindCtx_ContainsObject()

BOOL BindCtx_ContainsObject ( _In_ IBindCtx pBindCtx,
_In_ LPCWSTR  pszName 
)

Definition at line 328 of file utils.cpp.

329{
331 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast<LPWSTR>(pszName), &punk)))
332 return FALSE;
333 return TRUE;
334}
#define FAILED(hr)
Definition: intsafe.h:51
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
uint16_t * LPWSTR
Definition: typedefs.h:56

Referenced by CDesktopFolder::_ParseDisplayNameByParent(), CDesktopFolder::ParseDisplayName(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ BindCtx_GetMode()

DWORD BindCtx_GetMode ( _In_ IBindCtx pbc,
_In_ DWORD  dwDefault 
)

Definition at line 336 of file utils.cpp.

337{
338 if (!pbc)
339 return dwDefault;
340
341 BIND_OPTS BindOpts = { sizeof(BindOpts) };
342 HRESULT hr = pbc->GetBindOptions(&BindOpts);
343 if (FAILED(hr))
344 return dwDefault;
345
346 return BindOpts.grfMode;
347}
HRESULT hr
Definition: delayimp.cpp:582

Referenced by CDrivesFolder::ParseDisplayName(), CFSFolder::ParseDisplayName(), and CRegFolder::ParseDisplayName().

◆ BindCtx_GetUIWindow()

EXTERN_C HWND BindCtx_GetUIWindow ( _In_ IBindCtx pBindCtx)

Definition at line 585 of file utils.cpp.

586{
587 HWND hWnd = NULL;
588
590 if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk)))
592
593 return hWnd;
594}
HWND hWnd
Definition: settings.c:17
#define NULL
Definition: types.h:112
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:988
#define L(x)
Definition: resources.c:13
#define SUCCEEDED(hr)
Definition: intsafe.h:50

◆ BindCtx_RegisterObjectParam()

EXTERN_C HRESULT BindCtx_RegisterObjectParam ( _In_ IBindCtx pBindCtx,
_In_ LPOLESTR  pszKey,
_In_opt_ IUnknown punk,
_Out_ LPBC ppbc 
)

Definition at line 645 of file utils.cpp.

650{
651 HRESULT hr = S_OK;
653
654 *ppbc = pBindCtx;
655
656 if (pBindCtx)
657 {
658 pBindCtx->AddRef();
659 }
660 else
661 {
662 hr = CreateBindCtx(0, ppbc);
663 if (FAILED(hr))
664 return hr;
665 }
666
667 if (!punk)
668 punk = pUnknown = new CDummyOleWindow();
669
670 hr = (*ppbc)->RegisterObjectParam(pszKey, punk);
671
672 if (pUnknown)
673 pUnknown->Release();
674
675 if (FAILED(hr))
676 {
677 (*ppbc)->Release();
678 *ppbc = NULL;
679 }
680
681 return hr;
682}
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
ULONG Release()
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491

◆ DataObj_GetDWORD()

DWORD DataObj_GetDWORD ( IDataObject pdtobj,
UINT  cf,
DWORD  dwDefault 
)

Definition at line 152 of file shldataobject.cpp.

153{
154 DWORD dwValue;
155 return DataObj_GetDWORD(pdtobj, cf, &dwValue) == S_OK ? dwValue : dwDefault;
156}
unsigned long DWORD
Definition: ntddk_ex.h:95
static HRESULT DataObj_GetDWORD(IDataObject *pdtobj, UINT cf, DWORD *pdwOut)

Referenced by GetDefaultFileOpFlags().

◆ DataObj_SetDWORD()

HRESULT DataObj_SetDWORD ( IDataObject pdtobj,
UINT  cf,
DWORD  dwValue 
)

Definition at line 158 of file shldataobject.cpp.

159{
160 return DataObject_SetData(pdtobj, cf, &dwValue, sizeof(dwValue));
161}
static HRESULT WINAPI DataObject_SetData(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
Definition: view.c:203

Referenced by CFolder::CopyMoveOperation().

◆ DataObject_GetHIDACount()

HRESULT DataObject_GetHIDACount ( IDataObject pdo)

Definition at line 101 of file shldataobject.cpp.

102{
103 if (!pdo)
104 return E_INVALIDARG;
105 CDataObjectHIDA cida(pdo);
106 HRESULT hr = cida.hr();
107 return SUCCEEDED(hr) ? cida->cidl : hr;
108}
#define E_INVALIDARG
Definition: ddrawi.h:101

Referenced by CFileDefExt::Initialize(), SHELL32_ShowFilesystemItemsPropertiesDialogAsync(), SHELL_GetCaptionFromDataObject(), and SHMultiFileProperties().

◆ DCMA_Destroy()

void DCMA_Destroy ( HDCMA  hDCMA)

Definition at line 44 of file CDefaultContextMenu.cpp.

45{
46 UINT i = 0;
47 for (DCMENTRY *p; (p = DCMA_GetEntry(hDCMA, i)) != NULL; ++i)
49 DSA_Destroy(hDCMA);
50}
static void DCMA_DestroyEntry(DCMENTRY &dcme)
#define DCMA_GetEntry(hDCMA, iItem)
Definition: precomp.h:197
BOOL WINAPI DSA_Destroy(HDSA hdsa)
Definition: dsa.c:103
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ DCMA_InsertMenuItems()

UINT DCMA_InsertMenuItems ( _In_ HDCMA  hDCMA,
_In_ HDCIA  hDCIA,
_In_opt_ LPCITEMIDLIST  pidlFolder,
_In_opt_ IDataObject pDO,
_In_opt_ HKEY pKeys,
_In_opt_ UINT  nKeys,
_In_ QCMINFO pQCMI,
_In_opt_ UINT  fCmf,
_In_opt_ IUnknown pUnkSite 
)

Definition at line 52 of file CDefaultContextMenu.cpp.

62{
63 UINT idCmdBase = pQCMI->idCmdFirst, idCmdFirst = idCmdBase;
64 UINT nOffset = 0;
65
66 // Insert in reverse order
67 for (int iCls = DCIA_GetCount(hDCIA) - 1; iCls >= 0; --iCls)
68 {
69 REFCLSID clsid = *DCIA_GetEntry(hDCIA, iCls);
70 if (fCmf & CMF_DEFAULTONLY)
71 {
72 WCHAR szKey[MAX_PATH];
73 wcscpy(szKey, L"CLSID\\");
74 StringFromGUID2(clsid, szKey + _countof(L"CLSID\\") - 1, CHARS_IN_GUID);
75 wcscpy(szKey + _countof(L"CLSID\\") - 1 + CHARS_IN_GUID - 1, L"\\shellex\\MayChangeDefaultMenu");
77 continue;
78 }
79
80 for (UINT iKey = 0; iKey < nKeys; ++iKey)
81 {
84 if (FAILED(hr))
85 break;
86 if (FAILED(hr = pInit->Initialize(pidlFolder, pDO, pKeys[iKey])))
87 continue;
88
89 IContextMenu *pCM;
90 if (FAILED(hr = pInit->QueryInterface(IID_PPV_ARG(IContextMenu, &pCM))))
91 break;
92 IUnknown_SetSite(pCM, pUnkSite);
93
94 hr = pCM->QueryContextMenu(pQCMI->hmenu, pQCMI->indexMenu + nOffset, idCmdFirst, pQCMI->idCmdLast, fCmf);
95 const UINT nCount = HRESULT_CODE(hr);
96 const UINT idThisFirst = idCmdFirst - idCmdBase;
97 DCMENTRY dcme = { pCM, idThisFirst, idThisFirst + nCount - 1 };
98 if (hr > 0)
99 {
100 idCmdFirst += nCount;
101 if (DSA_AppendItem(hDCMA, &dcme) >= 0)
102 {
103 if (nOffset == 0 && GetMenuDefaultItem(pQCMI->hmenu, TRUE, 0) == 0)
104 nOffset++; // Insert new items below the default
105 break;
106 }
107 }
108 DCMA_DestroyEntry(dcme);
109 }
110 }
111 return idCmdFirst;
112}
#define CHARS_IN_GUID
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define MAX_PATH
Definition: compat.h:34
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: main.c:222
BOOL RegKeyExists(HKEY hKey, LPCWSTR Path)
Definition: utils.h:49
#define DCIA_GetCount(hDCIA)
Definition: utils.h:126
#define DCIA_GetEntry(hDCIA, iItem)
Definition: utils.h:127
HRESULT WINAPI SHExtCoCreateInstance(_In_opt_ LPCWSTR aclsid, _In_opt_ const CLSID *clsid, _In_opt_ LPUNKNOWN pUnkOuter, _In_ REFIID riid, _Out_ LPVOID *ppv)
Definition: shellole.c:222
PWDFDEVICE_INIT pInit
HRESULT QueryContextMenu([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
const CLSID * clsid
Definition: msctf.cpp:50
short WCHAR
Definition: pedump.c:58
#define DSA_AppendItem(hdsa, pitem)
Definition: commctrl.h:4832
#define REFCLSID
Definition: guiddef.h:117
wcscpy
#define _countof(array)
Definition: sndvol32.h:70
#define HRESULT_CODE(hr)
Definition: winerror.h:188
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
#define IID_PPV_ARG(Itype, ppType)

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ DCMA_InvokeCommand()

HRESULT DCMA_InvokeCommand ( HDCMA  hDCMA,
CMINVOKECOMMANDINFO *  pICI 
)

Definition at line 114 of file CDefaultContextMenu.cpp.

115{
117 for (UINT i = 0;; ++i)
118 {
119 DCMENTRY *p = DCMA_GetEntry(hDCMA, i);
120 if (!p)
121 return hr;
122
123 UINT id = LOWORD(pICI->lpVerb);
124 if (!IS_INTRESOURCE(pICI->lpVerb))
125 {
126 if (SUCCEEDED(hr = p->pCM->InvokeCommand(pICI)))
127 return hr;
128 }
129 else if (id >= p->idCmdFirst && id <= p->idCmdLast)
130 {
131 CMINVOKECOMMANDINFOEX ici;
132 CopyMemory(&ici, pICI, min(sizeof(ici), pICI->cbSize));
133 ici.cbSize = min(sizeof(ici), pICI->cbSize);
134 ici.lpVerb = MAKEINTRESOURCEA(id - p->idCmdFirst);
135 ici.lpVerbW = (PWSTR)ici.lpVerb;
136 return p->pCM->InvokeCommand((CMINVOKECOMMANDINFO*)&ici);
137 }
138 }
139}
#define IS_INTRESOURCE(x)
Definition: loader.c:613
#define CopyMemory
Definition: minwinbase.h:29
#define min(a, b)
Definition: monoChain.cc:55
#define LOWORD(l)
Definition: pedump.c:82
uint16_t * PWSTR
Definition: typedefs.h:56
#define S_FALSE
Definition: winerror.h:3451
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581

Referenced by CFSDropTarget::_GetEffectFromMenu().

◆ GetDfmCmd()

UINT GetDfmCmd ( _In_ IContextMenu pCM,
_In_ LPCSTR  verba 
)

Definition at line 1803 of file utils.cpp.

1804{
1805 CHAR buf[MAX_PATH];
1806 if (IS_INTRESOURCE(verba))
1807 {
1808 if (FAILED(GetCommandStringA(pCM, LOWORD(verba), GCS_VERB, buf, _countof(buf))))
1809 return 0;
1810 verba = buf;
1811 }
1812 return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0
1813}
UINT MapVerbToDfmCmd(_In_ LPCSTR verba)
static HRESULT GetCommandStringA(_In_ IContextMenu *pCM, _In_ UINT_PTR Id, _In_ UINT GCS, _Out_writes_(cchMax) LPSTR Buf, _In_ UINT cchMax)
Definition: utils.cpp:1789
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
char CHAR
Definition: pedump.c:57

Referenced by BrFolder_OnContextMenu().

◆ InvokeIExecuteCommand()

EXTERN_C HRESULT InvokeIExecuteCommand ( _In_ IExecuteCommand *  pEC,
_In_ PCWSTR  pszCommandName,
_In_opt_ IPropertyBag pPB,
_In_opt_ IShellItemArray *  pSIA,
_In_opt_ LPCMINVOKECOMMANDINFOEX  pICI,
_In_opt_ IUnknown pSite 
)

Definition at line 1738 of file utils.cpp.

1745{
1746 if (!pEC)
1747 return E_INVALIDARG;
1748
1749 CScopedSetObjectWithSite site(pEC, pSite);
1750 IUnknown_InitializeCommand(pEC, pszCommandName, pPB);
1751
1753 if (pSIA && SUCCEEDED(pEC->QueryInterface(IID_PPV_ARG(IObjectWithSelection, &pOWS))))
1754 pOWS->SetSelection(pSIA);
1755
1756 DWORD dwKeyState = 0, fMask = pICI ? pICI->fMask : 0;
1757 pEC->SetNoShowUI((fMask & CMIC_MASK_FLAG_NO_UI) != 0);
1758 pEC->SetShowWindow(pICI ? pICI->nShow : SW_SHOW);
1759 if (fMask & CMIC_MASK_SHIFT_DOWN)
1760 dwKeyState |= MK_SHIFT;
1761 if (fMask & CMIC_MASK_CONTROL_DOWN)
1762 dwKeyState |= MK_CONTROL;
1763 pEC->SetKeyState(dwKeyState);
1764 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpDirectoryW)
1765 pEC->SetDirectory(pICI->lpDirectoryW);
1766 if ((fMask & CMIC_MASK_UNICODE) && pICI->lpParametersW)
1767 pEC->SetParameters(pICI->lpParametersW);
1768 if (fMask & CMIC_MASK_PTINVOKE)
1769 pEC->SetPosition(pICI->ptInvoke);
1770
1771 return pEC->Execute();
1772}
EXTERN_C HRESULT IUnknown_InitializeCommand(_In_ IUnknown *pUnk, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB)
Definition: utils.cpp:1725
static IActiveScriptSite * site
Definition: script.c:149
#define MK_SHIFT
Definition: winuser.h:2405
#define MK_CONTROL
Definition: winuser.h:2406
#define SW_SHOW
Definition: winuser.h:786

Referenced by InvokeIExecuteCommandWithDataObject().

◆ InvokeIExecuteCommandWithDataObject()

EXTERN_C HRESULT InvokeIExecuteCommandWithDataObject ( _In_ IExecuteCommand *  pEC,
_In_ PCWSTR  pszCommandName,
_In_opt_ IPropertyBag pPB,
_In_ IDataObject pDO,
_In_opt_ LPCMINVOKECOMMANDINFOEX  pICI,
_In_opt_ IUnknown pSite 
)

Definition at line 1775 of file utils.cpp.

1782{
1784 HRESULT hr = SHCreateShellItemArrayFromDataObject(pDO, IID_PPV_ARG(IShellItemArray, &pSIA));
1785 return SUCCEEDED(hr) ? InvokeIExecuteCommand(pEC, pszCommandName, pPB, pSIA, pICI, pSite) : hr;
1786}
EXTERN_C HRESULT WINAPI SHCreateShellItemArrayFromDataObject(_In_ IDataObject *pdo, _In_ REFIID riid, _Out_ void **ppv)
EXTERN_C HRESULT InvokeIExecuteCommand(_In_ IExecuteCommand *pEC, _In_ PCWSTR pszCommandName, _In_opt_ IPropertyBag *pPB, _In_opt_ IShellItemArray *pSIA, _In_opt_ LPCMINVOKECOMMANDINFOEX pICI, _In_opt_ IUnknown *pSite)
Definition: utils.cpp:1738

Referenced by CDefaultContextMenu::InvokeRegVerb().

◆ IUnknown_InitializeCommand()

EXTERN_C HRESULT IUnknown_InitializeCommand ( _In_ IUnknown pUnk,
_In_ PCWSTR  pszCommandName,
_In_opt_ IPropertyBag pPB 
)

Definition at line 1725 of file utils.cpp.

1729{
1730 HRESULT hr;
1732 if (SUCCEEDED(hr = pUnk->QueryInterface(IID_PPV_ARG(IInitializeCommand, &pIC))))
1733 hr = pIC->Initialize(pszCommandName, pPB);
1734 return hr;
1735}
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
nsresult QueryInterface(nsIIDRef riid, void **result)

Referenced by InvokeIExecuteCommand(), and CDefaultContextMenu::InvokeRegVerb().

◆ MapFcidmCmdToVerb()

PCSTR MapFcidmCmdToVerb ( _In_ UINT_PTR  CmdId)

Definition at line 183 of file CDefaultContextMenu.cpp.

184{
185 for (SIZE_T i = 0; i < _countof(g_StaticInvokeCmdMap); ++i)
186 {
187 if (g_StaticInvokeCmdMap[i].IntVerb == CmdId && CmdId)
188 return g_StaticInvokeCmdMap[i].szStringVerb;
189 }
190 return NULL;
191}
static const struct _StaticInvokeCommandMap_ g_StaticInvokeCmdMap[]
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by CDefView::InvokeContextMenuCommand().

◆ MapVerbToDfmCmd()

UINT MapVerbToDfmCmd ( _In_ LPCSTR  verba)

Definition at line 193 of file CDefaultContextMenu.cpp.

194{
195 for (UINT i = 0; i < _countof(g_StaticInvokeCmdMap); ++i)
196 {
197 if (!lstrcmpiA(g_StaticInvokeCmdMap[i].szStringVerb, verba))
198 return (int)g_StaticInvokeCmdMap[i].DfmCmd;
199 }
200 return 0;
201}
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133

Referenced by GetDfmCmd().

◆ PathIsDosDevice()

BOOL PathIsDosDevice ( _In_ LPCWSTR  pszName)

Definition at line 240 of file utils.cpp.

241{
245
246 if (lstrcmpiW(szPath, L"NUL") == 0 || lstrcmpiW(szPath, L"PRN") == 0 ||
247 lstrcmpiW(szPath, L"CON") == 0 || lstrcmpiW(szPath, L"AUX") == 0)
248 {
249 return TRUE;
250 }
251
252 if (_wcsnicmp(szPath, L"LPT", 3) == 0 || _wcsnicmp(szPath, L"COM", 3) == 0)
253 {
254 if ((L'0' <= szPath[3] && szPath[3] <= L'9') && szPath[4] == UNICODE_NULL)
255 return TRUE;
256 }
257
258 return FALSE;
259}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
void WINAPI PathRemoveExtensionW(WCHAR *path)
Definition: path.c:1922
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:200
LPCWSTR szPath
Definition: env.c:37
#define UNICODE_NULL
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149

Referenced by CFSFolder::_CreateIDListFromName().

◆ PathIsDotOrDotDotW()

BOOL PathIsDotOrDotDotW ( _In_ LPCWSTR  pszPath)

Definition at line 214 of file utils.cpp.

215{
216 if (pszPath[0] != L'.')
217 return FALSE;
218 return !pszPath[1] || (pszPath[1] == L'.' && !pszPath[2]);
219}

Referenced by PathIsValidElement(), and CFileDefExt::WalkDirTree().

◆ PathIsValidElement()

BOOL PathIsValidElement ( _In_ LPCWSTR  pszPath)

Definition at line 226 of file utils.cpp.

227{
228 if (!*pszPath || PathIsDotOrDotDotW(pszPath))
229 return FALSE;
230
231 for (LPCWSTR pch = pszPath; *pch; ++pch)
232 {
234 return FALSE;
235 }
236
237 return TRUE;
238}
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:2197
#define PATH_VALID_ELEMENT
Definition: utils.cpp:221
BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath)
Definition: utils.cpp:214
#define pch(ap)
Definition: match.c:418
const uint16_t * LPCWSTR
Definition: typedefs.h:57

Referenced by Shell_NextElement().

◆ PostCabinetMessage()

void PostCabinetMessage ( UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 178 of file view.cpp.

179{
180 MSG data;
181 data.message = Msg;
182 data.wParam = wParam;
183 data.lParam = lParam;
185}
WPARAM wParam
Definition: combotst.c:138
struct @1791 Msg[]
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
LONG_PTR LPARAM
Definition: minwindef.h:175
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
static BOOL CALLBACK PostCabinetMessageCallback(HWND hWnd, LPARAM param)
Definition: view.cpp:161
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)

Referenced by GeneralDlg_OnApply(), and ViewDlg_Apply().

◆ PropSheetPageLifetimeCallback()

template<class T >
static UINT CALLBACK PropSheetPageLifetimeCallback ( HWND  hWnd,
UINT  uMsg,
PROPSHEETPAGEW pPSP 
)
static

Definition at line 170 of file precomp.h.

171{
172 if (uMsg == PSPCB_RELEASE)
173 ((T*)(pPSP->lParam))->Release();
174 return TRUE;
175}
_In_ BOOLEAN Release
Definition: cdrom.h:920
#define PSPCB_RELEASE
Definition: prsht.h:37
#define T(num)
Definition: thunks.c:311
LPARAM lParam
Definition: prsht.h:227

◆ SHBindToObject()

◆ SHCoInitializeAnyApartment()

HRESULT SHCoInitializeAnyApartment ( VOID  )

Definition at line 542 of file utils.cpp.

543{
545 if (FAILED(hr))
547 return hr;
548}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:281

Referenced by ShellExecuteExW(), SHGetNameAndFlagsW(), and SHSetLocalizedName().

◆ SHELL32_DefaultContextMenuCallBack()

HRESULT SHELL32_DefaultContextMenuCallBack ( IShellFolder psf,
IDataObject pdo,
UINT  msg 
)

Definition at line 656 of file shlfolder.cpp.

657{
658 switch (msg)
659 {
661 return S_OK; // Yes, I want verbs
663 return S_FALSE; // Do it for me please
665 return S_FALSE; // Supposedly "required for Windows 7 to pick a default"
666 }
667 return E_NOTIMPL;
668}
#define msg(x)
Definition: auth_time.c:54
#define E_NOTIMPL
Definition: ddrawi.h:99
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45

Referenced by CDesktopFolder::CallBack(), CDrivesFolder::CallBack(), CFSFolder::CallBack(), CNetFolderBackgroundMenuCB(), DrivesContextMenuCallback(), NetFolderMenuCallback(), and RegFolderContextMenuCallback().

◆ SHELL32_FileOperation()

int SHELL32_FileOperation ( LPSHFILEOPSTRUCTW  lpFileOp,
FILEOPCALLBACK  Callback,
void CallerData 
)

Definition at line 2093 of file shlfileop.cpp.

2094{
2096 FILE_LIST flFrom, flTo;
2097 int ret = 0;
2098
2099 if (!lpFileOp)
2101
2103 if (FAILED(ret))
2104 return ret;
2105
2106 lpFileOp->fAnyOperationsAborted = FALSE;
2107 check_flags(lpFileOp->fFlags);
2108
2109 ZeroMemory(&flFrom, sizeof(FILE_LIST));
2110 ZeroMemory(&flTo, sizeof(FILE_LIST));
2111
2112 if ((ret = parse_file_list(&flFrom, lpFileOp->pFrom)))
2113 return ret;
2114
2115 if (lpFileOp->wFunc != FO_DELETE)
2116 parse_file_list(&flTo, lpFileOp->pTo);
2117
2118 ZeroMemory(&op, sizeof(op));
2119 op.req = lpFileOp;
2120 op.totalSize.QuadPart = 0ull;
2121 op.completedSize.QuadPart = 0ull;
2122 op.bManyItems = (flFrom.dwNumFiles > 1);
2123 op.Callback = Callback;
2124 op.CallerCallbackData = CallerData;
2125 op.hWndOwner = GetAncestor(lpFileOp->hwnd, GA_ROOT);
2126
2127 ret = validate_operation(op, &flFrom, &flTo);
2128 if (ret)
2129 goto cleanup;
2130
2131 if (lpFileOp->wFunc != FO_RENAME && !(lpFileOp->fFlags & FOF_SILENT)) {
2132 ret = CoCreateInstance(CLSID_ProgressDialog,
2133 NULL,
2134 CLSCTX_INPROC_SERVER,
2135 IID_PPV_ARG(IProgressDialog, &op.progress));
2136 if (FAILED(ret))
2137 goto cleanup;
2138
2139 op.progress->StartProgressDialog(op.hWndOwner, NULL, PROGDLG_NORMAL & PROGDLG_AUTOTIME, NULL);
2141 _FileOpCountManager(&op, &flFrom);
2142 }
2143
2145
2146 switch (lpFileOp->wFunc)
2147 {
2148 case FO_COPY:
2149 ret = copy_files(&op, op.req->fFlags & FOF_MULTIDESTFILES, &flFrom, &flTo);
2150 break;
2151 case FO_DELETE:
2152 ret = delete_files(&op, &flFrom);
2153 break;
2154 case FO_MOVE:
2155 ret = move_files(&op, op.req->fFlags & FOF_MULTIDESTFILES, &flFrom, &flTo);
2156 break;
2157 case FO_RENAME:
2158 ret = rename_files(&op, &flFrom, &flTo);
2159 break;
2160 default:
2162 break;
2163 }
2164
2165 if (op.progress) {
2166 op.progress->StopProgressDialog();
2167 op.progress->Release();
2168 }
2169
2170cleanup:
2171 destroy_file_list(&flFrom);
2172
2173 if (lpFileOp->wFunc != FO_DELETE)
2174 destroy_file_list(&flTo);
2175 else if (lpFileOp->fFlags & FOF_ALLOWUNDO)
2177
2178 if (ret == ERROR_CANCELLED)
2179 lpFileOp->fAnyOperationsAborted = TRUE;
2182
2184 TRACE("SHFO FINISHOPERATIONS %#x (%d)\n", hr, ret);
2186
2187 if (FAILED(hr) && CanShowFileOpErrorUI(*op.req) && !op.bHasDisplayedError)
2188 SHELL_ErrorBox(op.hWndOwner, hr);
2189
2191
2192 return ret;
2193}
EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void)
UINT op
Definition: effect.c:236
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
static void cleanup(void)
Definition: main.c:1335
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
return ret
Definition: mutex.c:146
#define LOBYTE(W)
Definition: jmemdos.c:487
#define ZeroMemory
Definition: minwinbase.h:31
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define FO_RENAME
Definition: shellapi.h:139
#define FOF_MULTIDESTFILES
Definition: shellapi.h:141
#define FOF_ALLOWUNDO
Definition: shellapi.h:147
#define FO_DELETE
Definition: shellapi.h:138
#define FO_COPY
Definition: shellapi.h:137
#define FO_MOVE
Definition: shellapi.h:136
#define FOF_SILENT
Definition: shellapi.h:143
#define SHELL_ErrorBox
Definition: shellutils.h:126
static HRESULT rename_files(FILE_OPERATION *op, const FILE_LIST *flFrom, const FILE_LIST *flTo)
Definition: shlfileop.cpp:1959
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND
Definition: shlfileop.cpp:54
static BOOL CanShowFileOpErrorUI(const SHFILEOPSTRUCTW &fos)
Definition: shlfileop.cpp:106
static HRESULT copy_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, FILE_LIST *flTo)
Definition: shlfileop.cpp:1536
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
Definition: shlfileop.cpp:1310
static void destroy_file_list(FILE_LIST *flList)
Definition: shlfileop.cpp:1380
static DWORD validate_operation(FILE_OPERATION &op, FILE_LIST *flFrom, FILE_LIST *flTo)
Definition: shlfileop.cpp:1998
static HRESULT FileOpCallback(FILE_OPERATION *op, FILEOPCALLBACKEVENT Event, LPCWSTR Source, LPCWSTR Destination, UINT Attributes, HRESULT hrOp=S_OK)
Definition: shlfileop.cpp:407
static HRESULT SHELL32_FileOpErrorToHResult(int err, BOOL AnyOperationsAborted=FALSE)
Definition: shlfileop.cpp:89
static void _SetOperationTitle(FILE_OPERATION *op)
Definition: shlfileop.cpp:549
static HRESULT delete_files(FILE_OPERATION *op, const FILE_LIST *flFrom)
Definition: shlfileop.cpp:1685
DWORD WINAPI _FileOpCountManager(FILE_OPERATION *op, const FILE_LIST *flFrom)
Definition: shlfileop.cpp:2495
static DWORD move_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, const FILE_LIST *flTo)
Definition: shlfileop.cpp:1863
static void check_flags(FILEOP_FLAGS fFlags)
Definition: shlfileop.cpp:1985
#define PROGDLG_AUTOTIME
Definition: shlobj.h:982
#define PROGDLG_NORMAL
Definition: shlobj.h:980
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwNumFiles
Definition: shlfileop.cpp:71
LPCWSTR pFrom
Definition: shellapi.h:369
BOOL fAnyOperationsAborted
Definition: shellapi.h:372
FILEOP_FLAGS fFlags
Definition: shellapi.h:371
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:458
#define ERROR_CANCELLED
Definition: winerror.h:1055
#define GA_ROOT
Definition: winuser.h:2893
HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT)
Definition: window.c:929

Referenced by CRecycleBinItemContextMenu::InvokeCommand(), and SHFileOperationW().

◆ SHELL32_GetDllFromRundll32CommandLine()

HRESULT SHELL32_GetDllFromRundll32CommandLine ( LPCWSTR  pszCmd,
LPWSTR  pszOut,
SIZE_T  cchMax 
)

Definition at line 51 of file COpenWithMenu.cpp.

52{
53 WCHAR szDll[MAX_PATH + 100];
54 if (!PathGetAppFromCommandLine(pszCmd, szDll, _countof(szDll)))
56
57 PWSTR pszName = PathFindFileNameW(szDll);
58 if (_wcsicmp(pszName, L"rundll32") && _wcsicmp(pszName, L"rundll32.exe"))
59 return E_UNEXPECTED;
60
61 PCWSTR pszDllStart = pszCmd + (pszName - szDll) + lstrlenW(pszName);
62
63 if (*pszDllStart == '\"')
64 ++pszDllStart; // Skip possible end quote of ..\rundll32.exe" foo.dll,func
65 while (*pszDllStart <= ' ' && *pszDllStart)
66 ++pszDllStart;
67 if (PathGetAppFromCommandLine(pszDllStart, szDll, _countof(szDll)))
68 {
69 BOOL quoted = *pszDllStart == '\"';
70 PWSTR pszComma = szDll + lstrlenW(szDll);
71 while (!quoted && pszComma > szDll && *pszComma != ',' && *pszComma != '\\' && *pszComma != '/')
72 --pszComma;
73 SIZE_T cch = pszComma - szDll;
74 if (cch <= cchMax && (quoted || *pszComma == ','))
75 {
76 *pszComma = UNICODE_NULL;
77 lstrcpynW(pszOut, szDll, cchMax);
78 return S_OK;
79 }
80 }
82}
static SIZE_T PathGetAppFromCommandLine(LPCWSTR pszIn, LPWSTR pszOut, SIZE_T cchMax)
UINT cchMax
#define lstrcpynW
Definition: compat.h:738
#define lstrlenW
Definition: compat.h:750
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
Definition: path.c:1677
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:164
unsigned int BOOL
Definition: ntddk_ex.h:94
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define ERROR_BUFFER_OVERFLOW
Definition: winerror.h:307
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_UNEXPECTED
Definition: winerror.h:3528

Referenced by COpenWithList::GetPathFromCmd(), and CFileDefExt::InitOpensWithField().

◆ SHELL32_RunControlPanel()

EXTERN_C BOOL WINAPI SHELL32_RunControlPanel ( _In_ PCWSTR  commandLine,
_In_opt_ HWND  parent 
)

◆ SHELL32_ShowFilesystemItemPropertiesDialogAsync()

HRESULT SHELL32_ShowFilesystemItemPropertiesDialogAsync ( IDataObject pDO)

Definition at line 157 of file item_prop.cpp.

158{
159 CDataObjectHIDA cida(pDO);
160 HRESULT hr = cida.hr();
162 return hr;
163
164 const CLSID *pClsid = NULL;
166 LPCWSTR InitString = NULL;
167
168 if (cida->cidl && _ILIsDrive(HIDA_GetPIDLItem(cida, 0)))
169 {
170 pClsid = &CLSID_ShellDrvDefExt;
172 InitString = L"Drive";
173 }
174 else
175 {
176 pClsid = &CLSID_ShellFileDefExt;
178 }
179 return ShellPropSheetDialog().ShowAsync(pClsid, pDO, InitFunc, InitString);
180}
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
static void CALLBACK FSFolderItemPropDialogInitCallback(LPCWSTR InitString, IDataObject *pDO, HKEY *hKeys, UINT *cKeys)
Definition: item_prop.cpp:130
static void CALLBACK ClassPropDialogInitCallback(LPCWSTR InitString, IDataObject *pDO, HKEY *hKeys, UINT *cKeys)
Definition: item_prop.cpp:150
BOOL _ILIsDrive(LPCITEMIDLIST pidl)
Definition: pidl.c:2139
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:721
void(CALLBACK * PFNINITIALIZE)(LPCWSTR InitString, IDataObject *pDO, HKEY *hKeys, UINT *cKeys)
Definition: item_prop.cpp:29
static HRESULT ShowAsync(const CLSID *pClsidDefault, IDataObject *pDO, PFNINITIALIZE InitFunc, LPCWSTR InitString)
Definition: item_prop.cpp:63

Referenced by DrivesContextMenuCallback(), SHELL32_ShowFilesystemItemsPropertiesDialogAsync(), and SHMultiFileProperties().

◆ SHELL32_ShowFilesystemItemsPropertiesDialogAsync()

HRESULT SHELL32_ShowFilesystemItemsPropertiesDialogAsync ( HWND  hOwner,
IDataObject pDO 
)

Definition at line 183 of file item_prop.cpp.

184{
185 if (DataObject_GetHIDACount(pDO) == 1)
187 return SHMultiFileProperties(pDO, 0);
188}
HRESULT DataObject_GetHIDACount(IDataObject *pdo)
EXTERN_C HRESULT WINAPI SHMultiFileProperties(IDataObject *pDataObject, DWORD dwFlags)
Definition: item_prop.cpp:223
HRESULT SHELL32_ShowFilesystemItemPropertiesDialogAsync(IDataObject *pDO)
Definition: item_prop.cpp:157

Referenced by SHELL32_ShowPropertiesDialog().

◆ SHELL32_ShowPropertiesDialog()

HRESULT SHELL32_ShowPropertiesDialog ( IDataObject pdtobj)

Definition at line 648 of file shlfolder.cpp.

649{
650 if (!pdtobj)
651 return E_INVALIDARG;
653}
HRESULT SHELL32_ShowFilesystemItemsPropertiesDialogAsync(HWND hOwner, IDataObject *pDO)
Definition: item_prop.cpp:183

Referenced by CDesktopFolder::CallBack(), and CDefaultContextMenu::DoProperties().

◆ SHELL32_ShowShellExtensionProperties()

HRESULT SHELL32_ShowShellExtensionProperties ( const CLSID pClsid,
IDataObject pDO 
)

Definition at line 191 of file item_prop.cpp.

192{
193 WCHAR ClassBuf[6 + 38 + 1] = L"CLSID\\";
194 StringFromGUID2(*pClsid, ClassBuf + 6, 38 + 1);
196}

Referenced by RegFolderContextMenuCallback().

◆ SHELL_CIDA_ILCloneFull()

PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull ( _In_ const CIDA pCIDA,
_In_ UINT  Index 
)

Definition at line 110 of file shldataobject.cpp.

111{
112 if (Index < pCIDA->cidl)
113 return ILCombine(HIDA_GetPIDLFolder(pCIDA), HIDA_GetPIDLItem(pCIDA, Index));
114 return NULL;
115}
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:716
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by DoGetFileTitle(), CCopyMoveToMenu::DoRealFileOp(), and SHELL_DataObject_ILCloneFullItem().

◆ SHELL_CloneDataObject()

HRESULT SHELL_CloneDataObject ( _In_ IDataObject pDO,
_Out_ IDataObject **  ppDO 
)

Definition at line 125 of file shldataobject.cpp.

126{
127 *ppDO = NULL;
128 CDataObjectHIDA cida(pDO);
129 HRESULT hr = cida.hr();
130 if (SUCCEEDED(hr))
131 {
132 CCidaChildArrayHelper items(cida);
133 if (FAILED(hr = items.hr()))
134 return hr;
135 hr = SHCreateFileDataObject(HIDA_GetPIDLFolder(cida), cida->cidl, items.GetItems(), NULL, ppDO);
136 if (SUCCEEDED(hr))
137 {
138 POINT pt;
139 if (SUCCEEDED(DataObject_GetOffset(pDO, &pt)))
140 DataObject_SetOffset(*ppDO, &pt);
141 }
142 }
143 return hr;
144}
HRESULT WINAPI SHCreateFileDataObject(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject *pDataInner, IDataObject **ppDataObj)
#define pt(x, y)
Definition: drawing.c:79
static TCHAR * items[]
Definition: page1.c:45

Referenced by ShellPropSheetDialog::ShowPropertiesThread().

◆ SHELL_DataObject_ILCloneFullItem()

PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem ( _In_ IDataObject pDO,
_In_ UINT  Index 
)

Definition at line 117 of file shldataobject.cpp.

118{
119 if (!pDO)
120 return NULL;
121 CDataObjectHIDA cida(pDO);
122 return SUCCEEDED(cida.hr()) ? SHELL_CIDA_ILCloneFull(cida, Index) : NULL;
123}
PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull(_In_ const CIDA *pCIDA, _In_ UINT Index)

Referenced by CDesktopFolder::CallBack(), CCopyMoveToMenu::Initialize(), SHELL32_PropertySheet(), and SHELL_GetCaptionFromDataObject().

◆ SHELL_DisplayNameOf()

HRESULT SHELL_DisplayNameOf ( _In_opt_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_opt_ UINT  Flags,
_Out_ PWSTR ppStr 
)

Definition at line 454 of file utils.cpp.

459{
460 HRESULT hr;
461 CComPtr<IShellFolder> psfRoot;
462 if (!psf)
463 {
464 PCUITEMID_CHILD pidlChild;
465 hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfRoot), &pidlChild);
466 if (FAILED(hr))
467 return hr;
468 psf = psfRoot;
469 pidl = pidlChild;
470 }
471 STRRET sr;
472 hr = psf->GetDisplayNameOf((PCUITEMID_CHILD)pidl, Flags, &sr);
473 return SUCCEEDED(hr) ? StrRetToStrW(&sr, pidl, ppStr) : hr;
474}
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:349
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1504
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by CFolderItems::IncludeItem(), CFileDefExt::InitMultifilePageThread(), and CFolder::NewFolder().

◆ Shell_FailForceReturn()

BOOL Shell_FailForceReturn ( _In_ HRESULT  hr)

Definition at line 378 of file utils.cpp.

379{
381
382 switch (code)
383 {
386 case ERROR_CANCELLED:
387 return TRUE;
388
389 default:
391 }
392}
Definition: inflate.c:139
#define ERROR_BAD_NETPATH
Definition: winerror.h:267
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228
#define ERROR_BAD_NET_NAME
Definition: winerror.h:281

Referenced by CDesktopFolder::ParseDisplayName(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ SHELL_GetIDListTarget()

HRESULT SHELL_GetIDListTarget ( _In_ LPCITEMIDLIST  pidl,
_Out_ PIDLIST_ABSOLUTE ppidl 
)

Definition at line 530 of file utils.cpp.

531{
532 IShellLink *pSL;
533 HRESULT hr = SHBindToObject(NULL, pidl, NULL, IID_PPV_ARG(IShellLink, &pSL));
534 if (SUCCEEDED(hr))
535 {
536 hr = pSL->GetIDList(ppidl); // Note: Returns S_FALSE if no target pidl
537 pSL->Release();
538 }
539 return hr;
540}
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *pShellFolder, _In_ PCUIDLIST_RELATIVE pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:395

Referenced by SHBrowseForFolderW().

◆ SHELL_GetUIObjectOfAbsoluteItem()

EXTERN_C HRESULT SHELL_GetUIObjectOfAbsoluteItem ( _In_opt_ HWND  hWnd,
_In_ PCIDLIST_ABSOLUTE  pidl,
_In_ REFIID  riid,
_Out_ void **  ppvObj 
)

Definition at line 428 of file utils.cpp.

432{
433 if (!ppvObj)
434 return E_INVALIDARG;
435 *ppvObj = NULL;
436 IShellFolder *psf;
437 PCUITEMID_CHILD pidlChild;
438 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
439 if (SUCCEEDED(hr))
440 {
441 hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj);
442 psf->Release();
443 if (SUCCEEDED(hr))
444 {
445 if (*ppvObj)
446 return hr;
447 hr = E_FAIL;
448 }
449 }
450 return hr;
451}
REFIID riid
Definition: atlbase.h:39
HRESULT GetUIObjectOf([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)

Referenced by CShellLink::DragEnter(), CSendToMenu::GetUIObjectFromPidl(), CFolder::GetUIObjectFromVariant(), CFolderItemVerbs::Init(), SHELL_PidlGetIconLocationW(), and shellex_get_dataobj().

◆ Shell_ParseSpecialFolder()

EXTERN_C INT Shell_ParseSpecialFolder ( _In_ LPCWSTR  pszStart,
_Out_ LPWSTR ppch,
_Out_ INT pcch 
)

Definition at line 1987 of file shellpath.c.

1988{
1989 LPCWSTR pszPath, pchBackslash;
1991
1992 pchBackslash = StrChrW(pszStart, L'\\');
1993 if (pchBackslash)
1994 {
1995 *ppch = (LPWSTR)(pchBackslash + 1);
1996 *pcch = (pchBackslash - pszStart) + 1;
1997 StrCpyNW(szPath, pszStart, min(*pcch, _countof(szPath)));
1998 pszPath = szPath;
1999 }
2000 else
2001 {
2002 *ppch = NULL;
2003 *pcch = lstrlenW(pszStart);
2004 pszPath = pszStart;
2005 }
2006
2007 return SHGetSpecialFolderID(pszPath);
2008}
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:464
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
Definition: string.c:470
INT SHGetSpecialFolderID(_In_ LPCWSTR pszName)
Definition: shellpath.c:1973

Referenced by CDesktopFolder::ShellUrlParseDisplayName().

◆ SHELL_ShowItemIDListProperties()

HRESULT SHELL_ShowItemIDListProperties ( LPCITEMIDLIST  pidl)

Definition at line 199 of file item_prop.cpp.

200{
201 assert(pidl);
202
203 CComHeapPtr<ITEMIDLIST> alloc;
204 if (IS_INTRESOURCE(pidl))
205 {
206 HRESULT hr = SHGetSpecialFolderLocation(NULL, LOWORD(pidl), const_cast<LPITEMIDLIST*>(&pidl));
207 if (FAILED(hr))
208 return hr;
209 alloc.Attach(const_cast<LPITEMIDLIST>(pidl));
210 }
211 SHELLEXECUTEINFOA sei = {
212 sizeof(sei), SEE_MASK_INVOKEIDLIST | SEE_MASK_ASYNCOK, NULL, "properties",
213 NULL, NULL, NULL, SW_SHOWNORMAL, NULL, const_cast<LPITEMIDLIST>(pidl)
214 };
216}
#define assert(_expr)
Definition: assert.h:32
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3385
#define HResultFromWin32
Definition: loader.cpp:14
#define alloc
Definition: rosglue.h:13
#define SEE_MASK_ASYNCOK
Definition: shellapi.h:43
#define SEE_MASK_INVOKEIDLIST
Definition: shellapi.h:28
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExA(LPSHELLEXECUTEINFOA sei)
Definition: shlexec.cpp:2665
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define SW_SHOWNORMAL
Definition: winuser.h:781

Referenced by CFSFolder::CallBack(), and CRecycleBin::InvokeCommand().

◆ SHELL_SingleFileOperation()

HRESULT SHELL_SingleFileOperation ( HWND  hWnd,
UINT  Op,
PCWSTR  Src,
PCWSTR  Dest,
UINT  Flags,
PWSTR ppNewName 
)

Definition at line 2446 of file shlfileop.cpp.

2447{
2448 HRESULT hr = S_OK;
2449 if ((Src = SHELL_DupSZZ(Src)) == NULL)
2450 hr = E_OUTOFMEMORY;
2451 if (Dest && (Dest = SHELL_DupSZZ(Dest)) == NULL)
2452 hr = E_OUTOFMEMORY;
2453
2454 SHFILEOPSTRUCTW fos = { hWnd, Op, Src, Dest, (FILEOP_FLAGS)Flags };
2455 if (ppNewName)
2456 {
2457 *ppNewName = NULL;
2459 }
2460
2461 if (SUCCEEDED(hr))
2462 {
2463 int err = SHFileOperationW(&fos);
2465 }
2466 else if (CanShowFileOpErrorUI(fos))
2467 {
2469 }
2470 SHFree(const_cast<PWSTR>(Src));
2471 SHFree(const_cast<PWSTR>(Dest));
2472
2473 if (fos.hNameMappings)
2474 {
2475 if (SUCCEEDED(hr) && ppNewName)
2476 {
2479 if ((*ppNewName = SHELL_DupSZZ(pMap->pszNewPath)) == NULL)
2480 hr = S_FALSE;
2481 }
2483 }
2484 return hr;
2485}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
LPVOID WINAPI DSA_GetItemPtr(HDSA hdsa, INT nIndex)
Definition: dsa.c:162
#define DSA_GetItemCount(hdsa)
Definition: commctrl.h:4831
#define err(...)
WORD FILEOP_FLAGS
Definition: shellapi.h:213
#define FOF_WANTMAPPINGHANDLE
Definition: shellapi.h:146
static PWSTR SHELL_DupSZZ(PCWSTR Input)
Definition: shlfileop.cpp:2434
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
Definition: shlfileop.cpp:2200
void WINAPI SHFreeNameMappings(HANDLE hNameMapping)
Definition: shlfileop.cpp:2228
Definition: dsa.c:45
PVOID hNameMappings
Definition: shellapi.h:373
LPWSTR pszNewPath
Definition: shellapi.h:403

Referenced by CFSFolder::SetNameOf().

◆ SHGetAttributes()

DWORD SHGetAttributes ( _In_ IShellFolder psf,
_In_ LPCITEMIDLIST  pidl,
_In_ DWORD  dwAttributes 
)

Definition at line 496 of file utils.cpp.

497{
498 LPCITEMIDLIST pidlLast = pidl;
499 IShellFolder *release = NULL;
500
501 if (!psf)
502 {
503 SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
504 if (!psf)
505 return 0;
506 release = psf;
507 }
508
509 DWORD oldAttrs = dwAttributes;
510 if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes)))
511 dwAttributes = 0;
512 else
513 dwAttributes &= oldAttrs;
514
515 if ((dwAttributes & SFGAO_FOLDER) &&
516 (dwAttributes & SFGAO_STREAM) &&
517 !(dwAttributes & SFGAO_STORAGEANCESTOR) &&
518 (oldAttrs & SFGAO_STORAGEANCESTOR) &&
519 (SHGetObjectCompatFlags(psf, NULL) & 0x200))
520 {
521 dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR);
522 dwAttributes |= SFGAO_STORAGEANCESTOR;
523 }
524
525 if (release)
526 release->Release();
527 return dwAttributes;
528}
DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid)
Definition: ordinal.c:5727
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD dwAttributes
Definition: vdmdbg.h:34

Referenced by CFSDropTarget::_DoDrop(), BrFolder_InsertItem(), CRegItemContextMenu_CreateInstance(), CFolderItem::HasAttribute(), CFolder::NewFolder(), CDefView::OnCreate(), and SHGetNameAndFlagsW().

◆ SHGetNameAndFlagsW()

HRESULT SHGetNameAndFlagsW ( _In_ LPCITEMIDLIST  pidl,
_In_ DWORD  dwFlags,
_Out_opt_ LPWSTR  pszText,
_In_ UINT  cchBuf,
_Inout_opt_ DWORD pdwAttributes 
)

Definition at line 551 of file utils.cpp.

557{
558 if (pszText)
559 *pszText = UNICODE_NULL;
560
562
563 CComPtr<IShellFolder> psfFolder;
564 LPCITEMIDLIST ppidlLast;
565 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast);
566 if (SUCCEEDED(hr))
567 {
568 if (pszText)
569 hr = DisplayNameOfW(psfFolder, ppidlLast, dwFlags, pszText, cchBuf);
570
571 if (SUCCEEDED(hr))
572 {
573 if (pdwAttributes)
574 *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes);
575 }
576 }
577
578 if (SUCCEEDED(hrCoInit))
580
581 return hr;
582}
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:496
EXTERN_C HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: utils.cpp:480
HRESULT SHCoInitializeAnyApartment(VOID)
Definition: utils.cpp:542
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
_In_ UINT cchBuf
Definition: shlwapi.h:378

Referenced by CDrvDefExt::AddMainPage(), DoGetFileTitle(), CShellLink::OnInitDialog(), SHELL_execute(), SHELL_GetCaptionFromDataObject(), and CDesktopFolder::ShellUrlParseDisplayName().

◆ SHILAppend()

HRESULT SHILAppend ( _Inout_ LPITEMIDLIST  pidl,
_Inout_ LPITEMIDLIST ppidl 
)

Definition at line 261 of file utils.cpp.

262{
263 LPITEMIDLIST pidlOld = *ppidl;
264 if (!pidlOld)
265 {
266 *ppidl = pidl;
267 return S_OK;
268 }
269
270 HRESULT hr = SHILCombine(*ppidl, pidl, ppidl);
271 ILFree(pidlOld);
272 ILFree(pidl);
273 return hr;
274}
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051

Referenced by CFSFolder::_ParseSimple(), BrFolder_Treeview_Rename(), CFSFolder::ParseDisplayName(), and CFolderItem::put_Name().

◆ SHIsFileSysBindCtx()

HRESULT SHIsFileSysBindCtx ( _In_ IBindCtx pBindCtx,
_Out_opt_ WIN32_FIND_DATAW pFindData 
)

Definition at line 361 of file utils.cpp.

362{
365
366 if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk)))
367 return S_FALSE;
368
370 return S_FALSE;
371
372 if (pFindData)
373 pBindData->GetFindData(pFindData);
374
375 return S_OK;
376}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

Referenced by CDesktopFolder::ParseDisplayName(), CDrivesFolder::ParseDisplayName(), and CFSFolder::ParseDisplayName().

◆ SHSkipJunctionBinding()

BOOL SHSkipJunctionBinding ( _In_ IBindCtx pbc,
_In_ CLSID pclsid 
)

Definition at line 349 of file utils.cpp.

350{
351 if (!pbc)
352 return FALSE;
353
354 BIND_OPTS BindOps = { sizeof(BindOps) };
355 if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS)
356 return TRUE;
357
358 return pclsid && SHSkipJunction(pbc, pclsid);
359}
BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid)
Definition: ordinal.c:4022

Referenced by CDesktopFolder::_ParseDisplayNameByParent().

Variable Documentation

◆ CLSID_AdminFolderShortcut

◆ CLSID_FontsFolderShortcut

const GUID CLSID_FontsFolderShortcut
extern

◆ CLSID_MenuBandSite

◆ CLSID_OpenWith

const GUID CLSID_OpenWith
extern

◆ CLSID_StartMenu

◆ CLSID_UnixDosFolder

const GUID CLSID_UnixDosFolder
extern

Referenced by test_FolderShortcut().

◆ CLSID_UnixFolder

const GUID CLSID_UnixFolder
extern

◆ SHELL32_AdvtShortcutComponent

const GUID SHELL32_AdvtShortcutComponent
extern

◆ SHELL32_AdvtShortcutProduct

const GUID SHELL32_AdvtShortcutProduct
extern