我正在尝试获取通常为REG_SZ类型的值的数据,但我也想支持它是REG_EXPAND_SZ的可能性。
我试过了:
RegGetValue(HKEY_LOCAL_MACHINE, subkey, valueName, RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ, NULL, buffer, &bufferSize)
但它返回87(“参数不正确”)。
如果我自己传递RRF_RT_REG_SZ
或RRF_RT_REG_EXPAND_SZ
,那么它可以正常工作,但是当我同时指定它们时却没有。我不想将我的支票限制为一种特定类型。 MSDN说我可以为该参数使用“以下一个或多个”。
为什么我会收到此错误,如何解决?
答案 0 :(得分:3)
RRF_RT_REG_SZ|RRF_RT_REG_EXPAND_SZ|RRF_NOEXPAND
标志 - 结果使用RRF_NOEXPAND
expand_sz字符串将不会展开(需要直接调用ExpandEnvironmentStrings
),当然需要使用 dwType 如果我们在掩码中接受多个类型,则确切地知道哪个类型有数据。
从win8.1开始 - RRF_RT_REG_SZ|RRF_RT_REG_EXPAND_SZ
无错误地工作
在函数
中存在下一个代码if (((dwFlags & RRF_RT_ANY) != RRF_RT_ANY) &&
(dwFlags & RRF_RT_REG_EXPAND_SZ) &&
!(dwFlags & RRF_NOEXPAND))
{
return ERROR_INVALID_PARAMETER;
}
结果即使我们甚至会使用单RRF_RT_REG_EXPAND_SZ
标志,我们也得到了相同的错误。