Open registry: win+R , the input regedit Click ok
You will see 5 root directories, the boot - up information is written under HKEY_LOCAL_MACHINE, the specific directory is SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run How do I write the startup information to the registry? It’s actually quite simple, step 1, open the registry, step 2, write the registry, step 3, close the handle to the key
To open the registry, use the RegOpenKeyEx function
LONGRegOpenKeyEx(
HKEYhKey, // The name of the primary key that needs to be opened
LPCTSTRlpSubKey, // The name of the child key that needs to be opened
DWORDulOptions, // Reserve, set as 0
REGSAM samDesired, // Security access tags, or permissions
PHKEYphkResult // Gets the handle to the key to be opened
)
The first parameter, we’re going to pass in HKEY_LOCAL_MACHINE
The second parameter, we’re going to pass in SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
The third parameter, we’re going to pass in 0
The fourth parameter is a little bit naughty. Many instances pass KEY_ALL_ACCESS, but in 64-bit operating systems, it is better to pass KEY_ALL_ACCESS|, KEY_WOW64_64KEY. Otherwise, after writing the registry, the written registration information will not be displayed
For the fifth parameter, pass in a reference to HKEY
Write the registry using RegSetValueEx function
LONG RegSetValueEx(
HKEY hKey,// RegOpenKeyEx The end of the function passed in 1 Is the handle to the open key
LPCTSTR lpValueName, // Key the name of the
DWORD Reserved, // The incoming NULL
DWORD dwType, // The incoming REG_SZ
CONST BYTE *lpData, // The full address of the program to start
DWORD cbData// lpData The size of the
);
Paste the code, win8 system vs2012
void test()
{
LPCTSTR lpSubKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY hKey;
REGSAM flag = KEY_WOW64_64KEY;
DWORD dwDisposition = REG_OPENED_EXISTING_KEY;
LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS|flag,&hKey);
//LONG lRet = ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, NULL, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
if ( ERROR_SUCCESS != lRet)
{
return;
}
TCHAR *pchrName = L"D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe";
lRet = ::RegSetValueEx(hKey, TEXT("TEST"), NULL, REG_SZ, (LPBYTE)pchrName, wcslen(pchrName)*sizeof(TCHAR)+1); // Set the registry key
if ( ERROR_SUCCESS != lRet)
{
return;
}
::RegCloseKey(hKey); // with RegCreateKeyEx Matching to write
};
One more point to note is that under the win8 system, you need to obtain administrator privileges to properly run the above code, otherwise you cannot open the registry
The specific methods are as follows:
VS2012, at the project properties - configuration properties - linker - manifest file -UAC execution level
Where is set to requireAdministrator (/level=‘requireAdministrator’)
Rerun VS2012 as an administrator