advapi32: Fix RegGetValue when dwFlags includes RRF_RT_ANY.
This commit is contained in:
parent
07eeb4e406
commit
9a7dc15979
|
@ -1466,6 +1466,8 @@ static VOID ADVAPI_ApplyRestrictions( DWORD dwFlags, DWORD dwType,
|
||||||
* expanded and pdwType is set to REG_SZ instead.
|
* expanded and pdwType is set to REG_SZ instead.
|
||||||
* - Restrictions are applied after expanding, using RRF_RT_REG_EXPAND_SZ
|
* - Restrictions are applied after expanding, using RRF_RT_REG_EXPAND_SZ
|
||||||
* without RRF_NOEXPAND is thus not allowed.
|
* without RRF_NOEXPAND is thus not allowed.
|
||||||
|
* An exception is the case where RRF_RT_ANY is specified, because then
|
||||||
|
* RRF_NOEXPAND is allowed.
|
||||||
*/
|
*/
|
||||||
LSTATUS WINAPI RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
LSTATUS WINAPI RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
DWORD dwFlags, LPDWORD pdwType, PVOID pvData,
|
DWORD dwFlags, LPDWORD pdwType, PVOID pvData,
|
||||||
|
@ -1481,7 +1483,8 @@ LSTATUS WINAPI RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue,
|
||||||
|
|
||||||
if (pvData && !pcbData)
|
if (pvData && !pcbData)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND))
|
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) &&
|
||||||
|
((dwFlags & RRF_RT_ANY) != RRF_RT_ANY))
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
@ -1576,7 +1579,8 @@ LSTATUS WINAPI RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue,
|
||||||
|
|
||||||
if (pvData && !pcbData)
|
if (pvData && !pcbData)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND))
|
if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) &&
|
||||||
|
((dwFlags & RRF_RT_ANY) != RRF_RT_ANY))
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
if (pszSubKey && pszSubKey[0])
|
if (pszSubKey && pszSubKey[0])
|
||||||
|
|
|
@ -858,6 +858,16 @@ static void test_get_value(void)
|
||||||
/* Query REG_EXPAND_SZ using RRF_RT_REG_EXPAND_SZ (not allowed without RRF_NOEXPAND) */
|
/* Query REG_EXPAND_SZ using RRF_RT_REG_EXPAND_SZ (not allowed without RRF_NOEXPAND) */
|
||||||
ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_EXPAND_SZ, NULL, NULL, NULL);
|
ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_REG_EXPAND_SZ, NULL, NULL, NULL);
|
||||||
ok(ret == ERROR_INVALID_PARAMETER, "ret=%d\n", ret);
|
ok(ret == ERROR_INVALID_PARAMETER, "ret=%d\n", ret);
|
||||||
|
|
||||||
|
/* Query REG_EXPAND_SZ using RRF_RT_ANY */
|
||||||
|
buf[0] = 0; type = 0xdeadbeef; size = sizeof(buf);
|
||||||
|
ret = pRegGetValueA(hkey_main, NULL, "TP1_EXP_SZ", RRF_RT_ANY, &type, buf, &size);
|
||||||
|
ok(ret == ERROR_SUCCESS, "ret=%d\n", ret);
|
||||||
|
/* At least v5.2.3790.1830 (2003 SP1) returns the unexpanded sTestpath1 length + 1 here. */
|
||||||
|
ok(size == strlen(expanded)+1 || broken(size == strlen(sTestpath1)+1),
|
||||||
|
"strlen(expanded)=%d, strlen(sTestpath1)=%d, size=%d\n", lstrlenA(expanded), lstrlenA(sTestpath1), size);
|
||||||
|
ok(type == REG_SZ, "type=%d\n", type);
|
||||||
|
ok(!strcmp(expanded, buf), "expanded=\"%s\" buf=\"%s\"\n", expanded, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_reg_open_key(void)
|
static void test_reg_open_key(void)
|
||||||
|
|
Loading…
Reference in New Issue