修改注册表开机自启动(vc)

#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;

// 功能:当前可执行文件开机自启动设置
// 参数: 无
// 返回值: true ---- 设置成功, false ---- 设置失败
bool SetupStartupRun()
{
	_TCHAR regName[]= TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
	HKEY hkResult;
	int ret=RegOpenKey(HKEY_LOCAL_MACHINE, regName, &hkResult);

	_TCHAR FileName[MAX_PATH];
	GetModuleFileName(NULL, FileName, sizeof(FileName));//取得程序名字
	ret = RegSetValueEx(hkResult, TEXT("Donview_Server"), 0, REG_SZ, (BYTE *)FileName, sizeof(FileName));

	if(ERROR_SUCCESS == ret)
	{
		RegCloseKey(hkResult);
	}
	else 
	{
		return false;
	}

	return true;
}


int _tmain(int argc, _TCHAR* argv[])
{
   if(SetupStartupRun())
   {
	   cout << "设置开机启动成功.." << endl;
   }
   else
   {
	   cout << "设置开机启动失败.." << endl;
   }

	return 0;
}


 

 

 

 

 

//

#include <stdio.h>
#include <windows.h>
int main(void)
{
char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY hkResult;
int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hkResult);

ret=RegSetValueEx(hkResult,"54rk"/* 注册表键名*/,0,REG_EXPAND_SZ,(unsigned char *)"%systemroot%\\54rk.exe",25);
if(ret==0){
printf("success to write run key\n");
RegCloseKey(hkResult);
}
else {
printf("failed to open regedit.%d\n",ret);
return 0;
}
char modlepath[256];
char syspath[256];
GetModuleFileName(0,modlepath,256);//取得程序名字
GetSystemDirectory(syspath,256);
ret=CopyFile(modlepath,strcat(syspath,"\\54rk.exe"),1);
if(ret)
{
printf("%s has been copyed to sys dir %s\n",modlepath,syspath);
}
else printf("%s is exisis",modlepath);
return 0;
}


注册表是启动程序藏身之处最多的地方,主要有以下几项:  

1.Run键  
Run键是病毒最青睐的自启动之所,该键位置是[HKEY_CURRENT_  
USER\Software\Microsoft\Windows\CurrentVersion\Run]和[HKEY_  
LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run],其下的所有程序在每次启动登录时都会按顺序自动执行。 

还有一个不被注意的Run键,位于注册表[HKEY_CURRENT_  
USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]
和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\  
Policies\Explorer\Run],也要仔细查看。


2.RunOnce键  
RunOnce位于[HKEY_CURRENT_USER\Software\Microsoft\Windows\  
CurrentVersion\RunOnce]和[HKEY_LOCAL_MACHINE\Software\Microsoft\  
Windows\CurrentVersion\RunOnce]键,与Run不同的是,RunOnce下的程序仅会被自动执行一次。 


3.RunServicesOnce键  
RunServicesOnce键位于[HKEY_CURRENT_USER\Software\Microsoft\  
Windows\CurrentVersion\RunServicesOnce]和[HKEY_LOCAL_MACHINE\  
Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]下,其中的程序会在系统加载时自动启动执行一次。 

4.RunServices键  
RunServices继RunServicesOnce之后启动的程序,位于注册表[HKEY_CURRENT_USER\
Software\Microsoft\Windows\CurrentVersion\RunServices]和
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\  
RunServices]键。

  
5.RunOnceEx键  
该键是Windows XP/2003特有的自启动注册表项,位于[HKEY_  
CURRENT_USER\\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx]和
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
RunOnceEx]。


6.load键  
[HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows]下的load键值的程序也可以自启动。 

7.Winlogon键  
该键位于位于注册表[HKEY_CURRENT_USER\SOFTWARE\  
Microsoft\Windows NT\CurrentVersion\Winlogon]和[HKEY_LOCAL_MACHINE\  
SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon],注意下面的Notify、Userinit、Shell键值也会有自启动的程序,而且其键值可以用逗号分隔,从而实现登录的时候启动多个程序。 


8.其他注册表位置  
还有一些其他键值,经常会有一些程序在这里自动运行,如:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\Shell] 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad] 

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts] 

[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\System\Scripts] 

小提示:  
注册表的[HKEY_LOCAL_MACHINE]和[HKEY_CURRENT_USER]键的区别:前者对所有用户有效,后者只对当前用户有效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值