Juan Lang : cryptdlg: Implement CertViewPropertiesW on top of CryptUIDlgViewCertificateW.
Alexandre Julliard
julliard at winehq.org
Tue Sep 23 09:28:25 CDT 2008
Module: wine
Branch: master
Commit: 0ff7bf13f68a3506c1b4c23ecbca327501b0a88c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0ff7bf13f68a3506c1b4c23ecbca327501b0a88c
Author: Juan Lang <juan.lang at gmail.com>
Date: Mon Sep 22 13:07:38 2008 -0700
cryptdlg: Implement CertViewPropertiesW on top of CryptUIDlgViewCertificateW.
---
dlls/cryptdlg/Makefile.in | 2 +-
dlls/cryptdlg/main.c | 58 +++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/dlls/cryptdlg/Makefile.in b/dlls/cryptdlg/Makefile.in
index bb06a0b..a883c27 100644
--- a/dlls/cryptdlg/Makefile.in
+++ b/dlls/cryptdlg/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = cryptdlg.dll
-IMPORTS = crypt32 wintrust kernel32
+IMPORTS = cryptui crypt32 wintrust kernel32
C_SRCS = \
main.c
diff --git a/dlls/cryptdlg/main.c b/dlls/cryptdlg/main.c
index 943794a..36f2a1b 100644
--- a/dlls/cryptdlg/main.c
+++ b/dlls/cryptdlg/main.c
@@ -27,6 +27,7 @@
#include "wintrust.h"
#include "winuser.h"
#include "cryptdlg.h"
+#include "cryptuiapi.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(cryptdlg);
@@ -145,8 +146,61 @@ error:
*/
BOOL WINAPI CertViewPropertiesW(CERT_VIEWPROPERTIES_STRUCT_W *info)
{
- FIXME("(%p): stub\n", info);
- return FALSE;
+ static GUID cert_action_verify = CERT_CERTIFICATE_ACTION_VERIFY;
+ CERT_VERIFY_CERTIFICATE_TRUST trust;
+ WINTRUST_BLOB_INFO blob;
+ WINTRUST_DATA wtd;
+ LONG err;
+ BOOL ret;
+
+ TRACE("(%p)\n", info);
+
+ memset(&trust, 0, sizeof(trust));
+ trust.cbSize = sizeof(trust);
+ trust.pccert = info->pCertContext;
+ trust.cRootStores = info->cRootStores;
+ trust.rghstoreRoots = info->rghstoreRoots;
+ trust.cStores = info->cStores;
+ trust.rghstoreCAs = info->rghstoreCAs;
+ trust.cTrustStores = info->cTrustStores;
+ trust.rghstoreTrust = info->rghstoreTrust;
+ memset(&blob, 0, sizeof(blob));
+ blob.cbStruct = sizeof(blob);
+ blob.cbMemObject = sizeof(trust);
+ blob.pbMemObject = (BYTE *)&trust;
+ memset(&wtd, 0, sizeof(wtd));
+ wtd.cbStruct = sizeof(wtd);
+ wtd.dwUIChoice = WTD_UI_NONE;
+ wtd.dwUnionChoice = WTD_CHOICE_BLOB;
+ wtd.pBlob = &blob;
+ wtd.dwStateAction = WTD_STATEACTION_VERIFY;
+ err = WinVerifyTrust(NULL, &cert_action_verify, &wtd);
+ if (err == ERROR_SUCCESS)
+ {
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW uiInfo;
+ BOOL propsChanged = FALSE;
+
+ memset(&uiInfo, 0, sizeof(uiInfo));
+ uiInfo.dwSize = sizeof(uiInfo);
+ uiInfo.hwndParent = info->hwndParent;
+ uiInfo.dwFlags =
+ CRYPTUI_DISABLE_ADDTOSTORE | CRYPTUI_ENABLE_EDITPROPERTIES;
+ uiInfo.szTitle = info->szTitle;
+ uiInfo.pCertContext = info->pCertContext;
+ uiInfo.cPurposes = info->cArrayPurposes;
+ uiInfo.rgszPurposes = (LPCSTR *)info->arrayPurposes;
+ uiInfo.hWVTStateData = wtd.hWVTStateData;
+ uiInfo.fpCryptProviderDataTrustedUsage = TRUE;
+ uiInfo.cPropSheetPages = info->cArrayPropSheetPages;
+ uiInfo.rgPropSheetPages = info->arrayPropSheetPages;
+ uiInfo.nStartPage = info->nStartPage;
+ ret = CryptUIDlgViewCertificateW(&uiInfo, &propsChanged);
+ wtd.dwStateAction = WTD_STATEACTION_CLOSE;
+ WinVerifyTrust(NULL, &cert_action_verify, &wtd);
+ }
+ else
+ ret = FALSE;
+ return ret;
}
/***********************************************************************
More information about the wine-cvs
mailing list