ReactOS 0.4.16-dev-814-g656a5dc
CZipFolder Class Reference

#include <CZipFolder.hpp>

Inheritance diagram for CZipFolder:
Collaboration diagram for CZipFolder:

Public Member Functions

 CZipFolder ()
 
 ~CZipFolder ()
 
void Close ()
 
 STDMETHODIMP_ (unzFile) getZip()
 
STDMETHODIMP GetDefaultSearchGUID (GUID *pguid)
 
STDMETHODIMP EnumSearches (IEnumExtraSearch **ppenum)
 
STDMETHODIMP GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
 
STDMETHODIMP GetDefaultColumnState (UINT iColumn, DWORD *pcsFlags)
 
STDMETHODIMP GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
 
BOOL _GetFileTimeString (LPFILETIME lpFileTime, PWSTR pwszResult, UINT cchResult)
 
STDMETHODIMP GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
 
STDMETHODIMP MapColumnToSCID (UINT column, SHCOLUMNID *pscid)
 
STDMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes)
 
STDMETHODIMP EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
 
STDMETHODIMP BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
STDMETHODIMP BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
 
STDMETHODIMP CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
 
STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
 
STDMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
 
STDMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut)
 
STDMETHODIMP GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
 
STDMETHODIMP SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut)
 
STDMETHODIMP GetCommandString (UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax)
 
STDMETHODIMP InvokeCommand (LPCMINVOKECOMMANDINFO pici)
 
STDMETHODIMP QueryContextMenu (HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
 
STDMETHODIMP Initialize (PCIDLIST_ABSOLUTE pidlFolder, LPDATAOBJECT pDataObj, HKEY hkeyProgID)
 
STDMETHODIMP GetCurFolder (PIDLIST_ABSOLUTE *pidl)
 
STDMETHODIMP Initialize (PCIDLIST_ABSOLUTE pidl)
 
STDMETHODIMP GetClassID (CLSID *lpClassId)
 
STDMETHODIMP Initialize (PCWSTR zipFile, PCWSTR zipDir, PCUIDLIST_ABSOLUTE curDir, PCUIDLIST_RELATIVE pidl)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
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)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 
- Public Member Functions inherited from IShellExtInit
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID)
 
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 
virtual STDMETHODIMP_ (unzFile) getZip() PURE
 

Static Public Member Functions

static HRESULT CALLBACK ZipFolderMenuCallback (IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static DWORD WINAPI s_ExtractProc (LPVOID arg)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Private Attributes

CStringW m_ZipFile
 
CStringW m_ZipDir
 
CComHeapPtr< ITEMIDLISTm_CurDir
 
unzFile m_UnzipFile
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0 , SHGDN_INFOLDER = 1 , SHGDN_FOREDITING = 0x1000 , SHGDN_INCLUDE_NONFILESYS = 0x2000 ,
  SHGDN_FORADDRESSBAR = 0x4000 , SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32 , SHCONTF_NONFOLDERS = 64 , SHCONTF_INCLUDEHIDDEN = 128 , SHCONTF_INIT_ON_FIRST_NEXT = 256 ,
  SHCONTF_NETPRINTERSRCH = 512 , SHCONTF_SHAREABLE = 1024 , SHCONTF_STORAGE = 2048 , SHCONTF_NAVIGATION_ENUM = 0x01000 ,
  SHCONTF_FASTITEMS = 0x02000 , SHCONTF_FLATLIST = 0x04000 , SHCONTF_ENABLE_ASYNC = 0x08000 , SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
typedef ULONG SFGAOF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IContextMenu
typedef IContextMenuLPCONTEXTMENU
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Public Types inherited from IShellExtInit
typedef IShellExtInitLPSHELLEXTINIT
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Static Public Attributes inherited from IContextMenu
static const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 

Detailed Description

Definition at line 40 of file CZipFolder.hpp.

Constructor & Destructor Documentation

◆ CZipFolder()

CZipFolder::CZipFolder ( )
inline

Definition at line 57 of file CZipFolder.hpp.

59 {
60 }
unzFile m_UnzipFile
Definition: CZipFolder.hpp:54
#define NULL
Definition: types.h:112

◆ ~CZipFolder()

CZipFolder::~CZipFolder ( )
inline

Definition at line 62 of file CZipFolder.hpp.

63 {
64 Close();
65 }
void Close()
Definition: CZipFolder.hpp:67

Member Function Documentation

◆ _GetFileTimeString()

BOOL CZipFolder::_GetFileTimeString ( LPFILETIME  lpFileTime,
PWSTR  pwszResult,
UINT  cchResult 
)
inline

Definition at line 117 of file CZipFolder.hpp.

118 {
119 SYSTEMTIME st;
120
121 if (!FileTimeToSystemTime(lpFileTime, &st))
122 return FALSE;
123
124 size_t cchRemaining = cchResult;
125 PWSTR pwszEnd = pwszResult;
126 int cchWritten = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, pwszEnd, cchRemaining);
127 if (cchWritten)
128 --cchWritten; // GetDateFormatW returns count with terminating zero
129 else
130 return FALSE;
131 cchRemaining -= cchWritten;
132 pwszEnd += cchWritten;
133
134 StringCchCopyExW(pwszEnd, cchRemaining, L" ", &pwszEnd, &cchRemaining, 0);
135
136 cchWritten = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, pwszEnd, cchRemaining);
137 if (cchWritten)
138 --cchWritten; // GetTimeFormatW returns count with terminating zero
139 else
140 return FALSE;
141
142 return TRUE;
143 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1093
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
Definition: strsafe.h:184
uint16_t * PWSTR
Definition: typedefs.h:56
#define DATE_SHORTDATE
Definition: winnls.h:198

Referenced by GetDetailsOf().

◆ BindToObject()

STDMETHODIMP CZipFolder::BindToObject ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
inline

Definition at line 240 of file CZipFolder.hpp.

241 {
242 if (riid == IID_IShellFolder)
243 {
244 CStringW newZipDir = m_ZipDir;
245 PCUIDLIST_RELATIVE curpidl = pidl;
246 while (curpidl->mkid.cb)
247 {
248 const ZipPidlEntry* zipEntry = _ZipFromIL(curpidl);
249 if (!zipEntry)
250 {
251 return E_FAIL;
252 }
253 newZipDir += zipEntry->Name;
254 newZipDir += L'/';
255
256 curpidl = ILGetNext(curpidl);
257 }
258 return ShellObjectCreatorInit<CZipFolder>(m_ZipFile, newZipDir, m_CurDir, pidl, riid, ppvOut);
259 }
260 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__, guid2string(riid));
261 return E_NOTIMPL;
262 }
WCHAR * guid2string(REFCLSID iid)
Definition: Debug.cpp:21
CStringW m_ZipFile
Definition: CZipFolder.hpp:51
CComHeapPtr< ITEMIDLIST > m_CurDir
Definition: CZipFolder.hpp:53
CStringW m_ZipDir
Definition: CZipFolder.hpp:52
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define __FUNCTION__
Definition: types.h:116
#define DbgPrint
Definition: hal.h:12
REFIID riid
Definition: atlbase.h:39
CAtlStringW CStringW
Definition: atlstr.h:130
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
WCHAR Name[1]
Definition: zippidl.hpp:28
const ZipPidlEntry * _ZipFromIL(LPCITEMIDLIST pidl)
Definition: zippidl.cpp:41

◆ BindToStorage()

STDMETHODIMP CZipFolder::BindToStorage ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
inline

Definition at line 263 of file CZipFolder.hpp.

264 {
266 return E_NOTIMPL;
267 }
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15

◆ Close()

void CZipFolder::Close ( )
inline

Definition at line 67 of file CZipFolder.hpp.

68 {
69 if (m_UnzipFile)
72 }
int ZEXPORT unzClose(unzFile file)
Definition: unzip.c:813

Referenced by ~CZipFolder().

◆ CompareIDs()

STDMETHODIMP CZipFolder::CompareIDs ( LPARAM  lParam,
PCUIDLIST_RELATIVE  pidl1,
PCUIDLIST_RELATIVE  pidl2 
)
inline

Implements IShellFolder.

Definition at line 268 of file CZipFolder.hpp.

269 {
270 const ZipPidlEntry* zipEntry1 = _ZipFromIL(pidl1);
271 const ZipPidlEntry* zipEntry2 = _ZipFromIL(pidl2);
272
273 if (!zipEntry1 || !zipEntry2)
274 return E_INVALIDARG;
275
276 int result = 0;
277 if (zipEntry1->ZipType != zipEntry2->ZipType)
278 result = zipEntry1->ZipType - zipEntry2->ZipType;
279 else
280 result = _wcsicmp(zipEntry1->Name, zipEntry2->Name);
281
282 if (!result && zipEntry1->ZipType == ZIP_PIDL_DIRECTORY)
283 {
284 PCUIDLIST_RELATIVE child1 = ILGetNext(pidl1);
285 PCUIDLIST_RELATIVE child2 = ILGetNext(pidl2);
286
287 if (child1->mkid.cb && child2->mkid.cb)
288 return CompareIDs(lParam, child1, child2);
289 else if (child1->mkid.cb)
290 result = 1;
291 else if (child2->mkid.cb)
292 result = -1;
293 }
294
296 }
STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
Definition: CZipFolder.hpp:268
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
GLuint64EXT * result
Definition: glext.h:11304
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:621
ZipPidlType ZipType
Definition: zippidl.hpp:22
@ ZIP_PIDL_DIRECTORY
Definition: zippidl.hpp:12

Referenced by CompareIDs().

◆ CreateViewObject()

STDMETHODIMP CZipFolder::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
LPVOID ppvOut 
)
inline

Definition at line 297 of file CZipFolder.hpp.

298 {
299 static const GUID UnknownIID = // {93F81976-6A0D-42C3-94DD-AA258A155470}
300 {0x93F81976, 0x6A0D, 0x42C3, {0x94, 0xDD, 0xAA, 0x25, 0x8A, 0x15, 0x54, 0x70}};
301 if (riid == IID_IShellView)
302 {
303 SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
304 CComPtr<IShellFolderViewCB> pcb;
305
306 HRESULT hr = _CFolderViewCB_CreateInstance(IID_PPV_ARG(IShellFolderViewCB, &pcb));
308 return hr;
309
310 sfvparams.psfvcb = pcb;
311 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
312
313 return hr;
314 }
315 else if (riid == IID_IExplorerCommandProvider)
316 {
318 }
319 else if (riid == IID_IContextMenu)
320 {
321 // Folder context menu
322 return QueryInterface(riid, ppvOut);
323 }
324 if (UnknownIID != riid)
325 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__, guid2string(riid));
326 return E_NOTIMPL;
327 }
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4759
HRESULT _CExplorerCommandProvider_CreateInstance(IContextMenu *zipObject, REFIID riid, LPVOID *ppvOut)
HRESULT _CFolderViewCB_CreateInstance(REFIID riid, LPVOID *ppvOut)
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
HRESULT hr
Definition: shlfolder.c:183
struct _SFV_CREATE SFV_CREATE
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1360
#define IID_PPV_ARG(Itype, ppType)

◆ EnumObjects()

STDMETHODIMP CZipFolder::EnumObjects ( HWND  hwndOwner,
DWORD  dwFlags,
LPENUMIDLIST *  ppEnumIDList 
)
inline

Definition at line 236 of file CZipFolder.hpp.

237 {
239 }
HRESULT _CEnumZipContents_CreateInstance(IZip *zip, DWORD flags, PCWSTR prefix, REFIID riid, LPVOID *ppvOut)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

◆ EnumSearches()

STDMETHODIMP CZipFolder::EnumSearches ( IEnumExtraSearch **  ppenum)
inline

Implements IShellFolder2.

Definition at line 91 of file CZipFolder.hpp.

92 {
94 return E_NOTIMPL;
95 }

◆ GetAttributesOf()

STDMETHODIMP CZipFolder::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
DWORD rgfInOut 
)
inline

Definition at line 328 of file CZipFolder.hpp.

329 {
330 if (!rgfInOut || !cidl || !apidl)
331 return E_INVALIDARG;
332
333 *rgfInOut = 0;
334
335 //static DWORD dwFileAttrs = SFGAO_STREAM | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_CANCOPY | SFGAO_CANMOVE;
336 //static DWORD dwFolderAttrs = SFGAO_FOLDER | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_STORAGE | SFGAO_CANCOPY | SFGAO_CANMOVE;
337 static DWORD dwFileAttrs = SFGAO_STREAM;
338 static DWORD dwFolderAttrs = SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE;
339
340
341 while (cidl > 0 && *apidl)
342 {
343 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
344
345 if (zipEntry)
346 {
347 if (zipEntry->ZipType == ZIP_PIDL_FILE)
348 *rgfInOut |= dwFileAttrs;
349 else
350 *rgfInOut |= dwFolderAttrs;
351 }
352 else
353 {
354 *rgfInOut = 0;
355 }
356
357 apidl++;
358 cidl--;
359 }
360
361 *rgfInOut &= ~SFGAO_VALIDATE;
362 return S_OK;
363 }
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:52
@ ZIP_PIDL_FILE
Definition: zippidl.hpp:13

◆ GetClassID()

STDMETHODIMP CZipFolder::GetClassID ( CLSID lpClassId)
inline

Implements IPersist.

Definition at line 625 of file CZipFolder.hpp.

626 {
628 return S_OK;
629 }
EXTERN_C const GUID CLSID_ZipFolderStorageHandler
Definition: precomp.h:28

◆ GetCommandString()

STDMETHODIMP CZipFolder::GetCommandString ( UINT_PTR  idCmd,
UINT  uFlags,
UINT pwReserved,
LPSTR  pszName,
UINT  cchMax 
)
inline

Implements IContextMenu.

Definition at line 480 of file CZipFolder.hpp.

481 {
482 if (idCmd != 0)
483 return E_INVALIDARG;
484
485 switch (uFlags)
486 {
487 case GCS_VERBA:
488 return StringCchCopyA(pszName, cchMax, EXTRACT_VERBA);
489 case GCS_VERBW:
490 return StringCchCopyW((PWSTR)pszName, cchMax, EXTRACT_VERBW);
491 case GCS_HELPTEXTA:
492 {
494 return StringCchCopyA(pszName, cchMax, helpText);
495 }
496 case GCS_HELPTEXTW:
497 {
499 return StringCchCopyW((PWSTR)pszName, cchMax, helpText);
500 }
501 case GCS_VALIDATEA:
502 case GCS_VALIDATEW:
503 return S_OK;
504 }
505
506 return E_INVALIDARG;
507 }
UINT cchMax
#define EXTRACT_VERBA
Definition: precomp.h:25
#define EXTRACT_VERBW
Definition: precomp.h:26
#define IDS_HELPTEXT
Definition: resource.h:74
UINT uFlags
Definition: api.c:59
CAtlStringA CStringA
Definition: atlstr.h:131
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581

◆ GetCurFolder()

STDMETHODIMP CZipFolder::GetCurFolder ( PIDLIST_ABSOLUTE pidl)
inline

Implements IPersistFolder2.

Definition at line 603 of file CZipFolder.hpp.

604 {
605 *pidl = ILClone(m_CurDir);
606 return S_OK;
607 }
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237

◆ GetDefaultColumn()

STDMETHODIMP CZipFolder::GetDefaultColumn ( DWORD  dwRes,
ULONG pSort,
ULONG pDisplay 
)
inline

Implements IShellFolder2.

Definition at line 96 of file CZipFolder.hpp.

97 {
98 if (pSort)
99 *pSort = COL_NAME;
100 if (pDisplay)
101 *pDisplay = COL_NAME;
102 return S_OK;
103 }
@ COL_NAME
Definition: CZipFolder.hpp:11

◆ GetDefaultColumnState()

STDMETHODIMP CZipFolder::GetDefaultColumnState ( UINT  iColumn,
DWORD pcsFlags 
)
inline

Implements IShellFolder2.

Definition at line 104 of file CZipFolder.hpp.

105 {
106 if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
107 return E_INVALIDARG;
108 *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
109 return S_OK;
110 }
static FolderViewColumns g_ColumnDefs[]
Definition: CZipFolder.hpp:28
#define _countof(array)
Definition: sndvol32.h:70
DWORD dwDefaultState
Definition: CFontExt.cpp:21

◆ GetDefaultSearchGUID()

STDMETHODIMP CZipFolder::GetDefaultSearchGUID ( GUID pguid)
inline

Implements IShellFolder2.

Definition at line 86 of file CZipFolder.hpp.

87 {
89 return E_NOTIMPL;
90 }

◆ GetDetailsEx()

STDMETHODIMP CZipFolder::GetDetailsEx ( PCUITEMID_CHILD  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)
inline

Implements IShellFolder2.

Definition at line 111 of file CZipFolder.hpp.

112 {
114 return E_NOTIMPL;
115 }

◆ GetDetailsOf()

STDMETHODIMP CZipFolder::GetDetailsOf ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)
inline

Implements IShellFolder2.

Definition at line 144 of file CZipFolder.hpp.

145 {
146 if (iColumn >= _countof(g_ColumnDefs))
147 return E_FAIL;
148
149 psd->cxChar = g_ColumnDefs[iColumn].cxChar;
150 psd->fmt = g_ColumnDefs[iColumn].fmt;
151
152 if (pidl == NULL)
153 {
154 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
155 }
156
157 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
158 if (curpidl->mkid.cb != 0)
159 {
160 DPRINT1("ERROR, unhandled PIDL!\n");
161 return E_FAIL;
162 }
163
164 const ZipPidlEntry* zipEntry = _ZipFromIL(pidl);
165 if (!zipEntry)
166 return E_INVALIDARG;
167
168 WCHAR Buffer[100];
169 bool isDir = zipEntry->ZipType == ZIP_PIDL_DIRECTORY;
170 switch (iColumn)
171 {
172 case COL_NAME:
173 return GetDisplayNameOf(pidl, 0, &psd->str);
174 case COL_TYPE:
175 {
176 SHFILEINFOW shfi;
178 ULONG_PTR firet = SHGetFileInfoW(zipEntry->Name, dwAttributes, &shfi, sizeof(shfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
179 if (!firet)
180 return E_FAIL;
181 return SHSetStrRet(&psd->str, shfi.szTypeName);
182 }
183 case COL_COMPRSIZE:
184 case COL_SIZE:
185 {
186 if (isDir)
187 return SHSetStrRet(&psd->str, L"");
188
189 ULONG64 Size = iColumn == COL_COMPRSIZE ? zipEntry->CompressedSize : zipEntry->UncompressedSize;
191 return E_FAIL;
192 return SHSetStrRet(&psd->str, Buffer);
193 }
194 case COL_PASSWORD:
195 if (isDir)
196 return SHSetStrRet(&psd->str, L"");
197 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), zipEntry->Password ? IDS_YES : IDS_NO);
198 case COL_RATIO:
199 {
200 if (isDir)
201 return SHSetStrRet(&psd->str, L"");
202
203 int ratio = 0;
204 if (zipEntry->UncompressedSize)
205 ratio = 100 - (int)((zipEntry->CompressedSize*100)/zipEntry->UncompressedSize);
206 StringCchPrintfW(Buffer, _countof(Buffer), L"%d%%", ratio);
207 return SHSetStrRet(&psd->str, Buffer);
208 }
209 case COL_DATE_MOD:
210 {
211 if (isDir)
212 return SHSetStrRet(&psd->str, L"");
213 FILETIME ftLocal;
214 DosDateTimeToFileTime((WORD)(zipEntry->DosDate>>16), (WORD)zipEntry->DosDate, &ftLocal);
215 if (!_GetFileTimeString(&ftLocal, Buffer, _countof(Buffer)))
216 return E_FAIL;
217 return SHSetStrRet(&psd->str, Buffer);
218 }
219 }
220
222 return E_NOTIMPL;
223 }
@ COL_COMPRSIZE
Definition: CZipFolder.hpp:13
@ COL_PASSWORD
Definition: CZipFolder.hpp:14
@ COL_RATIO
Definition: CZipFolder.hpp:16
@ COL_DATE_MOD
Definition: CZipFolder.hpp:17
@ COL_TYPE
Definition: CZipFolder.hpp:12
@ COL_SIZE
Definition: CZipFolder.hpp:15
#define IDS_YES
Definition: resource.h:16
#define IDS_NO
Definition: resource.h:17
#define DPRINT1
Definition: precomp.h:8
Definition: bufpool.h:45
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
Definition: CZipFolder.hpp:439
BOOL _GetFileTimeString(LPFILETIME lpFileTime, PWSTR pwszResult, UINT cchResult)
Definition: CZipFolder.hpp:117
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned __int64 ULONG64
Definition: imports.h:198
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_TYPENAME
Definition: shellapi.h:168
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:182
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRRET str
Definition: shtypes.idl:108
ULONG64 UncompressedSize
Definition: zippidl.hpp:25
BOOLEAN Password
Definition: zippidl.hpp:21
ULONG DosDate
Definition: zippidl.hpp:26
ULONG64 CompressedSize
Definition: zippidl.hpp:24
WCHAR szTypeName[80]
Definition: shellapi.h:377
uint32_t ULONG_PTR
Definition: typedefs.h:65
DWORD dwAttributes
Definition: vdmdbg.h:34
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ GetDisplayNameOf()

STDMETHODIMP CZipFolder::GetDisplayNameOf ( PCUITEMID_CHILD  pidl,
DWORD  dwFlags,
LPSTRRET  strRet 
)
inline

Definition at line 439 of file CZipFolder.hpp.

440 {
441 if (!pidl)
442 return S_FALSE;
443
444 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
445 if (curpidl->mkid.cb != 0)
446 {
447 DPRINT1("ERROR, unhandled PIDL!\n");
448 return E_FAIL;
449 }
450
451 const ZipPidlEntry* zipEntry = _ZipFromIL(pidl);
452 if (!zipEntry)
453 return E_FAIL;
454
455 return SHSetStrRet(strRet, zipEntry->Name);
456 }
#define S_FALSE
Definition: winerror.h:2357

Referenced by GetDetailsOf().

◆ GetUIObjectOf()

STDMETHODIMP CZipFolder::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
LPVOID ppvOut 
)
inline

Definition at line 402 of file CZipFolder.hpp.

403 {
404 if ((riid == IID_IExtractIconA || riid == IID_IExtractIconW) && cidl == 1)
405 {
406 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
407 if (zipEntry)
408 {
410 return SHCreateFileExtractIconW(zipEntry->Name, dwAttributes, riid, ppvOut);
411 }
412 }
413 else if (riid == IID_IContextMenu && cidl >= 0)
414 {
415 // Context menu of an object inside the zip
416 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
417 if (zipEntry)
418 {
419 HKEY keys[1] = {0};
420 int nkeys = 0;
421 if (zipEntry->ZipType == ZIP_PIDL_DIRECTORY)
422 {
424 if (res != ERROR_SUCCESS)
425 return E_FAIL;
426 nkeys++;
427 }
428 return CDefFolderMenu_Create2(NULL, hwndOwner, cidl, apidl, this, ZipFolderMenuCallback, nkeys, keys, (IContextMenu**)ppvOut);
429 }
430 }
431 else if (riid == IID_IDataObject && cidl >= 1)
432 {
433 return CIDLData_CreateFromIDArray(m_CurDir, cidl, apidl, (IDataObject**)ppvOut);
434 }
435
436 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__ , guid2string(riid));
437 return E_NOINTERFACE;
438 }
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
static HRESULT CALLBACK ZipFolderMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CZipFolder.hpp:364
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
GLuint res
Definition: glext.h:9613
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
const GUID IID_IDataObject
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2418
#define E_NOINTERFACE
Definition: winerror.h:2364
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

◆ Initialize() [1/3]

STDMETHODIMP CZipFolder::Initialize ( PCIDLIST_ABSOLUTE  pidl)
inline

Implements IPersistFolder.

Definition at line 610 of file CZipFolder.hpp.

611 {
612 WCHAR tmpPath[MAX_PATH];
613
614 if (SHGetPathFromIDListW(pidl, tmpPath))
615 {
616 m_ZipFile = tmpPath;
617 m_CurDir.Attach(ILClone(pidl));
618 return S_OK;
619 }
620 DbgPrint("%s() => Unable to parse pidl\n", __FUNCTION__);
621 return E_INVALIDARG;
622 }
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454

◆ Initialize() [2/3]

STDMETHODIMP CZipFolder::Initialize ( PCIDLIST_ABSOLUTE  pidlFolder,
LPDATAOBJECT  pDataObj,
HKEY  hkeyProgID 
)
inline

Definition at line 547 of file CZipFolder.hpp.

548 {
549 FORMATETC etc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
550 STGMEDIUM stg;
551
552 HRESULT hr = pDataObj->GetData(&etc, &stg);
554 {
555 return hr;
556 }
557 hr = E_FAIL;
558 HDROP hdrop = (HDROP)GlobalLock(stg.hGlobal);
559 if (hdrop)
560 {
561 UINT uNumFiles = DragQueryFileW(hdrop, 0xFFFFFFFF, NULL, 0);
562 if (uNumFiles == 1)
563 {
564 WCHAR szFile[MAX_PATH * 2];
565 if (DragQueryFileW(hdrop, 0, szFile, _countof(szFile)))
566 {
567 CComHeapPtr<ITEMIDLIST> pidl;
568 hr = SHParseDisplayName(szFile, NULL, &pidl, 0, NULL);
570 {
571 hr = Initialize(pidl);
572 }
573 }
574 else
575 {
576 DbgPrint("Failed to query the file.\r\n");
577 }
578 }
579 else
580 {
581 DbgPrint("Invalid number of files: %d\r\n", uNumFiles);
582 }
583 GlobalUnlock(stg.hGlobal);
584 }
585 else
586 {
587 DbgPrint("Could not lock stg.hGlobal\r\n");
588 }
589 ReleaseStgMedium(&stg);
590 return hr;
591
592 }
#define CF_HDROP
Definition: constants.h:410
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
unsigned int UINT
Definition: ndis.h:50
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1506
static void Initialize()
Definition: xlate.c:212

◆ Initialize() [3/3]

STDMETHODIMP CZipFolder::Initialize ( PCWSTR  zipFile,
PCWSTR  zipDir,
PCUIDLIST_ABSOLUTE  curDir,
PCUIDLIST_RELATIVE  pidl 
)
inline

Definition at line 632 of file CZipFolder.hpp.

633 {
635 m_ZipDir = zipDir;
636
637 m_CurDir.Attach(ILCombine(curDir, pidl));
638 return S_OK;
639 }
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:816
voidp zipFile
Definition: zip.h:69

◆ InvokeCommand()

STDMETHODIMP CZipFolder::InvokeCommand ( LPCMINVOKECOMMANDINFO  pici)
inline

Implements IContextMenu.

Definition at line 508 of file CZipFolder.hpp.

509 {
510 if (!pici || (pici->cbSize != sizeof(CMINVOKECOMMANDINFO) && pici->cbSize != sizeof(CMINVOKECOMMANDINFOEX)))
511 return E_INVALIDARG;
512
513 if (pici->lpVerb == MAKEINTRESOURCEA(0) || (HIWORD(pici->lpVerb) && !strcmp(pici->lpVerb, EXTRACT_VERBA)))
514 {
515 BSTR ZipFile = m_ZipFile.AllocSysString();
517
518 DWORD tid;
520 if (hThread)
521 {
523 return S_OK;
524 }
525 }
526 return E_INVALIDARG;
527 }
LONG g_ModuleRefCnt
Definition: ACPPage.cpp:13
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define InterlockedIncrement
Definition: armddk.h:53
static DWORD WINAPI s_ExtractProc(LPVOID arg)
Definition: CZipFolder.hpp:640
#define CloseHandle
Definition: compat.h:739
OLECHAR * BSTR
Definition: compat.h:2293
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)
Definition: thread.c:137
struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
static TfClientId tid
HANDLE hThread
Definition: wizard.c:28
#define HIWORD(l)
Definition: typedefs.h:247

◆ MapColumnToSCID()

STDMETHODIMP CZipFolder::MapColumnToSCID ( UINT  column,
SHCOLUMNID pscid 
)
inline

Implements IShellFolder2.

Definition at line 224 of file CZipFolder.hpp.

225 {
227 return E_NOTIMPL;
228 }

◆ ParseDisplayName()

STDMETHODIMP CZipFolder::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbc,
LPOLESTR  lpszDisplayName,
ULONG pchEaten,
PIDLIST_RELATIVE ppidl,
ULONG pdwAttributes 
)
inline

Implements IShellFolder.

Definition at line 231 of file CZipFolder.hpp.

232 {
234 return E_NOTIMPL;
235 }

◆ QueryContextMenu()

STDMETHODIMP CZipFolder::QueryContextMenu ( HMENU  hmenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
inline

Implements IContextMenu.

Definition at line 528 of file CZipFolder.hpp.

529 {
530 UINT idCmd = idCmdFirst;
531
532 if (!(uFlags & CMF_DEFAULTONLY))
533 {
535
536 if (indexMenu)
537 {
538 InsertMenuW(hmenu, indexMenu++, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
539 }
540 InsertMenuW(hmenu, indexMenu++, MF_BYPOSITION | MF_STRING, idCmd++, menuText);
541 }
542
543 return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, idCmd - idCmdFirst);
544 }
#define IDS_MENUITEM
Definition: resource.h:73
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
static HMENU hmenu
Definition: win.c:66
#define FACILITY_NULL
Definition: winerror.h:22
#define SEVERITY_SUCCESS
Definition: winerror.h:64
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define MF_STRING
Definition: winuser.h:138
#define MF_SEPARATOR
Definition: winuser.h:137
#define MF_BYPOSITION
Definition: winuser.h:203
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

◆ s_ExtractProc()

static DWORD WINAPI CZipFolder::s_ExtractProc ( LPVOID  arg)
inlinestatic

Definition at line 640 of file CZipFolder.hpp.

641 {
642 CComBSTR ZipFile;
643 ZipFile.Attach((BSTR)arg);
644
645 _CZipExtract_runWizard(ZipFile);
646
648 return 0;
649 }
void _CZipExtract_runWizard(PCWSTR Filename)
#define InterlockedDecrement
Definition: armddk.h:52

Referenced by InvokeCommand().

◆ SetNameOf()

STDMETHODIMP CZipFolder::SetNameOf ( HWND  hwndOwner,
PCUITEMID_CHILD  pidl,
LPCOLESTR  lpName,
DWORD  dwFlags,
PITEMID_CHILD pPidlOut 
)
inline

Implements IShellFolder.

Definition at line 457 of file CZipFolder.hpp.

458 {
460 return E_NOTIMPL;
461 }

◆ STDMETHODIMP_()

CZipFolder::STDMETHODIMP_ ( unzFile  )
inlinevirtual

Reimplemented from IZip.

Definition at line 75 of file CZipFolder.hpp.

76 {
77 if (!m_UnzipFile)
78 {
80 }
81
82 return m_UnzipFile;
83 }
zlib_filefunc64_def g_FFunc
Definition: zipfldr.cpp:44
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
Definition: unzip.c:783

◆ ZipFolderMenuCallback()

static HRESULT CALLBACK CZipFolder::ZipFolderMenuCallback ( IShellFolder psf,
HWND  hwnd,
IDataObject pdtobj,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinestatic

Definition at line 364 of file CZipFolder.hpp.

366 {
367 switch (uMsg)
368 {
370 {
371 CComQIIDPtr<I_ID(IContextMenu)> spContextMenu(psf);
372 if (!spContextMenu)
373 return E_NOINTERFACE;
374
375 QCMINFO *pqcminfo = (QCMINFO *)lParam;
376 HRESULT hr = spContextMenu->QueryContextMenu(pqcminfo->hmenu,
377 pqcminfo->indexMenu,
378 pqcminfo->idCmdFirst,
379 pqcminfo->idCmdLast,
380 CMF_NORMAL);
382 return hr;
383
384 pqcminfo->idCmdFirst += HRESULT_CODE(hr);
385 return S_OK;
386 }
388 {
389 CComQIIDPtr<I_ID(IContextMenu)> spContextMenu(psf);
390 if (!spContextMenu)
391 return E_NOINTERFACE;
392
393 CMINVOKECOMMANDINFO ici = { sizeof(ici) };
394 ici.lpVerb = MAKEINTRESOURCEA(wParam);
395 return spContextMenu->InvokeCommand(&ici);
396 }
397 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
398 return S_FALSE;
399 }
400 return E_NOTIMPL;
401 }
#define I_ID(Itype)
Definition: atlcomcli.h:215
WPARAM wParam
Definition: combotst.c:138
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
HMENU hmenu
Definition: shlobj.h:1390
UINT idCmdLast
Definition: shlobj.h:1393
UINT idCmdFirst
Definition: shlobj.h:1392
UINT indexMenu
Definition: shlobj.h:1391
#define HRESULT_CODE(hr)
Definition: winerror.h:76

Referenced by GetUIObjectOf().

Member Data Documentation

◆ m_CurDir

CComHeapPtr<ITEMIDLIST> CZipFolder::m_CurDir
private

Definition at line 53 of file CZipFolder.hpp.

Referenced by BindToObject(), GetCurFolder(), GetUIObjectOf(), and Initialize().

◆ m_UnzipFile

unzFile CZipFolder::m_UnzipFile
private

Definition at line 54 of file CZipFolder.hpp.

Referenced by Close(), and STDMETHODIMP_().

◆ m_ZipDir

CStringW CZipFolder::m_ZipDir
private

Definition at line 52 of file CZipFolder.hpp.

Referenced by BindToObject(), EnumObjects(), and Initialize().

◆ m_ZipFile

CStringW CZipFolder::m_ZipFile
private

Definition at line 51 of file CZipFolder.hpp.

Referenced by BindToObject(), Initialize(), InvokeCommand(), and STDMETHODIMP_().


The documentation for this class was generated from the following file: