Paul Vriens : wintrust: Use the return value of
CryptRegisterOIDFunction.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Sep 11 06:05:07 CDT 2006
Module: wine
Branch: master
Commit: f9141fddbe3e8a44c22006e6e0160af4d36813ad
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f9141fddbe3e8a44c22006e6e0160af4d36813ad
Author: Paul Vriens <Paul.Vriens at 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
More information about the wine-cvs
mailing list