From a7096f9636e2b586db7e8ea5b7cccb8ce414312c Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Sat, 24 Jan 2009 12:54:53 -0800 Subject: [PATCH] cryptui: Add support for exporting a serialized store from CryptUIWizExport. --- dlls/cryptui/cryptui_En.rc | 1 + dlls/cryptui/cryptuires.h | 15 ++++++++------- dlls/cryptui/main.c | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc index d40d9c11244..1e311a1aa48 100644 --- a/dlls/cryptui/cryptui_En.rc +++ b/dlls/cryptui/cryptui_En.rc @@ -153,6 +153,7 @@ STRINGTABLE DISCARDABLE IDS_EXPORT_FILTER_CTL "Certificate Trust List (*.stl)" IDS_EXPORT_FILTER_CMS "CMS/PKCS #7 Messages (*.p7b)" IDS_EXPORT_FILTER_PFX "Personal Information Exchange (*.pfx)" + IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE "Serialized Certificate Store (*.sst)" IDS_EXPORT_FORMAT "File Format" IDS_EXPORT_INCLUDE_CHAIN "Include all certificates in certificate path" IDS_EXPORT_KEYS "Export keys" diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h index 7b8b4f2c975..486bae02b58 100644 --- a/dlls/cryptui/cryptuires.h +++ b/dlls/cryptui/cryptuires.h @@ -152,13 +152,14 @@ #define IDS_EXPORT_FILTER_CTL 1209 #define IDS_EXPORT_FILTER_CMS 1210 #define IDS_EXPORT_FILTER_PFX 1211 -#define IDS_EXPORT_FORMAT 1212 -#define IDS_EXPORT_INCLUDE_CHAIN 1213 -#define IDS_EXPORT_KEYS 1214 -#define IDS_YES 1215 -#define IDS_NO 1216 -#define IDS_EXPORT_SUCCEEDED 1217 -#define IDS_EXPORT_FAILED 1218 +#define IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE 1212 +#define IDS_EXPORT_FORMAT 1213 +#define IDS_EXPORT_INCLUDE_CHAIN 1214 +#define IDS_EXPORT_KEYS 1215 +#define IDS_YES 1216 +#define IDS_NO 1217 +#define IDS_EXPORT_SUCCEEDED 1218 +#define IDS_EXPORT_FAILED 1219 #define IDD_GENERAL 100 #define IDD_DETAIL 101 diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c index 9ea7b937fc9..3108c6a3568 100644 --- a/dlls/cryptui/main.c +++ b/dlls/cryptui/main.c @@ -5633,6 +5633,7 @@ static LPWSTR export_append_extension(struct ExportWizData *data, static const WCHAR ctl[] = { '.','c','t','l',0 }; static const WCHAR p7b[] = { '.','p','7','b',0 }; static const WCHAR pfx[] = { '.','p','f','x',0 }; + static const WCHAR sst[] = { '.','s','s','t',0 }; LPCWSTR extension; LPWSTR dot; BOOL appendExtension; @@ -5654,6 +5655,9 @@ static LPWSTR export_append_extension(struct ExportWizData *data, case CRYPTUI_WIZ_EXPORT_CTL_CONTEXT: extension = ctl; break; + case CRYPTUI_WIZ_EXPORT_CERT_STORE: + extension = sst; + break; default: extension = cer; } @@ -5760,6 +5764,7 @@ static const WCHAR export_filter_crl[] = { '*','.','c','r','l',0 }; static const WCHAR export_filter_ctl[] = { '*','.','s','t','l',0 }; static const WCHAR export_filter_cms[] = { '*','.','p','7','b',0 }; static const WCHAR export_filter_pfx[] = { '*','.','p','f','x',0 }; +static const WCHAR export_filter_sst[] = { '*','.','s','s','t',0 }; static WCHAR *make_export_file_filter(DWORD exportFormat, DWORD subjectChoice) { @@ -5792,6 +5797,10 @@ static WCHAR *make_export_file_filter(DWORD exportFormat, DWORD subjectChoice) baseID = IDS_EXPORT_FILTER_CTL; filterStr = export_filter_ctl; break; + case CRYPTUI_WIZ_EXPORT_CERT_STORE: + baseID = IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE; + filterStr = export_filter_sst; + break; default: baseID = IDS_EXPORT_FILTER_CERT; filterStr = export_filter_cert; @@ -5968,6 +5977,7 @@ static void show_export_details(HWND lv, struct ExportWizData *data) { case CRYPTUI_WIZ_EXPORT_CRL_CONTEXT: case CRYPTUI_WIZ_EXPORT_CTL_CONTEXT: + case CRYPTUI_WIZ_EXPORT_CERT_STORE: /* do nothing */ break; default: @@ -6011,6 +6021,9 @@ static void show_export_details(HWND lv, struct ExportWizData *data) case CRYPTUI_WIZ_EXPORT_CTL_CONTEXT: contentID = IDS_EXPORT_FILTER_CTL; break; + case CRYPTUI_WIZ_EXPORT_CERT_STORE: + contentID = IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE; + break; default: switch (data->contextInfo.dwExportFormat) { @@ -6132,6 +6145,12 @@ static BOOL save_cms(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, return ret; } +static BOOL save_serialized_store(HANDLE file, HCERTSTORE store) +{ + return CertSaveStore(store, PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, + CERT_STORE_SAVE_AS_STORE, CERT_STORE_SAVE_TO_FILE, file, 0); +} + static BOOL do_export(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO pContextInfo) { @@ -6154,6 +6173,9 @@ static BOOL do_export(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, pExportInfo->u.pCTLContext->pbCtlEncoded, pExportInfo->u.pCTLContext->cbCtlEncoded); break; + case CRYPTUI_WIZ_EXPORT_CERT_STORE: + ret = save_serialized_store(file, pExportInfo->u.hCertStore); + break; default: switch (pContextInfo->dwExportFormat) {