https://git.reactos.org/?p=reactos.git;a=commitdiff;h=20c427d29e0da68bd2eb51...
commit 20c427d29e0da68bd2eb51fe70db8de17a2fa337 Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Fri Jan 25 13:20:18 2019 +0100 Commit: Amine Khaldi amine.khaldi@reactos.org CommitDate: Fri Jan 25 13:20:18 2019 +0100
[CRYPTUI] Sync with Wine Staging 4.0. CORE-15682 --- dll/win32/cryptui/cryptuires.h | 12 + dll/win32/cryptui/lang/cryptui_De.rc | 17 + dll/win32/cryptui/lang/cryptui_En.rc | 17 + dll/win32/cryptui/lang/cryptui_Fr.rc | 17 + dll/win32/cryptui/lang/cryptui_He.rc | 17 + dll/win32/cryptui/lang/cryptui_It.rc | 17 + dll/win32/cryptui/lang/cryptui_Ko.rc | 17 + dll/win32/cryptui/lang/cryptui_Lt.rc | 17 + dll/win32/cryptui/lang/cryptui_Nl.rc | 17 + dll/win32/cryptui/lang/cryptui_No.rc | 17 + dll/win32/cryptui/lang/cryptui_Pl.rc | 17 + dll/win32/cryptui/lang/cryptui_Pt.rc | 17 + dll/win32/cryptui/lang/cryptui_Ro.rc | 17 + dll/win32/cryptui/lang/cryptui_Ru.rc | 17 + dll/win32/cryptui/lang/cryptui_Sq.rc | 17 + dll/win32/cryptui/lang/cryptui_Tr.rc | 17 + dll/win32/cryptui/lang/cryptui_Uk.rc | 17 + dll/win32/cryptui/lang/cryptui_Zh.rc | 17 +- dll/win32/cryptui/main.c | 599 +++++++++++++++++++++++++++++++++-- media/doc/README.WINE | 2 +- 20 files changed, 876 insertions(+), 26 deletions(-)
diff --git a/dll/win32/cryptui/cryptuires.h b/dll/win32/cryptui/cryptuires.h index df321df463..e4f74242b3 100644 --- a/dll/win32/cryptui/cryptuires.h +++ b/dll/win32/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/dll/win32/cryptui/lang/cryptui_De.rc b/dll/win32/cryptui/lang/cryptui_De.rc index 5686cf2716..f6d2178b94 100644 --- a/dll/win32/cryptui/lang/cryptui_De.rc +++ b/dll/win32/cryptui/lang/cryptui_De.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Die Passwörter sind unterschiedlich." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Hinweis: Der private Schlüssel des Zertifikats konnte nicht geöffnet werden." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Hinweis: Der private Schlüssel des Zertifikats kann nicht exportiert werden." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -455,3 +460,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/dll/win32/cryptui/lang/cryptui_En.rc b/dll/win32/cryptui/lang/cryptui_En.rc index a5561751fa..a3da8ed9a1 100644 --- a/dll/win32/cryptui/lang/cryptui_En.rc +++ b/dll/win32/cryptui/lang/cryptui_En.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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Fr.rc b/dll/win32/cryptui/lang/cryptui_Fr.rc index 73c246b9af..489c6870af 100644 --- a/dll/win32/cryptui/lang/cryptui_Fr.rc +++ b/dll/win32/cryptui/lang/cryptui_Fr.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Les mots de passe ne correspondent pas." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Note : la clé privée de ce certificat n'a pu être ouverte." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Note : la clé privée de ce certificat n'est pas 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_He.rc b/dll/win32/cryptui/lang/cryptui_He.rc index 7ab2d3ff94..eee5d952a6 100644 --- a/dll/win32/cryptui/lang/cryptui_He.rc +++ b/dll/win32/cryptui/lang/cryptui_He.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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_It.rc b/dll/win32/cryptui/lang/cryptui_It.rc index 53e092cdf4..bbbbb6026d 100644 --- a/dll/win32/cryptui/lang/cryptui_It.rc +++ b/dll/win32/cryptui/lang/cryptui_It.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Le password non corrispondono." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Nota: impossibile aprire la chiave privata per questo certificato." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: la chiave privata per questo certificato non è esportabile." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Ko.rc b/dll/win32/cryptui/lang/cryptui_Ko.rc index ce386773e4..2064b2308a 100644 --- a/dll/win32/cryptui/lang/cryptui_Ko.rc +++ b/dll/win32/cryptui/lang/cryptui_Ko.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "이 암호는 맞지 않습니다." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "주의: 이 인증서를 위한 개인 키를 열 수 없습니다." IDS_EXPORT_PRIVATE_KEY_NON_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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Lt.rc b/dll/win32/cryptui/lang/cryptui_Lt.rc index 8ea7d0055c..ed37db639a 100644 --- a/dll/win32/cryptui/lang/cryptui_Lt.rc +++ b/dll/win32/cryptui/lang/cryptui_Lt.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Slaptažodžiai nesutampa." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Pastaba: nepavyko atverti privačiojo rakto šiam liudijimui." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Pastaba: šio liudijimo privatusis raktas neišeksportuojamas." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Nl.rc b/dll/win32/cryptui/lang/cryptui_Nl.rc index dbb228bf74..2068e6e3aa 100644 --- a/dll/win32/cryptui/lang/cryptui_Nl.rc +++ b/dll/win32/cryptui/lang/cryptui_Nl.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "De wachtwoorden zijn niet gelijk." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Noot: De persoonlijke sleutel voor dit certificaat kon niet geopend worden." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Noot: De persoonlijke sleutel voor dit certificaat kan niet geëxporteerd worden." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -455,3 +460,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/dll/win32/cryptui/lang/cryptui_No.rc b/dll/win32/cryptui/lang/cryptui_No.rc index 8f20a86862..640f3cde8a 100644 --- a/dll/win32/cryptui/lang/cryptui_No.rc +++ b/dll/win32/cryptui/lang/cryptui_No.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Passordene er ikke like." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Merk: Klarte ikke åpne den private nøkkelen for dette sertifikatet." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Merk: Den private nøkkelen for dette sertifikatet kan ikke eksporteres." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -453,3 +458,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/dll/win32/cryptui/lang/cryptui_Pl.rc b/dll/win32/cryptui/lang/cryptui_Pl.rc index 5fd726ad12..58c2bdb179 100644 --- a/dll/win32/cryptui/lang/cryptui_Pl.rc +++ b/dll/win32/cryptui/lang/cryptui_Pl.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Niezgodność haseł." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Uwaga: Nie można otworzyć klucza prywatnego dla tego certyfikatu." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Uwaga: Klucz prywatny dla tego certyfikatu jest oznaczony jako nie do eksportu." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Pt.rc b/dll/win32/cryptui/lang/cryptui_Pt.rc index bfd43ab37c..a135c60aff 100644 --- a/dll/win32/cryptui/lang/cryptui_Pt.rc +++ b/dll/win32/cryptui/lang/cryptui_Pt.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "As palavras chave não coincidem." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Nota: A chave privada para este certificado não conseguiu ser aberta." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Nota: A chave privada para este certificado não é exportável." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -453,3 +458,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/dll/win32/cryptui/lang/cryptui_Ro.rc b/dll/win32/cryptui/lang/cryptui_Ro.rc index d510a6132d..ce153d4827 100644 --- a/dll/win32/cryptui/lang/cryptui_Ro.rc +++ b/dll/win32/cryptui/lang/cryptui_Ro.rc @@ -174,6 +174,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Parolele nu se potrivesc." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Notă: Cheia privată pentru acest certificat nu a putut fi deschisă." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Notă: Cheia privată pentru acest certificat nu este exportabilă." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -460,3 +465,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/dll/win32/cryptui/lang/cryptui_Ru.rc b/dll/win32/cryptui/lang/cryptui_Ru.rc index 516a15cb59..a4eaff7d70 100644 --- a/dll/win32/cryptui/lang/cryptui_Ru.rc +++ b/dll/win32/cryptui/lang/cryptui_Ru.rc @@ -173,6 +173,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Пароли не совпадают." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Замечание: Закрытый ключ для этого сертификата не может быть открыт." IDS_EXPORT_PRIVATE_KEY_NON_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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -459,3 +464,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/dll/win32/cryptui/lang/cryptui_Sq.rc b/dll/win32/cryptui/lang/cryptui_Sq.rc index 29dec53c98..f261c42526 100644 --- a/dll/win32/cryptui/lang/cryptui_Sq.rc +++ b/dll/win32/cryptui/lang/cryptui_Sq.rc @@ -172,6 +172,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Passwordi nuk perputhet." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Shenim: Çelësi privat për këtë certifikatë nuk mund të hapet." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Shenim: Çelësi privat për këtë certifikatë nuk është eksportueshme." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -458,3 +463,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/dll/win32/cryptui/lang/cryptui_Tr.rc b/dll/win32/cryptui/lang/cryptui_Tr.rc index 4f3e25173b..20fa37cb79 100644 --- a/dll/win32/cryptui/lang/cryptui_Tr.rc +++ b/dll/win32/cryptui/lang/cryptui_Tr.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Şifreler uyuşmuyor." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Önemli: Bu onay belgesinin husûsî anahtarı açılamadı." IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE "Önemli: Bu onay belgesinin husûsî anahtarı verilebilen değil." + 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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -457,3 +462,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/dll/win32/cryptui/lang/cryptui_Uk.rc b/dll/win32/cryptui/lang/cryptui_Uk.rc index 7664b0f432..e91766735f 100644 --- a/dll/win32/cryptui/lang/cryptui_Uk.rc +++ b/dll/win32/cryptui/lang/cryptui_Uk.rc @@ -171,6 +171,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "Паролі не співпадають." IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "Увага: Приватний ключ для цього сертифікату не може бути відкритий." IDS_EXPORT_PRIVATE_KEY_NON_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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -453,3 +458,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/dll/win32/cryptui/lang/cryptui_Zh.rc b/dll/win32/cryptui/lang/cryptui_Zh.rc index a2efa87c53..7e3ba5da7b 100644 --- a/dll/win32/cryptui/lang/cryptui_Zh.rc +++ b/dll/win32/cryptui/lang/cryptui_Zh.rc @@ -175,6 +175,11 @@ STRINGTABLE IDS_EXPORT_PASSWORD_MISMATCH "密码不匹配。" IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE "注意: 无法打开此证书的专用密钥。" IDS_EXPORT_PRIVATE_KEY_NON_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" }
IDD_GENERAL DIALOGEX 0, 0, 255, 236 @@ -462,4 +467,14 @@ BEGIN 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/dll/win32/cryptui/main.c b/dll/win32/cryptui/main.c index 4ac37c96df..41938f5177 100644 --- a/dll/win32/cryptui/main.c +++ b/dll/win32/cryptui/main.c @@ -46,6 +46,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(cryptui);
static HINSTANCE hInstance;
+static const WCHAR empty[] = {0}; + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); @@ -62,6 +64,14 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) return TRUE; }
+static WCHAR *strdupAtoW( const char *str ) +{ + DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 ); + WCHAR *ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len ); + return ret; +} + #define MAX_STRING_LEN 512
static void add_cert_columns(HWND hwnd) @@ -796,8 +806,6 @@ static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg,
static void cert_mgr_clear_cert_selection(HWND hwnd) { - WCHAR empty[] = { 0 }; - EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), FALSE); EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), FALSE); EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), FALSE); @@ -837,10 +845,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;
@@ -879,7 +885,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++) { @@ -895,10 +901,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, @@ -925,25 +931,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, ARRAY_SIZE(buf)); - 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); + } +} + +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;
- LoadStringW(hInstance, IDS_ALLOWED_PURPOSE_ALL, buf, ARRAY_SIZE(buf)); - SendMessageW(text, WM_SETTEXT, 0, (LPARAM)buf); + get_cert_usages(cert, &str); + if (str) + { + SendMessageW(text, WM_SETTEXT, 0, (LPARAM)str); + HeapFree(GetProcessHeap(), 0, str); } }
@@ -1148,7 +1166,6 @@ static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, break; case LVN_ITEMCHANGED: { - WCHAR empty[] = { 0 }; NMITEMACTIVATE *nm = (NMITEMACTIVATE*)lp; HWND lv = GetDlgItem(hwnd, IDC_MGR_CERTS); int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0); @@ -3480,7 +3497,7 @@ static void set_general_cert_properties(HWND hwnd, struct edit_cert_data *data) static void set_cert_string_property(PCCERT_CONTEXT cert, DWORD prop, LPWSTR str) { - if (str && strlenW(str)) + if (str && *str) { CRYPT_DATA_BLOB blob;
@@ -4887,7 +4904,7 @@ static const WCHAR filter_cms[] = { '*','.','s','p','c',';','*','.', 'p','7','b',0 }; static const WCHAR filter_all[] = { '*','.','*',0 };
-static struct StringToFilter +static const struct { int id; DWORD allowFlags; @@ -6983,16 +7000,550 @@ 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, ARRAY_SIZE(buf)); + SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column); + } + if (!(flags & CRYPTUI_SELECT_ISSUEDBY_COLUMN)) + { + LoadStringW(hInstance, IDS_ISSUER_COLUMN, buf, ARRAY_SIZE(buf)); + SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column); + } + if (!(flags & CRYPTUI_SELECT_INTENDEDUSE_COLUMN)) + { + LoadStringW(hInstance, IDS_INTENDED_USE_COLUMN, buf, ARRAY_SIZE(buf)); + SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column); + } + if (!(flags & CRYPTUI_SELECT_FRIENDLYNAME_COLUMN)) + { + LoadStringW(hInstance, IDS_FRIENDLY_NAME_COLUMN, buf, ARRAY_SIZE(buf)); + SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column); + } + if (!(flags & CRYPTUI_SELECT_EXPIRATION_COLUMN)) + { + LoadStringW(hInstance, IDS_EXPIRATION_COLUMN, buf, ARRAY_SIZE(buf)); + SendMessageW(lv, LVM_INSERTCOLUMNW, i++, (LPARAM)&column); + } + if (!(flags & CRYPTUI_SELECT_LOCATION_COLUMN)) + { + LoadStringW(hInstance, IDS_LOCATION_COLUMN, buf, ARRAY_SIZE(buf)); + 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, ARRAY_SIZE(dateFmt)); + FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime); + GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf, ARRAY_SIZE(buf)); + 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, ARRAY_SIZE(buf)); + 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 = ¶m->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, ARRAY_SIZE(buf)); + if (!data->title) + LoadStringW(hInstance, IDS_SELECT_CERT_TITLE, title, ARRAY_SIZE(title)); + 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)¶m); + 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; + + 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)) + { + if (!(psp[i].u.pszTemplate = strdupAtoW( pages[i].u.pszTemplate ))) goto error; + } + if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon)) + { + if (!(psp[i].u2.pszIcon = strdupAtoW( pages[i].u2.pszIcon ))) goto error; + } + if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle)) + { + if (!(psp[i].pszTitle = strdupAtoW( pages[i].pszTitle ))) goto error; + } + if (pages[i].dwFlags & PSP_USECALLBACK) + FIXME("ignoring pfnCallback\n"); + if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle)) + { + if (!(psp[i].pszHeaderTitle = strdupAtoW( pages[i].pszHeaderTitle ))) goto error; + } + if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) && + !IS_INTRESOURCE(pages[i].pszHeaderSubTitle)) + { + if (!(psp[i].pszHeaderSubTitle = strdupAtoW( pages[i].pszHeaderSubTitle ))) goto error; + } + } + 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; + + 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) + { + if (!(title = strdupAtoW( pcsc->szTitle ))) goto error; + selCertInfo.szTitle = title; + } + if (pcsc->szDisplayString) + { + if (!(display_str = strdupAtoW( pcsc->szDisplayString ))) goto error; + 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; }
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, diff --git a/media/doc/README.WINE b/media/doc/README.WINE index cdf4cda9c6..d2f702ab60 100644 --- a/media/doc/README.WINE +++ b/media/doc/README.WINE @@ -62,7 +62,7 @@ reactos/dll/win32/crypt32 # Synced to WineStaging-4.0 reactos/dll/win32/cryptdlg # Synced to WineStaging-3.3 reactos/dll/win32/cryptdll # Synced to WineStaging-3.3 reactos/dll/win32/cryptnet # Synced to WineStaging-3.3 -reactos/dll/win32/cryptui # Synced to WineStaging-3.17 +reactos/dll/win32/cryptui # Synced to WineStaging-4.0 reactos/dll/win32/dbghelp # Synced to WineStaging-3.9 reactos/dll/win32/dciman32 # Synced to WineStaging-3.3 reactos/dll/win32/faultrep # Synced to WineStaging-2.9