如何让自己的程序实现自启动

        有时候我们在安装某一程序的时候,它会询问是否让该程序随操作系统自动启动,病毒的自启动和一般的应用程序并没有差别,其实现的原理还要从Windows的注册表开始。
其实,Windows是按照两个文件夹及8个核心的注册表子键来自动加载程序的。Windows 2000/XP启动时会从以下10个地址搜索自启动程序。

1.“启动”文件夹——最常见的自启动程序文件夹。它位于系统分区的“Documents and Settings→User→「开始」菜单→程序”目录下。这里的“User”指的是你实际登录的用户名字,如果你是用管理员登录的,那么这里就应该是“Administrator”。


2.“All Users”中的自启动程序文件夹——这是另一个常见的自启动程序文件夹,一般位于系统盘所在的“Documents and Settings→All Users→「开始」菜单→程序”目录下。前面提到的“启动”文件夹运行的是登录用户的自启动程序,而“All Users”启动文件夹里的程序,则不管登录者是谁,都会自动加载。
上面的两个是一般用户可以轻松找到的加载自启动程序的地方,另外,在注册表中还有几个键值是用来加载自启动程序的。

3.“load”键值——一个埋藏得较深的注册表键值,位于[HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/
Windows/load]。

4.“Userinit”键值——它在[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft
/Windows NT/CurrentVersion/Winlogon/Userinit],也是用于系统启动时加载程序的。一般情况下,其默认值为“userinit.exe”,由于该子键的值中可用使用逗号分隔开多个程序,因此,在键值的数值中可以加入其它程序。

5.“Explorer/Run”键值——与“load”和“Userinit”这两个键值不同的是,“Explorer/Run”同时存在于[HKEY_CURRENT_USER]和[HKEY_LOCAL_MACHINE]这两个根键中。它在两个根键中的位置分别为[HKEY_CURRENT_USER/
Software/Microsoft/Windows/CurrentVersion/
Policies/Explorer/Run]和[HKEY_LOCAL_MACHINE
/SOFTWARE/Microsoft/Windows/CurrentVersion/
Policies/Explorer/Run]。

6.“RunServicesOnce”子键——它在用户登录前及其它注册表自启动子键加载各自的程序前加载服务程序。这个子键同时存在于[HKEY_CURRENT_USER/Softvvare/Mcrosoft
/Windows/CurrentVersion/RunServicesOnce]和[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft
/Windows/CurrentVersion/RunServicesOnce]中。

7.“RunServices”子键——紧接在RunServicesOnce后,也是在用户登录前加载。分别位于[HKEY_CURRENT_USER/Software/Microsoft/
Windows/CurrentVersion/RunServices]和[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/
Windows/CurrentVersion/RunServices]中。

8.“RunOnce/Setup”子键——其默认值确定了用户登录后加载的程序。在[HKEY_CURRENT_USER]和[HKEY_LOCAL_MACHINE]两个根键下。位置分别为[HKEY_CURRENT_USER/Software/Microsoft/
Windows/CurrentVersion/RunOnce/Setup]和[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/
Windows/CurrentVersion/RunOnce/Setup]。

9.“RunOnce”子键——许多自启动程序主要利用RunOnce子键来自动加载。这个子键分别位于[HKEY_LOCAL_MACHINE/SOFTWARE/
Microsoft/Windows/CurrentVersion/RunOnce]和[HEY_CURRENT_USER/Software/Microsoft/Windows/
CurrentVersion/RunOnce]。位于[HKEY_LOCAL_MACHINE]根键下的“RunOnce”子键在用户登录后及其它注册表的Run键值加载程序前加载相关联的程序。位于[HKEY_CURRENT_USER]根键下的“RunOnce”子键在操作系统处理完其它注册表Run子键及自启动文件夹内的程序后再加载。如果你的系统为Windows XP,你可以在[HKEY_LOCAL_MACHINE/SOFTWARE/
Microsoft/Windows/CurrentVersion/RunOnceEx]中找到这个子键。

10.“Run”键值——到目前为止,Run键值是自启动程序最常见的地方。它的位置在[HKEY_CURRENT_USER/Softvvare
/Microsoft/Windows/CurrentVersion/Run]和[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/
CurrentVersion/Run]。其中[HKEY_CURRENT_USER]根键下的“Run”键值紧接着[HKEY_LOCAL_MACHINE]下的“Run”键值运行,但两个键值都在“启动”文件夹之前加载。


       通过上面可以看出,我们在写程序的时候,如果想让它自启动,那么就可以从上面10个方面入手,懂得了原理,实现起来也比较容易,笔者写了个小程序,依然采用c来实现,源码供大家参考。
//CreateRun.cpp
#include<windows.h>
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

int CreateRun(void)
{
 HKEY hKey;
 const char *pval ="hwhpapp.exe";
 
 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  "SOFTWARE//Microsoft//Windows//CurrentVersion//Run",
  0, KEY_WRITE, &hKey) !=ERROR_SUCCESS)
 
  return -1;
 if(RegSetValueEx(hKey, "hwhpapp", 0, REG_SZ, (const unsigned char *)pval,  strlen(pval)+1)
  !=ERROR_SUCCESS)
 {
  RegCloseKey(hKey);
  return -1;
 }
 RegCloseKey(hKey);
 return 0;
}
void main()
{
 if(CreateRun()!=0)
  printf("Can't Create Run !/n");
 getch();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值