[wintrust 2/3] We do care about errors during this kind of registration

Paul Vriens Paul.Vriens at xs4all.nl
Tue Sep 12 12:52:56 CDT 2006


Hi,

after some more testing I've finally got it (I think). The problem with
DllRegisterServer is that is almost always succeeds but with the last error
set. When you do a DllRegisterServer on windows last error will be 2
(ERROR_FILE_NOT_FOUND), this is due to the fact that it always tries to delete
a (non existent) SIP Provider. I created a test where I first created this SIP
Provider but then it always sets last error to ERROR_INVALID_PARAMETER. This
is due to the fact that it registers a Trust Provider that doesn't have a
diagnostic policy.
Tests are done by restricing access to several registry keys.

The above shows that return values and last errors were not straight-forward.

Changelog
  We do care about errors during this kind of registration

Cheers,

Paul.

---
 dlls/wintrust/register.c |   89 +++++++++++++++++++++++++++++-----------------
 1 files changed, 57 insertions(+), 32 deletions(-)

diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c
index 5a7f219..061dfaf 100644
--- a/dlls/wintrust/register.c
+++ b/dlls/wintrust/register.c
@@ -412,10 +412,10 @@ static LONG WINTRUST_WriteSingleUsageEnt
  * NOTES
  *   WINTRUST_ACTION_GENERIC_VERIFY_V2 ({00AAC56B-CD44-11D0-8CC2-00C04FC295EE}
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterGenVerifyV2(void)
+static BOOL WINTRUST_RegisterGenVerifyV2(void)
 {
+    BOOL RegisteredOK = TRUE;
     static GUID ProvGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
                                          SoftpubInitialization,
@@ -432,9 +432,13 @@ static void WINTRUST_RegisterGenVerifyV2
                                             NULL,   /* No load callback function */
                                             NULL }; /* No free callback function */
 
-    WintrustAddDefaultForUsage(szOID_PKIX_KP_CODE_SIGNING, &DefUsage);
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_CODE_SIGNING, &DefUsage))
+        RegisteredOK = FALSE;
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        RegisteredOK = FALSE;
+
+    return RegisteredOK;
 }
 
 /***************************************************************************
@@ -445,9 +449,8 @@ static void WINTRUST_RegisterGenVerifyV2
  * NOTES
  *   WIN_SPUB_ACTION_PUBLISHED_SOFTWARE ({64B9D180-8DA2-11CF-8736-00AA00A485EB})
  *   is defined in wintrust.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterPublishedSoftware(void)
+static BOOL WINTRUST_RegisterPublishedSoftware(void)
 {
     static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -460,7 +463,10 @@ static void WINTRUST_RegisterPublishedSo
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          SoftpubCleanup };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 #define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI { 0xc6b2e8d0, 0xe005, 0x11cf, { 0xa1,0x34,0x00,0xc0,0x4f,0xd7,0xbf,0x43 }}
@@ -473,9 +479,8 @@ #define WIN_SPUB_ACTION_PUBLISHED_SOFTWA
  * NOTES
  *   WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI ({C6B2E8D0-E005-11CF-A134-00C04FD7BF43})
  *   is not defined in any include file. (FIXME: Find out if the name is correct).
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterPublishedSoftwareNoBadUi(void)
+static BOOL WINTRUST_RegisterPublishedSoftwareNoBadUi(void)
 {
     static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -488,7 +493,10 @@ static void WINTRUST_RegisterPublishedSo
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          SoftpubCleanup };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***************************************************************************
@@ -499,9 +507,8 @@ static void WINTRUST_RegisterPublishedSo
  * NOTES
  *   WINTRUST_ACTION_GENERIC_CERT_VERIFY ({189A3842-3041-11D1-85E1-00C04FC295EE})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterGenCertVerify(void)
+static BOOL WINTRUST_RegisterGenCertVerify(void)
 {
     static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CERT_VERIFY;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -514,7 +521,10 @@ static void WINTRUST_RegisterGenCertVeri
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          SoftpubCleanup };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***************************************************************************
@@ -525,9 +535,8 @@ static void WINTRUST_RegisterGenCertVeri
  * NOTES
  *   WINTRUST_ACTION_TRUSTPROVIDER_TEST ({573E31F8-DDBA-11D0-8CCB-00C04FC295EE})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterTrustProviderTest(void)
+static BOOL WINTRUST_RegisterTrustProviderTest(void)
 {
     static GUID ProvGUID = WINTRUST_ACTION_TRUSTPROVIDER_TEST;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -540,7 +549,10 @@ static void WINTRUST_RegisterTrustProvid
                                          SoftpubDumpStructure,
                                          SoftpubCleanup };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***************************************************************************
@@ -551,10 +563,10 @@ static void WINTRUST_RegisterTrustProvid
  * NOTES
  *   HTTPSPROV_ACTION ({573E31F8-AABA-11D0-8CCB-00C04FC295EE})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterHttpsProv(void)
+static BOOL WINTRUST_RegisterHttpsProv(void)
 {
+    BOOL RegisteredOK = TRUE;
     static CHAR SoftpubLoadUsage[] = "SoftpubLoadDefUsageCallData";
     static CHAR SoftpubFreeUsage[] = "SoftpubFreeDefUsageCallData";
     static GUID ProvGUID = HTTPSPROV_ACTION;
@@ -576,14 +588,21 @@ static void WINTRUST_RegisterHttpsProv(v
     DefUsage.pwszDllName = HeapAlloc(GetProcessHeap(), 0, sizeof(SP_POLICY_PROVIDER_DLL_NAME));
     lstrcpyW(DefUsage.pwszDllName, SP_POLICY_PROVIDER_DLL_NAME);
 
-    WintrustAddDefaultForUsage(szOID_PKIX_KP_SERVER_AUTH, &DefUsage);
-    WintrustAddDefaultForUsage(szOID_PKIX_KP_CLIENT_AUTH, &DefUsage);
-    WintrustAddDefaultForUsage(szOID_SERVER_GATED_CRYPTO, &DefUsage);
-    WintrustAddDefaultForUsage(szOID_SGC_NETSCAPE, &DefUsage);
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_SERVER_AUTH, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_CLIENT_AUTH, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_SERVER_GATED_CRYPTO, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_SGC_NETSCAPE, &DefUsage))
+        RegisteredOK = FALSE;
 
     HeapFree(GetProcessHeap(), 0, DefUsage.pwszDllName);
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        RegisteredOK = FALSE;
+
+    return RegisteredOK;
 }
 
 /***************************************************************************
@@ -594,9 +613,8 @@ static void WINTRUST_RegisterHttpsProv(v
  * NOTES
  *   OFFICESIGN_ACTION_VERIFY ({5555C2CD-17FB-11D1-85C4-00C04FC295EE})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterOfficeSignVerify(void)
+static BOOL WINTRUST_RegisterOfficeSignVerify(void)
 {
     static GUID ProvGUID = OFFICESIGN_ACTION_VERIFY;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -609,7 +627,10 @@ static void WINTRUST_RegisterOfficeSignV
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          OfficeCleanupPolicy };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***************************************************************************
@@ -620,9 +641,8 @@ static void WINTRUST_RegisterOfficeSignV
  * NOTES
  *   DRIVER_ACTION_VERIFY ({F750E6C3-38EE-11D1-85E5-00C04FC295EE})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterDriverVerify(void)
+static BOOL WINTRUST_RegisterDriverVerify(void)
 {
     static GUID ProvGUID = DRIVER_ACTION_VERIFY;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -635,7 +655,10 @@ static void WINTRUST_RegisterDriverVerif
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          DriverCleanupPolicy };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***************************************************************************
@@ -646,9 +669,8 @@ static void WINTRUST_RegisterDriverVerif
  * NOTES
  *   WINTRUST_ACTION_GENERIC_CHAIN_VERIFY ({FC451C16-AC75-11D1-B4B8-00C04FB66EA0})
  *   is defined in softpub.h
- *   We don't care about failures (see comments in DllRegisterServer)
  */
-static void WINTRUST_RegisterGenChainVerify(void)
+static BOOL WINTRUST_RegisterGenChainVerify(void)
 {
     static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CHAIN_VERIFY;
     CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
@@ -661,7 +683,10 @@ static void WINTRUST_RegisterGenChainVer
                                          { 0, NULL, NULL }, /* No diagnostic policy */
                                          SoftpubCleanup };
 
-    WintrustAddActionID(&ProvGUID, 0, &ProvInfo);
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
 }
 
 /***********************************************************************
-- 
1.4.2




More information about the wine-patches mailing list