2 * PROJECT: ReactOS Zip Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: zipfldr entrypoint
5 * COPYRIGHT: Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
10 HMODULE g_hModule
= NULL
;
11 LONG g_ModuleRefCnt
= 0;
15 DEFINE_GUID(CLSID_ZipFolderStorageHandler
, 0xe88dcce0, 0xb7b3, 0x11d1, 0xa9, 0xf0, 0x00, 0xaa, 0x00, 0x60, 0xfa, 0x31);
16 DEFINE_GUID(CLSID_ZipFolderSendTo
, 0x888dca60, 0xfc0a, 0x11cf, 0x8f, 0x0f, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
17 DEFINE_GUID(CLSID_ZipFolderContextMenu
, 0xb8cdcb65, 0xb1bf, 0x4b42, 0x94, 0x28, 0x1d, 0xfd, 0xb7, 0xee, 0x92, 0xaf);
18 DEFINE_GUID(CLSID_ZipFolderRightDragHandler
,0xbd472f60, 0x27fa, 0x11cf, 0xb8, 0xb4, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
19 DEFINE_GUID(CLSID_ZipFolderDropHandler
, 0xed9d80b9, 0xd157, 0x457b, 0x91, 0x92, 0x0e, 0x72, 0x80, 0x31, 0x3b, 0xf0);
21 /* IExplorerCommand: Extract All */
22 DEFINE_GUID(CLSID_ZipFolderExtractAllCommand
, 0xc3d9647b, 0x8fd9, 0x4ee6, 0x8b, 0xc7, 0x82, 0x7, 0x80, 0x9, 0x10, 0x5a);
25 class CZipFldrModule
: public CComModule
31 BEGIN_OBJECT_MAP(ObjectMap
)
32 OBJECT_ENTRY(CLSID_ZipFolderStorageHandler
, CZipFolder
)
33 OBJECT_ENTRY(CLSID_ZipFolderContextMenu
, CZipFolder
)
34 OBJECT_ENTRY(CLSID_ZipFolderSendTo
, CSendToZip
)
37 CZipFldrModule gModule
;
40 #include "minizip/ioapi.h"
41 #include "minizip/iowin32.h"
43 zlib_filefunc64_def g_FFunc
;
45 static void init_zlib()
47 fill_win32_filefunc64W(&g_FFunc
);
51 BOOL WINAPI
DllMain(HINSTANCE hInstance
, DWORD dwReason
, LPVOID lpReserved
)
55 case DLL_PROCESS_ATTACH
:
56 DisableThreadLibraryCalls(hInstance
);
57 g_hModule
= hInstance
;
58 gModule
.Init(ObjectMap
, hInstance
, NULL
);
66 STDAPI
DllCanUnloadNow()
70 return gModule
.DllCanUnloadNow();
73 STDAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
75 return gModule
.DllGetClassObject(rclsid
, riid
, ppv
);
78 STDAPI
DllRegisterServer()
82 hr
= gModule
.DllRegisterServer(FALSE
);
83 if (FAILED_UNEXPECTEDLY(hr
))
86 hr
= gModule
.UpdateRegistryFromResource(IDR_ZIPFLDR
, TRUE
, NULL
);
93 STDAPI
DllUnregisterServer()
97 hr
= gModule
.DllUnregisterServer(FALSE
);
98 if (FAILED_UNEXPECTEDLY(hr
))
101 hr
= gModule
.UpdateRegistryFromResource(IDR_ZIPFLDR
, FALSE
, NULL
);
112 IN HINSTANCE hInstance
,
113 IN LPCSTR lpStringArg
,
116 CStringW path
= lpStringArg
;
117 PathRemoveBlanksW(path
.GetBuffer());
118 path
.ReleaseBuffer();
119 path
= L
"\"" + path
+ L
"\"";
120 ShellExecuteW(NULL
, L
"open", L
"explorer.exe", path
.GetString(), NULL
, SW_SHOWNORMAL
);