RegSetValueEx与RRF_RT_REG_SZ使REG_EXPAND_SZ在注册表中

RegSetValueEx with RRF_RT_REG_SZ makes REG_EXPAND_SZ in the registry?

本文关键字:SZ REG 注册表 EXPAND RT RegSetValueEx RRF      更新时间:2023-10-16

标题几乎说明了一切,当我尝试使用RegSetValueEx来制作REG_SZ大小条目时,当我查看注册表时,我得到了REG_EXPAND_SZ

下面是我使用的代码

const char REG_KEY_PATH[] = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
const char REG_VALUE_NAME[] = "Scroff";
// Get where the app lives
char appLoc[MAX_PATH];
GetModuleFileNameA(NULL, appLoc, MAX_PATH);
// Create the key value
HKEY regKey = 0;
RegCreateKeyExA(HKEY_LOCAL_MACHINE, REG_KEY_PATH, 0, NULL, 
                REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE | KEY_WOW64_64KEY, 
                NULL, &regKey, NULL);
RegSetValueExA(regKey, REG_VALUE_NAME, 0, RRF_RT_REG_SZ, (unsigned char*)appLoc, strlen(appLoc));

代码可以工作,但是注册表不是REG_SZ类型,而是REG_EXPAND_SZ。为什么会这样,我该如何解决?

我在Windows 10上运行,使用VS 2015 Enterprise.

谢谢。

您需要传递REG_SZ标志作为RegSetValueEx()的第四个参数来创建REG_SZ值。RRF_RT_XXX标志只对RegGetValue()有效。

你的代码正在创建一个REG_EXPAND_SZ值,因为RRF_RT_REG_SZ标志的值是2,这恰好与REG_EXPAND_SZ标志的值相同。