Juan Lang : cryptui: Perform import when finishing the CryptUIWizImport wizard.

Alexandre Julliard julliard at winehq.org
Tue Dec 23 13:41:31 CST 2008


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Dec 22 19:56:23 2008 -0800

cryptui: Perform import when finishing the CryptUIWizImport wizard.

---

 dlls/cryptui/cryptui_En.rc |    2 +
 dlls/cryptui/cryptuires.h  |    2 +
 dlls/cryptui/main.c        |  110 +++++++++++++++++++++++++++++---------------
 3 files changed, 76 insertions(+), 38 deletions(-)

diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index c1b224f..0bd3478 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -91,6 +91,8 @@ STRINGTABLE DISCARDABLE
     IDS_IMPORT_CONTENT_CMS "CMS/PKCS #7 Message"
     IDS_IMPORT_CONTENT_PFX "Personal Information Exchange"
     IDS_IMPORT_CONTENT_STORE "Certificate Store"
+    IDS_IMPORT_SUCCEEDED "The import was successful."
+    IDS_IMPORT_FAILED "The import failed."
     IDS_PURPOSE_SERVER_AUTH "Ensures the identify of a remote computer"
     IDS_PURPOSE_CLIENT_AUTH "Proves your identity to a remote computer"
     IDS_PURPOSE_CODE_SIGNING "Ensures software came from software publisher\nProtects software from alteration after publication"
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index 4d92e13..fbbf441 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -88,6 +88,8 @@
 #define IDS_IMPORT_CONTENT_CMS 1068
 #define IDS_IMPORT_CONTENT_PFX 1069
 #define IDS_IMPORT_CONTENT_STORE 1070
+#define IDS_IMPORT_SUCCEEDED 1071
+#define IDS_IMPORT_FAILED 1072
 
 #define IDS_PURPOSE_SERVER_AUTH 1100
 #define IDS_PURPOSE_CLIENT_AUTH 1101
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 759e7b2..927a22a 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -3791,6 +3791,7 @@ struct ImportWizData
     HCERTSTORE hDestCertStore;
     BOOL freeDest;
     BOOL autoDest;
+    BOOL success;
 };
 
 static BOOL import_validate_filename(HWND hwnd, struct ImportWizData *data,
@@ -4122,6 +4123,47 @@ static void show_import_details(HWND lv, struct ImportWizData *data)
     }
 }
 
+static BOOL do_import(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle,
+ PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
+{
+    BOOL ret;
+
+    switch (pImportSrc->dwSubjectChoice)
+    {
+    case CRYPTUI_WIZ_IMPORT_SUBJECT_FILE:
+        ret = import_file(dwFlags, hwndParent, pwszWizardTitle,
+         pImportSrc->u.pwszFileName, hDestCertStore);
+        break;
+    case CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT:
+        if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CERT)))
+            ret = import_cert(pImportSrc->u.pCertContext, hDestCertStore);
+        else
+            import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
+        break;
+    case CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT:
+        if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CRL)))
+            ret = import_crl(pImportSrc->u.pCRLContext, hDestCertStore);
+        else
+            import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
+        break;
+    case CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT:
+        if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CTL)))
+            ret = import_ctl(pImportSrc->u.pCTLContext, hDestCertStore);
+        else
+            import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
+        break;
+    case CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE:
+        ret = import_store(dwFlags, hwndParent, pwszWizardTitle,
+         pImportSrc->u.hCertStore, hDestCertStore);
+        break;
+    default:
+        WARN("unknown source type: %u\n", pImportSrc->dwSubjectChoice);
+        SetLastError(E_INVALIDARG);
+        ret = FALSE;
+    }
+    return ret;
+}
+
 static LRESULT CALLBACK import_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
  LPARAM lp)
 {
@@ -4165,6 +4207,32 @@ static LRESULT CALLBACK import_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
             ret = TRUE;
             break;
         }
+        case PSN_WIZFINISH:
+        {
+            data = (struct ImportWizData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            if ((data->success = do_import(data->dwFlags, hwnd,
+             data->pwszWizardTitle, &data->importSrc, data->hDestCertStore)))
+            {
+                WCHAR title[MAX_STRING_LEN], message[MAX_STRING_LEN];
+                LPCWSTR pTitle;
+
+                if (data->pwszWizardTitle)
+                    pTitle = data->pwszWizardTitle;
+                else
+                {
+                    LoadStringW(hInstance, IDS_IMPORT_WIZARD, title,
+                     sizeof(title) / sizeof(title[0]));
+                    pTitle = title;
+                }
+                LoadStringW(hInstance, IDS_IMPORT_SUCCEEDED, message,
+                 sizeof(message) / sizeof(message[0]));
+                MessageBoxW(hwnd, message, pTitle, MB_OK);
+            }
+            else
+                import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
+                 IDS_IMPORT_SUCCEEDED);
+            break;
+        }
         }
         break;
     }
@@ -4181,8 +4249,6 @@ static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent,
     struct ImportWizData data;
     int nPages = 0;
 
-    FIXME("\n");
-
     data.dwFlags = dwFlags;
     data.pwszWizardTitle = pwszWizardTitle;
     if (pImportSrc)
@@ -4194,6 +4260,7 @@ static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent,
     data.hDestCertStore = hDestCertStore;
     data.freeDest = FALSE;
     data.autoDest = TRUE;
+    data.success = TRUE;
 
     memset(&pages, 0, sizeof(pages));
 
@@ -4272,7 +4339,7 @@ static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent,
     if (data.freeSource &&
      data.importSrc.dwSubjectChoice == CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE)
         CertCloseStore(data.importSrc.u.hCertStore, 0);
-    return FALSE;
+    return data.success;
 }
 
 BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle,
@@ -4294,41 +4361,8 @@ BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardT
         ret = show_import_ui(dwFlags, hwndParent, pwszWizardTitle, pImportSrc,
          hDestCertStore);
     else if (pImportSrc)
-    {
-        switch (pImportSrc->dwSubjectChoice)
-        {
-        case CRYPTUI_WIZ_IMPORT_SUBJECT_FILE:
-            ret = import_file(dwFlags, hwndParent, pwszWizardTitle,
-             pImportSrc->u.pwszFileName, hDestCertStore);
-            break;
-        case CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT:
-            if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CERT)))
-                ret = import_cert(pImportSrc->u.pCertContext, hDestCertStore);
-            else
-                import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
-            break;
-        case CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT:
-            if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CRL)))
-                ret = import_crl(pImportSrc->u.pCRLContext, hDestCertStore);
-            else
-                import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
-            break;
-        case CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT:
-            if ((ret = check_context_type(dwFlags, CERT_QUERY_CONTENT_CTL)))
-                ret = import_ctl(pImportSrc->u.pCTLContext, hDestCertStore);
-            else
-                import_warn_type_mismatch(dwFlags, hwndParent, pwszWizardTitle);
-            break;
-        case CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE:
-            ret = import_store(dwFlags, hwndParent, pwszWizardTitle,
-             pImportSrc->u.hCertStore, hDestCertStore);
-            break;
-        default:
-            WARN("unknown source type: %u\n", pImportSrc->dwSubjectChoice);
-            SetLastError(E_INVALIDARG);
-            ret = FALSE;
-        }
-    }
+        ret = do_import(dwFlags, hwndParent, pwszWizardTitle, pImportSrc,
+         hDestCertStore);
     else
     {
         /* Can't have no UI without specifying source */




More information about the wine-cvs mailing list