Commit 21404598 authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

cryptui: Select export format based on input in CryptUIWizExport.

parent 15a8ea6a
......@@ -5527,6 +5527,24 @@ static LRESULT CALLBACK export_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
return ret;
}
static BOOL export_info_has_private_key(PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo)
{
BOOL ret = FALSE;
if (pExportInfo->dwSubjectChoice == CRYPTUI_WIZ_EXPORT_CERT_CONTEXT)
{
DWORD size;
/* If there's a CRYPT_KEY_PROV_INFO set for this cert, assume the
* cert has a private key.
*/
if (CertGetCertificateContextProperty(pExportInfo->u.pCertContext,
CERT_KEY_PROV_INFO_PROP_ID, NULL, &size))
ret = TRUE;
}
return ret;
}
static LRESULT CALLBACK export_format_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
LPARAM lp)
{
......@@ -5538,10 +5556,28 @@ static LRESULT CALLBACK export_format_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
case WM_INITDIALOG:
{
PROPSHEETPAGEW *page = (PROPSHEETPAGEW *)lp;
int defaultFormatID;
data = (struct ExportWizData *)page->lParam;
SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
SendMessageW(GetDlgItem(hwnd, IDC_EXPORT_FORMAT_DER), BM_CLICK, 0, 0);
switch (data->contextInfo.dwExportFormat)
{
case CRYPTUI_WIZ_EXPORT_FORMAT_BASE64:
defaultFormatID = IDC_EXPORT_FORMAT_BASE64;
break;
case CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7:
defaultFormatID = IDC_EXPORT_FORMAT_CMS;
break;
case CRYPTUI_WIZ_EXPORT_FORMAT_PFX:
if (export_info_has_private_key(data->pExportInfo))
defaultFormatID = IDC_EXPORT_FORMAT_PFX;
else
defaultFormatID = IDC_EXPORT_FORMAT_DER;
break;
default:
defaultFormatID = IDC_EXPORT_FORMAT_DER;
}
SendMessageW(GetDlgItem(hwnd, defaultFormatID), BM_CLICK, 0, 0);
break;
}
case WM_NOTIFY:
......@@ -5846,19 +5882,8 @@ static LRESULT CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
data = (struct ExportWizData *)page->lParam;
SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
if (data->pExportInfo->dwSubjectChoice ==
CRYPTUI_WIZ_EXPORT_CERT_CONTEXT)
{
DWORD size;
/* If there's a CRYPT_KEY_PROV_INFO set for this cert, assume the
* cert has a private key.
*/
if (CertGetCertificateContextProperty(
data->pExportInfo->u.pCertContext, CERT_KEY_PROV_INFO_PROP_ID,
NULL, &size))
if (export_info_has_private_key(data->pExportInfo))
EnableWindow(GetDlgItem(hwnd, IDC_EXPORT_FORMAT_PFX), TRUE);
}
break;
}
case WM_NOTIFY:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment