From 60bb8bd808c7c501a3ff24382edbd47fd8b25a32 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Sat, 28 Jun 2008 09:45:04 -0700 Subject: [PATCH] cryptdlg: Implement DllRegisterServer/DllUnregisterServer. --- dlls/cryptdlg/Makefile.in | 2 +- dlls/cryptdlg/cryptdlg.spec | 4 ++-- dlls/cryptdlg/main.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/dlls/cryptdlg/Makefile.in b/dlls/cryptdlg/Makefile.in index 612a90d5d73..bb06a0bbe3d 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 kernel32 +IMPORTS = crypt32 wintrust kernel32 C_SRCS = \ main.c diff --git a/dlls/cryptdlg/cryptdlg.spec b/dlls/cryptdlg/cryptdlg.spec index 135f803287d..65569440980 100644 --- a/dlls/cryptdlg/cryptdlg.spec +++ b/dlls/cryptdlg/cryptdlg.spec @@ -15,7 +15,7 @@ 15 stub CertSelectCertificateW 16 stub CertViewPropertiesA 17 stub CertViewPropertiesW -18 stub DllRegisterServer -19 stub DllUnregisterServer +18 stdcall -private DllRegisterServer() +19 stdcall -private DllUnregisterServer() 20 stdcall GetFriendlyNameOfCertA(ptr ptr long) 21 stdcall GetFriendlyNameOfCertW(ptr ptr long) diff --git a/dlls/cryptdlg/main.c b/dlls/cryptdlg/main.c index 624a3cd4c6b..316d83e4515 100644 --- a/dlls/cryptdlg/main.c +++ b/dlls/cryptdlg/main.c @@ -104,3 +104,59 @@ HRESULT WINAPI CertTrustFinalPolicy(CRYPT_PROVIDER_DATA *pProvData) FIXME("(%p)\n", pProvData); return E_NOTIMPL; } + +/*********************************************************************** + * DllRegisterServer (CRYPTDLG.@) + */ +HRESULT WINAPI DllRegisterServer(void) +{ + static WCHAR cryptdlg[] = { 'c','r','y','p','t','d','l','g','.', + 'd','l','l',0 }; + static WCHAR wintrust[] = { 'w','i','n','t','r','u','s','t','.', + 'd','l','l',0 }; + static WCHAR certTrustInit[] = { 'C','e','r','t','T','r','u','s','t', + 'I','n','i','t',0 }; + static WCHAR wintrustCertificateTrust[] = { 'W','i','n','t','r','u','s','t', + 'C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t',0 }; + static WCHAR certTrustCertPolicy[] = { 'C','e','r','t','T','r','u','s','t', + 'C','e','r','t','P','o','l','i','c','y',0 }; + static WCHAR certTrustFinalPolicy[] = { 'C','e','r','t','T','r','u','s','t', + 'F','i','n','a','l','P','o','l','i','c','y',0 }; + static WCHAR certTrustCleanup[] = { 'C','e','r','t','T','r','u','s','t', + 'C','l','e','a','n','u','p',0 }; + CRYPT_REGISTER_ACTIONID reg; + GUID guid = CERT_CERTIFICATE_ACTION_VERIFY; + HRESULT hr = S_OK; + + memset(®, 0, sizeof(reg)); + reg.cbStruct = sizeof(reg); + reg.sInitProvider.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); + reg.sInitProvider.pwszDLLName = cryptdlg; + reg.sInitProvider.pwszFunctionName = certTrustInit; + reg.sCertificateProvider.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); + reg.sCertificateProvider.pwszDLLName = wintrust; + reg.sCertificateProvider.pwszFunctionName = wintrustCertificateTrust; + reg.sCertificatePolicyProvider.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); + reg.sCertificatePolicyProvider.pwszDLLName = cryptdlg; + reg.sCertificatePolicyProvider.pwszFunctionName = certTrustCertPolicy; + reg.sFinalPolicyProvider.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); + reg.sFinalPolicyProvider.pwszDLLName = cryptdlg; + reg.sFinalPolicyProvider.pwszFunctionName = certTrustFinalPolicy; + reg.sCleanupProvider.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); + reg.sCleanupProvider.pwszDLLName = cryptdlg; + reg.sCleanupProvider.pwszFunctionName = certTrustCleanup; + if (!WintrustAddActionID(&guid, WT_ADD_ACTION_ID_RET_RESULT_FLAG, ®)) + hr = GetLastError(); + return hr; +} + +/*********************************************************************** + * DllUnregisterServer (CRYPTDLG.@) + */ +HRESULT WINAPI DllUnregisterServer(void) +{ + GUID guid = CERT_CERTIFICATE_ACTION_VERIFY; + + WintrustRemoveActionID(&guid); + return S_OK; +} -- 2.11.4.GIT