第四篇 一个简单的任务(三)(已修改)

本文详细介绍了如何通过修改注册表实现程序开机自动启动的过程。包括使用API函数打开注册表项、设置键值以及关闭句柄等步骤。

呃……突然发现要讲清楚如何修改注册表还不是那么容易的事,上一节中介绍了修改注册表所需要的三个API函数,这一节就接着上一节的思路,给出一个例子好了。

    我们将在注册表项中添加自动运行单独由一个函数来完成,将这个函数的原型定义为如下:int autorun_register(const char *exe_filename) 。其中参数中的字符串为需要设置为自动运行的程序的完整路径名。成功返回0,否则返回-1。

    在函数体中,我们首先需要做的是定义一些基本变量。

    int return_value=0;//记录返回值
    HKEY hroot = HKEY_LOCAL_MACHINE,hkey;
//前者为根键名,后者用来存储打开的注册表项句柄
    const char *subkey = "Software//Microsoft//Windows//CurrentVersion//Run";//需要修改的子健
    DWORD dwDisposition;//打开注册表项时用来存放是打开还是创建的信息
    long result;//记录调用API的返回值

    在定义完这个基本变量之后,我们就可以按照前面所介绍的思路,打开注册表项、修改键值、关闭句柄来完成这个任务了。

    打开:

    result=RegCreateKeyEx(
           hroot,         // 根键句柄
           subkey,        // 子健名
           0,             // 保留字
           NULL,                                         
           REG_OPTION_NON_VOLATILE,
           KEY_ALL_ACCESS,
           NULL,              
           &hkey,         // 存储句柄     
           &dwDisposition // 存储打开还是创建信息
         );

    通过调用,若成功,result==ERROR_SUCCESS,打开的句柄将被保存在hkey中。

    修改:

    if(result==ERROR_SUCCESS)   //用于判断前面打开是否成功
    {
       result=RegSetValueEx(
       hkey,                    //前面打开的句柄
       "病毒",                  //子健名
       0,                       //保留字
       REG_SZ,                  //键值类型
       (CONST BYTE *)exe_filename,        //键值缓冲区指针
       (DWORD)strlen(exe_filename)        //缓冲区大小
       );

    关闭:

      if(result!=ERROR_SUCCESS)return_value=-1;//接前面的if语句
      RegCloseKey(hkey);                        //关闭句柄
    }
    else return_value=-1;

    好了,基本流程我想应该已经清楚了吧?现在我把autorun_register这个函数完整的贴出来,大家对照着看,应该很快就会了吧?

int autorun_register(const char *exe_filename)
{
    //修改注册表,开机启动
    int return_value=0;
    HKEY hroot = HKEY_LOCAL_MACHINE,hkey;
    const char *subkey = "Software//Microsoft//Windows//CurrentVersion//Run";
    DWORD dwDisposition;
    long result=RegCreateKeyEx(
           hroot,         
           subkey,        
           0,            
           NULL,             
           REG_OPTION_NON_VOLATILE,
           KEY_ALL_ACCESS,
           NULL,          
           &hkey,         
           &dwDisposition
           );

    if(result==ERROR_SUCCESS)
    {
       result=RegSetValueEx(
            hkey,             
            "病毒",    
            0,         
            REG_SZ,          
            (CONST BYTE *)exe_filename,
            (DWORD)strlen(exe_filename)     
             );
      if(result!=ERROR_SUCCESS)return_value=-1;
      RegCloseKey(hkey);
    }
    else return_value=-1;
    if(!return_value)printf("开机启动注册成功!/n");
    else printf("开机启动注册失败.../n");
    return return_value;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值