wintrust: Use the return values of the registration functions.

This commit is contained in:
Paul Vriens 2006-09-12 19:53:53 +02:00 committed by Alexandre Julliard
parent 7bcec7c5dd
commit 0b0fc5593d
1 changed files with 36 additions and 36 deletions

View File

@ -797,8 +797,8 @@ HRESULT WINAPI DllRegisterServer(void)
static const CHAR CatMemberInfoDecode[] = "WVTAsn1CatMemberInfoDecode"; static const CHAR CatMemberInfoDecode[] = "WVTAsn1CatMemberInfoDecode";
static const CHAR SpcSpOpusInfoEncode[] = "WVTAsn1SpcSpOpusInfoEncode"; static const CHAR SpcSpOpusInfoEncode[] = "WVTAsn1SpcSpOpusInfoEncode";
static const CHAR SpcSpOpusInfoDecode[] = "WVTAsn1SpcSpOpusInfoDecode"; static const CHAR SpcSpOpusInfoDecode[] = "WVTAsn1SpcSpOpusInfoDecode";
HRESULT Res = S_OK; HRESULT CryptRegisterRes = S_OK;
HKEY Key; HRESULT TrustProviderRes = S_OK;
TRACE("\n"); TRACE("\n");
@ -822,12 +822,12 @@ HRESULT WINAPI DllRegisterServer(void)
do { \ do { \
if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_ENCODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, encode_funcname)) \ 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; \ goto add_trust_providers; \
} \ } \
if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_DECODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, decode_funcname)) \ 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; \ goto add_trust_providers; \
} \ } \
} while (0) } while (0)
@ -864,44 +864,44 @@ HRESULT WINAPI DllRegisterServer(void)
add_trust_providers: add_trust_providers:
/* Testing on W2K3 shows: /* Testing on W2K3 shows:
* If we cannot open HKLM\Software\Microsoft\Cryptography\Providers\Trust * All registry writes are tried. If one fails this part will return S_FALSE
* for writing, DllRegisterServer returns S_FALSE. If the key can be opened * but only if the first (CryptRegisterOIDFunction calls) and the third
* there is no check whether the actions can be written in the registry. * (CryptSIPAddProvider calls) part succeed.
* As the previous list shows, there are several calls after these registrations. *
* If they fail they will overwrite the returnvalue of DllRegisterServer. * 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 */ /* Create the necessary action registry structures */
WINTRUST_InitRegStructs(); WINTRUST_InitRegStructs();
/* Register several Trust Provider actions */ /* Register several Trust Provider actions */
WINTRUST_RegisterGenVerifyV2(); if (!WINTRUST_RegisterGenVerifyV2())
WINTRUST_RegisterPublishedSoftware(); TrustProviderRes = S_FALSE;
WINTRUST_RegisterPublishedSoftwareNoBadUi(); if (!WINTRUST_RegisterPublishedSoftware())
WINTRUST_RegisterGenCertVerify(); TrustProviderRes = S_FALSE;
WINTRUST_RegisterTrustProviderTest(); if (!WINTRUST_RegisterPublishedSoftwareNoBadUi())
WINTRUST_RegisterHttpsProv(); TrustProviderRes = S_FALSE;
WINTRUST_RegisterOfficeSignVerify(); if (!WINTRUST_RegisterGenCertVerify())
WINTRUST_RegisterDriverVerify(); TrustProviderRes = S_FALSE;
WINTRUST_RegisterGenChainVerify(); 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 */ /* Free the registry structures */
WINTRUST_FreeRegStructs(); WINTRUST_FreeRegStructs();
}
return Res; if (CryptRegisterRes == S_OK)
return TrustProviderRes;
return CryptRegisterRes;
} }
/*********************************************************************** /***********************************************************************