发布信息

注册表操作相关的常用API函数的使用方法及编程

作者:软荐小编      2024-03-04 16:04:02     178

ID:计算机网络

注册表是操作系统的重要数据库,几乎记录了系统的所有信息。 当然,因为注册表的功能非常强大,所以注册表对于用户来说是一个非常有价值的地方。 对于反软件来说,注册表是一个需要加强的地方。 注册表是正义与邪恶之间的战场。

可以利用注册表的地方有很多,比如修改文件关联、添加系统启动项、图片劫持、篡改浏览器主页……这些操作都迫使我们去了解注册表相关的编程。

1、注册表操作相关的常用API函数

对于学习编程来说,注册表的操作当然是少不了的。 现在我们来了解一下注册表的操作。 注册表操作与文件操作类似。 还有打开、关闭、写入、查询等操作,也就是我们所说的“增、删、改、查询”。 唯一的区别是使用的API函数不同。 下面介绍各个API函数的使用方法。

打开注册表:

软件注册表在哪里_注册表软件安装位置_注册表软件安装信息

参数说明如下。

(1) hKey:指定父键句柄。

(2) lpSubKey:指向表示要打开的子项名称的字符串。

(3) phkResult:返回打开的子项句柄。

关闭注册表:

注册表软件安装位置_软件注册表在哪里_注册表软件安装信息

该函数只有一个参数,即打开子项的句柄。

查询注册表键值:

注册表软件安装信息_注册表软件安装位置_软件注册表在哪里

参数说明如下。

(1) hKey:指向已打开或创建的子项句柄。

(2) lpValueName:指定要查询的键值的名称。

(3) lpReserved:保留,始终为NULL。

(4) lpType:返回被查询值的类型。

(5) lpData:指向要查询数据的缓冲区。

(6)lpcbData:缓冲区的长度。

写入注册表键值:

软件注册表在哪里_注册表软件安装位置_注册表软件安装信息

参数说明如下。

(1) hKey:指向已打开或创建的子项句柄。

(2) lpValueName:指定要查询或写入的键值的名称。

(3) 保留:保留,始终为0。

(4) dwType:写入的键值的类型。

(5) lpData:写入键值的缓冲区。

(6) cbData:写入的键值缓冲区的长度。

注册表键值枚举:

注册表软件安装位置_软件注册表在哪里_注册表软件安装信息

参数说明如下。

(1) hKey:指向已打开或创建的子项句柄。

(2) dwIndex:查询的索引值。

(3) lpValueName:键名的缓冲区。

(4) lpcValueName:键名缓冲区的长度。

(5) lpReserved:保留,始终为NULL。

(6) lpType:返回被查询值的类型。

(7) lpData:查询到的key值的缓冲区。

(8)lpcbData:查询的key值的缓冲区大小。

删除注册表项:

注册表软件安装位置_注册表软件安装信息_软件注册表在哪里

参数说明如下。

(1) hKey:指向已打开或创建的子项的句柄。

(2) lpValueName:指向要删除的键值项的名称。

2、注册表启动项的管理

对于操作系统来说软件注册表在哪里,很多系统配置都保存在注册表中。 例如,常见的IE主页保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main下的Start Page中; 又例如,在注册表的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer下的NoDriveTypeAutoRun中禁用磁盘驱动器的AutoRun功能; 还有图片劫持、文件关联……很多配置都可以在注册表中完成。

对于安全工具来说,需要通过注册表来发现所有的启动项。 在注册表启动项中,除了正常的系统工具和软件工具外,还会利用注册表启动项来悄悄地启动自己。 我们通过编写一个枚举注册表启动项的工具来学习注册表相关的操作。 我们的程序仍然会使用MFC中的控件,我们一步一步来学习。

3.程序界面设置及相关代码

注册表中有很多地方可以用来完成启动。 我们就不一一介绍了。 这里我们只介绍注册表中某个可以用来完成启动的地方。 至于其他地方,大家可以自行收集完成。 我们的程序仍然采用对话框的形式,其界面如图1所示。

注册表软件安装位置_注册表软件安装信息_软件注册表在哪里

图 1 注册表启动管理器

这个界面就是我们写的软件的界面。 在该界面中,使用了CListCtrl控件。 只需添加并进行相应设置即可。 这里给出一段关于CListCtrl初始化的代码:

注册表软件安装信息_软件注册表在哪里_注册表软件安装位置

LVS_EX_GRIDLINES // 有网络网格

LVS_EX_FULLROWSELECT);//选择单行

软件注册表在哪里_注册表软件安装信息_注册表软件安装位置

4.启动项枚举

本例中主要枚举了注册表中“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\”子键下的键值项。 我们的软件启动后,应该会显示该注册表子键下的所有启动项的内容。 枚举代​​码如下:

注册表软件安装信息_注册表软件安装位置_软件注册表在哪里

对于注册表启动项的管理,应该有几个功能。 首先是阻止启动项,然后是删除启动项,最后是添加启动项。 在我们的程序中,我们主要完成最后两个功能,一是删除启动项,二是添加启动项。 至于阻止启动项的功能,就交给你自己实现了。 很多安全软件,如优化大师、360安全卫士等,都具有拦截启动项的功能。 思考一下阻止启动项和删除启动项的区别,以及如何实现。

我们分别看一下添加启动项和删除启动项的代码。

5.添加启动项代码

要添加启动项,您需要添加一个窗口。 至于添加窗口的方法软件注册表在哪里,大家可以自行参考MFC开发相关的介绍,这里就不做过多介绍了。 完整的代码将提供给大家参考。 这里主要介绍注册表操作相关的内容。 添加启动项的代码如下:

注册表软件安装信息_注册表软件安装位置_软件注册表在哪里

6.删除启动项代码

删除启动项的代码比添加启动项的代码简单,但删除涉及到CListCtrl控件的编程,即选择删除哪个启动项。 这是一个大问题。 获取选中的启动项后续的删除就很简单了。 代码如下所示:

注册表软件安装信息_软件注册表在哪里_注册表软件安装位置

启动项管理软件的编写就到此为止。 您还可以在注册表中添加其他位置,使软件能够在启动时启动,这样我们的软件就会更加强大。 当我们不断在注册表中寻找新的位置来启动软件时,每次都需要添加代码,这太麻烦了。 有没有什么好方法可以避免每次发现新位置时都更改代码? 我们可以将注册表中需要枚举的子项保存到一个文件中,然后让程序读取这些子项,并在注册表中分别进行枚举。 这样以后每当注册表中有新的内容需要枚举时,只需要修改这个文件即可,不需要修改程序本身。 你可以尝试写一个这样的程序。

相关内容 查看全部