diff --git a/dlls/advapi32/crypt.c b/dlls/advapi32/crypt.c index 65bc16bf3c1..64a4080b70d 100644 --- a/dlls/advapi32/crypt.c +++ b/dlls/advapi32/crypt.c @@ -977,8 +977,18 @@ BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved, if (!pszProvName) { DWORD numkeys; + char *provName; + RegQueryInfoKeyA(hKey, NULL, NULL, NULL, &numkeys, pcbProvName, NULL, NULL, NULL, NULL, NULL, NULL); + + if (!(provName = CRYPT_Alloc(*pcbProvName))) + CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); + + RegEnumKeyExA(hKey, dwIndex, provName, pcbProvName, NULL, NULL, NULL, NULL); (*pcbProvName)++; + + CRYPT_Free(provName); + if (dwIndex >= numkeys) CRYPT_ReturnLastError(ERROR_NO_MORE_ITEMS); } else {