73 size_t cchRemaining = cchResult;
74 PWSTR pwszEnd = pwszResult;
80 cchRemaining -= cchWritten;
81 pwszEnd += cchWritten;
114 CDataObjectHIDA cida(pDataObj);
115 if (!cida || cida->cidl <= 0)
170 if (
info.size_file_extra > 0)
222 DPRINT1(
"Failed to replace file\n");
234 if (
info->size_file_extra > 0)
240 DPRINT1(
"Cannot get extra fields\n");
247 DPRINT1(
"Cannot open current file\n");
301 if (curpidl->mkid.cb != 0)
303 DPRINT1(
"ERROR, unhandled PIDL!\n");
330 return SHSetStrRet(&psd->
str,
L"");
339 return SHSetStrRet(&psd->
str,
L"");
344 return SHSetStrRet(&psd->
str,
L"");
355 return SHSetStrRet(&psd->
str,
L"");
370 if (
riid == IID_IShellFolder)
374 while (curpidl->mkid.cb)
381 newZipDir += zipEntry->
Name;
397 if (!zipEntry1 || !zipEntry2)
411 if (child1->mkid.cb && child2->mkid.cb)
413 else if (child1->mkid.cb)
415 else if (child2->mkid.cb)
426 static const GUID UnknownIID =
427 {0x93F81976, 0x6A0D, 0x42C3, {0x94, 0xDD, 0xAA, 0x25, 0x8A, 0x15, 0x54, 0x70}};
428 if (
riid == IID_IShellView)
442 else if (
riid == IID_IExplorerCommandProvider)
446 else if (
riid == IID_IContextMenu)
451 else if (
riid == IID_IDropTarget)
457 if (UnknownIID !=
riid)
464 if (!rgfInOut || !cidl || !apidl)
471 static DWORD dwFileAttrs = SFGAO_CANDELETE | SFGAO_STREAM;
472 static DWORD dwFolderAttrs = SFGAO_CANDELETE | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE | SFGAO_DROPTARGET;
474 while (cidl > 0 && *apidl)
481 *rgfInOut |= dwFileAttrs;
483 *rgfInOut |= dwFolderAttrs;
494 *rgfInOut &= ~SFGAO_FILESYSTEM;
495 *rgfInOut &= ~SFGAO_VALIDATE;
551 return spContextMenu->InvokeCommand(&ici);
569 if ((
riid == IID_IExtractIconA ||
riid == IID_IExtractIconW) && cidl == 1)
578 else if (
riid == IID_IContextMenu && cidl >= 0)
600 else if (
riid == IID_IDropTarget)
617 if (curpidl->mkid.cb != 0)
619 DPRINT1(
"ERROR, unhandled PIDL!\n");
627 return SHSetStrRet(strRet, zipEntry->
Name);
690 UINT idCmd = idCmdFirst;
692 if (!(
uFlags & CMF_DEFAULTONLY))
706 FORMATETC etc = {
CF_HDROP,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
709 HRESULT hr = pDataObj->GetData(&etc, &stg);
732 DbgPrint(
"Failed to query the file.\r\n");
737 DbgPrint(
"Invalid number of files: %d\r\n", uNumFiles);
743 DbgPrint(
"Could not lock stg.hGlobal\r\n");
797 *ppszFileName =
NULL;
830 FORMATETC fe = {
CF_HDROP,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
849 for (
UINT i = 0;
i < fileCount;
i++)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
HRESULT _CExplorerCommandProvider_CreateInstance(IContextMenu *zipObject, REFIID riid, LPVOID *ppvOut)
HRESULT _CFolderViewCB_CreateInstance(REFIID riid, LPVOID *ppvOut)
static FolderViewColumns g_ColumnDefs[]
static FolderViewColumns g_ColumnDefs[]
WCHAR * guid2string(REFCLSID iid)
#define InterlockedIncrement
#define InterlockedDecrement
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
POSITION AddTail(INARGTYPE element)
POSITION GetHeadPosition() const
E & GetNext(_Inout_ POSITION &pos)
bool IsEmpty() const noexcept
int GetLength() const noexcept
CStringT Right(int nCount) const
int Replace(PCXSTR pszOld, PCXSTR pszNew)
CStringT Left(int nCount) const
BSTR AllocSysString() const
static BOOL runThread(CZipCreator *pCreator)
static CZipCreator * DoCreate(PCWSTR pszExistingZip=NULL, PCWSTR pszTargetDir=NULL)
void SetNotifyPidl(PCIDLIST_ABSOLUTE pidl)
virtual void DoAddItem(PCWSTR pszFile)
HRESULT DeleteItems(CComPtr< IDataObject > pDataObj)
STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember) override
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
HRESULT CopyZipEntry(unzFile uf, zipFile zf, unz_file_info64 *info, LPCSTR nameA)
STDMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
STDMETHODIMP IsDirty() override
STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName) override
STDMETHODIMP DragLeave() override
STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName) override
static HRESULT CALLBACK ZipFolderMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
STDMETHODIMP QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
HRESULT DoDeleteItems(CComPtr< IDataObject > pDataObj)
STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode) override
STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO pici) override
CComHeapPtr< ITEMIDLIST > m_CurDir
STDMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax) override
CComPtr< IDataObject > m_pDataObj
HRESULT Initialize(PCWSTR zipFile, PCWSTR zipDir, PCUIDLIST_ABSOLUTE curDir, PCUIDLIST_RELATIVE pidl)
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
static DWORD WINAPI s_ExtractProc(LPVOID arg)
STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
BOOL _GetFileTimeString(LPFILETIME lpFileTime, PWSTR pwszResult, UINT cchResult)
STDMETHODIMP GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define DFM_GETDEFSTATICID
#define DFM_INVOKECOMMANDEX
#define DFM_MERGECONTEXTMENU
#define DFM_INVOKECOMMAND
zlib_filefunc64_def g_FFunc
#define MINIZIP_UTF8_FLAG
#define IDS_CONFIRMDELETE_TEXT
#define IDS_COL_COMPRSIZE
#define IDS_CANTDELETEFILE
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
#define FILE_ATTRIBUTE_NORMAL
#define Z_DEFAULT_STRATEGY
#define Z_DEFAULT_COMPRESSION
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI ReplaceFileW(LPCWSTR lpReplacedFileName, LPCWSTR lpReplacementFileName, LPCWSTR lpBackupFileName, DWORD dwReplaceFlags, LPVOID lpExclude, LPVOID lpReserved)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
#define IS_INTRESOURCE(x)
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
#define FAILED_UNEXPECTEDLY
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
#define MAKE_HRESULT(sev, fac, code)
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
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
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
const DWORD DROPEFFECT_COPY
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
void fill_win32_filefunc64W(zlib_filefunc64_def *pzlib_filefunc_def)
static ERESOURCE GlobalLock
static char szTempPath[MAX_PATH]
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
unsigned __int3264 UINT_PTR
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define FILE_ATTRIBUTE_DIRECTORY
#define LOCALE_USER_DEFAULT
interface IBindCtx * LPBC
interface IDataObject * LPDATAOBJECT
const GUID IID_IDataObject
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
static WCHAR szFilePath[]
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
#define SHGFI_USEFILEATTRIBUTES
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
#define MAKE_COMPARE_HRESULT(x)
#define DFM_WM_INITMENUPOPUP
struct _SFV_CREATE SFV_CREATE
#define FCIDM_SHVIEW_INSERTLINK
#define FCIDM_SHVIEW_INSERT
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
static CStringA GetUtf8Name(PCSTR originalName, const BYTE *extraField, DWORD extraFieldLen)
IShellFolderViewCB * psfvcb
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzGoToFirstFile(unzFile file)
int ZEXPORT unzOpenCurrentFile(unzFile file)
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
int ZEXPORT unzCloseCurrentFile(unzFile file)
int ZEXPORT unzGoToNextFile(unzFile file)
int ZEXPORT unzClose(unzFile file)
WORD WORD PSZ PSZ pszFileName
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
#define HKEY_CLASSES_ROOT
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MAKEINTRESOURCEA(i)
#define MAKEINTRESOURCEW(i)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define IID_PPV_ARG(Itype, ppType)
int ZEXPORT zipClose(zipFile file, const char *global_comment)
zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zipcharpc *globalcomment, zlib_filefunc64_def *pzlib_filefunc_def)
int ZEXPORT zipWriteInFileInZip(zipFile file, const void *buf, unsigned int len)
int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, const void *extrafield_local, uInt size_extrafield_local, const void *extrafield_global, uInt size_extrafield_global, const char *comment, int method, int level, int raw, int windowBits, int memLevel, int strategy, const char *password, uLong crcForCrypting, int zip64)
int ZEXPORT zipCloseFileInZip(zipFile file)
#define APPEND_STATUS_CREATE
const ZipPidlEntry * _ZipFromIL(LPCITEMIDLIST pidl)