Juan Lang : cryptui: Implement specifying the destination store in CryptUIWizImport.

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


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

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

cryptui: Implement specifying the destination store in CryptUIWizImport.

---

 dlls/cryptui/cryptui_En.rc |    3 +-
 dlls/cryptui/cryptuires.h  |    1 +
 dlls/cryptui/main.c        |   65 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+), 1 deletions(-)

diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index 7557cf0..df420bc 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -79,6 +79,7 @@ STRINGTABLE DISCARDABLE
     IDS_IMPORT_EMPTY_FILE "Please select a file."
     IDS_IMPORT_BAD_FORMAT "The file format is not recognized.  Please select another file."
     IDS_IMPORT_OPEN_FAILED "Could not open "
+    IDS_IMPORT_DEST_DETERMINED "Determined by the program"
     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"
@@ -254,7 +255,7 @@ BEGIN
     IDC_IMPORT_AUTO_STORE, 31,18,180,12, BS_AUTORADIOBUTTON|WS_TABSTOP
   AUTORADIOBUTTON "&Place all certificates in the following store:",
     IDC_IMPORT_SPECIFY_STORE, 31,30,180,12, BS_AUTORADIOBUTTON
-  EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_AUTOHSCROLL|WS_TABSTOP
+  EDITTEXT IDC_IMPORT_STORE, 44,49,185,14, ES_READONLY
   PUSHBUTTON "B&rowse...", IDC_IMPORT_BROWSE_STORE, 236,49,60,14
 END
 
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index 9004dc7..df7fc8a 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -76,6 +76,7 @@
 #define IDS_IMPORT_EMPTY_FILE 1056
 #define IDS_IMPORT_BAD_FORMAT 1057
 #define IDS_IMPORT_OPEN_FAILED 1058
+#define IDS_IMPORT_DEST_DETERMINED 1059
 
 #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 c578b35..a762129 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -3784,6 +3784,8 @@ struct ImportWizData
     CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc;
     BOOL freeSource;
     HCERTSTORE hDestCertStore;
+    BOOL freeDest;
+    BOOL autoDest;
 };
 
 static BOOL import_validate_filename(HWND hwnd, struct ImportWizData *data,
@@ -3953,9 +3955,23 @@ static LRESULT CALLBACK import_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
  LPARAM lp)
 {
     LRESULT ret = 0;
+    struct ImportWizData *data;
 
     switch (msg)
     {
+    case WM_INITDIALOG:
+    {
+        PROPSHEETPAGEW *page = (PROPSHEETPAGEW *)lp;
+
+        data = (struct ImportWizData *)page->lParam;
+        SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
+        SendMessageW(GetDlgItem(hwnd, IDC_IMPORT_AUTO_STORE), BM_CLICK, 0, 0);
+        if (data->dwFlags & CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE)
+            EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_SPECIFY_STORE), FALSE);
+        EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_STORE), FALSE);
+        EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_BROWSE_STORE), FALSE);
+        break;
+    }
     case WM_NOTIFY:
     {
         NMHDR *hdr = (NMHDR *)lp;
@@ -3970,6 +3986,51 @@ static LRESULT CALLBACK import_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
         }
         break;
     }
+    case WM_COMMAND:
+        switch (wp)
+        {
+        case IDC_IMPORT_AUTO_STORE:
+            data = (struct ImportWizData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            data->autoDest = TRUE;
+            EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_STORE), FALSE);
+            EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_BROWSE_STORE), FALSE);
+            break;
+        case IDC_IMPORT_SPECIFY_STORE:
+            data = (struct ImportWizData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            data->autoDest = FALSE;
+            EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_STORE), TRUE);
+            EnableWindow(GetDlgItem(hwnd, IDC_IMPORT_BROWSE_STORE), TRUE);
+            break;
+        case IDC_IMPORT_BROWSE_STORE:
+        {
+            CRYPTUI_ENUM_SYSTEM_STORE_ARGS enumArgs = {
+             CERT_SYSTEM_STORE_CURRENT_USER, NULL };
+            CRYPTUI_ENUM_DATA enumData = { 0, NULL, 1, &enumArgs };
+            CRYPTUI_SELECTSTORE_INFO_W selectInfo;
+            HCERTSTORE store;
+
+            data = (struct ImportWizData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            selectInfo.dwSize = sizeof(selectInfo);
+            selectInfo.parent = hwnd;
+            selectInfo.dwFlags = CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE;
+            selectInfo.pwszTitle = selectInfo.pwszTitle = NULL;
+            selectInfo.pEnumData = &enumData;
+            selectInfo.pfnSelectedStoreCallback = NULL;
+            if ((store = CryptUIDlgSelectStoreW(&selectInfo)))
+            {
+                WCHAR storeTitle[MAX_STRING_LEN];
+
+                LoadStringW(hInstance, IDS_IMPORT_DEST_DETERMINED,
+                 storeTitle, sizeof(storeTitle) / sizeof(storeTitle[0]));
+                SendMessageW(GetDlgItem(hwnd, IDC_IMPORT_STORE), WM_SETTEXT,
+                 0, (LPARAM)storeTitle);
+                data->hDestCertStore = store;
+                data->freeDest = TRUE;
+            }
+            break;
+        }
+        }
+        break;
     }
     return ret;
 }
@@ -4018,6 +4079,9 @@ static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent,
         memset(&data.importSrc, 0, sizeof(data.importSrc));
     data.freeSource = FALSE;
     data.hDestCertStore = hDestCertStore;
+    data.freeDest = FALSE;
+    data.autoDest = TRUE;
+
     memset(&pages, 0, sizeof(pages));
 
     pages[nPages].dwSize = sizeof(pages[0]);
@@ -4050,6 +4114,7 @@ static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent,
     pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_IMPORT_STORE_TITLE);
     pages[nPages].pszHeaderSubTitle =
      MAKEINTRESOURCEW(IDS_IMPORT_STORE_SUBTITLE);
+    pages[nPages].lParam = (LPARAM)&data;
     nPages++;
 
     pages[nPages].dwSize = sizeof(pages[0]);




More information about the wine-cvs mailing list