注册表基础知识详解

概述

微软采用注册表来统一管理软硬件配置,从而大大提高了系统的稳定性和安全性,同时也使我们能更容易的对系统进行维护和管理。

注册表是windows操作系统,硬件设备以及客户应用程序得以运行和保存设置的核心“数据库”。

简单来说注册表是一个庞大的树状分层结构的数据库系统。

注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息,包括计算机配置或自动配置的即插即用的设备和已用的各种设备说明,状态信息和数据等。

 

历史

前身

最初,Windows系统及应用程序的信息被存储在后缀名为ini的文本文件中,这就是注册表的前身。但是这么做有着致命弱点:因为每一个程序都会新安装一个或多个ini文件,来存储程序信息,导致信息的分布极为零乱;而且在16位系统下,ini文件的大小必须在64KB之内。所以ini文件被认为不便于使用和管理。

 

发布与发展

在最早出现于Windows 3.0的OLE技术出现后,微软为了存放系统中大量的软件组件信息,组织了一个reg.dat的数据库来存放这些信息。当时的注册表编辑器为16位版本的regedit.exe,功能较弱。

后来开发的Windows NT 3.1则更进一步使用相同的文件格式来存放系统的配置信息,以取代原有的ini文件。该系统为每一个用户在用户目录下创建了一个自身的注册表空间,而系统的设置被存放在系统文件夹中。由于Windows NT 3.1是一个32位操作系统,regedit.exe被升级为regedt32.exe,并增加了对权限的设置功能。

在Windows 95中,注册表首次得到广泛应用,逐渐淘汰了原有的ini文件。程序在安装时,不再将数据写入ini文件,而直接写入注册表。为了最大限度兼容旧程序,部分原来用于读写ini文件的专门API函数仍然可用,但现在是访问注册表(写入或读取)。Windows 95为了保持和Windows 3.x系列的兼容性,注册表的架构与Windows NT不同,为此专门开发了另一个32位版本的regedit.exe,它没有设置权限的功能。

在Windows 2000中,由于Windows 95家族已经深入人心,regedit.exe也得到广泛应用,相反regedt32.exe的界面相对比较丑陋,因此微软将windows 95系列的regedit.exe拿过来用。但由于移植过来的regedit.exe仍没有权限设置的功能,regedt32.exe仍然保留在系统中用作权限设置。

到Windows XP和Windows Server 2003中,regedit.exe已经增加了权限的功能,regedt32.exe由于失去作用而被剔除。同时,这个版本的注册表是64位的,这导致了一些兼容性问题,少数可以运行在旧版本Windows的程序在Windows XP中无法运行。

 

64位Windows的注册表

64位Windows中的注册表总体结构大致与32位版本相同,但32位程序的信息被放在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node中。

 

注册表结构

命令打开方式

Win + R 输入 regedit 回车

或者输入regedit.exeregedt32regedt32.exe都可

 

数据结构

注册表的主要结构有,根键(或称项),项(或子项),值 这三个,简单理解为和文件夹架构一样,子文件夹等

 

根键 注册表计算机下的分支,可以理解为文件夹,HKEY作为前缀名的叫做根键
根键当中的子文件夹,项下面同样可以包含 项和值
每个注册表项或子项都可以包含称为值的数据,部分值可以应用与某个用户的信息 或 应用与计算机中的所有用户的信息,   可影响系统的实际数据
 值由三部分组成(值的名称,值类型,值的数据)

值类型说明:见下面的数据类型

数据类型

注册表的数据类型主要有以下五种:

显示类型(在编辑器中) 数据类型 说明
REG_SZ 字符串 文本字符串
REG_BINARY 二进制数 不定长度的二进制值,以十六进制显示
REG_DWORD 双字 一个 32 位的二进制值,显示为 8 位的十六进制值
REG_MULTI_SZ 多字符串 含有多个文本值的字符串,此名来源于字符串间用 nul 分隔、结尾两个 nul
REG_EXPAND_SZ 可扩展字符串 含有环境变量的字符串

此外,注册表还有其他的数据类型,但是均不常用:

  • REG_DWORD_BIG_ENDIAN - DWORD 的大头版本,下面同理
  • REG_DWORD_LITTLE_ENDIAN
  • REG_FULL_RESOURCE_DESCRIPTOR
  • REG_QWORD - DWORD 的四字(64 位)版本
  • REG_FILE_NAME

 

注册表五大根键(实际只有2个根键,为了方便操作才分了5个)(有的有6个)

HKEY_LOCAL_MACHINE 注册表里的所有与这台计算机机器有关的配置信息,是一个公共配置信息单元
HKEY_USERS 包含了所有独立用户(使用计算机的用户)的设置信息等

是从HKEY_USERS\当前用户子树复制分离出的

 

HKEY_CURRENT_USER 保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码等
HKEY_CLASSES_ROOT 用于定义系统中所有已经注册的文件扩展名,文件类型,文件图标等,

包含用于各种OLE技术和文件类关联数据的信息

是从 HKEY_LOCAL_MACHINE\SOFTWARE\classes复制分离出来的

 

HKEY_CURRENT_CONFIG 包含常被用户在启动时由本地计算机系统使用的硬件软件配置文件相关信息加载的驱动程序,如字体设置、显示器类型、打印机设置,显示的分辨率等

是从HKEY_LOCAL_MACHINE\config复制分离出来的

 

注册表基本操作应用

个性化时间设置

打开HKEY_CURRENT_USER\Control Panel\International下的sTimeFormat进行修改

 

在开机欢迎屏幕显示自定义信息

打开注册表到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下,找到legalnoticecaption(标题)legalnoticetext(文本)两个值即可编辑

重新启动之后

 

禁用任务管理器

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system 下新建一个值DWORD(32位值)名字设置为DisableTaskMgr(注意大小写),设置值为1

 

禁用控制面板

打开注册表 进入到HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 下创建一个DWORD(32位值)名字设为NoControlPanel,设置值为1即可

 

IFEO(Image File Execution Options)映像劫持

原理:当我们双击运行程序的时候。系统就会查询IFEO注册表。如果发现存在完全相同的子键,就会查询对应的子键中包含的"debugger"键值名,如果这个键值名不为空的情况下 系统则会吧debugger参数指定的程序文件来作为启动的程序

路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

这个路径下有很多的exe程序,我这里选择记事本来进行测试,新建notepad.exe项,点击notepad.exe,在空白的地方右键,点击新建,选择字符串值(S),把它命名成debugger,数值数据填你想要运行的程序,我这里打开的是calc.exe(计算器)

效果:当打开记事本时会弹出计算器

 

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用

这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。

 


(未完待续。。。)

阅读剩余
THE END