Paul Vriens : wintrust: Implementation of WintrustRemoveActionID.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Sep 7 05:07:01 CDT 2006


Module: wine
Branch: master
Commit: 94e4f593b73173e29b3933b88423228c6491466b
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=94e4f593b73173e29b3933b88423228c6491466b

Author: Paul Vriens <Paul.Vriens at xs4all.nl>
Date:   Wed Aug 30 19:36:54 2006 +0200

wintrust: Implementation of WintrustRemoveActionID.

---

 dlls/wintrust/Makefile.in      |    2 +
 dlls/wintrust/register.c       |   74 ++++++++++++++++++++++++++++++++++++++--
 dlls/wintrust/tests/register.c |   25 ++++----------
 3 files changed, 79 insertions(+), 22 deletions(-)

diff --git a/dlls/wintrust/Makefile.in b/dlls/wintrust/Makefile.in
index 153c7c1..7aa951f 100644
--- a/dlls/wintrust/Makefile.in
+++ b/dlls/wintrust/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wintrust.dll
 IMPORTLIB = libwintrust.$(IMPLIBEXT)
-IMPORTS   = crypt32 kernel32
+IMPORTS   = crypt32 user32 advapi32 kernel32
 
 C_SRCS = \
 	register.c \
diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c
index d01e343..93b1fed 100644
--- a/dlls/wintrust/register.c
+++ b/dlls/wintrust/register.c
@@ -23,6 +23,8 @@ #include <stdarg.h>
 #include "windef.h"
 #include "winbase.h"
 #include "winerror.h"
+#include "winuser.h"
+#include "winreg.h"
 
 #include "guiddef.h"
 #include "wintrust.h"
@@ -32,6 +34,22 @@ #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
 
+static const WCHAR Trust[]            = {'S','o','f','t','w','a','r','e','\\',
+                                         'M','i','c','r','o','s','o','f','t','\\',
+                                         'C','r','y','p','t','o','g','r','a','p','h','y','\\',
+                                         'P','r','o','v','i','d','e','r','s','\\',
+                                         'T','r','u','s','t','\\', 0 };
+
+static const WCHAR Initialization[]   = {'I','n','i','t','i','a','l','i','z','a','t','i','o','n','\\', 0};
+static const WCHAR Message[]          = {'M','e','s','s','a','g','e','\\', 0};
+static const WCHAR Signature[]        = {'S','i','g','n','a','t','u','r','e','\\', 0};
+static const WCHAR Certificate[]      = {'C','e','r','t','i','f','i','c','a','t','e','\\', 0};
+static const WCHAR CertCheck[]        = {'C','e','r','t','C','h','e','c','k','\\', 0};
+static const WCHAR FinalPolicy[]      = {'F','i','n','a','l','P','o','l','i','c','y','\\', 0};
+static const WCHAR DiagnosticPolicy[] = {'D','i','a','g','n','o','s','t','i','c','P','o','l','i','c','y','\\', 0};
+static const WCHAR Cleanup[]          = {'C','l','e','a','n','u','p','\\', 0};
+
+
 /***********************************************************************
  *		WintrustAddActionID (WINTRUST.@)
  *
@@ -49,7 +67,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
  *   Failure: FALSE. (Use GetLastError() for more information)
  *
  * NOTES
- *   Adding a Trust provider is basically only adding relevant information
+ *   Adding definitions is basically only adding relevant information
  *   to the registry. No verification takes place whether a DLL or it's
  *   entrypoints exist.
  *   Information in the registry will always be overwritten.
@@ -63,6 +81,27 @@ BOOL WINAPI WintrustAddActionID( GUID* p
 }
 
 /***********************************************************************
+ *              WINTRUST_RemoveProviderFromReg (WINTRUST.@)
+ *
+ * Helper function for WintrustRemoveActionID
+ *
+ */
+static void WINTRUST_RemoveProviderFromReg(WCHAR* GuidString,
+                                           const WCHAR* FunctionType)
+{
+    WCHAR ProvKey[MAX_PATH];
+
+    /* Create the needed key string */
+    ProvKey[0]='\0';
+    lstrcatW(ProvKey, Trust);
+    lstrcatW(ProvKey, FunctionType);
+    lstrcatW(ProvKey, GuidString);
+
+    /* We don't care about success or failure */
+    RegDeleteKeyW(HKEY_LOCAL_MACHINE, ProvKey);
+}
+
+/***********************************************************************
  *              WintrustRemoveActionID (WINTRUST.@)
  *
  * Remove the definitions of the actions a Trust provider can perform
@@ -82,9 +121,36 @@ BOOL WINAPI WintrustAddActionID( GUID* p
  */
 BOOL WINAPI WintrustRemoveActionID( GUID* pgActionID )
 {
-    FIXME("(%s)\n", debugstr_guid(pgActionID));
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+    static const WCHAR wszFormat[] = {'{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
+                                      '%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X','%','0','2',
+                                      'X','%','0','2','X','%','0','2','X','}', 0};
+
+    WCHAR GuidString[39];
+
+    TRACE("(%s)\n", debugstr_guid(pgActionID));
+ 
+    if (!pgActionID)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return TRUE;
+    }
+
+    /* Create this string only once, instead of in the helper function */
+    wsprintfW(GuidString, wszFormat, pgActionID->Data1, pgActionID->Data2, pgActionID->Data3,
+        pgActionID->Data4[0], pgActionID->Data4[1], pgActionID->Data4[2], pgActionID->Data4[3],
+        pgActionID->Data4[4], pgActionID->Data4[5], pgActionID->Data4[6], pgActionID->Data4[7]);
+
+    /* We don't care about success or failure */
+    WINTRUST_RemoveProviderFromReg(GuidString, Initialization);
+    WINTRUST_RemoveProviderFromReg(GuidString, Message);
+    WINTRUST_RemoveProviderFromReg(GuidString, Signature);
+    WINTRUST_RemoveProviderFromReg(GuidString, Certificate);
+    WINTRUST_RemoveProviderFromReg(GuidString, CertCheck);
+    WINTRUST_RemoveProviderFromReg(GuidString, FinalPolicy);
+    WINTRUST_RemoveProviderFromReg(GuidString, DiagnosticPolicy);
+    WINTRUST_RemoveProviderFromReg(GuidString, Cleanup);
+
+    return TRUE;
 }
 
 /***********************************************************************
diff --git a/dlls/wintrust/tests/register.c b/dlls/wintrust/tests/register.c
index 78f2214..2a56c07 100644
--- a/dlls/wintrust/tests/register.c
+++ b/dlls/wintrust/tests/register.c
@@ -158,31 +158,22 @@ static void test_AddRem_ActionID(void)
 
     SetLastError(0xdeadbeef);
     ret = pWintrustRemoveActionID(&ActionID);
-    todo_wine 
-    {
-        ok ( ret, "WintrustRemoveActionID failed : 0x%08lx\n", GetLastError());
-        ok ( GetLastError() == 0xdeadbeef, "Last error should not have been changed: 0x%08lx\n", GetLastError());
-    }
+    ok ( ret, "WintrustRemoveActionID failed : 0x%08lx\n", GetLastError());
+    ok ( GetLastError() == 0xdeadbeef, "Last error should not have been changed: 0x%08lx\n", GetLastError());
 
     /* NULL input */
     SetLastError(0xdeadbeef);
     ret = pWintrustRemoveActionID(NULL);
-    todo_wine
-    {
-        ok (ret, "Expected WintrustRemoveActionID to succeed.\n");
-        ok (GetLastError() == ERROR_INVALID_PARAMETER,
-            "Expected ERROR_INVALID_PARAMETER, got %ld.\n", GetLastError());
-    }
+    ok (ret, "Expected WintrustRemoveActionID to succeed.\n");
+    ok (GetLastError() == ERROR_INVALID_PARAMETER,
+        "Expected ERROR_INVALID_PARAMETER, got %ld.\n", GetLastError());
 
     /* The passed GUID is removed by a previous call, so it's basically a test with a non-existent Trust provider */ 
     SetLastError(0xdeadbeef);
     ret = pWintrustRemoveActionID(&ActionID);
-    todo_wine
-    {
-        ok (ret, "Expected WintrustRemoveActionID to succeed.\n");
-        ok (GetLastError() == 0xdeadbeef,
-            "Expected 0xdeadbeef, got %ld.\n", GetLastError());
-    }
+    ok (ret, "Expected WintrustRemoveActionID to succeed.\n");
+    ok (GetLastError() == 0xdeadbeef,
+        "Expected 0xdeadbeef, got %ld.\n", GetLastError());
 }
 
 START_TEST(register)




More information about the wine-cvs mailing list