Module: wine Branch: refs/heads/master Commit: 759850feff98feac574e18cde8d42054f33fb5a0 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=759850feff98feac574e18cd...
Author: Juan Lang juan_lang@yahoo.com Date: Wed Aug 9 14:45:34 2006 -0700
crypt32: Add a couple stubs, and implement the undocumented I_CryptReadTrustedPublisherDWORDValueFromRegistry.
---
dlls/crypt32/crypt32.spec | 4 +++- dlls/crypt32/main.c | 41 +++++++++++++++++++++++++++++++++++++ dlls/crypt32/tests/main.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletions(-)
diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec index 56db08c..64f10e7 100644 --- a/dlls/crypt32/crypt32.spec +++ b/dlls/crypt32/crypt32.spec @@ -186,15 +186,17 @@ @ stdcall I_CryptFlushLruCache(ptr long long) @ stdcall I_CryptFreeLruCache(ptr long long) @ stdcall I_CryptFreeTls(long long) -@ stub I_CryptGetDefaultCryptProv +@ stdcall I_CryptGetDefaultCryptProv(long long long) @ stub I_CryptGetDefaultCryptProvForEncrypt @ stdcall I_CryptGetOssGlobal(long) @ stdcall I_CryptGetTls(long) @ stub I_CryptInsertLruEntry @ stdcall I_CryptInstallAsn1Module(long long long) @ stdcall I_CryptInstallOssGlobal(long long long) +@ stdcall I_CryptReadTrustedPublisherDWORDValueFromRegistry(wstr ptr) @ stub I_CryptReleaseLruEntry @ stdcall I_CryptSetTls(long ptr) +@ stdcall I_CryptUninstallAsn1Module(ptr) @ stub I_CryptUninstallOssGlobal @ stub PFXExportCertStore @ stub PFXImportCertStore diff --git a/dlls/crypt32/main.c b/dlls/crypt32/main.c index f3e8a38..47bb8fc 100644 --- a/dlls/crypt32/main.c +++ b/dlls/crypt32/main.c @@ -27,6 +27,8 @@ #include "wincrypt.h" #include "winreg.h" #include "winnls.h" #include "mssip.h" +#include "winuser.h" +#include "advpub.h" #include "crypt32_private.h" #include "wine/debug.h"
@@ -269,6 +271,39 @@ BOOL WINAPI I_CryptGetOssGlobal(DWORD x) return FALSE; }
+BOOL WINAPI I_CryptGetDefaultCryptProv(DWORD x, DWORD y, DWORD z) +{ + FIXME("%08lx %08lx %08lx\n", x, y, z); + return FALSE; +} + +BOOL WINAPI I_CryptReadTrustedPublisherDWORDValueFromRegistry(LPCWSTR name, + DWORD *value) +{ + static const WCHAR safer[] = { + 'S','o','f','t','w','a','r','e','\','P','o','l','i','c','i','e','s','\', + 'M','i','c','r','o','s','o','f','t','\','S','y','s','t','e','m', + 'C','e','r','t','i','f','i','c','a','t','e','s','\', + 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\', + 'S','a','f','e','r',0 }; + HKEY key; + LONG rc; + BOOL ret = FALSE; + + TRACE("(%s, %p)\n", debugstr_w(name), value); + + rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, safer, &key); + if (rc == ERROR_SUCCESS) + { + DWORD size = sizeof(DWORD); + + if (!RegQueryValueExW(key, name, NULL, NULL, (LPBYTE)value, &size)) + ret = TRUE; + RegCloseKey(key); + } + return ret; +} + BOOL WINAPI I_CryptInstallOssGlobal(DWORD x, DWORD y, DWORD z) { FIXME("%08lx %08lx %08lx\n", x, y, z); @@ -281,6 +316,12 @@ BOOL WINAPI I_CryptInstallAsn1Module(voi return TRUE; }
+BOOL WINAPI I_CryptUninstallAsn1Module(void *x) +{ + FIXME("%p\n", x); + return TRUE; +} + BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType, diff --git a/dlls/crypt32/tests/main.c b/dlls/crypt32/tests/main.c index ec3d6e6..0ce8e41 100644 --- a/dlls/crypt32/tests/main.c +++ b/dlls/crypt32/tests/main.c @@ -24,6 +24,7 @@ #include <windef.h> #include <winbase.h> #include <winerror.h> #include <wincrypt.h> +#include <winreg.h>
#include "wine/test.h"
@@ -272,6 +273,54 @@ static void test_cryptTls(void) } }
+typedef BOOL (WINAPI *I_CryptReadTrustedPublisherDWORDValueFromRegistryFunc) + (LPCWSTR, DWORD *); + +static void test_readTrustedPublisherDWORD(void) +{ + HMODULE lib = LoadLibraryA("crypt32.dll"); + + if (lib) + { + I_CryptReadTrustedPublisherDWORDValueFromRegistryFunc pReadDWORD = + (I_CryptReadTrustedPublisherDWORDValueFromRegistryFunc)GetProcAddress( + lib, "I_CryptReadTrustedPublisherDWORDValueFromRegistry"); + + if (pReadDWORD) + { + static const WCHAR safer[] = { + 'S','o','f','t','w','a','r','e','\', + 'P','o','l','i','c','i','e','s','\', + 'M','i','c','r','o','s','o','f','t','\','S','y','s','t','e','m', + 'C','e','r','t','i','f','i','c','a','t','e','s','\', + 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r', + '\','S','a','f','e','r',0 }; + static const WCHAR authenticodeFlags[] = { 'A','u','t','h','e','n', + 't','i','c','o','d','e','F','l','a','g','s',0 }; + BOOL ret, exists = FALSE; + DWORD size, readFlags, returnedFlags; + HKEY key; + LONG rc; + + rc = RegOpenKeyW(HKEY_LOCAL_MACHINE, safer, &key); + if (rc == ERROR_SUCCESS) + { + size = sizeof(readFlags); + rc = RegQueryValueExW(key, authenticodeFlags, NULL, NULL, + (LPBYTE)&readFlags, &size); + if (rc == ERROR_SUCCESS) + exists = TRUE; + } + ret = pReadDWORD(authenticodeFlags, &returnedFlags); + ok(ret == exists, "Unexpected return value\n"); + if (exists) + ok(readFlags == returnedFlags, + "Expected flags %08lx, got %08lx\n", readFlags, returnedFlags); + } + FreeLibrary(lib); + } +} + START_TEST(main) { test_findAttribute(); @@ -280,4 +329,5 @@ START_TEST(main) test_verifyTimeValidity(); test_cryptAllocate(); test_cryptTls(); + test_readTrustedPublisherDWORD(); }