Module: wine Branch: master Commit: f9141fddbe3e8a44c22006e6e0160af4d36813ad URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f9141fddbe3e8a44c22006e6...
Author: Paul Vriens Paul.Vriens@xs4all.nl Date: Mon Sep 11 11:23:20 2006 +0200
wintrust: Use the return value of CryptRegisterOIDFunction.
---
dlls/wintrust/register.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c index c9baea5..955aad9 100644 --- a/dlls/wintrust/register.c +++ b/dlls/wintrust/register.c @@ -740,9 +740,25 @@ HRESULT WINAPI DllRegisterServer(void) * - One call to CryptSIPRemoveProvider (do we need that?) */
+ /* Testing on native shows that when an error is encountered in one of the CryptRegisterOIDFunction calls + * the rest of these calls is skipped. Registering is however continued for the trust providers. + * + * We are not totally in line with native as there all decoding functions are registered after all encoding + * functions. + */ #define WINTRUST_REGISTEROID( oid, encode_funcname, decode_funcname ) \ - CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_ENCODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, encode_funcname); \ - CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_DECODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, decode_funcname) + do { \ + if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_ENCODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, encode_funcname)) \ + { \ + Res = HRESULT_FROM_WIN32(GetLastError()); \ + goto add_trust_providers; \ + } \ + if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_DECODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, decode_funcname)) \ + { \ + Res = HRESULT_FROM_WIN32(GetLastError()); \ + goto add_trust_providers; \ + } \ + } while (0)
WINTRUST_REGISTEROID(SPC_PE_IMAGE_DATA_OBJID, WVTAsn1SpcPeImageDataEncode, WVTAsn1SpcPeImageDataDecode); WINTRUST_REGISTEROID(SPC_PE_IMAGE_DATA_STRUCT, WVTAsn1SpcPeImageDataEncode, WVTAsn1SpcPeImageDataDecode); @@ -773,6 +789,8 @@ #define WINTRUST_REGISTEROID( oid, encod
#undef WINTRUST_REGISTEROID
+add_trust_providers: + /* Testing on W2K3 shows: * If we cannot open HKLM\Software\Microsoft\Cryptography\Providers\Trust * for writing, DllRegisterServer returns S_FALSE. If the key can be opened