Module: wine Branch: master Commit: 60bb8bd808c7c501a3ff24382edbd47fd8b25a32 URL: http://source.winehq.org/git/wine.git/?a=commit;h=60bb8bd808c7c501a3ff24382e...
Author: Juan Lang juan.lang@gmail.com Date: Sat Jun 28 09:45:04 2008 -0700
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 612a90d..bb06a0b 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 135f803..6556944 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 624a3cd..316d83e 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; +}