Module: wine Branch: master Commit: 5bc1b8ac3150c45636c72ead3d8cfae11690b362 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5bc1b8ac3150c45636c72ead...
Author: Juan Lang juan_lang@yahoo.com Date: Fri Aug 11 20:37:04 2006 -0700
crypt32: Improve undocumented functions.
- Test and implement I_CryptGetDefaultCryptProv (and correct its parameter list) - I_CryptReadTrustedPublisherDWORDValueFromRegistry always initializes its out parameter, correct and show with a test.
---
dlls/crypt32/crypt32.spec | 2 +- dlls/crypt32/main.c | 17 ++++++++++++++--- dlls/crypt32/tests/main.c | 36 ++++++++++++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec index 64f10e7..99e4750 100644 --- a/dlls/crypt32/crypt32.spec +++ b/dlls/crypt32/crypt32.spec @@ -186,7 +186,7 @@ @ stdcall I_CryptFlushLruCache(ptr long long) @ stdcall I_CryptFreeLruCache(ptr long long) @ stdcall I_CryptFreeTls(long long) -@ stdcall I_CryptGetDefaultCryptProv(long long long) +@ stdcall I_CryptGetDefaultCryptProv(long) @ stub I_CryptGetDefaultCryptProvForEncrypt @ stdcall I_CryptGetOssGlobal(long) @ stdcall I_CryptGetTls(long) diff --git a/dlls/crypt32/main.c b/dlls/crypt32/main.c index 47bb8fc..9b94adf 100644 --- a/dlls/crypt32/main.c +++ b/dlls/crypt32/main.c @@ -271,10 +271,20 @@ BOOL WINAPI I_CryptGetOssGlobal(DWORD x) return FALSE; }
-BOOL WINAPI I_CryptGetDefaultCryptProv(DWORD x, DWORD y, DWORD z) +HCRYPTPROV WINAPI I_CryptGetDefaultCryptProv(DWORD reserved) { - FIXME("%08lx %08lx %08lx\n", x, y, z); - return FALSE; + HCRYPTPROV ret; + + TRACE("(%08lx)\n", reserved); + + if (reserved) + { + SetLastError(E_INVALIDARG); + return (HCRYPTPROV)0; + } + ret = CRYPT_GetDefaultProvider(); + CryptContextAddRef(ret, NULL, 0); + return ret; }
BOOL WINAPI I_CryptReadTrustedPublisherDWORDValueFromRegistry(LPCWSTR name, @@ -292,6 +302,7 @@ BOOL WINAPI I_CryptReadTrustedPublisherD
TRACE("(%s, %p)\n", debugstr_w(name), value);
+ *value = 0; rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, safer, &key); if (rc == ERROR_SUCCESS) { diff --git a/dlls/crypt32/tests/main.c b/dlls/crypt32/tests/main.c index 128120b..8b980ce 100644 --- a/dlls/crypt32/tests/main.c +++ b/dlls/crypt32/tests/main.c @@ -295,7 +295,7 @@ static void test_readTrustedPublisherDWO 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; + DWORD size, readFlags = 0, returnedFlags; HKEY key; LONG rc;
@@ -308,14 +308,41 @@ static void test_readTrustedPublisherDWO if (rc == ERROR_SUCCESS) exists = TRUE; } + returnedFlags = 0xdeadbeef; ret = pReadDWORD(authenticodeFlags, &returnedFlags); ok(ret == exists, "Unexpected return value\n"); - if (exists) - ok(readFlags == returnedFlags, - "Expected flags %08lx, got %08lx\n", readFlags, returnedFlags); + ok(readFlags == returnedFlags, + "Expected flags %08lx, got %08lx\n", readFlags, returnedFlags); } }
+typedef HCRYPTPROV (WINAPI *I_CryptGetDefaultCryptProvFunc)(DWORD w); + +static void test_getDefaultCryptProv(void) +{ + I_CryptGetDefaultCryptProvFunc pI_CryptGetDefaultCryptProv; + HCRYPTPROV prov; + + if (!hCrypt) return; + + pI_CryptGetDefaultCryptProv = (I_CryptGetDefaultCryptProvFunc) + GetProcAddress(hCrypt, "I_CryptGetDefaultCryptProv"); + if (!pI_CryptGetDefaultCryptProv) return; + + prov = pI_CryptGetDefaultCryptProv(0xdeadbeef); + ok(prov == 0 && GetLastError() == E_INVALIDARG, + "Expected E_INVALIDARG, got %08lx\n", GetLastError()); + prov = pI_CryptGetDefaultCryptProv(PROV_RSA_FULL); + ok(prov == 0 && GetLastError() == E_INVALIDARG, + "Expected E_INVALIDARG, got %08lx\n", GetLastError()); + prov = pI_CryptGetDefaultCryptProv(1); + ok(prov == 0 && GetLastError() == E_INVALIDARG, + "Expected E_INVALIDARG, got %08lx\n", GetLastError()); + prov = pI_CryptGetDefaultCryptProv(0); + ok(prov != 0, "I_CryptGetDefaultCryptProv failed: %08lx\n", GetLastError()); + CryptReleaseContext(prov, 0); +} + START_TEST(main) { hCrypt = LoadLibraryA("crypt32.dll"); @@ -326,4 +353,5 @@ START_TEST(main) test_cryptAllocate(); test_cryptTls(); test_readTrustedPublisherDWORD(); + test_getDefaultCryptProv(); }