[Wine-patches] [eterhack] eterbug #7119

Alexander Morozov amorozov на etersoft.ru
Ср Сен 7 15:37:52 MSD 2011


----------- следующая часть -----------
From fa9a39f3f19610f9214a9996debe7b2ee093b068 Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov на etersoft.ru>
Date: Mon, 29 Aug 2011 19:20:48 +0400
Subject: [eterhack 1/5] crytpui/tests: Add tests for
 CryptUIDlgSelectCertificateA (eterbug #7119).

---
 dlls/cryptui/tests/Makefile.in |    2 +
 dlls/cryptui/tests/cryptui.c   |  266 ++++++++++++++++++++++++++++++++++++++++
 dlls/cryptui/tests/resource.rc |   27 ++++
 dlls/cryptui/tests/resources.h |   26 ++++
 4 files changed, 321 insertions(+), 0 deletions(-)
 create mode 100644 dlls/cryptui/tests/resource.rc
 create mode 100644 dlls/cryptui/tests/resources.h

diff --git a/dlls/cryptui/tests/Makefile.in b/dlls/cryptui/tests/Makefile.in
index cc2c638..56f941d 100644
--- a/dlls/cryptui/tests/Makefile.in
+++ b/dlls/cryptui/tests/Makefile.in
@@ -4,4 +4,6 @@ IMPORTS   = cryptui crypt32 user32
 C_SRCS = \
 	cryptui.c
 
+RC_SRCS = resource.rc
+
 @MAKE_TEST_RULES@
diff --git a/dlls/cryptui/tests/cryptui.c b/dlls/cryptui/tests/cryptui.c
index bb1db92..e936f2e 100644
--- a/dlls/cryptui/tests/cryptui.c
+++ b/dlls/cryptui/tests/cryptui.c
@@ -24,9 +24,12 @@
 #include <winbase.h>
 #include <winerror.h>
 #include <winuser.h>
+#include <commctrl.h>
 #include <wincrypt.h>
 #include <cryptuiapi.h>
 
+#include "resources.h"
+
 #include "wine/test.h"
 
 static BYTE v1CertWithValidPubKey[] = {
@@ -300,6 +303,8 @@ static LRESULT CALLBACK cbt_hook_proc(int code, WPARAM wp, LPARAM lp)
 static BOOL (WINAPI *pCryptUIWizImport)(DWORD dwFlags, HWND hwndParent,
  LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
  HCERTSTORE hDestCertStore);
+static PCCERT_CONTEXT (WINAPI *pCryptUIDlgSelectCertificateA)(
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc);
 
 static BOOL find_and_delete_cert_in_store(HCERTSTORE store, PCCERT_CONTEXT cert)
 {
@@ -649,6 +654,265 @@ static void test_crypt_ui_wiz_import(void)
     UnhookWindowsHookEx(hook);
 }
 
+static BOOL CALLBACK get_tab_ctrl_hwnd(HWND hwnd, LPARAM lp)
+{
+    char buf[16];
+
+    if (GetClassNameA(hwnd, buf, sizeof(buf)) && !lstrcmpA(buf, "SysTabControl32"))
+    {
+        *(HWND *)lp = hwnd;
+        return FALSE;
+    }
+    return TRUE;
+}
+
+static BOOL CALLBACK get_list_view_hwnd(HWND hwnd, LPARAM lp)
+{
+    char buf[16];
+
+    GetClassNameA(hwnd, buf, sizeof(buf));
+
+    if (GetClassNameA(hwnd, buf, sizeof(buf)) && !lstrcmpA(buf, "SysListView32"))
+    {
+        *(HWND *)lp = hwnd;
+        return FALSE;
+    }
+    return TRUE;
+}
+
+static BOOL CALLBACK press_view_cert_button(HWND hwnd, LPARAM lp)
+{
+    char buf[7];
+
+    if (GetClassNameA(hwnd, buf, sizeof(buf)) && !lstrcmpA(buf, "Button"))
+    {
+        int button_id = GetDlgCtrlID(hwnd);
+
+        if (button_id != IDOK && button_id != IDCANCEL)
+        {
+            PostMessageA((HWND)lp, WM_COMMAND, button_id, 0);
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+static int button = IDCANCEL;
+static int view_cert;
+static int setcursel_ret;
+static HWND ctrl_hwnd;
+
+static LRESULT CALLBACK select_cert_hook_proc(int code, WPARAM wp, LPARAM lp)
+{
+    CWPRETSTRUCT *cwpret = (CWPRETSTRUCT *)lp;
+    HWND lv = NULL;
+
+    if (cwpret->message == WM_INITDIALOG)
+    {
+        if (GetParent(cwpret->hwnd))
+        {
+            /* certificate view window */
+            ctrl_hwnd = NULL;
+            EnumChildWindows(cwpret->hwnd, get_tab_ctrl_hwnd, (LPARAM)&ctrl_hwnd);
+            if (ctrl_hwnd)
+                setcursel_ret = TabCtrl_SetCurSel(ctrl_hwnd, 3);
+            PostMessageA(cwpret->hwnd, WM_COMMAND, IDOK, 0);
+        }
+        else
+        {
+            /* certificate selection window */
+            EnumChildWindows(cwpret->hwnd, get_list_view_hwnd, (LPARAM)&lv);
+            if (lv)
+                ListView_SetItemState(lv, 0, LVIS_SELECTED, LVIS_SELECTED);
+            if (view_cert)
+                EnumChildWindows(cwpret->hwnd, press_view_cert_button, (LPARAM)cwpret->hwnd);
+            PostMessageA(cwpret->hwnd, WM_COMMAND, button, 0);
+        }
+    }
+    return CallNextHookEx(hook, code, wp, lp);
+}
+
+static BOOL WINAPI filter_proc(PCCERT_CONTEXT pCertContext, BOOL *pfInitialSelectedCert,
+ void *pvCallbackData)
+{
+    todo_wine
+    ok(pCertContext->cbCertEncoded == sizeof(v1CertWithValidPubKey) ||
+     pCertContext->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate context\n");
+    todo_wine
+    ok(pvCallbackData == (void *)0xdeadbeef, "expected 0xdeadbeef, got %p\n", pvCallbackData);
+    if (pCertContext->cbCertEncoded == sizeof(iTunesCert1))
+        return TRUE;
+    return FALSE;
+}
+
+static int display_proc_flag;
+static int display_proc_ret;
+
+static BOOL WINAPI display_proc(PCCERT_CONTEXT pCertContext, HWND hWndSelCertDlg,
+ void *pvCallbackData)
+{
+    display_proc_flag = 1;
+    todo_wine
+    ok(pCertContext->cbCertEncoded == sizeof(v1CertWithValidPubKey) ||
+     pCertContext->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate context\n");
+    todo_wine
+    ok(pvCallbackData == (void *)0xdeadbeef, "expected 0xdeadbeef, got %p\n", pvCallbackData);
+    todo_wine
+    ok(IsWindow(hWndSelCertDlg), "hWndSelCertDlg does not identify an existing window\n");
+    if (hWndSelCertDlg)
+        MessageBoxA(hWndSelCertDlg, "Wine Test", "Wine Test", MB_OKCANCEL);
+    return display_proc_ret;
+}
+
+static INT_PTR CALLBACK page_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+    return 0;
+}
+
+static void test_crypt_ui_dlg_select_certificate(void)
+{
+    BOOL ret;
+    CRYPTUI_SELECTCERTIFICATE_STRUCTA sel;
+    PCCERT_CONTEXT cert;
+    HCERTSTORE store[2];
+    PROPSHEETPAGEA psp;
+
+    if (!pCryptUIDlgSelectCertificateA)
+    {
+        skip("No CryptUIDlgSelectCertificate\n");
+        return;
+    }
+
+    hook = SetWindowsHookExA(WH_CALLWNDPROCRET, select_cert_hook_proc, 0, GetCurrentThreadId());
+
+    memset(&sel, 0, sizeof(sel));
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(!cert && (GetLastError() == E_INVALIDARG ||
+     GetLastError() == ERROR_FILE_NOT_FOUND), /* NT4 */
+     "expected E_INVALIDARG, got %08x\n", GetLastError());
+    sel.dwSize = 60;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(!cert && (GetLastError() == ERROR_SUCCESS ||
+     broken(GetLastError() == E_INVALIDARG)), /* Win2k8 x64 */
+     "expected ERROR_SUCCESS, got %08x\n", GetLastError());
+    sel.dwSize = sizeof(sel);
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    if (!cert && GetLastError() == 0xdeadbeef)
+    {
+        win_skip("NT4 does not support CRYPTUI_SELECTCERTIFICATE_STRUCT with dwSize == 64\n");
+        UnhookWindowsHookEx(hook);
+        return;
+    }
+    else
+        todo_wine
+        ok(!cert && GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %08x\n",
+         GetLastError());
+
+    SetLastError(0xdeadbeef);
+    store[0] = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_CREATE_NEW_FLAG, NULL);
+    ok(store[0] != NULL, "CertOpenStore failed: %08x\n", GetLastError());
+    SetLastError(0xdeadbeef);
+    cert = CertCreateCertificateContext(X509_ASN_ENCODING, v1CertWithValidPubKey,
+     sizeof(v1CertWithValidPubKey));
+    ok(cert != NULL, "CertCreateCertificateContext failed: %08x\n", GetLastError());
+    SetLastError(0xdeadbeef);
+    ret = CertAddCertificateContextToStore(store[0], cert, CERT_STORE_ADD_NEW, NULL);
+    ok(ret, "CertAddCertificateContextToStore failed: %08x\n", GetLastError());
+    CertFreeCertificateContext(cert);
+    SetLastError(0xdeadbeef);
+    store[1] = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_CREATE_NEW_FLAG, NULL);
+    ok(store[1] != NULL, "CertOpenStore failed: %08x\n", GetLastError());
+    SetLastError(0xdeadbeef);
+    cert = CertCreateCertificateContext(X509_ASN_ENCODING, iTunesCert1, sizeof(iTunesCert1));
+    ok(cert != NULL, "CertCreateCertificateContext failed: %08x\n", GetLastError());
+    SetLastError(0xdeadbeef);
+    ret = CertAddCertificateContextToStore(store[1], cert, CERT_STORE_ADD_NEW, NULL);
+    ok(ret, "CertAddCertificateContextToStore failed: %08x\n", GetLastError());
+    CertFreeCertificateContext(cert);
+
+    sel.dwDontUseColumn = 0;
+    sel.cDisplayStores = 2;
+    sel.rghDisplayStores = store;
+    sel.cPropSheetPages = 1;
+    sel.rgPropSheetPages = &psp;
+    memset(&psp, 0, sizeof(psp));
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(!cert && GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %08x\n",
+     GetLastError());
+    button = IDOK;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    if (cert)
+        todo_wine
+        ok(cert->cbCertEncoded == sizeof(v1CertWithValidPubKey), "wrong certificate is selected\n");
+    CertFreeCertificateContext(cert);
+
+    sel.pFilterCallback = filter_proc;
+    sel.pvCallbackData = (void *)0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    if (cert)
+        todo_wine
+        ok(cert->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate is selected\n");
+    CertFreeCertificateContext(cert);
+
+    view_cert = 1;
+    sel.pFilterCallback = NULL;
+    sel.pDisplayCallback = display_proc;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    todo_wine
+    ok(display_proc_flag, "display callback was not called\n");
+    todo_wine
+    ok(ctrl_hwnd != NULL, "the dialog box did not display certificate\n");
+    CertFreeCertificateContext(cert);
+    display_proc_ret = TRUE;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    todo_wine
+    ok(display_proc_flag, "display callback was not called\n");
+    ok(!ctrl_hwnd, "the dialog box displayed certificate\n");
+    CertFreeCertificateContext(cert);
+
+    sel.pDisplayCallback = NULL;
+    sel.pvCallbackData = NULL;
+    psp.dwSize = sizeof(psp);
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    CertFreeCertificateContext(cert);
+    psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_CERT_VIEW_PROP_PAGE);
+    psp.pfnDlgProc = page_dlg_proc;
+    setcursel_ret = 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    cert = pCryptUIDlgSelectCertificateA(&sel);
+    todo_wine
+    ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
+    todo_wine
+    ok(setcursel_ret == 0, "TabCtrl_SetCurSel returned %d\n", setcursel_ret);
+    CertFreeCertificateContext(cert);
+
+    CertCloseStore(store[0], 0);
+    CertCloseStore(store[1], 0);
+    UnhookWindowsHookEx(hook);
+}
+
 START_TEST(cryptui)
 {
     HMODULE lib = LoadLibraryA("cryptui");
@@ -656,8 +920,10 @@ START_TEST(cryptui)
     if (lib)
     {
         pCryptUIWizImport = (void *)GetProcAddress(lib, "CryptUIWizImport");
+        pCryptUIDlgSelectCertificateA = (void *)GetProcAddress(lib, "CryptUIDlgSelectCertificateA");
 
         test_crypt_ui_wiz_import();
+        test_crypt_ui_dlg_select_certificate();
         FreeLibrary(lib);
     }
 }
diff --git a/dlls/cryptui/tests/resource.rc b/dlls/cryptui/tests/resource.rc
new file mode 100644
index 0000000..634dc1c
--- /dev/null
+++ b/dlls/cryptui/tests/resource.rc
@@ -0,0 +1,27 @@
+/*
+ * Resource file for cryptui tests
+ *
+ * Copyright 2011 Alexander Morozov for Etersoft
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "resources.h"
+
+IDD_CERT_VIEW_PROP_PAGE DIALOG 0, 0, 255, 236
+CAPTION "Test"
+BEGIN
+    LTEXT "", -1, 0, 0, 0, 0
+END
diff --git a/dlls/cryptui/tests/resources.h b/dlls/cryptui/tests/resources.h
new file mode 100644
index 0000000..c4c19b4
--- /dev/null
+++ b/dlls/cryptui/tests/resources.h
@@ -0,0 +1,26 @@
+/*
+ * Resource IDs
+ *
+ * Copyright 2011 Alexander Morozov for Etersoft
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_CRYPTUI_TEST_RESOURCES_H
+#define __WINE_CRYPTUI_TEST_RESOURCES_H
+
+#define IDD_CERT_VIEW_PROP_PAGE 100
+
+#endif  /* __WINE_CRYPTUI_TEST_RESOURCES_H */
-- 
1.7.6.1

----------- следующая часть -----------
From 17bfb1403c7bec6c5b29b853a035261549e73094 Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov на etersoft.ru>
Date: Fri, 12 Aug 2011 18:21:30 +0400
Subject: [eterhack 2/5] cryptui: Partially implement
 CryptUIDlgSelectCertificateA/W (eterbug #7119).

---
 dlls/cryptui/cryptui.rc      |    5 +
 dlls/cryptui/cryptui_En.rc   |   12 +
 dlls/cryptui/cryptuires.h    |   12 +
 dlls/cryptui/main.c          |  623 ++++++++++++++++++++++++++++++++++++++++--
 dlls/cryptui/tests/cryptui.c |   21 --
 5 files changed, 631 insertions(+), 42 deletions(-)

diff --git a/dlls/cryptui/cryptui.rc b/dlls/cryptui/cryptui.rc
index bbac4f4..d627cf2 100644
--- a/dlls/cryptui/cryptui.rc
+++ b/dlls/cryptui/cryptui.rc
@@ -171,6 +171,11 @@ STRINGTABLE
     IDS_EXPORT_PASSWORD_MISMATCH "The passwords do not match."
     IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Note: The private key for this certificate could not be opened."
     IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Note: The private  key for this certificate is not exportable."
+    IDS_INTENDED_USE_COLUMN "Intended Use"
+    IDS_LOCATION_COLUMN "Location"
+    IDS_SELECT_CERT_TITLE "Select Certificate"
+    IDS_SELECT_CERT "Select a certificate"
+    IDS_NO_IMPL "Not yet implemented"
 }
 
 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index 87db8ac..be26f10 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -311,3 +311,15 @@ BEGIN
     LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER,
     115,67,174,100
 END
+
+IDD_SELECT_CERT DIALOG 0,0,278,157
+CAPTION "Select Certificate"
+FONT 8, "MS Shell Dlg"
+BEGIN
+  LTEXT "Select a certificate you want to use", IDC_SELECT_DISPLAY_STRING, 7,7,264,26
+  CONTROL "", IDC_SELECT_CERTS, "SysListView32",
+    LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 7,40,264,89
+  PUSHBUTTON "OK", IDOK, 91,136,51,14, BS_DEFPUSHBUTTON
+  PUSHBUTTON "Cancel", IDCANCEL, 149,136,51,14
+  PUSHBUTTON "&View Certificate", IDC_SELECT_VIEW_CERT, 207,136,65,14, WS_DISABLED
+END
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index df321df..e4f7424 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -173,6 +173,13 @@
 #define IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE 1225
 #define IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE 1226
 
+#define IDS_INTENDED_USE_COLUMN 1300
+#define IDS_LOCATION_COLUMN 1301
+#define IDS_SELECT_CERT_TITLE 1302
+#define IDS_SELECT_CERT 1303
+
+#define IDS_NO_IMPL 1400
+
 #define IDD_GENERAL 100
 #define IDD_DETAIL 101
 #define IDD_HIERARCHY 102
@@ -192,6 +199,7 @@
 #define IDD_EXPORT_FORMAT 116
 #define IDD_EXPORT_FILE 117
 #define IDD_EXPORT_FINISH 118
+#define IDD_SELECT_CERT 119
 
 #define IDB_SMALL_ICONS 200
 #define IDB_CERT 201
@@ -273,4 +281,8 @@
 #define IDC_EXPORT_PASSWORD 2915
 #define IDC_EXPORT_PASSWORD_CONFIRM 2916
 
+#define IDC_SELECT_DISPLAY_STRING 3000
+#define IDC_SELECT_CERTS 3001
+#define IDC_SELECT_VIEW_CERT 3002
+
 #endif /* ndef __CRYPTUIRES_H_ */
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 9df9800..c161c33 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -849,10 +849,8 @@ static void show_selected_cert(HWND hwnd, int index)
     }
 }
 
-static void cert_mgr_show_cert_usages(HWND hwnd, int index)
+static void get_cert_usages(PCCERT_CONTEXT cert, LPWSTR *str)
 {
-    HWND text = GetDlgItem(hwnd, IDC_MGR_PURPOSES);
-    PCCERT_CONTEXT cert = cert_mgr_index_to_cert(hwnd, index);
     PCERT_ENHKEY_USAGE usage;
     DWORD size;
 
@@ -891,7 +889,7 @@ static void cert_mgr_show_cert_usages(HWND hwnd, int index)
         {
             static const WCHAR commaSpace[] = { ',',' ',0 };
             DWORD i, len = 1;
-            LPWSTR str, ptr;
+            LPWSTR ptr;
 
             for (i = 0; i < usage->cUsageIdentifier; i++)
             {
@@ -907,10 +905,10 @@ static void cert_mgr_show_cert_usages(HWND hwnd, int index)
                 if (i < usage->cUsageIdentifier - 1)
                     len += strlenW(commaSpace);
             }
-            str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-            if (str)
+            *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (*str)
             {
-                for (i = 0, ptr = str; i < usage->cUsageIdentifier; i++)
+                for (i = 0, ptr = *str; i < usage->cUsageIdentifier; i++)
                 {
                     PCCRYPT_OID_INFO info =
                      CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY,
@@ -937,27 +935,37 @@ static void cert_mgr_show_cert_usages(HWND hwnd, int index)
                     }
                 }
                 *ptr = 0;
-                SendMessageW(text, WM_SETTEXT, 0, (LPARAM)str);
-                HeapFree(GetProcessHeap(), 0, str);
             }
             HeapFree(GetProcessHeap(), 0, usage);
         }
         else
         {
-            WCHAR buf[MAX_STRING_LEN];
-
-            LoadStringW(hInstance, IDS_ALLOWED_PURPOSE_NONE, buf,
-             sizeof(buf) / sizeof(buf[0]));
-            SendMessageW(text, WM_SETTEXT, 0, (LPARAM)buf);
+            size = MAX_STRING_LEN * sizeof(WCHAR);
+            *str = HeapAlloc(GetProcessHeap(), 0, size);
+            if (*str)
+                LoadStringW(hInstance, IDS_ALLOWED_PURPOSE_NONE, *str, size);
         }
     }
     else
     {
-        WCHAR buf[MAX_STRING_LEN];
+        size = MAX_STRING_LEN * sizeof(WCHAR);
+        *str = HeapAlloc(GetProcessHeap(), 0, size);
+        if (*str)
+            LoadStringW(hInstance, IDS_ALLOWED_PURPOSE_ALL, *str, size);
+    }
+}
 
-        LoadStringW(hInstance, IDS_ALLOWED_PURPOSE_ALL, buf,
-         sizeof(buf) / sizeof(buf[0]));
-        SendMessageW(text, WM_SETTEXT, 0, (LPARAM)buf);
+static void cert_mgr_show_cert_usages(HWND hwnd, int index)
+{
+    HWND text = GetDlgItem(hwnd, IDC_MGR_PURPOSES);
+    PCCERT_CONTEXT cert = cert_mgr_index_to_cert(hwnd, index);
+    LPWSTR str = NULL;
+
+    get_cert_usages(cert, &str);
+    if (str)
+    {
+        SendMessageW(text, WM_SETTEXT, 0, (LPARAM)str);
+        HeapFree(GetProcessHeap(), 0, str);
     }
 }
 
@@ -7044,14 +7052,587 @@ BOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi)
     return FALSE;
 }
 
+static void init_columns(HWND lv, DWORD flags)
+{
+    WCHAR buf[MAX_STRING_LEN];
+    LVCOLUMNW column;
+    DWORD i = 0;
+
+    SendMessageW(lv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
+    column.mask = LVCF_WIDTH | LVCF_TEXT;
+    column.cx = 90;
+    column.pszText = buf;
+    if (!(flags & CRYPTUI_SELECT_ISSUEDTO_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_SUBJECT_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+    if (!(flags & CRYPTUI_SELECT_ISSUEDBY_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_ISSUER_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+    if (!(flags & CRYPTUI_SELECT_INTENDEDUSE_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_INTENDED_USE_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+    if (!(flags & CRYPTUI_SELECT_FRIENDLYNAME_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_FRIENDLY_NAME_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+    if (!(flags & CRYPTUI_SELECT_EXPIRATION_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_EXPIRATION_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+    if (!(flags & CRYPTUI_SELECT_LOCATION_COLUMN))
+    {
+        LoadStringW(hInstance, IDS_LOCATION_COLUMN, buf, sizeof(buf) / sizeof(buf[0]));
+        SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column);
+    }
+}
+
+static void add_cert_to_list(HWND lv, PCCERT_CONTEXT cert, DWORD flags, DWORD *allocatedLen,
+ LPWSTR *str)
+{
+    DWORD len;
+    LVITEMW item;
+    WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
+    WCHAR buf[80];
+    SYSTEMTIME sysTime;
+    LPWSTR none, usages;
+
+    item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT;
+    item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
+    item.iSubItem = 0;
+    item.iImage = 0;
+    item.lParam = (LPARAM)CertDuplicateCertificateContext(cert);
+    if (!item.iItem)
+    {
+        item.mask |= LVIF_STATE;
+        item.state = LVIS_SELECTED;
+        item.stateMask = -1;
+    }
+    if (!(flags & CRYPTUI_SELECT_ISSUEDTO_COLUMN))
+    {
+        len = CertGetNameStringW(cert, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, 0);
+        if (len > *allocatedLen)
+        {
+            HeapFree(GetProcessHeap(), 0, *str);
+            *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (*str)
+                *allocatedLen = len;
+        }
+        if (*str)
+        {
+            CertGetNameStringW(cert, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, *str, len);
+            item.pszText = *str;
+            SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+        }
+        item.mask = LVIF_TEXT;
+        ++item.iSubItem;
+    }
+    if (!(flags & CRYPTUI_SELECT_ISSUEDBY_COLUMN))
+    {
+        len = CertGetNameStringW(cert, CERT_NAME_SIMPLE_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL,
+         NULL, 0);
+        if (len > *allocatedLen)
+        {
+            HeapFree(GetProcessHeap(), 0, *str);
+            *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (*str)
+                *allocatedLen = len;
+        }
+        if (*str)
+        {
+            CertGetNameStringW(cert, CERT_NAME_SIMPLE_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL,
+             *str, len);
+            item.pszText = *str;
+            if (!item.iSubItem)
+                SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+            else
+                SendMessageW(lv, LVM_SETITEMTEXTW, item.iItem, (LPARAM)&item);
+        }
+        item.mask = LVIF_TEXT;
+        ++item.iSubItem;
+    }
+    if (!(flags & CRYPTUI_SELECT_INTENDEDUSE_COLUMN))
+    {
+        get_cert_usages(cert, &usages);
+        if (usages)
+        {
+            item.pszText = usages;
+            if (!item.iSubItem)
+                SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+            else
+                SendMessageW(lv, LVM_SETITEMTEXTW, item.iItem, (LPARAM)&item);
+            HeapFree(GetProcessHeap(), 0, usages);
+        }
+        item.mask = LVIF_TEXT;
+        ++item.iSubItem;
+    }
+    if (!(flags & CRYPTUI_SELECT_FRIENDLYNAME_COLUMN))
+    {
+        if (!CertGetCertificateContextProperty(cert, CERT_FRIENDLY_NAME_PROP_ID, NULL, &len))
+            len = LoadStringW(hInstance, IDS_FRIENDLY_NAME_NONE, (LPWSTR)&none, 0);
+        if (len > *allocatedLen)
+        {
+            HeapFree(GetProcessHeap(), 0, *str);
+            *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (*str)
+                *allocatedLen = len;
+        }
+        if (*str)
+        {
+            if (!CertGetCertificateContextProperty(cert, CERT_FRIENDLY_NAME_PROP_ID, *str, &len))
+                item.pszText = none;
+            else
+                item.pszText = *str;
+            if (!item.iSubItem)
+                SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+            else
+                SendMessageW(lv, LVM_SETITEMTEXTW, item.iItem, (LPARAM)&item);
+        }
+        item.mask = LVIF_TEXT;
+        ++item.iSubItem;
+    }
+    if (!(flags & CRYPTUI_SELECT_EXPIRATION_COLUMN))
+    {
+        GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, dateFmt,
+         sizeof(dateFmt) / sizeof(dateFmt[0]));
+        FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
+        GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf,
+         sizeof(buf) / sizeof(buf[0]));
+        item.pszText = buf;
+        if (!item.iSubItem)
+            SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+        else
+            SendMessageW(lv, LVM_SETITEMTEXTW, item.iItem, (LPARAM)&item);
+        item.mask = LVIF_TEXT;
+        ++item.iSubItem;
+    }
+    if (!(flags & CRYPTUI_SELECT_LOCATION_COLUMN))
+    {
+        static int show_fixme;
+        if (!show_fixme++)
+            FIXME("showing location is not implemented\n");
+        LoadStringW(hInstance, IDS_NO_IMPL, buf, sizeof(buf) / sizeof(buf[0]));
+        if (!item.iSubItem)
+            SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
+        else
+            SendMessageW(lv, LVM_SETITEMTEXTW, item.iItem, (LPARAM)&item);
+    }
+}
+
+static void add_store_certs(HWND lv, HCERTSTORE store, DWORD flags, PFNCFILTERPROC filter,
+ void *callback_data)
+{
+    PCCERT_CONTEXT cert = NULL;
+    BOOL select = FALSE;
+    DWORD allocatedLen = 0;
+    LPWSTR str = NULL;
+
+    do {
+        cert = CertEnumCertificatesInStore(store, cert);
+        if (cert && (!filter || filter(cert, &select, callback_data)))
+            add_cert_to_list(lv, cert, flags, &allocatedLen, &str);
+    } while (cert);
+    HeapFree(GetProcessHeap(), 0, str);
+}
+
+static PCCERT_CONTEXT select_cert_get_selected(HWND hwnd, int selection)
+{
+    HWND lv = GetDlgItem(hwnd, IDC_SELECT_CERTS);
+    PCCERT_CONTEXT cert = NULL;
+    LVITEMW item;
+
+    if (selection < 0)
+        selection = SendMessageW(lv, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
+    if (selection < 0)
+        return NULL;
+    item.mask = LVIF_PARAM;
+    item.iItem = selection;
+    item.iSubItem = 0;
+    if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
+        cert = (PCCERT_CONTEXT)item.lParam;
+    return cert;
+}
+
+static void select_cert_update_view_button(HWND hwnd)
+{
+    HWND lv = GetDlgItem(hwnd, IDC_SELECT_CERTS);
+    int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
+
+    EnableWindow(GetDlgItem(hwnd, IDC_SELECT_VIEW_CERT), numSelected == 1);
+}
+
+struct SelectCertData
+{
+    PCCERT_CONTEXT *cert;
+    DWORD dateColumn;
+    HIMAGELIST imageList;
+    LPCWSTR title;
+    DWORD cStores;
+    HCERTSTORE *rghStores;
+    DWORD cPropSheetPages;
+    LPCPROPSHEETPAGEW rgPropSheetPages;
+    PFNCCERTDISPLAYPROC displayProc;
+    void *callbackData;
+};
+
+static void select_cert_view(HWND hwnd, PCCERT_CONTEXT cert, struct SelectCertData *data)
+{
+    CRYPTUI_VIEWCERTIFICATE_STRUCTW viewInfo;
+
+    if (data->displayProc && data->displayProc(cert, hwnd, data->callbackData))
+        return;
+    memset(&viewInfo, 0, sizeof(viewInfo));
+    viewInfo.dwSize = sizeof(viewInfo);
+    viewInfo.hwndParent = hwnd;
+    viewInfo.pCertContext = cert;
+    viewInfo.cStores = data->cStores;
+    viewInfo.rghStores = data->rghStores;
+    viewInfo.cPropSheetPages = data->cPropSheetPages;
+    viewInfo.rgPropSheetPages = data->rgPropSheetPages;
+    /* FIXME: this should be modal */
+    CryptUIDlgViewCertificateW(&viewInfo, NULL);
+}
+
+struct SortData
+{
+    HWND hwnd;
+    int column;
+};
+
+static int CALLBACK select_cert_sort_by_text(LPARAM lp1, LPARAM lp2, LPARAM lp)
+{
+    struct SortData *data = (struct SortData *)lp;
+    return cert_mgr_sort_by_text(data->hwnd, data->column, lp1, lp2);
+}
+
+struct SelectCertParam
+{
+    PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc;
+    PCCERT_CONTEXT cert;
+};
+
+static LRESULT CALLBACK select_cert_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+    struct SelectCertData *data;
+
+    switch (msg)
+    {
+    case WM_INITDIALOG:
+    {
+        struct SelectCertParam *param = (struct SelectCertParam *)lp;
+        PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc = param->pcsc;
+        HWND lv = GetDlgItem(hwnd, IDC_SELECT_CERTS);
+        DWORD i = 0;
+
+        data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data));
+        if (!data)
+            return 0;
+        data->cert = &param->cert;
+        data->dateColumn = 4 -
+         ((pcsc->dwDontUseColumn & CRYPTUI_SELECT_ISSUEDTO_COLUMN) ? 1 : 0) -
+         ((pcsc->dwDontUseColumn & CRYPTUI_SELECT_ISSUEDBY_COLUMN) ? 1 : 0) -
+         ((pcsc->dwDontUseColumn & CRYPTUI_SELECT_INTENDEDUSE_COLUMN) ? 1 : 0) -
+         ((pcsc->dwDontUseColumn & CRYPTUI_SELECT_FRIENDLYNAME_COLUMN) ? 1 : 0);
+        data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
+        if (data->imageList)
+        {
+            HBITMAP bmp;
+            COLORREF backColor = RGB(255, 0, 255);
+
+            bmp = LoadBitmapW(hInstance, MAKEINTRESOURCEW(IDB_SMALL_ICONS));
+            ImageList_AddMasked(data->imageList, bmp, backColor);
+            DeleteObject(bmp);
+            ImageList_SetBkColor(data->imageList, CLR_NONE);
+            SendMessageW(GetDlgItem(hwnd, IDC_SELECT_CERTS), LVM_SETIMAGELIST, LVSIL_SMALL,
+             (LPARAM)data->imageList);
+        }
+        data->title = pcsc->szTitle;
+        data->cStores = pcsc->cStores;
+        data->rghStores = pcsc->rghStores;
+        data->cPropSheetPages = pcsc->cPropSheetPages;
+        data->rgPropSheetPages = pcsc->rgPropSheetPages;
+        data->displayProc = pcsc->pDisplayCallback;
+        data->callbackData = pcsc->pvCallbackData;
+        SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
+
+        if (pcsc->szTitle)
+            SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)pcsc->szTitle);
+        if (pcsc->szDisplayString)
+            SendMessageW(GetDlgItem(hwnd, IDC_SELECT_DISPLAY_STRING), WM_SETTEXT, 0,
+             (LPARAM)pcsc->szDisplayString);
+        init_columns(lv, pcsc->dwDontUseColumn);
+        while (i < pcsc->cDisplayStores)
+            add_store_certs(lv, pcsc->rghDisplayStores[i++], pcsc->dwDontUseColumn,
+             pcsc->pFilterCallback, pcsc->pvCallbackData);
+        select_cert_update_view_button(hwnd);
+        break;
+    }
+    case WM_NOTIFY:
+    {
+        NMHDR *hdr = (NMHDR *)lp;
+
+        switch (hdr->code)
+        {
+        case NM_DBLCLK:
+        {
+            PCCERT_CONTEXT cert = select_cert_get_selected(hwnd, ((NMITEMACTIVATE *)lp)->iItem);
+
+            data = (struct SelectCertData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            if (cert)
+                select_cert_view(hwnd, cert, data);
+            break;
+        }
+        case LVN_COLUMNCLICK:
+        {
+            NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
+            HWND lv = GetDlgItem(hwnd, IDC_SELECT_CERTS);
+
+            /* FIXME: doesn't support swapping sort order between ascending and descending. */
+            data = (struct SelectCertData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            if (nmlv->iSubItem == data->dateColumn)
+                SendMessageW(lv, LVM_SORTITEMS, 0, (LPARAM)cert_mgr_sort_by_date);
+            else
+            {
+                struct SortData sortData;
+
+                sortData.hwnd = lv;
+                sortData.column = nmlv->iSubItem;
+                SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)&sortData,
+                 (LPARAM)select_cert_sort_by_text);
+            }
+            break;
+        }
+        }
+        break;
+    }
+    case WM_COMMAND:
+        switch (wp)
+        {
+        case IDOK:
+        {
+            PCCERT_CONTEXT cert = select_cert_get_selected(hwnd, -1);
+
+            data = (struct SelectCertData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            if (!cert)
+            {
+                WCHAR buf[40], title[40];
+
+                LoadStringW(hInstance, IDS_SELECT_CERT, buf, sizeof(buf) / sizeof(buf[0]));
+                if (!data->title)
+                    LoadStringW(hInstance, IDS_SELECT_CERT_TITLE, title,
+                     sizeof(title) / sizeof(title[0]));
+                MessageBoxW(hwnd, buf, data->title ? data->title : title, MB_OK | MB_ICONWARNING);
+                break;
+            }
+            *data->cert = CertDuplicateCertificateContext(cert);
+            free_certs(GetDlgItem(hwnd, IDC_SELECT_CERTS));
+            ImageList_Destroy(data->imageList);
+            HeapFree(GetProcessHeap(), 0, data);
+            EndDialog(hwnd, IDOK);
+            break;
+        }
+        case IDCANCEL:
+            data = (struct SelectCertData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            free_certs(GetDlgItem(hwnd, IDC_SELECT_CERTS));
+            ImageList_Destroy(data->imageList);
+            HeapFree(GetProcessHeap(), 0, data);
+            EndDialog(hwnd, IDCANCEL);
+            break;
+        case IDC_SELECT_VIEW_CERT:
+        {
+            PCCERT_CONTEXT cert = select_cert_get_selected(hwnd, -1);
+
+            data = (struct SelectCertData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            if (cert)
+                select_cert_view(hwnd, cert, data);
+            break;
+        }
+        }
+        break;
+    }
+    return 0;
+}
+
 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc)
 {
-    FIXME("%p: stub\n", pcsc);
+    struct SelectCertParam param;
+
+    TRACE("%p\n", pcsc);
+
+    if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
+    {
+        WARN("unexpected size %d\n", pcsc->dwSize);
+        SetLastError(E_INVALIDARG);
+        return NULL;
+    }
+    if (pcsc->dwFlags & CRYPTUI_SELECTCERT_MULTISELECT)
+        FIXME("ignoring CRYPTUI_SELECTCERT_MULTISELECT\n");
+    param.pcsc = pcsc;
+    param.cert = NULL;
+    DialogBoxParamW(hInstance, MAKEINTRESOURCEW(IDD_SELECT_CERT), pcsc->hwndParent,
+     select_cert_dlg_proc, (LPARAM)&param);
+    return param.cert;
+}
+
+static void free_prop_sheet_pages(PROPSHEETPAGEW *pages, DWORD num)
+{
+    DWORD i;
+
+    for (i = 0; i < num; i++)
+    {
+        if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
+            HeapFree(GetProcessHeap(), 0, (void *)pages[i].u.pszTemplate);
+        if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
+            HeapFree(GetProcessHeap(), 0, (void *)pages[i].u2.pszIcon);
+        if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
+            HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszTitle);
+        if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
+            HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszHeaderTitle);
+        if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
+         !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
+            HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszHeaderSubTitle);
+    }
+    HeapFree(GetProcessHeap(), 0, pages);
+}
+
+static PROPSHEETPAGEW *prop_sheet_pages_AtoW(LPCPROPSHEETPAGEA pages, DWORD num)
+{
+    PROPSHEETPAGEW *psp;
+    DWORD i, size = sizeof(*psp) * num;
+    LPWSTR buf;
+    int len;
+
+    psp = HeapAlloc(GetProcessHeap(), 0, size);
+    if (!psp)
+        return NULL;
+    memcpy(psp, pages, size);
+    for (i = 0; i < num; i++)
+    {
+        if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
+            psp[i].u.pszTemplate = NULL;
+        if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
+            psp[i].u2.pszIcon = NULL;
+        if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
+            psp[i].pszTitle = NULL;
+        if (pages[i].dwFlags & PSP_USECALLBACK)
+            psp[i].pfnCallback = NULL;
+        if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
+            psp[i].pszHeaderTitle = NULL;
+        if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
+         !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
+            psp[i].pszHeaderSubTitle = NULL;
+    }
+    for (i = 0; i < num; i++)
+    {
+        if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
+        {
+            len = MultiByteToWideChar(CP_ACP, 0, pages[i].u.pszTemplate, -1, NULL, 0);
+            buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (!buf)
+                goto error;
+            MultiByteToWideChar(CP_ACP, 0, pages[i].u.pszTemplate, -1, buf, len);
+            psp[i].u.pszTemplate = buf;
+        }
+        if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
+        {
+            len = MultiByteToWideChar(CP_ACP, 0, pages[i].u2.pszIcon, -1, NULL, 0);
+            buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (!buf)
+                goto error;
+            MultiByteToWideChar(CP_ACP, 0, pages[i].u2.pszIcon, -1, buf, len);
+            psp[i].u2.pszIcon = buf;
+        }
+        if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
+        {
+            len = MultiByteToWideChar(CP_ACP, 0, pages[i].pszTitle, -1, NULL, 0);
+            buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (!buf)
+                goto error;
+            MultiByteToWideChar(CP_ACP, 0, pages[i].pszTitle, -1, buf, len);
+            psp[i].pszTitle = buf;
+        }
+        if (pages[i].dwFlags & PSP_USECALLBACK)
+            FIXME("ignoring pfnCallback\n");
+        if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
+        {
+            len = MultiByteToWideChar(CP_ACP, 0, pages[i].pszHeaderTitle, -1, NULL, 0);
+            buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (!buf)
+                goto error;
+            MultiByteToWideChar(CP_ACP, 0, pages[i].pszHeaderTitle, -1, buf, len);
+            psp[i].pszHeaderTitle = buf;
+        }
+        if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
+         !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
+        {
+            len = MultiByteToWideChar(CP_ACP, 0, pages[i].pszHeaderSubTitle, -1, NULL, 0);
+            buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+            if (!buf)
+                goto error;
+            MultiByteToWideChar(CP_ACP, 0, pages[i].pszHeaderSubTitle, -1, buf, len);
+            psp[i].pszHeaderSubTitle = buf;
+        }
+    }
+    return psp;
+error:
+    free_prop_sheet_pages(psp, num);
     return NULL;
 }
 
 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA(PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc)
 {
-    FIXME("%p: stub\n", pcsc);
-    return NULL;
+    PCCERT_CONTEXT cert = NULL;
+    CRYPTUI_SELECTCERTIFICATE_STRUCTW selCertInfo;
+    LPWSTR title = NULL, display_str = NULL;
+    PROPSHEETPAGEW *pages = NULL;
+    int len;
+
+    TRACE("%p\n", pcsc);
+
+    if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
+    {
+        WARN("unexpected size %d\n", pcsc->dwSize);
+        SetLastError(E_INVALIDARG);
+        return NULL;
+    }
+    memcpy(&selCertInfo, pcsc, pcsc->dwSize);
+    if (pcsc->szTitle)
+    {
+        len = MultiByteToWideChar(CP_ACP, 0, pcsc->szTitle, -1, NULL, 0);
+        title = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        if (!title)
+            goto error;
+        MultiByteToWideChar(CP_ACP, 0, pcsc->szTitle, -1, title, len);
+        selCertInfo.szTitle = title;
+    }
+    if (pcsc->szDisplayString)
+    {
+        len = MultiByteToWideChar(CP_ACP, 0, pcsc->szDisplayString, -1, NULL, 0);
+        display_str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        if (!display_str)
+            goto error;
+        MultiByteToWideChar(CP_ACP, 0, pcsc->szDisplayString, -1, display_str, len);
+        selCertInfo.szDisplayString = display_str;
+    }
+    if (pcsc->cPropSheetPages)
+    {
+        pages = prop_sheet_pages_AtoW(pcsc->rgPropSheetPages, pcsc->cPropSheetPages);
+        if (!pages)
+            goto error;
+        selCertInfo.rgPropSheetPages = pages;
+    }
+    cert = CryptUIDlgSelectCertificateW(&selCertInfo);
+error:
+    HeapFree(GetProcessHeap(), 0, title);
+    HeapFree(GetProcessHeap(), 0, display_str);
+    if (pcsc->cPropSheetPages)
+        free_prop_sheet_pages(pages, pcsc->cPropSheetPages);
+    return cert;
 }
diff --git a/dlls/cryptui/tests/cryptui.c b/dlls/cryptui/tests/cryptui.c
index e936f2e..fbefd78 100644
--- a/dlls/cryptui/tests/cryptui.c
+++ b/dlls/cryptui/tests/cryptui.c
@@ -735,10 +735,8 @@ static LRESULT CALLBACK select_cert_hook_proc(int code, WPARAM wp, LPARAM lp)
 static BOOL WINAPI filter_proc(PCCERT_CONTEXT pCertContext, BOOL *pfInitialSelectedCert,
  void *pvCallbackData)
 {
-    todo_wine
     ok(pCertContext->cbCertEncoded == sizeof(v1CertWithValidPubKey) ||
      pCertContext->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate context\n");
-    todo_wine
     ok(pvCallbackData == (void *)0xdeadbeef, "expected 0xdeadbeef, got %p\n", pvCallbackData);
     if (pCertContext->cbCertEncoded == sizeof(iTunesCert1))
         return TRUE;
@@ -752,12 +750,9 @@ static BOOL WINAPI display_proc(PCCERT_CONTEXT pCertContext, HWND hWndSelCertDlg
  void *pvCallbackData)
 {
     display_proc_flag = 1;
-    todo_wine
     ok(pCertContext->cbCertEncoded == sizeof(v1CertWithValidPubKey) ||
      pCertContext->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate context\n");
-    todo_wine
     ok(pvCallbackData == (void *)0xdeadbeef, "expected 0xdeadbeef, got %p\n", pvCallbackData);
-    todo_wine
     ok(IsWindow(hWndSelCertDlg), "hWndSelCertDlg does not identify an existing window\n");
     if (hWndSelCertDlg)
         MessageBoxA(hWndSelCertDlg, "Wine Test", "Wine Test", MB_OKCANCEL);
@@ -788,14 +783,12 @@ static void test_crypt_ui_dlg_select_certificate(void)
     memset(&sel, 0, sizeof(sel));
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(!cert && (GetLastError() == E_INVALIDARG ||
      GetLastError() == ERROR_FILE_NOT_FOUND), /* NT4 */
      "expected E_INVALIDARG, got %08x\n", GetLastError());
     sel.dwSize = 60;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(!cert && (GetLastError() == ERROR_SUCCESS ||
      broken(GetLastError() == E_INVALIDARG)), /* Win2k8 x64 */
      "expected ERROR_SUCCESS, got %08x\n", GetLastError());
@@ -809,7 +802,6 @@ static void test_crypt_ui_dlg_select_certificate(void)
         return;
     }
     else
-        todo_wine
         ok(!cert && GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %08x\n",
          GetLastError());
 
@@ -843,16 +835,13 @@ static void test_crypt_ui_dlg_select_certificate(void)
     memset(&psp, 0, sizeof(psp));
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(!cert && GetLastError() == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %08x\n",
      GetLastError());
     button = IDOK;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
     if (cert)
-        todo_wine
         ok(cert->cbCertEncoded == sizeof(v1CertWithValidPubKey), "wrong certificate is selected\n");
     CertFreeCertificateContext(cert);
 
@@ -860,10 +849,8 @@ static void test_crypt_ui_dlg_select_certificate(void)
     sel.pvCallbackData = (void *)0xdeadbeef;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
     if (cert)
-        todo_wine
         ok(cert->cbCertEncoded == sizeof(iTunesCert1), "wrong certificate is selected\n");
     CertFreeCertificateContext(cert);
 
@@ -872,19 +859,14 @@ static void test_crypt_ui_dlg_select_certificate(void)
     sel.pDisplayCallback = display_proc;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
-    todo_wine
     ok(display_proc_flag, "display callback was not called\n");
-    todo_wine
     ok(ctrl_hwnd != NULL, "the dialog box did not display certificate\n");
     CertFreeCertificateContext(cert);
     display_proc_ret = TRUE;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
-    todo_wine
     ok(display_proc_flag, "display callback was not called\n");
     ok(!ctrl_hwnd, "the dialog box displayed certificate\n");
     CertFreeCertificateContext(cert);
@@ -894,7 +876,6 @@ static void test_crypt_ui_dlg_select_certificate(void)
     psp.dwSize = sizeof(psp);
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
     CertFreeCertificateContext(cert);
     psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_CERT_VIEW_PROP_PAGE);
@@ -902,9 +883,7 @@ static void test_crypt_ui_dlg_select_certificate(void)
     setcursel_ret = 0xdeadbeef;
     SetLastError(0xdeadbeef);
     cert = pCryptUIDlgSelectCertificateA(&sel);
-    todo_wine
     ok(cert != NULL, "CryptUIDlgSelectCertificate failed: %08x\n", GetLastError());
-    todo_wine
     ok(setcursel_ret == 0, "TabCtrl_SetCurSel returned %d\n", setcursel_ret);
     CertFreeCertificateContext(cert);
 
-- 
1.7.6.1

----------- следующая часть -----------
From b0b7c71894ac9e314aa291bf6cd9192e42120fac Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov на etersoft.ru>
Date: Wed, 7 Sep 2011 15:10:33 +0400
Subject: [eterhack 3/5] po: Update translations.

---
 po/ar.po             |   31 ++++++++++++++++++++++---------
 po/bg.po             |   33 +++++++++++++++++++++++----------
 po/ca.po             |   29 +++++++++++++++++++++--------
 po/cs.po             |   31 ++++++++++++++++++++++---------
 po/da.po             |   29 +++++++++++++++++++++--------
 po/de.po             |   30 ++++++++++++++++++++++--------
 po/el.po             |   30 +++++++++++++++++++++---------
 po/en.po             |   30 ++++++++++++++++++++++--------
 po/en_US.po          |   30 ++++++++++++++++++++++--------
 po/eo.po             |   33 +++++++++++++++++++++++----------
 po/es.po             |   29 +++++++++++++++++++++--------
 po/fa.po             |   31 ++++++++++++++++++++++---------
 po/fi.po             |   31 ++++++++++++++++++++++---------
 po/fr.po             |   30 ++++++++++++++++++++++--------
 po/he.po             |   30 ++++++++++++++++++++++--------
 po/hi.po             |   28 ++++++++++++++++++++--------
 po/hu.po             |   32 +++++++++++++++++++++++---------
 po/it.po             |   30 ++++++++++++++++++++++--------
 po/ja.po             |   30 ++++++++++++++++++++++--------
 po/ko.po             |   30 ++++++++++++++++++++++--------
 po/lt.po             |   30 ++++++++++++++++++++++--------
 po/ml.po             |   28 ++++++++++++++++++++--------
 po/nb_NO.po          |   30 ++++++++++++++++++++++--------
 po/nl.po             |   30 ++++++++++++++++++++++--------
 po/or.po             |   28 ++++++++++++++++++++--------
 po/pa.po             |   28 ++++++++++++++++++++--------
 po/pl.po             |   30 ++++++++++++++++++++++--------
 po/pt_BR.po          |   30 ++++++++++++++++++++++--------
 po/pt_PT.po          |   30 ++++++++++++++++++++++--------
 po/rm.po             |   32 ++++++++++++++++++++++----------
 po/ro.po             |   30 ++++++++++++++++++++++--------
 po/ru.po             |   30 ++++++++++++++++++++++--------
 po/sk.po             |   33 +++++++++++++++++++++++----------
 po/sl.po             |   30 ++++++++++++++++++++++--------
 po/sr_RS на cyrillic.po |   29 +++++++++++++++++++++--------
 po/sr_RS на latin.po    |   31 ++++++++++++++++++++++---------
 po/sv.po             |   30 ++++++++++++++++++++++--------
 po/te.po             |   28 ++++++++++++++++++++--------
 po/th.po             |   31 ++++++++++++++++++++++---------
 po/tr.po             |   31 ++++++++++++++++++++++---------
 po/uk.po             |   30 ++++++++++++++++++++++--------
 po/wa.po             |   33 +++++++++++++++++++++++----------
 po/wine.pot          |   28 ++++++++++++++++++++--------
 po/zh_CN.po          |   39 ++++++++++++++++++++++++++-------------
 po/zh_TW.po          |   41 +++++++++++++++++++++++++++--------------
 45 files changed, 987 insertions(+), 390 deletions(-)

diff --git a/po/ar.po b/po/ar.po
index 59151ac..5b63b01 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -1959,6 +1959,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "???????"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "???? ??&??\tCtrl+A"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6458,11 +6480,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "???????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10410,10 +10427,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/bg.po b/po/bg.po
index 45aeedc..63bd034 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1974,6 +1974,29 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "LAN връзка"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Изберете файл с тема"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Не е реализирано"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6626,11 +6649,6 @@ msgstr "Изтегляне..."
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "LAN връзка"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10624,11 +10642,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Не е реализирано"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/ca.po b/po/ca.po
index 386b7cc..7a7c4b4 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -1935,6 +1935,27 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Seleccionar &tot el text"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6388,10 +6409,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10289,10 +10306,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/cs.po b/po/cs.po
index 2e66b8e..1c10e90 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -2021,6 +2021,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "Volby"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Zvolte soubor s t?matem vzhledu"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Zat?m neimplementov?no"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Dafaultn? DirectSound"
@@ -6723,11 +6745,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "Volby"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -11091,10 +11108,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "P??kazov? ??dek"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Zat?m neimplementov?no"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/da.po b/po/da.po
index 672bc95..8e82d74 100644
--- a/po/da.po
+++ b/po/da.po
@@ -2026,6 +2026,27 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Placering"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "V?lg en tema fil"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ikke implementeret endnu"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Standard DirectSound"
@@ -6740,10 +6761,6 @@ msgstr "Henter..."
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Placering"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -11166,10 +11183,6 @@ msgstr "Unix-filsystem"
 msgid "Shell"
 msgstr "Skal"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ikke implementeret endnu"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Filbehandling"
diff --git a/po/de.po b/po/de.po
index 184935d..da3ebf6 100644
--- a/po/de.po
+++ b/po/de.po
@@ -2003,6 +2003,28 @@ msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 "Hinweis: Der private Schl?ssel des Zertifikats kann nicht exportiert werden."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Ort"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Zertifikatsspeicher w?hlen"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Zertifikatsspeicher w?hlen"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Noch nicht implementiert"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Standard DirectSound"
@@ -6517,10 +6539,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Ort"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modell"
@@ -10937,10 +10955,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Noch nicht implementiert"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/el.po b/po/el.po
index 69d4016..9a6fae0 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1963,6 +1963,27 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "????????"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6517,11 +6538,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "????????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10431,10 +10447,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/en.po b/po/en.po
index 4afd164..c05b4ca 100644
--- a/po/en.po
+++ b/po/en.po
@@ -1937,6 +1937,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Location"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Select Certificate Store"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Select Certificate Store"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Not yet implemented"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Default DirectSound"
@@ -6407,10 +6429,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Location"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10634,10 +10652,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Not yet implemented"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/en_US.po b/po/en_US.po
index 50d6ba3..f498d38 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -2001,6 +2001,28 @@ msgstr "Note: The private key for this certificate could not be opened."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Note: The private  key for this certificate is not exportable."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Location"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Select Certificate Store"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Select Certificate Store"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Not yet implemented"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Default DirectSound"
@@ -6488,10 +6510,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Location"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -10830,10 +10848,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Not yet implemented"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/eo.po b/po/eo.po
index 4d900a7..06ae40d 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1984,6 +1984,29 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "LAN Interkonekto"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "&Elekton ?ion"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Ne-implementata"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6618,11 +6641,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "LAN Interkonekto"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10629,11 +10647,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Ne-implementata"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/es.po b/po/es.po
index 57df4e2..0488744 100644
--- a/po/es.po
+++ b/po/es.po
@@ -2017,6 +2017,27 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Ubicaci?n"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Seleccione un fichero de tema"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "A?n no implementado"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound por defecto"
@@ -6876,10 +6897,6 @@ msgstr "Descargando..."
 msgid "Status"
 msgstr "Estado"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Ubicaci?n"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modelo"
@@ -11343,10 +11360,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "A?n no implementado"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/fa.po b/po/fa.po
index 5599a0d..fe05b05 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -1959,6 +1959,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "???????"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "?????? &???\tCtrl+A"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6458,11 +6480,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "???????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10413,10 +10430,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/fi.po b/po/fi.po
index cf17142..e43ee4b 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1977,6 +1977,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Sijainti"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Valitse teematiedosto"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Ei k?ytett?viss?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6681,10 +6703,6 @@ msgstr "Lataukset"
 msgid "Status"
 msgstr "Tila"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Sijainti"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Malli"
@@ -10747,11 +10765,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Ei k?ytett?viss?"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/fr.po b/po/fr.po
index 23c6c0d..52b689e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -2012,6 +2012,28 @@ msgstr "Note : la cl? priv?e de ce certificat n'a pu ?tre ouverte."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Note : la cl? priv?e de ce certificat n'est pas exportable."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Emplacement"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "S?lectionnez le magasin de certificats"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "S?lectionnez le magasin de certificats"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Pas encore impl?ment?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound par d?faut"
@@ -6510,10 +6532,6 @@ msgstr "T?l?chargements"
 msgid "Status"
 msgstr "Statut"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Emplacement"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Mod?le"
@@ -10975,10 +10993,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Pas encore impl?ment?"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "WineFile"
diff --git a/po/he.po b/po/he.po
index 41f5f92..5265aed 100644
--- a/po/he.po
+++ b/po/he.po
@@ -1964,6 +1964,28 @@ msgstr "?????? ???: ?? ???? ????? ?? ????? ?????
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "?????? ???: ????? ????? ?????? ?? ???? ???? ?????."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "?????"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "?????"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "?? ????? ????? ???? ????"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "?? ????? ?????"
+
 #: devenum.rc:32
 #, fuzzy
 msgid "Default DirectSound"
@@ -6702,10 +6724,6 @@ msgstr "??????"
 msgid "Status"
 msgstr "???"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "?????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "???"
@@ -10984,10 +11002,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "?????"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "?? ????? ?????"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "???? Wine"
diff --git a/po/hi.po b/po/hi.po
index 37d43fe..7c8a3fa 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -1939,6 +1939,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6391,10 +6411,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10271,10 +10287,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/hu.po b/po/hu.po
index 19d84c5..4bfba91 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -2044,6 +2044,29 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Hely"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Tanus?tv?ny beszerz?s"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Tanus?tv?ny beszerz?s"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Nincs implement?lva"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Alap?rtelmezett DirectSound"
@@ -6883,10 +6906,6 @@ msgstr "Let?lt?s..."
 msgid "Status"
 msgstr "?llapot"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Hely"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modell"
@@ -10984,11 +11003,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Nincs implement?lva"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/it.po b/po/it.po
index 1c34724..4becbcd 100644
--- a/po/it.po
+++ b/po/it.po
@@ -2115,6 +2115,28 @@ msgstr "Nota: impossibile aprire la chiave privata per questo certificato."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Nota: la chiave privata per questo certificato non ? esportabile."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Locazione"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Seleziona il deposito certificati"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Seleziona il deposito certificati"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Non ancora implementato"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound predefinito"
@@ -6799,10 +6821,6 @@ msgstr ""
 "#-#-#-#-#  it.po (Wine)  #-#-#-#-#\n"
 "Stato"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Locazione"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modello"
@@ -11266,10 +11284,6 @@ msgstr "unix fs"
 msgid "Shell"
 msgstr "Terminale"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Non ancora implementato"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/ja.po b/po/ja.po
index b669069..570a8fe 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1999,6 +1999,28 @@ msgstr "??: ????????????????"
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "??: ??????????????????????"
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "??"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "?????????"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "?????????"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "???"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "????? DirectSound"
@@ -6490,10 +6512,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "??"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "??"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "???"
@@ -10820,10 +10838,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "???"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "???"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/ko.po b/po/ko.po
index 62eacda..b3825f9 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -1999,6 +1999,28 @@ msgstr "??: ? ???? ?? ?? ?? ? ? ????."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "??: ? ???? ?? ?? ?? ??? ? ????."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "??"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "??? ??? ??"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "??? ??? ??"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "?? ????"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "?? ???? ???"
@@ -6482,10 +6504,6 @@ msgstr "????"
 msgid "Status"
 msgstr "??"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "??"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "??"
@@ -10792,10 +10810,6 @@ msgstr "??? ?????"
 msgid "Shell"
 msgstr "?"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "?? ????"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine ??"
diff --git a/po/lt.po b/po/lt.po
index 73652c4..0df2d69 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -2009,6 +2009,28 @@ msgstr "Pastaba: nepavyko atverti priva?iojo rakto ?iam liudijimui."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Pastaba: ?io liudijimo privatusis raktas nei?eksportuojamas."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Vieta"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "I?rinkite liudijim? saugykl?"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "I?rinkite liudijim? saugykl?"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Dar nerealizuota"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Numatytasis DirectSound"
@@ -6498,10 +6520,6 @@ msgstr "Atsiuntimai"
 msgid "Status"
 msgstr "B?sena"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Vieta"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modelis"
@@ -10863,10 +10881,6 @@ msgstr "unix fs"
 msgid "Shell"
 msgstr "Apvalkalas"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Dar nerealizuota"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine failas"
diff --git a/po/ml.po b/po/ml.po
index 5ef4f6b..a6ad5ed 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -1939,6 +1939,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6391,10 +6411,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10271,10 +10287,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 339a94b..6bee1b5 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -2103,6 +2103,28 @@ msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 "Merk: Den private n?kkelen for dette sertifikatet kan ikke eksporteres."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Plassering"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Velg sertifikatlager"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Velg sertifikatlager"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ikke implementert enn?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Standard DirectSound"
@@ -6757,10 +6779,6 @@ msgstr "Laster ned..."
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Plassering"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modell"
@@ -11142,10 +11160,6 @@ msgstr "Unix-filsystem"
 msgid "Shell"
 msgstr "Skall"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ikke implementert enn?"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Filbehandling"
diff --git a/po/nl.po b/po/nl.po
index f225e10..c47b04d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -2020,6 +2020,28 @@ msgstr ""
 "Note: De persoonlijke sleutel voor dit certificaat kan niet ge?xporteerd "
 "worden."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Locatie"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Selecteer certificatenopslag"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Selecteer certificatenopslag"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Nog niet geimplementeerd"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Standaard DirectSound"
@@ -6607,10 +6629,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Locatie"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -11017,10 +11035,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Nog niet geimplementeerd"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Winefile"
diff --git a/po/or.po b/po/or.po
index fd354ca..cfae3fd 100644
--- a/po/or.po
+++ b/po/or.po
@@ -1939,6 +1939,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6391,10 +6411,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10271,10 +10287,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/pa.po b/po/pa.po
index 3c802d0..d1ae772 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -1939,6 +1939,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6391,10 +6411,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10271,10 +10287,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/pl.po b/po/pl.po
index 71b6f38..285c39a 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -2010,6 +2010,28 @@ msgstr ""
 "Uwaga: Klucz prywatny dla tego certyfikatu jest oznaczony jako nie do "
 "eksportu."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Po?o?enie"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Wyb?r magazynu certyfikat?w"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Wyb?r magazynu certyfikat?w"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Jeszcze nie zaimplementowane"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Standardowe DirectSound"
@@ -6505,10 +6527,6 @@ msgstr "Pobrane"
 msgid "Status"
 msgstr "Stan"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Po?o?enie"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -10852,10 +10870,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Pulpit"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Jeszcze nie zaimplementowane"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 0d46a36..3a8874d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -2102,6 +2102,28 @@ msgstr "Nota: A chave privada para este certificado n?o p?de ser aberta."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Nota: A chave privada para este certificado n?o ? export?vel."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Localiza??o"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Selecione o Conjunto de Certificados"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Selecione o Conjunto de Certificados"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ainda n?o implementado"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound padr?o"
@@ -6755,10 +6777,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "Estado"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Localiza??o"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modelo"
@@ -11217,10 +11235,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Linha de comandos"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ainda n?o implementado"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Arquivo Wine"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 2e3f5fa..ae3d1d8 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -2116,6 +2116,28 @@ msgstr "Nota: A chave privada para este certificado n?o conseguiu ser aberta."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Nota: A chave privada para este certificado n?o ? export?vel."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Localiza??o"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Seleccione o Conjunto de Certificados"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Seleccione o Conjunto de Certificados"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ainda n?o implementado"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound padr?o"
@@ -6802,10 +6824,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "Estado"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Localiza??o"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modelo"
@@ -11272,10 +11290,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Linha de comandos"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ainda n?o implementado"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Ficheiro Wine"
diff --git a/po/rm.po b/po/rm.po
index f30ac48..28dc8a6 100644
--- a/po/rm.po
+++ b/po/rm.po
@@ -1951,6 +1951,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "&Options"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Na implementa"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6434,11 +6456,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "&Options"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10354,11 +10371,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Na implementa"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/ro.po b/po/ro.po
index 787c38a..3ad2117 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -2161,6 +2161,28 @@ msgstr "Not?: Cheia privat? pentru acest certificat nu a putut fi deschis?."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Not?: Cheia privat? pentru acest certificat nu este exportabil?."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Loca?ie"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Selectare depozit de certificate"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Selectare depozit de certificate"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Neimplementat ?nc?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "DirectSound implicit"
@@ -7042,10 +7064,6 @@ msgstr "Descarc..."
 msgid "Status"
 msgstr "Stare"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Loca?ie"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -11512,10 +11530,6 @@ msgstr "director unix"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Neimplementat ?nc?"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/ru.po b/po/ru.po
index 3e608b7..bbcfdab 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -2005,6 +2005,28 @@ msgstr "Примечание: Открыть закрытый ключ этог
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Примечание: Закрытый ключ этого сертификата не экспортируемый."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Размещение"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Выбор хранилища сертификатов"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Выбор хранилища сертификатов"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ещё не реализовано"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Стандартный DirectSound"
@@ -6496,10 +6518,6 @@ msgstr "Загрузки"
 msgid "Status"
 msgstr "Состояние"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Размещение"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Модель"
@@ -10840,10 +10858,6 @@ msgstr "Основная файловая система"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ещё не реализовано"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/sk.po b/po/sk.po
index 63bb98d..ee1c893 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1965,6 +1965,29 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "Inform?cie"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Nem??em vytvori? alebo pou?i? okno."
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Neimplementovan?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6554,11 +6577,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "Inform?cie"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10616,11 +10634,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Neimplementovan?"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/sl.po b/po/sl.po
index 972bc26..e93461c 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -2014,6 +2014,28 @@ msgstr "Opomba: zasebnega klju?a ni mogo?e odpreti."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Opomba: zasebnega klju?a za to potrdilo ni mogo?e izvoziti."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Mesto"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Izberite shrambo potrdila"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Izberite shrambo potrdila"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ni ?e podprto"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Privzeta naprava DirectSound"
@@ -6522,10 +6544,6 @@ msgstr "Prejemi"
 msgid "Status"
 msgstr "Stanje"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Mesto"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -10893,10 +10911,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Lupina"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ni ?e podprto"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Datoteka Wine"
diff --git a/po/sr_RS на cyrillic.po b/po/sr_RS на cyrillic.po
index e05a060..4e4bef5 100644
--- a/po/sr_RS на cyrillic.po
+++ b/po/sr_RS на cyrillic.po
@@ -1994,6 +1994,27 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Локаци?а"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Изабери &све"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Подразумевани DirectSound"
@@ -6758,10 +6779,6 @@ msgstr "При?еми"
 msgid "Status"
 msgstr "Ста?е"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Локаци?а"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Модел"
@@ -10814,10 +10831,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/sr_RS на latin.po b/po/sr_RS на latin.po
index f7d9604..8c3ff0b 100644
--- a/po/sr_RS на latin.po
+++ b/po/sr_RS на latin.po
@@ -2021,6 +2021,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Lokacija"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Izaberite temu"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "Nije jos u programu"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Podrazumevani DirectSound"
@@ -6806,10 +6828,6 @@ msgstr "Prijemi"
 msgid "Status"
 msgstr "Stanje"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Lokacija"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Model"
@@ -10888,11 +10906,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "Nije jos u programu"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/sv.po b/po/sv.po
index 422eb68..93cefde 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -2012,6 +2012,28 @@ msgstr "Obs: Den privata nyckeln f?r detta certifikat kunde inte ?ppnas."
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr "Obs: Den privata nyckeln f?r detta certifikat kan inte exporteras."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Plats"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "V?lj certifikatlager"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "V?lj certifikatlager"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Inte implementerat ?nnu"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "F?rvalt DirectSound"
@@ -6510,10 +6532,6 @@ msgstr "Nedladdningar"
 msgid "Status"
 msgstr "Status"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Plats"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Modell"
@@ -10857,10 +10875,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Skal"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Inte implementerat ?nnu"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Winefile"
diff --git a/po/te.po b/po/te.po
index 5f99d68..b7cb90e 100644
--- a/po/te.po
+++ b/po/te.po
@@ -1939,6 +1939,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6391,10 +6411,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10271,10 +10287,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/th.po b/po/th.po
index 0011bba..03d54d8 100644
--- a/po/th.po
+++ b/po/th.po
@@ -1963,6 +1963,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "??????????"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "????????????\tCtrl+A"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6517,11 +6539,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "??????????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10461,10 +10478,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/tr.po b/po/tr.po
index 953eda8..ad5a15b 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -2003,6 +2003,28 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "LAN Ba?lant?s?"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Tema dosyas? se?in"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Hen?z tamamlanmad?"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6860,11 +6882,6 @@ msgstr "?ndiriliyor..."
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "LAN Ba?lant?s?"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -11274,10 +11291,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Kabuk"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Hen?z tamamlanmad?"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine Dosya Y?neticisi"
diff --git a/po/uk.po b/po/uk.po
index df0c8cf..ae9ea9e 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -2004,6 +2004,28 @@ msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 "Увага: Приватний ключ для цього сертиф?кату не може бути експортований."
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "Розм?щення"
+
+#: cryptui.rc:176
+#, fuzzy
+msgid "Select Certificate"
+msgstr "Виб?р сховища сертиф?кат?в"
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "Виб?р сховища сертиф?кат?в"
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr "Ще не реал?зовано"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr "Стандартний DirectSound"
@@ -6492,10 +6514,6 @@ msgstr "Завантаження"
 msgid "Status"
 msgstr "Стан"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "Розм?щення"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "Модель"
@@ -10822,10 +10840,6 @@ msgstr "unixfs"
 msgid "Shell"
 msgstr "Shell"
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr "Ще не реал?зовано"
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr "Wine File"
diff --git a/po/wa.po b/po/wa.po
index 48e55f0..64bd7da 100644
--- a/po/wa.po
+++ b/po/wa.po
@@ -1965,6 +1965,29 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "Inform?cion"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "&Tchwezi totafwait"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr "N?n co possibe"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6476,11 +6499,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "Inform?cion"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10439,11 +10457,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr "N?n co possibe"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/wine.pot b/po/wine.pot
index c790719..4a33453 100644
--- a/po/wine.pot
+++ b/po/wine.pot
@@ -1932,6 +1932,26 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr ""
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+msgid "Select a certificate"
+msgstr ""
+
+#: cryptui.rc:178 winefile.rc:105
+msgid "Not yet implemented"
+msgstr ""
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6369,10 +6389,6 @@ msgstr ""
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-msgid "Location"
-msgstr ""
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10241,10 +10257,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-msgid "Not yet implemented"
-msgstr ""
-
 #: winefile.rc:106
 msgid "Wine File"
 msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 8676a85..b80df0a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1987,6 +1987,32 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+msgid "Location"
+msgstr "??"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "??????"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr ""
+"#-#-#-#-#  zh_CN.po (Wine)  #-#-#-#-#\n"
+"??????\n"
+"#-#-#-#-#  zh_CN.po (Wine)  #-#-#-#-#\n"
+"???"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6740,10 +6766,6 @@ msgstr "Downloads"
 msgid "Status"
 msgstr "??"
 
-#: shell32.rc:149
-msgid "Location"
-msgstr "??"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr "??"
@@ -10789,15 +10811,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr ""
-"#-#-#-#-#  zh_CN.po (Wine)  #-#-#-#-#\n"
-"??????\n"
-"#-#-#-#-#  zh_CN.po (Wine)  #-#-#-#-#\n"
-"???"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 3af9028..c501e93 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1998,6 +1998,33 @@ msgstr ""
 msgid "Note: The private  key for this certificate is not exportable."
 msgstr ""
 
+#: cryptui.rc:174
+msgid "Intended Use"
+msgstr ""
+
+#: cryptui.rc:175 shell32.rc:149
+#, fuzzy
+msgid "Location"
+msgstr "??????"
+
+#: cryptui.rc:176
+msgid "Select Certificate"
+msgstr ""
+
+#: cryptui.rc:177
+#, fuzzy
+msgid "Select a certificate"
+msgstr "??????????"
+
+#: cryptui.rc:178 winefile.rc:105
+#, fuzzy
+msgid "Not yet implemented"
+msgstr ""
+"#-#-#-#-#  zh_TW.po (Wine)  #-#-#-#-#\n"
+"??????\n"
+"#-#-#-#-#  zh_TW.po (Wine)  #-#-#-#-#\n"
+"???"
+
 #: devenum.rc:32
 msgid "Default DirectSound"
 msgstr ""
@@ -6791,11 +6818,6 @@ msgstr "????..."
 msgid "Status"
 msgstr ""
 
-#: shell32.rc:149
-#, fuzzy
-msgid "Location"
-msgstr "??????"
-
 #: shell32.rc:150
 msgid "Model"
 msgstr ""
@@ -10854,15 +10876,6 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: winefile.rc:105
-#, fuzzy
-msgid "Not yet implemented"
-msgstr ""
-"#-#-#-#-#  zh_TW.po (Wine)  #-#-#-#-#\n"
-"??????\n"
-"#-#-#-#-#  zh_TW.po (Wine)  #-#-#-#-#\n"
-"???"
-
 #: winefile.rc:106
 #, fuzzy
 msgid "Wine File"
-- 
1.7.6.1

----------- следующая часть -----------
From 8b48b8eeb8d6d1735b730a31963c059526a0da70 Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov на etersoft.ru>
Date: Wed, 7 Sep 2011 15:17:27 +0400
Subject: [eterhack 4/5] po: Update Russian translation for cryptui (eterbug
 #7119).

---
 po/ru.po |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/po/ru.po b/po/ru.po
index bbcfdab..7174692 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -2007,21 +2007,19 @@ msgstr "Примечание: Закрытый ключ этого сертиф
 
 #: cryptui.rc:174
 msgid "Intended Use"
-msgstr ""
+msgstr "Назначение"
 
 #: cryptui.rc:175 shell32.rc:149
 msgid "Location"
 msgstr "Размещение"
 
 #: cryptui.rc:176
-#, fuzzy
 msgid "Select Certificate"
-msgstr "Выбор хранилища сертификатов"
+msgstr "Выбор сертификата"
 
 #: cryptui.rc:177
-#, fuzzy
 msgid "Select a certificate"
-msgstr "Выбор хранилища сертификатов"
+msgstr "Выберите сертификат"
 
 #: cryptui.rc:178 winefile.rc:105
 msgid "Not yet implemented"
-- 
1.7.6.1

----------- следующая часть -----------
From 7749626bf8fddbd3798ec8538c85249a981f8ad8 Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov на etersoft.ru>
Date: Wed, 7 Sep 2011 15:34:51 +0400
Subject: [eterhack 5/5] cryptui: Update Russian translation (eterbug #7119).

---
 dlls/cryptui/cryptui_Ru.rc |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/cryptui/cryptui_Ru.rc b/dlls/cryptui/cryptui_Ru.rc
index 02600d8..8357de1 100644
--- a/dlls/cryptui/cryptui_Ru.rc
+++ b/dlls/cryptui/cryptui_Ru.rc
@@ -314,3 +314,15 @@ BEGIN
     LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER,
     115,67,174,100
 END
+
+IDD_SELECT_CERT DIALOG 0,0,278,157
+CAPTION "Выбор сертификата"
+FONT 8, "MS Shell Dlg"
+BEGIN
+  LTEXT "Выберите сертификат, который вы хотите использовать", IDC_SELECT_DISPLAY_STRING, 7,7,264,26
+  CONTROL "", IDC_SELECT_CERTS, "SysListView32",
+    LVS_REPORT|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 7,40,264,89
+  PUSHBUTTON "OK", IDOK, 59,136,51,14, BS_DEFPUSHBUTTON
+  PUSHBUTTON "Отмена", IDCANCEL, 117,136,51,14
+  PUSHBUTTON "&Просмотреть сертификат", IDC_SELECT_VIEW_CERT, 175,136,97,14, WS_DISABLED
+END
-- 
1.7.6.1



Подробная информация о списке рассылки Wine-patches