RegSetValueEx 不创建字符串值
RegSetValueEx doesn't create a String Value
我阅读了一些文档并查看了代码示例,但找不到我的代码无法运行的任何原因。
#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 调用全部关闭。第一个参数应该是子项句柄,而不是 HKEY_LOCAL_MACHINE。第 5 个参数应该指向数据,而不是指向数据的指针。第 6 个参数应包含字符串长度,以字节为单位(请记住它是一个宽字符串),包括终止空值。
所以重新表述如下:
RegSetValueEx(hKey, StringVal, NULL, REG_SZ, (LPBYTE)data, sizeof(wchar_t)*(wcslen(data)+1));
最重要的是,HKEY_LOCAL_MACHINE 对于非管理员用户是只读的,即使对于管理员用户也是只读的,没有权限提升。
此外,system("pause")
是等待按键的糟糕方式。改为调用 "getch()"。
我阅读了一些文档并查看了代码示例,但找不到我的代码无法运行的任何原因。
#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 调用全部关闭。第一个参数应该是子项句柄,而不是 HKEY_LOCAL_MACHINE。第 5 个参数应该指向数据,而不是指向数据的指针。第 6 个参数应包含字符串长度,以字节为单位(请记住它是一个宽字符串),包括终止空值。
所以重新表述如下:
RegSetValueEx(hKey, StringVal, NULL, REG_SZ, (LPBYTE)data, sizeof(wchar_t)*(wcslen(data)+1));
最重要的是,HKEY_LOCAL_MACHINE 对于非管理员用户是只读的,即使对于管理员用户也是只读的,没有权限提升。
此外,system("pause")
是等待按键的糟糕方式。改为调用 "getch()"。