RegSetValueEx 不会创建字符串值

RegSetValueEx doesn't create a String Value

本文关键字:字符串 创建 RegSetValueEx      更新时间:2023-10-16

我读了一些文档并查看了代码示例,但找不到任何代码不工作的原因。

#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;
}

REGSETVALUEEX调用全部关闭。第一个参数应该是subkey手柄,而不是hkey_local_machine。第五参数应指向数据,而不是指向数据指针。第六参数应包含字符串长度,以字节为单位(请记住是一个宽字符串),包括终止null。

如此重新这样的:

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

最重要的是,HKEY_LOCAL_MACHINE仅适用于非Admin用户,即使对于Admin用户,它也无需阅读而没有特权高程。

另外,system("pause")是等待键按下的糟糕方法。改用" getch()"。