From: Dmitry Klionsky dm.klionsky@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56305 --- dlls/advapi32/crypt.c | 11 +++++++++++ dlls/advapi32/tests/crypt.c | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/advapi32/crypt.c b/dlls/advapi32/crypt.c index 73c9b1d219d..40a47422f39 100644 --- a/dlls/advapi32/crypt.c +++ b/dlls/advapi32/crypt.c @@ -1154,6 +1154,17 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved, }
RegEnumKeyExW(hKey, dwIndex, provNameW, pcbProvName, NULL, NULL, NULL, NULL); + + if (pdwProvType) + { + HKEY hSubkey; + DWORD size = sizeof(DWORD); + + RegOpenKeyW(hKey, provNameW, &hSubkey); + RegQueryValueExW(hSubkey, L"Type", NULL, NULL, (BYTE*)pdwProvType, &size); + RegCloseKey(hSubkey); + } + CRYPT_Free(provNameW); (*pcbProvName)++; *pcbProvName *= sizeof(WCHAR); diff --git a/dlls/advapi32/tests/crypt.c b/dlls/advapi32/tests/crypt.c index f08c4e2a626..c989b9f9c21 100644 --- a/dlls/advapi32/tests/crypt.c +++ b/dlls/advapi32/tests/crypt.c @@ -661,8 +661,12 @@ static void test_enum_providers(void) ERROR_NO_MORE_ITEMS, GetLastError()); /* check expected versus actual values returned */ + type = -1; + providerLen = -1; result = pCryptEnumProvidersA(dwIndex, NULL, 0, &type, NULL, &providerLen); - ok(result && providerLen==cbName, "expected %i, got %i\n", (int)cbName, (int)providerLen); + ok(result, "expected TRUE, got %ld\n", result); + ok(type==dwType, "expected %ld, got %ld\n", dwType, type); + ok(providerLen==cbName, "expected %i, got %i\n", (int)cbName, (int)providerLen); if (!(provider = LocalAlloc(LMEM_ZEROINIT, providerLen))) return;