From c51e9964a36b06fad7bf1afd0bf0f0386cfe120b Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Mon, 7 Nov 2005 20:14:27 +0000 Subject: [PATCH] Semi-stub implementation for SHRegGetValue(A|W). --- dlls/shlwapi/reg.c | 62 +++++++++++++++++++++++++++++++++++++++ dlls/shlwapi/shlwapi.spec | 2 ++ 2 files changed, 64 insertions(+) diff --git a/dlls/shlwapi/reg.c b/dlls/shlwapi/reg.c index 0cabaa4b9a6..15d14f81b44 100644 --- a/dlls/shlwapi/reg.c +++ b/dlls/shlwapi/reg.c @@ -1139,6 +1139,68 @@ DWORD WINAPI SHGetValueA(HKEY hKey, LPCSTR lpszSubKey, LPCSTR lpszValue, return dwRet; } +/************************************************************************* + * SHRegGetValueA [SHLWAPI.@] + * + * Get a value from the registry. + * + * PARAMS + * hKey [I] Handle to registry key + * lpszSubKey [I] Name of sub key containing value to get + * lpszValue [I] Name of value to get + * srrf [I] Flags for restricting returned data + * pwType [O] Pointer to the values type + * pvData [O] Pointer to the values data + * pcbData [O] Pointer to the values size + * + * RETURNS + * Success: ERROR_SUCCESS. Output parameters contain the details read. + * Failure: An error code from RegOpenKeyExA() or SHQueryValueExA(). + */ +DWORD WINAPI SHRegGetValueA(HKEY hKey, LPCSTR lpszSubKey, LPCSTR lpszValue, DWORD srrfFlags, + LPDWORD pwType, LPVOID pvData, LPDWORD pcbData) +{ + DWORD dwRet = 0; + HKEY hSubKey = 0; + + TRACE("(hkey=%p,%s,%s,%p,%p,%p)\n", hKey, debugstr_a(lpszSubKey), + debugstr_a(lpszValue), pwType, pvData, pcbData); + FIXME("Semi-Stub: Find meaning and implement handling of SRFF Flags 0x%08lx\n", srrfFlags); + + dwRet = RegOpenKeyExA(hKey, lpszSubKey, 0, KEY_QUERY_VALUE, &hSubKey); + if (! dwRet) + { + /* SHQueryValueEx expands Environment strings */ + dwRet = SHQueryValueExA(hSubKey, lpszValue, 0, pwType, pvData, pcbData); + RegCloseKey(hSubKey); + } + return dwRet; +} + +/************************************************************************* + * SHReg GetRegValueW [SHLWAPI.@] + * + * See SHGetValueA. + */ +DWORD WINAPI SHRegGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD srrfFlags, + LPDWORD pwType, LPVOID pvData, LPDWORD pcbData) +{ + DWORD dwRet = 0; + HKEY hSubKey = 0; + + TRACE("(hkey=%p,%s,%s,0x%08lx, %p,%p,%p)\n", hKey, debugstr_w(lpszSubKey), + debugstr_w(lpszValue), srrfFlags,pwType, pvData, pcbData); + FIXME("Semi-Stub: Find meaning and implement handling of SRFF Flags 0x%08lx\n", srrfFlags); + + dwRet = RegOpenKeyExW(hKey, lpszSubKey, 0, KEY_QUERY_VALUE, &hSubKey); + if (! dwRet) + { + dwRet = SHQueryValueExW(hSubKey, lpszValue, 0, pwType, pvData, pcbData); + RegCloseKey(hSubKey); + } + return dwRet; +} + /************************************************************************* * SHGetValueW [SHLWAPI.@] * diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec index 60ed4776c3e..3d897e203cc 100644 --- a/dlls/shlwapi/shlwapi.spec +++ b/dlls/shlwapi/shlwapi.spec @@ -726,6 +726,8 @@ @ stdcall SHRegGetPathW(long wstr wstr ptr long) @ stdcall SHRegGetUSValueA ( str str ptr ptr ptr long ptr long ) @ stdcall SHRegGetUSValueW ( wstr wstr ptr ptr ptr long ptr long ) +@ stdcall SHRegGetValueA ( long str str long ptr ptr ptr ) +@ stdcall SHRegGetValueW ( long wstr wstr long ptr ptr ptr ) @ stdcall SHRegOpenUSKeyA ( str long long long long ) @ stdcall SHRegOpenUSKeyW ( wstr long long long long ) @ stdcall SHRegQueryInfoUSKeyA ( long ptr ptr ptr ptr long )