HKEY_LOCAL_MACHINE根键自启动项目的添加和查询

这篇具有很好参考价值的文章主要介绍了HKEY_LOCAL_MACHINE根键自启动项目的添加和查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注册表操作实验

目录

注册表操作实验

目标系统:Windows

软件工具:VS2022/VC6

实验思路步骤:

     1、先查资料详细了解注册表。

     2、API函数。

具体实现过程

实现HKEY_LOCAL_MACHINE根键自启动项目的添加

HKEY_LOCAL_MACHINE根键自启动项目的查询

查看运行结果

源代码


实验设备:   

目标系统:Windows

软件工具:VS2022/VC6

实验要求:

  1. 程序中完成本机HKEY_LOCAL_MACHINE根键自启动项目的添加和查询。
  2. 要求有regedit编辑器查询结果截图,程序注释

实验内容:

实验思路步骤:

Win32API参考手册http://www.yfvb.com/help/win32sdk/

     1、先查资料详细了解注册表

注册表是Windows操作系统中的一个重要数据库。其中包含了许多与系统相关的配置信息。Windows提供了一个编辑器方便我们编辑。可以按Win+R输入regedit来打开。或者直接去系统目录下寻找。

hkey_local_machine,windows,microsoft设置自启动的键值项有很多,这里仅仅介绍两种通用的,其他的我也没了解。

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

可以看到上面两项唯一的区别就是根键(简称键)不同,子键是一样的。HKEY_CURRENT_USER与HKEY_LOCAL_MACHINE的区别是影响范围。前者影响只当前用户而后者是系统配置影响所有用户。只要里面添加入新的键值对就可以实现自启动。

hkey_local_machine,windows,microsoft进行如上图的写入操作后就可以实现开机自启动。可以看到我是在HKEY_CURRENT_USER根键下也就是说这个设置只会影响我目前的登陆账户。

2、API函数。

编写程序操作注册表就必须使用系统API函数,目前需要用到的函数有:RegOpenKeyEx、RegCreateKeyEx、RegSetKeyValue、RegDeleteKeyValue、RegCloseKey

创建指定的注册表项RegCreateKeyEx()

hkey_local_machine,windows,microsoftHKEY hKey--需要打开的主键的名称,LPCTSTR lpSubKey--需要打开的子键的名称,DWORD ulOptions--保留,设为0,REGSAM samDesired---安全访问标记,也就是权限,PHKEY phkResult---得到的将要打开键的句柄。

向注册表写入信息RegSetVauleEx()函数。

hkey_local_machine,windows,microsoft
此函数中,需要传入的参数依次是,HKEY(RegOpenKeyEx函数中的最后一个参数)、键名、NULL、REG_SZ、启动程序的完整地址、值数据的大小。

检索信息--RegQueryVaule()函数。 hkey_local_machine,windows,microsoft

相关函数在Win32API参考手册中查询:Win32API参考手册

3注意操作HKEY_LOCAL_MACHINE根键内容时需要管理员权限否则会失败,而HKEY_CURRENT_USER只需要默认权限就足够了。

具体实现过程

实现HKEY_LOCAL_MACHINE根键自启动项目的添加

Win+r打开命令提示符,输入regedit,进入注册表编辑器,在\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下目前有如下项目。hkey_local_machine,windows,microsoft

实现添加自启动项目。 打开注册表使用到了函数GetModuleFileName()目的是得到本程序的路径。

hkey_local_machine,windows,microsoft

添加到注册表的路径

hkey_local_machine,windows,microsoft

使用system("pause")语句,因为需要管理员身份运行编译后的可执行文件,函数RegSetValueEx才能执行成功。也就是,编译完后,用管理员身份执行程序,没有这条语句的话便不能观察到运行结果,这样做的目的是方便观察。

写入项目

hkey_local_machine,windows,microsoft

关闭注册表

hkey_local_machine,windows,microsoft

注意这里用管理员身份运行程序,发现执行成功。并且在注册表中发现了新添加的项目。

hkey_local_machine,windows,microsoft

hkey_local_machine,windows,microsoft

HKEY_LOCAL_MACHINE根键自启动项目的查询

前面几步和启动过程差不多,但是这里的RegQueryValueEx()函数传递的参数为:   hkey,"test",NULL,NULL,(LPBYTE)file,&lpdword。

hkey_local_machine,windows,microsoft

找到则输出文件所在路径,

hkey_local_machine,windows,microsoft

查看运行结果:

1、进入注册表,如下图,可以看到‘test”的数据为:

C:\Users\曾盈\Desktop\1.exe,程序执行结果和注册表查询结果一致。

hkey_local_machine,windows,microsoft

源代码

添加

#include <stdio.h>

#include <windows.h>

int main()

{

       char file[100];//存放本程序的路径

       GetModuleFileName(NULL,file,100);//得到本程序的路径

       LPCTSTR regname = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";

       // LPCTSTR:指向常量字符的长指针,这里指向自启动添加到注册表的路径

       HKEY hkey;

       LONG ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regname,0,KEY_ALL_ACCESS|KEY_WOW64_64KEY,&hkey);

       //使用参数"KEY_ALL_ACCESS|KEY_WOW64_64KEY",因为操作位数不同。

       if(ret == ERROR_SUCCESS)

              printf("成功打开注册表编辑器!\n");

       else

              printf("未打开注册表编辑器,错误代码:%d\n",ret);

       system("pause");

     /*使用该语句,因为需要管理员身份运行编译后的可执行文件,函数RegSetValueEx才能执行成功。

       也就是,编译完后,用管理员身份执行程序,没有这条语句的话

       便不能观察到运行结果,这样做的目的是方便观察。

       */

       ret = RegSetValueEx(hkey, "test", 0, REG_SZ,(BYTE *)file, strlen(file)+1);

       //将项目文件放到本程序路径中

       if(ret == ERROR_SUCCESS)

              printf("成功创建项目 'test' \n");

       else

              printf("创建项目失败!错误代码:%d\n",ret);

       RegCloseKey(hkey);//关闭注册表

       system("pause");

      

       return 0;

}文章来源地址https://www.toymoban.com/news/detail-833607.html

查询

#include <stdio.h>

#include <windows.h>

#define buff 200

int main()

{

       char file[buff];//file,用于接收该数据的缓冲区的指针

       DWORD lpdword = buff;

       LPCTSTR regname = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";

       HKEY hkey;

       LONG ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,regname,0,KEY_READ|KEY_WOW64_64KEY,&hkey);

       if(ret == ERROR_SUCCESS)

              printf("成功打开注册表编辑器!\n");

       else

              printf("未打开注册表编辑器,错误代码:%d\n",ret);

       ret = RegQueryValueEx(hkey,"test",NULL,NULL,(LPBYTE)file,&lpdword);

       /*

       查找与hkey关联名称为"test"的数据

       最后一个参数指向的缓冲区的大小(以字节为单位)

       */

      if(ret == ERROR_SUCCESS)

             printf("%s\n",file);

       else

             printf("RegQueryValueEx()函数失败!错误代码:%d\n",ret);

       RegCloseKey(hkey);//关闭注册表

       return 0;

}

到了这里,关于HKEY_LOCAL_MACHINE根键自启动项目的添加和查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包