系统安全-Windows下的注册表操作

注册表

可以说是用于存储计算机所有设置及配置信息的数据库,我们在设置中做出的各种更改归根结底是修改了计算机中的注册表。具体定义如下:
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
按win+R打开运行界面,输入regedit即可打开注册表。
注册表
各级目录存储内容如下:
1.HKEY_CLASSES_ROOT
说明:该根键包括启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,应用程序与文档的图标等。
2.HKEY_CURRENT_USER
说明:该根键包括当前登录用户的配置信息,包括环境变量,个人程序以及桌面设置等
3.HKEY_LOCAL_MACHINE
说明:该根键包括本地计算机的系统信息,包括硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息
4.HKEY_USERS
说明:该根键包括计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使
用的图标,激活的程序组,开始菜单的内容以及颜色,字体
5.HKEY_CURRENT_CONFIG
说明:该根键包括当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。

代码修改注册表

参考API

RegCreateKeyEx 创建注册表项
RegSetValueEx 给注册表项设置值
RegCloseKey 释放指定注册键的句柄

具体实现

用修改开开机启动项作为一次范例,启动项注册表存储路径HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
自启动项

#include<Windows.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
	HKEY hKey;
	LPCTSTR keyv;
	DWORD kvl;
	DWORD lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
		0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
	if (lRet == ERROR_SUCCESS)
	{
		cout << "注册表打开设置成功!\n";
	}
	else
		cout << "未能找到";
	char path[] = "D:\\Tencent\\QQ\\Bin\\QQ.exe";  
	keyv = L"D:\\Tencent\\QQ\\Bin\\QQ.exe";          //键值
	kvl = ((DWORD)strlen(path) + 1) * sizeof(TCHAR); //键长度
	lRet = RegSetValueEx(hKey, TEXT("QQ"), 0, REG_SZ, (PBYTE)keyv, kvl);
	if (lRet == ERROR_SUCCESS)
	{
		cout << "自动启动设置成功!\n";
	}
	RegCloseKey(hKey);
	return 0;
}
}

两种类型

DWORD:整数类型的一种,long 32位有符号整数;int 32位有符号整数;DWORD 32位无符号整数。
LPCTSR:字符串的一种,string类型前加L可转换。
LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
STR表示这个变量是一个字符串

问题

注册表未显示

此时如果打开注册表HEKY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
会发现启动项并没有添加进去,但是打开任务管理器查看启动则会发现QQ已经添加进去了。
任务管理器启动项
这是因为我们在使用visual studio编写程序,默认是32位,而目前的计算机大多位64位系统,修改注册表时64位系统要对32位程序进行重定向,修改的注册表目录为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Winodows\ CurrentVersion\Run,打开会发现启动项已设置。
修改结果
若要使用visual studio编写64位程序可以打开项目属性,在平台选项中下拉选择x64即可。
vs设置

32位还是64位?

1.内存:
32位和64位的位数代表计算机一次能处理的最大位数,
32位系统的最大寻址空间是2的32次方bai=4294967296(bit)= 4(GB)左右;
64位系统的最大寻址空间为2的64次方=4294967296(bit)的32次方,数值大于1亿GB。
也就是说32位系统最大只能支持4G内存,而64位系统暂时可以说是无上限的。
2.兼容性:
64位系统比32位系统的软件少,主要是64位系统推出的时间不长,所以64位系统的兼容性不如32位,虽然可以兼容32位软件,但是部分32位的软件在64位系统无法运行。
3.速度:
理论来说64位CPU的指令集可以运行64位数据指令,比32位CPU提高了一倍,但是在使用中我们并不会如此明显地感觉到两代硬件的速度差距。这是因为我们日常使用并不是总能让计算机满负荷运转,在不满载的时候,更大的货车并不比小的效率高。而且目前32位的应用数量依然庞大,在运行这种应用的情况下,32位系统反而可能有比64位更优异的表现。

总结

修改注册表三部走:
1.新建或打开注册表项
2.写入注册表项值
3.释放句柄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值