Module: wine Branch: master Commit: 94e4f593b73173e29b3933b88423228c6491466b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=94e4f593b73173e29b3933b8...
Author: Paul Vriens Paul.Vriens@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)