29#define IsAttrib(x, y) ((INVALID_FILE_ATTRIBUTES != (x)) && ((x) & (y)))
30#define IsAttribFile(x) (!((x) & FILE_ATTRIBUTE_DIRECTORY))
31#define IsAttribDir(x) IsAttrib(x, FILE_ATTRIBUTE_DIRECTORY)
32#define IsDotDir(x) ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0))))
36#define NEW_FILENAME_ON_COPY_TRIES 100
54#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
92 const bool IsDeErr = (
err & ~ERRORONDEST) >= de_min && (
err & ~
ERRORONDEST) <= de_max;
269 switch (nKindOfDialog)
332 FIXME(
" Unhandled nKindOfDialog %d stub\n", nKindOfDialog);
345 assert(nKindOfDialog >= 0 && nKindOfDialog < 32);
346 if (
op && (
op->dwYesToAllMask & (1 << nKindOfDialog)))
356 szText, 0, 0, szBuffer,
sizeof(szBuffer), (
va_list*)
args);
364 op->dwYesToAllMask |= (1 << nKindOfDialog);
370 op->req->fAnyOperationsAborted =
TRUE;
468 op->bCancelled |=
op->progress->HasUserCancelled();
555 switch (
op->req->wFunc)
578 op->progress->SetLine(1, szPreflight,
false,
NULL);
585 LPWSTR fileSpecS, pathSpecS, fileSpecD, pathSpecD;
586 WCHAR szFolderS[50], szFolderD[50], szFinalString[260];
596 pathSpecS = fileSpecS;
600 lstrcpynW(szFolderS, pathSpecS,
min(50, fileSpecS - pathSpecS));
603 switch (
op->req->wFunc)
611 pathSpecD = fileSpecD;
615 lstrcpynW(szFolderD, pathSpecD,
min(50, fileSpecD - pathSpecD));
625 op->szBuilderString, 0, 0, szFinalString,
sizeof(szFinalString), (
va_list*)
args);
627 op->progress->SetLine(1, fileSpecS,
false,
NULL);
628 op->progress->SetLine(2, szFinalString,
false,
NULL);
637 DWORD dwStreamNumber,
638 DWORD dwCallbackReason,
652 op->completedSize.QuadPart += TotalFileSize.
QuadPart;
654 op->progress->SetProgress64(
op->completedSize.QuadPart -
657 ,
op->totalSize.QuadPart);
660 op->bCancelled =
op->progress->HasUserCancelled();
694 tmp.
u.LowPart = wfd.nFileSizeLow;
695 tmp.
u.HighPart = wfd.nFileSizeHigh;
753 CStringW strTitle, strMask, strText;
775 op->bHasDisplayedError++;
851 WCHAR tmp[] = {
L"A:\\" };
900 TRACE(
"[shell32, SHNotifyCopyFileW] STILL SHIT\n");
913 attribs &= ~FILE_ATTRIBUTE_READONLY;
1028 pSlash = szTemp + 3;
1032 while (*pSlash && *pSlash !=
'\\') pSlash++;
1081 if (b_FileMask &&
IsAttribDir(wfd.dwFileAttributes))
1083 dwAttr = wfd.dwFileAttributes;
1110 PCSTR tmpSrc = strSrc;
1117 }
while (
size != 1);
1140 *pStrDest = strDest;
1162 int errCode, retCode;
1192 ERR(
"SHFileOperationW failed with 0x%x\n", retCode);
1221 list->num_alloc * 2 *
sizeof(*newx) );
1222 list->feFiles = newx;
1223 list->num_alloc *= 2;
1243 dwLen =
ptr - szFile + 1;
1259 DWORD dwDirLen, dwFullLen;
1265 dwDirLen =
ptr - szWildCard + 1;
1267 dwFullLen = dwDirLen +
lstrlenW(szFileName) + 1;
1270 lstrcpynW(szFullPath, szWildCard, dwDirLen + 1);
1298 file->attributes = wfd.dwFileAttributes;
1384 if (!flList || !flList->
feFiles)
1453 if (!
op->bManyItems)
1464 szFrom[
lstrlenW(szFrom) + 1] =
'\0';
1646 op->req->fAnyOperationsAborted =
TRUE;
1651 if (
op->progress !=
NULL)
1652 op->bCancelled |=
op->progress->HasUserCancelled();
1705 op->req->fAnyOperationsAborted =
TRUE;
1749 op->req->fAnyOperationsAborted =
TRUE;
1776 if (
op->progress !=
NULL)
1777 op->bCancelled |=
op->progress->HasUserCancelled();
1801 szFrom[
lstrlenW(szFrom) + 1] =
'\0';
1804 szTo[
lstrlenW(szDestPath) + 1] =
'\0';
1913 if (mismatched && !fileDest->
bExists)
1934 op->req->fAnyOperationsAborted =
TRUE;
1939 if (
op->progress !=
NULL)
1940 op->bCancelled |=
op->progress->HasUserCancelled();
1991 if (fFlags & wUnsupportedFlags)
1992 FIXME(
"Unsupported flags: %04x\n", fFlags);
1995#define GET_FILENAME(fe) ((fe)->szFilename[0] ? (fe)->szFilename : (fe)->szFullPath)
2013 for (
k = 0;
k < dwNumDest; ++
k)
2047 op.bHasDisplayedError++;
2058 if (cchFrom < cchTo)
2060 WCHAR ch = szTo[cchFrom];
2080 op.bHasDisplayedError++;
2120 op.totalSize.QuadPart = 0ull;
2121 op.completedSize.QuadPart = 0ull;
2124 op.CallerCallbackData = CallerData;
2134 CLSCTX_INPROC_SERVER,
2146 switch (lpFileOp->
wFunc)
2166 op.progress->StopProgressDialog();
2167 op.progress->Release();
2184 TRACE(
"SHFO FINISHOPERATIONS %#x (%d)\n",
hr,
ret);
2356 char root[] =
"A:\\";
2376 FIXME(
"unimplemented flags 0x%08x\n",
flags);
2382 if (last_slash ==
NULL)
2390 realpath = temppath;
2401 FIXME(
"treating SHPPFW_ASKDIRCREATE as SHPPFW_DIRCREATE\n");
2502 entryToCount = &
from->feFiles[
i];
2517 WCHAR *pwszFilename = pwszBuf + cchBuf;
2518 size_t cchFilenameMax =
MAX_PATH - cchBuf;
2519 if (!cchFilenameMax)
2523 *(pwszFilename++) =
'\\';
2533 ERR(
"FindFirstFileW %ls failed\n", pwszBuf);
2542 if (!
wcscmp(wfd.cFileName,
L".") || !
wcscmp(wfd.cFileName,
L".."))
2552 FileSize.
u.HighPart = wfd.nFileSizeHigh;
2558 if (
op->progress !=
NULL)
2559 op->bCancelled =
op->progress->HasUserCancelled();
BOOL TRASH_TrashFile(LPCWSTR wszPath)
EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void)
BOOL TRASH_CanTrashFile(LPCWSTR wszPath)
PRTL_UNICODE_STRING_BUFFER Path
#define shell32_hInstance
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
int confirm(const char *cmd, const char *file)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
bool IsEmpty() const noexcept
void __cdecl Format(UINT nFormatID,...)
#define IDS_OVERWRITEFILE_TEXT
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
#define ERROR_INVALID_PARAMETER
#define GetCurrentDirectoryW(x, y)
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
static const WCHAR *const ext[]
#define FAILED_UNEXPECTEDLY(hr)
static void cleanup(void)
BOOL WINAPI CopyFileExW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL, IN LPVOID lpData OPTIONAL, IN LPBOOL pbCancel OPTIONAL, IN DWORD dwCopyFlags)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI MoveFileWithProgressW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN LPPROGRESS_ROUTINE lpProgressRoutine, IN LPVOID lpData, IN DWORD dwFlags)
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
DWORD WINAPI GetTickCount(VOID)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
static const WCHAR sizeW[]
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
enum _FILEOPCALLBACKEVENT FILEOPCALLBACKEVENT
HRESULT(CALLBACK * FILEOPCALLBACK)(FILEOPCALLBACKEVENT Event, LPCWSTR Source, LPCWSTR Destination, UINT Attributes, HRESULT hr, void *CallerData)
void WINAPI SHFree(LPVOID pv)
LPVOID WINAPI SHAlloc(SIZE_T len)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
LPWSTR WINAPI StrPBrkW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
LPWSTR WINAPI StrCpyNW(LPWSTR dst, LPCWSTR src, int count)
int WINAPIV wnsprintfW(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt,...)
LPVOID WINAPI DSA_GetItemPtr(HDSA hdsa, INT nIndex)
void WINAPI DSA_DestroyCallback(HDSA hdsa, PFNDSAENUMCALLBACK enumProc, LPVOID lParam)
#define MOVEFILE_REPLACE_EXISTING
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
TCHAR szTitle[MAX_LOADSTRING]
#define ERROR_ALREADY_EXISTS
#define ERROR_FILE_NOT_FOUND
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static HMODULE MODULEINFO DWORD cb
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define FILE_ATTRIBUTE_READONLY
#define FILE_ATTRIBUTE_SYSTEM
#define FILE_ATTRIBUTE_DIRECTORY
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
#define MAKEINTRESOURCE(i)
#define PathAddBackslashW
#define DSA_GetItemCount(hdsa)
DWORD WINAPI GetVersion()
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define ASK_OVERWRITE_FILE
#define ASK_DELETE_MULTIPLE_ITEM
#define ASK_OVERWRITE_FOLDER
#define ASK_DELETE_SELECTED
#define ASK_DELETE_FOLDER
#define ASK_CANT_TRASH_ITEM
#define ASK_TRASH_MULTIPLE_ITEM
#define FOF_WANTNUKEWARNING
#define FOF_NOCOPYSECURITYATTRIBS
#define FOF_MULTIDESTFILES
#define FOF_RENAMEONCOLLISION
#define FOF_NOCONFIRMATION
#define FOF_SIMPLEPROGRESS
#define FOF_NO_CONNECTED_ELEMENTS
#define FOF_NORECURSEREPARSE
#define FOF_WANTMAPPINGHANDLE
#define SHELL_GetSetting(pss, ssf, field)
BOOL SHELL_DeleteDirectoryW(FILE_OPERATION *op, LPCWSTR pszDir, BOOL bShowUI)
static LPWSTR wildcard_to_file(LPCWSTR szWildCard, LPCWSTR szFileName)
static HRESULT rename_files(FILE_OPERATION *op, const FILE_LIST *flFrom, const FILE_LIST *flTo)
EXTERN_C DWORD WINAPI SheGetDirA(DWORD drive, LPSTR buffer)
DWORD CALLBACK SHCopyProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
#define NEW_FILENAME_ON_COPY_TRIES
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND
static void move_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE_LIST *flFrom)
static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly)
static void parse_wildcard_files(FILE_LIST *flList, LPCWSTR szFile, LPDWORD pdwListIndex)
EXTERN_C DWORD WINAPI SheChangeDirW(LPWSTR path)
static BOOL CanShowFileOpErrorUI(const SHFILEOPSTRUCTW &fos)
static HRESULT copy_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, FILE_LIST *flTo)
EXTERN_C int WINAPI IsNetDrive(int drive)
static void confirm_msg_move_button(HWND hDlg, INT iId, INT *xPos, INT yOffset, BOOL bShow)
int WINAPI SHCreateDirectoryExA(HWND hWnd, LPCSTR path, LPSECURITY_ATTRIBUTES sec)
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
static DWORD _ConvertAtoW(PCSTR strSrc, PCWSTR *pStrDest, BOOL isList)
static INT_PTR ConfirmMsgBox_Init(HWND hDlg, LPARAM lParam)
static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path)
EXTERN_C DWORD WINAPI Win32DeleteFileW(LPCWSTR path)
static BOOL move_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
static int CALLBACK _DestroyCallback(void *p, void *pData)
static void destroy_file_list(FILE_LIST *flList)
static PWSTR SHELL_DupSZZ(PCWSTR Input)
EXTERN_C HRESULT WINAPI SHIsFileAvailableOffline(LPCWSTR path, LPDWORD status)
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
void WINAPI SHFreeNameMappings(HANDLE hNameMapping)
static INT_PTR CALLBACK ConfirmMsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
static void copy_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
static CStringW try_find_new_name(LPCWSTR szDestPath)
static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path)
EXTERN_C DWORD WINAPI SheChangeDirA(LPSTR path)
EXTERN_C INT WINAPI RealDriveType(INT drive, BOOL bQueryNet)
static void __inline grow_list(FILE_LIST *list)
EXTERN_C DWORD WINAPI SheGetDirW(DWORD drive, LPWSTR buffer)
EXTERN_C BOOL WINAPI Win32RemoveDirectoryW(LPCWSTR path)
BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir)
static void add_file_to_entry(FILE_ENTRY *feFile, LPCWSTR szFile)
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)
int SHELL32_FileOperation(LPSHFILEOPSTRUCTW lpFileOp, FILEOPCALLBACK Callback, void *CallerData)
static DWORD validate_operation(FILE_OPERATION &op, FILE_LIST *flFrom, FILE_LIST *flTo)
static void create_dest_dirs(LPCWSTR szDestDir)
static DWORD CheckForError(FILE_OPERATION *op, DWORD error, LPCWSTR src)
static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
static HRESULT FileOpCallback(FILE_OPERATION *op, FILEOPCALLBACKEVENT Event, LPCWSTR Source, LPCWSTR Destination, UINT Attributes, HRESULT hrOp=S_OK)
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
static HRESULT SHELL32_FileOpErrorToHResult(int err, BOOL AnyOperationsAborted=FALSE)
static BOOL SHELL_ConfirmIDs(int nKindOfDialog, SHELL_ConfirmIDstruc *ids)
static void SHELL32_FreeUnicodeBuf(LPWSTR wPath)
static void _SetOperationTitle(FILE_OPERATION *op)
int WINAPI SHCreateDirectory(HWND hWnd, LPCWSTR path)
HRESULT SHELL_SingleFileOperation(HWND hWnd, UINT Op, PCWSTR Src, PCWSTR Dest, UINT Flags, PWSTR *ppNewName)
int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
static INT_PTR ConfirmMsgBox_Paint(HWND hDlg)
static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL isdir)
static HRESULT delete_files(FILE_OPERATION *op, const FILE_LIST *flFrom)
DWORD WINAPI _FileOpCountManager(FILE_OPERATION *op, const FILE_LIST *flFrom)
static DWORD move_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, const FILE_LIST *flTo)
static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
static BOOL _FileOpCount(FILE_OPERATION *op, LPWSTR pwszBuf, BOOL bFolder, DWORD *ticks)
static void _SetOperationTexts(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest)
static void move_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
EXTERN_C BOOL WINAPI Win32CreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
static void check_flags(FILEOP_FLAGS fFlags)
static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minChars)
static void HandleDesktopIniOp(PCWSTR Path)
static DWORD SHNotifyCopyFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists)
static BOOL SHIsCdRom(LPCWSTR path)
#define SHPPFW_IGNOREFILENAME
#define SHCNE_RENAMEFOLDER
#define SHPPFW_ASKDIRCREATE
#define SSF_NOCONFIRMRECYCLE
#define IDD_YESTOALL_MSGBOX
#define IDS_DELETESELECTED_TEXT
#define IDI_SHELL_FOLDER_MOVE2
#define IDI_SHELL_CONFIRM_DELETE
#define IDS_MOVEERRORSUBFOLDER
#define IDS_OVERWRITEFOLDER_TEXT
#define IDS_FILEOOP_FROM_TO
#define IDS_CREATEFOLDER_DENIED
#define IDS_OVERWRITEFILE_CAPTION
#define IDS_FILEOOP_MOVING
#define IDS_COPYERRORSUBFOLDER
#define IDC_YESTOALL_MESSAGE
#define IDS_CREATEFOLDER_CAPTION
#define IDS_CANTTRASH_TEXT
#define IDS_MOVEERRORSAME
#define IDS_TRASHITEM_TEXT
#define IDS_DELETEITEM_CAPTION
#define IDS_FILEOOP_DELETING
#define IDS_TRASHMULTIPLE_TEXT
#define IDC_YESTOALL_ICON
#define IDS_TRASHFOLDER_TEXT
#define IDS_FILEOOP_COPYING
#define IDS_DELETEFOLDER_CAPTION
#define IDS_DELETEITEM_TEXT
#define IDI_SHELL_TRASH_FILE
#define IDS_COPYERRORTITLE
#define IDS_COPYERRORSAME
#define IDS_FILEOOP_PREFLIGHT
#define IDS_MOVEERRORTITLE
#define IDS_DELETEMULTIPLE_TEXT
#define IDS_MOVEERRORSAMEFOLDER
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
IProgressDialog * progress
ULARGE_INTEGER completedSize
void * CallerCallbackData
BOOL fAnyOperationsAborted
BOOL fAnyOperationsAborted
LPCWSTR lpszProgressTitle
struct _ULARGE_INTEGER::@4266 u
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define DE_ACCESSDENIEDSRC
#define DE_FILENAMETOOLONG
struct _LARGE_INTEGER::@2379 u
#define INVALID_FILE_ATTRIBUTES
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
#define success(from, fromstr, to, tostr)
DWORD WINAPI GetLastError(void)
#define FORMAT_MESSAGE_FROM_STRING
#define FORMAT_MESSAGE_FROM_SYSTEM
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
#define CALLBACK_STREAM_SWITCH
#define ERROR_NO_MORE_SEARCH_HANDLES
#define ERROR_PATH_NOT_FOUND
#define ERROR_BAD_PATHNAME
#define ERROR_GEN_FAILURE
#define ERROR_FILE_EXISTS
#define ERROR_FILENAME_EXCED_RANGE
#define HRESULT_FROM_WIN32(x)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD WINAPI GetSysColor(_In_ int)
#define GetWindowLongPtrW
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
HDC WINAPI GetDC(_In_opt_ HWND)
#define MB_ICONEXCLAMATION
#define MAKEINTRESOURCEW(i)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
int WINAPI GetSystemMetrics(_In_ int)
HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
_Must_inspect_result_ _In_ ULONG Flags
#define IID_PPV_ARG(Itype, ppType)