Я прочитал некоторую документацию и посмотрел примеры кода, но не могу найти причин, по которым мой код не работает.
#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-й параметр должен указывать на данные, а не на указатель на данные. Шестой параметр должен содержать длину строки в байтах (имейте в виду, что это широкая строка), включая завершающий ноль.
Так что переформулируй так:
RegSetValueEx(hKey, StringVal, NULL, REG_SZ, (LPBYTE)data, sizeof(wchar_t)*(wcslen(data)+1));
Самое главное, HKEY_LOCAL_MACHINE доступен только для чтения для пользователей, не являющихся администраторами, и даже для пользователей с правами администратора, он доступен только для чтения без повышения привилегий.
Также, system("pause")
ужасный способ ждать нажатия клавиши. Вместо этого вызовите «getch ()».
Других решений пока нет …