Paul Vriens : wintrust: Use the return values of the registration
functions .
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Sep 13 06:06:59 CDT 2006
Module: wine
Branch: master
Commit: 0b0fc5593d88e3f42ae47e2e0b4ec2f68f5d9611
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0b0fc5593d88e3f42ae47e2e0b4ec2f68f5d9611
Author: Paul Vriens <Paul.Vriens at xs4all.nl>
Date: Tue Sep 12 19:53:53 2006 +0200
wintrust: Use the return values of the registration functions.
---
dlls/wintrust/register.c | 80 +++++++++++++++++++++++-----------------------
1 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c
index 061dfaf..7a55e88 100644
--- a/dlls/wintrust/register.c
+++ b/dlls/wintrust/register.c
@@ -797,8 +797,8 @@ HRESULT WINAPI DllRegisterServer(void)
static const CHAR CatMemberInfoDecode[] = "WVTAsn1CatMemberInfoDecode";
static const CHAR SpcSpOpusInfoEncode[] = "WVTAsn1SpcSpOpusInfoEncode";
static const CHAR SpcSpOpusInfoDecode[] = "WVTAsn1SpcSpOpusInfoDecode";
- HRESULT Res = S_OK;
- HKEY Key;
+ HRESULT CryptRegisterRes = S_OK;
+ HRESULT TrustProviderRes = S_OK;
TRACE("\n");
@@ -822,12 +822,12 @@ #define WINTRUST_REGISTEROID( oid, encod
do { \
if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_ENCODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, encode_funcname)) \
{ \
- Res = HRESULT_FROM_WIN32(GetLastError()); \
+ CryptRegisterRes = 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()); \
+ CryptRegisterRes = HRESULT_FROM_WIN32(GetLastError()); \
goto add_trust_providers; \
} \
} while (0)
@@ -864,44 +864,44 @@ #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
- * there is no check whether the actions can be written in the registry.
- * As the previous list shows, there are several calls after these registrations.
- * If they fail they will overwrite the returnvalue of DllRegisterServer.
+ * All registry writes are tried. If one fails this part will return S_FALSE
+ * but only if the first (CryptRegisterOIDFunction calls) and the third
+ * (CryptSIPAddProvider calls) part succeed.
+ *
+ * Last error is set to the last error encountered, regardless if the first
+ * part failed or not.
*/
- /* Check if we can open/create HKLM\Software\Microsoft\Cryptography\Providers\Trust */
- if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, Trust, 0, NULL, 0, KEY_WRITE, NULL, &Key, NULL) != ERROR_SUCCESS)
- {
- /* If the opening/creation of the key fails, there is no need to do the action registrations as they
- * will fail as well.
- */
- Res = S_FALSE;
- }
- else
- {
- RegCloseKey(Key);
-
- /* Create the necessary action registry structures */
- WINTRUST_InitRegStructs();
-
- /* Register several Trust Provider actions */
- WINTRUST_RegisterGenVerifyV2();
- WINTRUST_RegisterPublishedSoftware();
- WINTRUST_RegisterPublishedSoftwareNoBadUi();
- WINTRUST_RegisterGenCertVerify();
- WINTRUST_RegisterTrustProviderTest();
- WINTRUST_RegisterHttpsProv();
- WINTRUST_RegisterOfficeSignVerify();
- WINTRUST_RegisterDriverVerify();
- WINTRUST_RegisterGenChainVerify();
-
- /* Free the registry structures */
- WINTRUST_FreeRegStructs();
- }
-
- return Res;
+ /* Create the necessary action registry structures */
+ WINTRUST_InitRegStructs();
+
+ /* Register several Trust Provider actions */
+ if (!WINTRUST_RegisterGenVerifyV2())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterPublishedSoftware())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterPublishedSoftwareNoBadUi())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterGenCertVerify())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterTrustProviderTest())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterHttpsProv())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterOfficeSignVerify())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterDriverVerify())
+ TrustProviderRes = S_FALSE;
+ if (!WINTRUST_RegisterGenChainVerify())
+ TrustProviderRes = S_FALSE;
+
+ /* Free the registry structures */
+ WINTRUST_FreeRegStructs();
+
+ if (CryptRegisterRes == S_OK)
+ return TrustProviderRes;
+
+ return CryptRegisterRes;
}
/***********************************************************************
More information about the wine-cvs
mailing list