#c #windows #g #registry
#c #Windows #g #реестр
Вопрос:
В диспетчере задач автозапуск отключен. Где ошибка в этой функции?
void AutoRun()
{
char arr[MAX_PATH] = { };
GetModuleFileName(NULL, (LPWSTR)arr, MAX_PATH);
HKEY hKey;
if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\Microsoft\Windows\CurrentVersion\Run", 0, NULL, 0, KEY_ALL_ACCESS, NULL, amp;hKey, NULL) == ERROR_SUCCESS)
{
if (RegSetValueEx(hKey, L"svchost", NULL, REG_SZ, (LPBYTE)arr, (sizeof(arr) 1)) == ERROR_SUCCESS)
{
RegCloseKey(hKey);
}
return;
}
}
Диспетчер задач:
Ответ №1:
Вы явно компилируете для Unicode, но используете char[]
массив вместо wchar_t[]
массива. Вам нужно использовать последнее.
Вы также передаете неправильное значение длины RegSetValueEx()
. Вам нужно указать длину строки в байтах только до нулевого разделителя и включительно. Не длина байта всего массива в целом (на самом деле, вы указываете даже больше).
Кроме того, вы пропускаете HKEY
RegSetValueEx()
сбой if.
Попробуйте это вместо:
void AutoRun()
{
wchar_t arr[MAX_PATH] = { };
GetModuleFileName(NULL, arr, MAX_PATH);
HKEY hKey;
if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\Microsoft\Windows\CurrentVersion\Run", 0, NULL, 0, KEY_SET_VALUE, NULL, amp;hKey, NULL) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, L"svchost", NULL, REG_SZ, (LPBYTE)arr, (lstrlen(arr) 1) * sizeof(wchar_t));
RegCloseKey(hKey);
}
}