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