From d56d9c1aaa6107394f6bc13570de8ca08a917b80 Mon Sep 17 00:00:00 2001 From: Baruch Rutman Date: Sun, 10 Feb 2019 18:57:43 +0200 Subject: [PATCH] [CRYPTEXT] Make extension localizable, and add an icon for certificate files (#1347) - Localize error message and shell file extension description. - Added Hebrew resources. - Added Icon. The icon is the Tango icon named "certificate". If anybody has a idea for more fitting icon please recommend it. Follow up of #1343 CORE-15736 --- boot/bootdata/hivecls.inf | 3 +++ dll/shellext/cryptext/CMakeLists.txt | 1 + dll/shellext/cryptext/cryptext.c | 17 ++++++++++++++--- dll/shellext/cryptext/cryptext.rc | 22 ++++++++++++++++++++++ dll/shellext/cryptext/lang/en-US.rc | 14 ++++++++++++++ dll/shellext/cryptext/lang/he-IL.rc | 14 ++++++++++++++ dll/shellext/cryptext/precomp.h | 2 +- dll/shellext/cryptext/res/cerfile.ico | Bin 0 -> 9662 bytes dll/shellext/cryptext/resource.h | 2 ++ 9 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 dll/shellext/cryptext/cryptext.rc create mode 100644 dll/shellext/cryptext/lang/en-US.rc create mode 100644 dll/shellext/cryptext/lang/he-IL.rc create mode 100644 dll/shellext/cryptext/res/cerfile.ico create mode 100644 dll/shellext/cryptext/resource.h diff --git a/boot/bootdata/hivecls.inf b/boot/bootdata/hivecls.inf index 37d81fd4b12..1b38c910e56 100644 --- a/boot/bootdata/hivecls.inf +++ b/boot/bootdata/hivecls.inf @@ -78,6 +78,9 @@ HKCR,"batfile\shell\open\command","",0x00000000,"""%1"" %*" ; Certificate HKCR,".cer","",0x00000000,"cerfile" +HKCR,"cerfile","",0x00000000,"Certificate File" +HKCR,"cerfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\cryptext.dll,-101" +HKCR,"cerfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\cryptext.dll,-1" HKCR,"cerfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe cryptext.dll,CryptExtOpenCER %1" ; ReactOS Command Script Files diff --git a/dll/shellext/cryptext/CMakeLists.txt b/dll/shellext/cryptext/CMakeLists.txt index faa2301ce9a..8cd10f4a431 100644 --- a/dll/shellext/cryptext/CMakeLists.txt +++ b/dll/shellext/cryptext/CMakeLists.txt @@ -8,6 +8,7 @@ list(APPEND SOURCE add_library(cryptext SHARED ${SOURCE} cryptext.spec + cryptext.rc ${CMAKE_CURRENT_BINARY_DIR}/cryptext.def) set_module_type(cryptext win32dll UNICODE) diff --git a/dll/shellext/cryptext/cryptext.c b/dll/shellext/cryptext/cryptext.c index 8825f41b91b..ae5e40b813e 100644 --- a/dll/shellext/cryptext/cryptext.c +++ b/dll/shellext/cryptext/cryptext.c @@ -7,12 +7,14 @@ #include "precomp.h" +HINSTANCE g_hInstance; BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: + g_hInstance = hInstance; DisableThreadLibraryCalls(hInstance); break; } @@ -29,15 +31,24 @@ VOID WINAPI CryptExtOpenCERW(HWND hWnd, HINSTANCE hInst, LPCWSTR file, DWORD nCm if (CryptQueryObject(CERT_QUERY_OBJECT_FILE, file, CERT_QUERY_CONTENT_FLAG_CERT, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL, (CONST VOID**)&pvContext)) { - CRYPTUI_VIEWCERTIFICATE_STRUCT CertViewInfo = {0}; + CRYPTUI_VIEWCERTIFICATE_STRUCTW CertViewInfo = {0}; CertViewInfo.dwSize = sizeof(CertViewInfo); CertViewInfo.pCertContext = pvContext; - CryptUIDlgViewCertificate(&CertViewInfo, NULL); + CryptUIDlgViewCertificateW(&CertViewInfo, NULL); CertFreeCertificateContext(pvContext); } else { - MessageBoxW(NULL, L"This is not a valid certificate", NULL, MB_OK); + WCHAR Message[MAX_PATH]; + + if (LoadStringW(g_hInstance, IDS_INVALIDFILE, Message, MAX_PATH)) + { + MessageBoxW(NULL, Message, NULL, MB_OK); + } + else + { + MessageBoxW(NULL, L"This is not a valid certificate file.", NULL, MB_OK); + } } } } diff --git a/dll/shellext/cryptext/cryptext.rc b/dll/shellext/cryptext/cryptext.rc new file mode 100644 index 00000000000..e12afbdb4e5 --- /dev/null +++ b/dll/shellext/cryptext/cryptext.rc @@ -0,0 +1,22 @@ +#include +#include + +#include "resource.h" + +1 ICON "res/cerfile.ico" + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS CryptExt Shell Extension" +#define REACTOS_STR_INTERNAL_NAME "cryptext" +#define REACTOS_STR_ORIGINAL_FILENAME "cryptext.dll" +#include + +/* UTF-8 */ +#pragma code_page(65001) + +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif diff --git a/dll/shellext/cryptext/lang/en-US.rc b/dll/shellext/cryptext/lang/en-US.rc new file mode 100644 index 00000000000..5aeae89dbff --- /dev/null +++ b/dll/shellext/cryptext/lang/en-US.rc @@ -0,0 +1,14 @@ +/* + * PROJECT: ReactOS CryptExt Shell Extension + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: English (United States) resource translation + * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + */ + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE +BEGIN + IDS_INVALIDFILE "This is not a valid certificate file." + IDS_CER_FILE "Certificate File" +END diff --git a/dll/shellext/cryptext/lang/he-IL.rc b/dll/shellext/cryptext/lang/he-IL.rc new file mode 100644 index 00000000000..5d821eb5a2b --- /dev/null +++ b/dll/shellext/cryptext/lang/he-IL.rc @@ -0,0 +1,14 @@ +/* + * PROJECT: ReactOS CryptExt Shell Extension + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: Hebrew resource translation + * COPYRIGHT: Copyright 2019 Baruch Rutman (peterooch at gmail dot com) + */ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_INVALIDFILE "קובץ זה הוא לא קובץ אישורי הצפנה תקין." + IDS_CER_FILE "קובץ אישורי הצפנה" +END diff --git a/dll/shellext/cryptext/precomp.h b/dll/shellext/cryptext/precomp.h index e9df5d3270b..21067f510be 100644 --- a/dll/shellext/cryptext/precomp.h +++ b/dll/shellext/cryptext/precomp.h @@ -13,6 +13,6 @@ #include #include #include - +#include "resource.h" #endif /* CRYPTEXT_PRECOMP_H */ diff --git a/dll/shellext/cryptext/res/cerfile.ico b/dll/shellext/cryptext/res/cerfile.ico new file mode 100644 index 0000000000000000000000000000000000000000..362fb40f88ae7e7e2a14dc25c90fc11ea5fd8839 GIT binary patch literal 9662 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 Ks`$NS-v1Y9S6%V| literal 0 HcmV?d00001 diff --git a/dll/shellext/cryptext/resource.h b/dll/shellext/cryptext/resource.h new file mode 100644 index 00000000000..1ec6542a784 --- /dev/null +++ b/dll/shellext/cryptext/resource.h @@ -0,0 +1,2 @@ +#define IDS_INVALIDFILE 100 +#define IDS_CER_FILE 101