#include <windows.h>
#include <stdio.h>
void AddToAutorun(void)
{
HKEY hKey;
char szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, sizeof(szPath));
RegCreateKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL);
if (hKey)
{
RegSetValueEx(hKey, TEXT("MyAutorunZTRSF"), 0, REG_SZ, (LPBYTE)szPath, lstrlen(szPath));
RegFlushKey(hKey);
RegCloseKey(hKey);
}
}
void autorun(void)
{
TCHAR szPath[MAX_PATH];
DWORD pathLen = 0;
// GetModuleFileName returns the number of characters
// written to the array.
pathLen = GetModuleFileName(NULL, szPath, MAX_PATH);
if (pathLen == 0)
return;
HKEY newValue;
if (RegOpenKey(HKEY_LOCAL_MACHINE,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
&newValue) != ERROR_SUCCESS)
{
printf(TEXT("Unable to open registry key; last error = %lu\n"), GetLastError());
return;
}
// Need to pass the length of the path string in bytes,
// which may not equal the number of characters due to
// character set.
DWORD pathLenInBytes = pathLen * sizeof(*szPath);
if (RegSetValueEx(newValue,
TEXT("name_me"),
0,
REG_SZ,
(LPBYTE)szPath,
pathLenInBytes) != ERROR_SUCCESS)
{
RegCloseKey(newValue);
printf(TEXT("Unable to set registry value; last error = %lu\n"), GetLastError());
return;
}
RegCloseKey(newValue);
}
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
AddToAutorun();
autorun();
MessageBox(NULL, TEXT("Hello, World!"), TEXT("Autorun"), MB_OK);
return 0;
}
I2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIEFkZFRvQXV0b3J1bih2b2lkKQp7CglIS0VZIGhLZXk7CgljaGFyIHN6UGF0aFtNQVhfUEFUSF07CgoJR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgc3pQYXRoLCBzaXplb2Yoc3pQYXRoKSk7CglSZWdDcmVhdGVLZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvblxcUnVuIiwKCQkJMCwgTlVMTCwgUkVHX09QVElPTl9OT05fVk9MQVRJTEUsIEtFWV9TRVRfVkFMVUUsIE5VTEwsICZoS2V5LCBOVUxMKTsKCWlmIChoS2V5KQoJewoJCVJlZ1NldFZhbHVlRXgoaEtleSwgVEVYVCgiTXlBdXRvcnVuWlRSU0YiKSwgMCwgUkVHX1NaLCAoTFBCWVRFKXN6UGF0aCwgbHN0cmxlbihzelBhdGgpKTsKCQlSZWdGbHVzaEtleShoS2V5KTsKCQlSZWdDbG9zZUtleShoS2V5KTsKCX0KfQoKdm9pZCBhdXRvcnVuKHZvaWQpCnsKCVRDSEFSIHN6UGF0aFtNQVhfUEFUSF07CgoJRFdPUkQgcGF0aExlbiA9IDA7CgoJLy8gR2V0TW9kdWxlRmlsZU5hbWUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKCS8vIHdyaXR0ZW4gdG8gdGhlIGFycmF5LgoJcGF0aExlbiA9IEdldE1vZHVsZUZpbGVOYW1lKE5VTEwsIHN6UGF0aCwgTUFYX1BBVEgpOwoKCWlmIChwYXRoTGVuID09IDApCgkJcmV0dXJuOwoKCUhLRVkgbmV3VmFsdWU7CglpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsCgkJCVRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxSdW4iKSwKCQkJJm5ld1ZhbHVlKSAhPSBFUlJPUl9TVUNDRVNTKQoJCXsKCSAgICAJcHJpbnRmKFRFWFQoIlVuYWJsZSB0byBvcGVuIHJlZ2lzdHJ5IGtleTsgbGFzdCBlcnJvciA9ICVsdVxuIiksIEdldExhc3RFcnJvcigpKTsKCSAgICAJcmV0dXJuOwoJICAgIH0KCS8vIE5lZWQgdG8gcGFzcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRoIHN0cmluZyBpbiBieXRlcywKCS8vIHdoaWNoIG1heSBub3QgZXF1YWwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGR1ZSB0bwoJLy8gY2hhcmFjdGVyIHNldC4KCURXT1JEIHBhdGhMZW5JbkJ5dGVzID0gcGF0aExlbiAqIHNpemVvZigqc3pQYXRoKTsKCWlmIChSZWdTZXRWYWx1ZUV4KG5ld1ZhbHVlLAoJCQlURVhUKCJuYW1lX21lIiksCgkJCTAsCgkJCVJFR19TWiwKCQkJKExQQllURSlzelBhdGgsCgkJCXBhdGhMZW5JbkJ5dGVzKSAhPSBFUlJPUl9TVUNDRVNTKQoJCXsKCQkJUmVnQ2xvc2VLZXkobmV3VmFsdWUpOwoJCQlwcmludGYoVEVYVCgiVW5hYmxlIHRvIHNldCByZWdpc3RyeSB2YWx1ZTsgbGFzdCBlcnJvciA9ICVsdVxuIiksIEdldExhc3RFcnJvcigpKTsKCSAgICAJcmV0dXJuOwoJICAgIH0KCVJlZ0Nsb3NlS2V5KG5ld1ZhbHVlKTsKfQoKaW50IENBTExCQUNLIFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQU1RSIGxwQ21kTGluZSwgaW50IG5DbWRTaG93KQp7CglBZGRUb0F1dG9ydW4oKTsKCWF1dG9ydW4oKTsKCU1lc3NhZ2VCb3goTlVMTCwgVEVYVCgiSGVsbG8sIFdvcmxkISIpLCBURVhUKCJBdXRvcnVuIiksIE1CX09LKTsKCXJldHVybiAwOwp9