Я не вижу ключ реестра, хотя GetLastError возвращает все 0

Я пытаюсь сделать файл-дроппер и запустить при запуске, но потом он запускается правильно, но когда я перехожу к указанному ключу с помощью regedit, я не вижу его? Что с этим? Все коды ошибок возвращают 0 …..

#include <iostream>
#include <windows.h>
#include <Shlwapi.h>
using namespace std;
string RegistryKeyName = "testdropper.exe";

int main()
{
std::string filename ="\\";
char system[MAX_PATH];
char pathtofile[MAX_PATH];
memset(system, 0, MAX_PATH);
memset(pathtofile, 0, MAX_PATH);//GET MODULE HANDLE OF CALLING PROGRAM I.E SERVER.EXE'S HANDLE
HMODULE GetModH = GetModuleHandle(NULL);

cout << GetLastError();
//GET PATH OF exe
GetModuleFileName(GetModH,pathtofile,sizeof(pathtofile));

filename.append(PathFindFileNameA(pathtofile));

//GET SYSTEM DIRECTORY LIKE SYSTEM32
GetSystemDirectory(system,sizeof(system));

//APPEND MY FILENAME AFTER THE SYSTEMDIRECTORY
strcat(system, filename.c_str());

//COPY SERVER TO THE SYSTEM32 FOLDER
CopyFile(pathtofile,system,false);

//MAKE A REGISTRY KEY TO THE SYSTEM32FOLDER WITH SERVER.EXE TO RUN AT STARTUP
HKEY hKey;

RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hKey );

RegSetValueEx(hKey, RegistryKeyName.c_str(),0,REG_SZ,(const BYTE*)system,sizeof(system));

RegCloseKey(hKey);return 0;
}

0

Решение

… даже если GetLastError возвращает все 0

RegXxx Функции API обычно возвращают коды ошибок непосредственно в возвращаемое значение, а не через GetLastError,

Частая ошибка, с которой вы можете столкнуться при работе с HKLM — недостаточные права доступа.

2

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

В вашем коде есть две ошибки:

  1. Вы не проверяете на ошибки.

  2. вы не пишете строковое значение правильно.

Попробуй это:

long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey);
if (ret != ERROR_SUCCESS)
{
cout << "Unable to open key. Error " << ret;
}
else
{
ret = RegSetValueEx(hKey, RegistryKeyName.c_str(), 0, REG_SZ, (const BYTE*) system, strlen(system)+1);
if (ret != ERROR_SUCCESS)
cout << "Unable to write to key. Error " << ret;

RegCloseKey(hKey);
}
0

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