cryptui: Select export format based on input in CryptUIWizExport.
This commit is contained in:
parent
15a8ea6a51
commit
214045988f
|
@ -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))
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_EXPORT_FORMAT_PFX), TRUE);
|
||||
}
|
||||
if (export_info_has_private_key(data->pExportInfo))
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_EXPORT_FORMAT_PFX), TRUE);
|
||||
break;
|
||||
}
|
||||
case WM_NOTIFY:
|
||||
|
|
Loading…
Reference in New Issue