Juan Lang : cryptui: Prompt whether to export the private key from CryptUIWizExport.

Alexandre Julliard julliard at winehq.org
Mon Feb 9 10:29:13 CST 2009


Module: wine
Branch: master
Commit: 53c84a8518a71ca57e42c63e5dfffc4aa747a696
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=53c84a8518a71ca57e42c63e5dfffc4aa747a696

Author: Juan Lang <juan.lang at gmail.com>
Date:   Sun Feb  1 10:28:07 2009 -0800

cryptui: Prompt whether to export the private key from CryptUIWizExport.

---

 dlls/cryptui/cryptui_En.rc |   14 ++++++++++
 dlls/cryptui/cryptuires.h  |   12 ++++++--
 dlls/cryptui/main.c        |   60 ++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 81 insertions(+), 5 deletions(-)

diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index 1e311a1..8e61d7b 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -161,6 +161,8 @@ STRINGTABLE DISCARDABLE
     IDS_NO "No"
     IDS_EXPORT_SUCCEEDED "The export was successful."
     IDS_EXPORT_FAILED "The export failed."
+    IDS_EXPORT_PRIVATE_KEY_TITLE "Export Private Key"
+    IDS_EXPORT_PRIVATE_KEY_SUBTITLE "The certificate contains a private key which may be exported along with the certificate."
 }
 
 IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236
@@ -381,6 +383,18 @@ BEGIN
     -1, 115,103,195,8
 END
 
+IDD_EXPORT_PRIVATE_KEY DIALOG DISCARDABLE 0,0,317,143
+CAPTION "Certificate Export Wizard"
+FONT 8, "MS Shell Dlg"
+BEGIN
+  LTEXT "If you choose to export the private key, you will be prompted for a password to protect the private key on a later page.", -1, 21,1,195,23
+  LTEXT "Do you wish to export the private key?", -1, 21,24,195,15
+  AUTORADIOBUTTON "&Yes, export the private key",
+    IDC_EXPORT_PRIVATE_KEY_YES, 31,36,200,12, BS_AUTORADIOBUTTON|WS_TABSTOP
+  AUTORADIOBUTTON "N&o, do not export the private key",
+    IDC_EXPORT_PRIVATE_KEY_NO, 31,48,200,12, BS_AUTORADIOBUTTON
+END
+
 IDD_EXPORT_FORMAT DIALOG DISCARDABLE 0,0,317,143
 CAPTION "Certificate Export Wizard"
 FONT 8, "MS Shell Dlg"
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index 486bae0..45eb12b 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -160,6 +160,8 @@
 #define IDS_NO 1217
 #define IDS_EXPORT_SUCCEEDED 1218
 #define IDS_EXPORT_FAILED 1219
+#define IDS_EXPORT_PRIVATE_KEY_TITLE 1220
+#define IDS_EXPORT_PRIVATE_KEY_SUBTITLE 1221
 
 #define IDD_GENERAL 100
 #define IDD_DETAIL 101
@@ -175,9 +177,11 @@
 #define IDD_CERT_MGR 111
 #define IDD_CERT_MGR_ADVANCED 112
 #define IDD_EXPORT_WELCOME 113
-#define IDD_EXPORT_FORMAT 114
-#define IDD_EXPORT_FILE 115
-#define IDD_EXPORT_FINISH 116
+#define IDD_EXPORT_PRIVATE_KEY 114
+#define IDD_EXPORT_PASSWORD 115
+#define IDD_EXPORT_FORMAT 116
+#define IDD_EXPORT_FILE 117
+#define IDD_EXPORT_FINISH 118
 
 #define IDB_SMALL_ICONS 200
 #define IDB_CERT 201
@@ -253,5 +257,7 @@
 #define IDC_EXPORT_FILENAME 2909
 #define IDC_EXPORT_BROWSE_FILE 2910
 #define IDC_EXPORT_SETTINGS 2911
+#define IDC_EXPORT_PRIVATE_KEY_YES 2912
+#define IDC_EXPORT_PRIVATE_KEY_NO 2913
 
 #endif /* ndef __CRYPTUIRES_H_ */
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 8590d0c..70710bd 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -5566,6 +5566,42 @@ static LRESULT CALLBACK export_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
     return ret;
 }
 
+static LRESULT CALLBACK export_private_key_dlg_proc(HWND hwnd, UINT msg,
+ WPARAM wp, LPARAM lp)
+{
+    LRESULT ret = 0;
+
+    switch (msg)
+    {
+    case WM_INITDIALOG:
+    {
+        struct ExportWizData *data;
+        PROPSHEETPAGEW *page = (PROPSHEETPAGEW *)lp;
+
+        data = (struct ExportWizData *)page->lParam;
+        SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
+        SendMessageW(GetDlgItem(hwnd, IDC_EXPORT_PRIVATE_KEY_NO), BM_CLICK,
+         0, 0);
+        break;
+    }
+    case WM_NOTIFY:
+    {
+        NMHDR *hdr = (NMHDR *)lp;
+
+        switch (hdr->code)
+        {
+        case PSN_SETACTIVE:
+            PostMessageW(GetParent(hwnd), PSM_SETWIZBUTTONS, 0,
+             PSWIZB_BACK | PSWIZB_NEXT);
+            ret = TRUE;
+            break;
+        }
+        break;
+    }
+    }
+    return ret;
+}
+
 static BOOL export_info_has_private_key(PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo)
 {
     BOOL ret = FALSE;
@@ -6370,10 +6406,10 @@ static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent,
  LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid)
 {
     PROPSHEETHEADERW hdr;
-    PROPSHEETPAGEW pages[4];
+    PROPSHEETPAGEW pages[6];
     struct ExportWizData data;
     int nPages = 0;
-    BOOL showFormatPage = TRUE;
+    BOOL hasPrivateKey, showFormatPage = TRUE;
 
     data.dwFlags = dwFlags;
     data.pwszWizardTitle = pwszWizardTitle;
@@ -6402,6 +6438,7 @@ static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent,
     pages[nPages].lParam = (LPARAM)&data;
     nPages++;
 
+    hasPrivateKey = export_info_has_private_key(pExportInfo);
     switch (pExportInfo->dwSubjectChoice)
     {
     case CRYPTUI_WIZ_EXPORT_CRL_CONTEXT:
@@ -6419,6 +6456,21 @@ static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent,
         data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7;
         break;
     }
+
+    if (hasPrivateKey && showFormatPage)
+    {
+        pages[nPages].dwSize = sizeof(pages[0]);
+        pages[nPages].hInstance = hInstance;
+        pages[nPages].u.pszTemplate = MAKEINTRESOURCEW(IDD_EXPORT_PRIVATE_KEY);
+        pages[nPages].pfnDlgProc = export_private_key_dlg_proc;
+        pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
+        pages[nPages].pszHeaderTitle =
+         MAKEINTRESOURCEW(IDS_EXPORT_PRIVATE_KEY_TITLE);
+        pages[nPages].pszHeaderSubTitle =
+         MAKEINTRESOURCEW(IDS_EXPORT_PRIVATE_KEY_SUBTITLE);
+        pages[nPages].lParam = (LPARAM)&data;
+        nPages++;
+    }
     if (showFormatPage)
     {
         pages[nPages].dwSize = sizeof(pages[0]);
@@ -6433,6 +6485,10 @@ static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent,
         pages[nPages].lParam = (LPARAM)&data;
         nPages++;
     }
+    if (hasPrivateKey && showFormatPage)
+    {
+        FIXME("add password page\n");
+    }
 
     pages[nPages].dwSize = sizeof(pages[0]);
     pages[nPages].hInstance = hInstance;




More information about the wine-cvs mailing list