From ffcc940a859a69ce0f5228bdd5b8a3146ebf0ff7 Mon Sep 17 00:00:00 2001 From: Antoine Beauchamp Date: Tue, 7 Feb 2023 08:38:45 -0500 Subject: [PATCH] Disabled old dll registering/unregistering code in favor of microsoft provided code as described in solution 2 of #113. --- src/shellextension/shellext.cpp | 54 +++++++++++++++++++++++++++++++-- src/shellextension/shellext.h | 2 ++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/shellextension/shellext.cpp b/src/shellextension/shellext.cpp index 74d7972a..d36c0ed5 100644 --- a/src/shellextension/shellext.cpp +++ b/src/shellextension/shellext.cpp @@ -64,6 +64,8 @@ //#include "PropertyManager.h" #include "SaUtils.h" +#include "reg.h" + #include //Declarations @@ -1111,7 +1113,7 @@ STDAPI DllCanUnloadNow(void) return S_FALSE; } -STDAPI DllRegisterServer(void) +STDAPI DllRegisterServer_DISABLED(void) { const std::string guid_str_tmp = GuidToString(SHELLANYTHING_SHELLEXTENSION_CLSID).c_str(); const char* guid_str = guid_str_tmp.c_str(); @@ -1234,7 +1236,7 @@ STDAPI DllRegisterServer(void) return S_OK; } -STDAPI DllUnregisterServer(void) +STDAPI DllUnregisterServer_DISABLED(void) { const std::string guid_str_tmp = GuidToString(SHELLANYTHING_SHELLEXTENSION_CLSID).c_str(); const char* guid_str = guid_str_tmp.c_str(); @@ -1313,6 +1315,54 @@ STDAPI DllUnregisterServer(void) return S_OK; } +STDAPI DllRegisterServer(void) +{ + HRESULT hr; + + wchar_t szModule[MAX_PATH]; + if (GetModuleFileNameW(g_hmodDll, szModule, ARRAYSIZE(szModule)) == 0) + { + hr = HRESULT_FROM_WIN32(GetLastError()); + return hr; + } + + // Register the component. + hr = RegisterInprocServer(szModule, SHELLANYTHING_SHELLEXTENSION_CLSID, + ShellExtensionClassNameW, + L"Apartment"); + if (SUCCEEDED(hr)) + { + // Register the context menu handler. The context menu handler is + // associated with the any file class. + // Control the visibility in QueryContextMenu + hr = RegisterShellExtContextMenuHandler(L"*", SHELLANYTHING_SHELLEXTENSION_CLSID, ShellExtensionClassNameW); + } + + return hr; +} + +STDAPI DllUnregisterServer(void) +{ + HRESULT hr = S_OK; + + wchar_t szModule[MAX_PATH]; + if (GetModuleFileNameW(g_hmodDll, szModule, ARRAYSIZE(szModule)) == 0) + { + hr = HRESULT_FROM_WIN32(GetLastError()); + return hr; + } + + // Unregister the component. + hr = UnregisterInprocServer(SHELLANYTHING_SHELLEXTENSION_CLSID); + if (SUCCEEDED(hr)) + { + // Unregister the context menu handler. + hr = UnregisterShellExtContextMenuHandler(L"*", SHELLANYTHING_SHELLEXTENSION_CLSID); + } + + return hr; +} + void InstallDefaultConfigurations(const std::string& config_dir) { std::string app_path = GetCurrentModulePathUtf8(); diff --git a/src/shellextension/shellext.h b/src/shellextension/shellext.h index 5ad00921..e96d976e 100644 --- a/src/shellextension/shellext.h +++ b/src/shellextension/shellext.h @@ -39,7 +39,9 @@ //Shell extension GUID static const GUID SHELLANYTHING_SHELLEXTENSION_CLSID = { 0xb0d35103, 0x86a1, 0x471c, { 0xa6, 0x53, 0xe1, 0x30, 0xe3, 0x43, 0x9a, 0x3b } }; //this is the CLSID (GUID) or our Shell Extension, {B0D35103-86A1-471C-A653-E130E3439A3B} static const char* ShellExtensionClassName = "ShellExtension.ShellAnything"; //no space in string +static const wchar_t* ShellExtensionClassNameW = L"ShellExtension.ShellAnything"; //no space in string static const char* ShellExtensionDescription = "ShellAnything Class"; +static const wchar_t* ShellExtensionDescriptionW = L"ShellAnything Class"; class CCriticalSection {