Juan Lang : cryptui: Save purposes in certificate manager dialog' s advanced dialog.
Alexandre Julliard
julliard at winehq.org
Fri Jan 9 09:52:31 CST 2009
Module: wine
Branch: master
Commit: dfc8b91ca265e09c0a2563660d08574bb65ec95a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=dfc8b91ca265e09c0a2563660d08574bb65ec95a
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Jan 7 16:58:51 2009 -0800
cryptui: Save purposes in certificate manager dialog's advanced dialog.
---
dlls/cryptui/main.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 301a759..843f888 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -420,6 +420,66 @@ static LONG_PTR find_oid_in_list(HWND lv, LPCSTR oid)
return ret;
}
+static void save_cert_mgr_usages(HWND hwnd)
+{
+ static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
+ 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
+ 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
+ 'r','p','o','s','e',0 };
+ HKEY key;
+ HWND lv = GetDlgItem(hwnd, IDC_CERTIFICATE_USAGES);
+ int purposes = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
+ LVITEMW item;
+ LPSTR str = NULL;
+
+ item.mask = LVIF_STATE | LVIF_PARAM;
+ item.iSubItem = 0;
+ item.stateMask = LVIS_STATEIMAGEMASK;
+ for (i = 0; i < purposes; i++)
+ {
+ item.iItem = i;
+ if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
+ {
+ int state = item.state >> 12;
+
+ if (state == CheckBitmapIndexUnchecked)
+ {
+ CRYPT_OID_INFO *info = (CRYPT_OID_INFO *)item.lParam;
+ BOOL firstString = TRUE;
+
+ if (!str)
+ str = HeapAlloc(GetProcessHeap(), 0,
+ strlen(info->pszOID) + 1);
+ else
+ {
+ str = HeapReAlloc(GetProcessHeap(), 0, str,
+ strlen(str) + 1 + strlen(info->pszOID) + 1);
+ firstString = FALSE;
+ }
+ if (str)
+ {
+ LPSTR ptr = firstString ? str : str + strlen(str);
+
+ if (!firstString)
+ *ptr++ = ',';
+ strcpy(ptr, info->pszOID);
+ }
+ }
+ }
+ }
+ if (!RegCreateKeyExW(HKEY_CURRENT_USER, keyName, 0, NULL, 0, KEY_ALL_ACCESS,
+ NULL, &key, NULL))
+ {
+ if (str)
+ RegSetValueExA(key, "Purpose", 0, REG_SZ, (const BYTE *)str,
+ strlen(str) + 1);
+ else
+ RegDeleteValueA(key, "Purpose");
+ RegCloseKey(key);
+ }
+ HeapFree(GetProcessHeap(), 0, str);
+}
+
static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg,
WPARAM wp, LPARAM lp)
{
@@ -489,6 +549,7 @@ static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg,
switch (wp)
{
case IDOK:
+ save_cert_mgr_usages(hwnd);
ImageList_Destroy((HIMAGELIST)GetWindowLongPtrW(hwnd, DWLP_USER));
EndDialog(hwnd, IDOK);
break;
More information about the wine-cvs
mailing list