RegSetValueEx不会创建字符串值

时间:2016-11-23 21:16:26

标签: c++ regedit

我阅读了一些文档并查看了代码示例,但我发现我的代码无法工作的任何原因。

#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

void AddSubKeyWithValue(HKEY hRootKey, LPWSTR strSubKey, LPCTSTR StringVal, LPCTSTR data)
{
    HKEY hKey;
    RegOpenKeyEx(hRootKey, strSubKey, NULL, KEY_ALL_ACCESS, &hKey);
    RegSetValueEx(hRootKey, StringVal, NULL, REG_SZ, (LPBYTE)&data, sizeof(REG_SZ));
    RegCloseKey(hKey);
    return;
}


void main() {

    AddSubKeyWithValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",L"Slayer Tool", L"c:\\Slayer\\Update.exe");

    system("pause");
    return;

}

1 个答案:

答案 0 :(得分:2)

RegSetValueEx调用全部关闭。第一个参数应该是子键句柄,而不是HKEY_LOCAL_MACHINE。第五个参数应指向数据,而不是指向数据的指针。第6个参数应该包含字符串长度,以字节为单位(请记住它是一个宽字符串),包括终止空值。

所以这样改编:

RegSetValueEx(hKey, StringVal, NULL, REG_SZ, (LPBYTE)data, sizeof(wchar_t)*(wcslen(data)+1));

最重要的是,对于非管理员用户,HKEY_LOCAL_MACHINE是只读的,即使对于管理员用户,它也是只读的,没有权限提升。

此外,system("pause")是一种等待按键的糟糕方式。致电&#34; getch()&#34;代替。