RegSetValueEx не создает строковое значение

Я прочитал некоторую документацию и посмотрел примеры кода, но не могу найти причин, по которым мой код не работает.

#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

Решение

Вызов 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 ()».

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]