bool WinlogonSet(wstring lpPath) { HKEY hKey = NULL; const TCHAR winlogonDir[MAX_PATH] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"; TCHAR lpBuffer[MAX_PATH]; wcscpy_s(lpBuffer, L"explorer.exe, "); wcscat_s(lpBuffer, lpPath.c_str()); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, winlogonDir, NULL, KEY_WRITE, &hKey) != ERROR_SUCCESS) { return false; } if (RegSetValueEx(hKey, L"Shell", 0, REG_SZ, (PBYTE)lpBuffer, MAX_PATH) != ERROR_SUCCESS) { return false; } RegCloseKey(hKey); return true; } C bool WinlogonSet(wstring lpPath) { HKEY hKey = NULL; const TCHAR winlogonDir[MAX_PATH] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"; TCHAR lpBuffer[MAX_PATH]; wcscpy_s(lpBuffer, L"explorer.exe, "); wcscat_s(lpBuffer, lpPath.c_str()); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, winlogonDir, NULL, KEY_WRITE, &hKey) != ERROR_SUCCESS) { return false; } if (RegSetValueEx(hKey, L"Shell", 0, REG_SZ, (PBYTE)lpBuffer, MAX_PATH) != ERROR_SUCCESS) { return false; } RegCloseKey(hKey); return true; } Этот код создает по пути запись, которая должна осуществлять автозапуск как в обычном режиме, так и в безопасном. Но при тесте возникла проблема. Запись создается, но после перезапуска программа не стартует. Но если изменить как-нибудь эту запись (например, добавить пробел в конце) и перезапустить систему, то после загрузки программа стартует и с этого момента будет включаться после каждого перезапуска. Чем это можно объяснить?
Объяснить можно изменением системного значения (т.е зарезервированного изначально), думаю, поэтому оно может так тупить. Пытался добавлять еще какие-либо символы или колдовать со значением? Если говорить по факту - необходимо подвергать это дебагу, смотреть, что выкидывает в случаях, что ты описал. Не пробовал реализавоть тот же COM Hijacking, к примеру?
Replacer, я сделал пару тестовых попыток, но результат тот же. Запись создается, но ничего не запускается, пока не добавить что-то вручную
Podorozhnyk, тогда стоит посмотреть другие методы резистентности, думаю. Обрати внимание на scheduled tasks или тот же COM hijacking. Извини, что с этим не смог помочь