查看“注册表”的源代码
←
注册表
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Windows]] == 概述 == <q> 注册表(Registry)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息,在操作系统的启动、运行过程中起着重要的作用。 </q> <br/><br/> <q> 注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。<br/> 具体来说,在启动Windows时,Registry会对照已有硬件配置数据,检测新的硬件信息;系统内核从Registry中选取信息,包括要装入什么设备驱动程序,以及依什么次序装入,内核传送回它自身的信息,例如版权号等;同时设备驱动程序也向Registry传送数据,并从Registry接收装入和配置参数,一个好的设备驱动程序会告诉Registry它在使用什么系统资源,例如硬件中断或DMA通道等,另外,设备驱动程序还要报告所发现的配置数据;为应用程序或硬件的运行提供增加新的配置数据的服务。配合ini文件兼容16位Windows应用程序,当安装—个基于Windows 3.x的应用程序时,应用程序的安装程序Setup像在windows中—样创建它自己的INI文件或在win.ini和system.ini文件中创建入口;同时windows还提供了大量其他接口,允许用户修改系统配置数据,例如控制面板、设置程序等。<br/> 如果注册表受到了破坏,轻则使windows的启动过程出现异常,重则可能会导致整个windows系统的完全瘫痪。因此正确地认识、使用,特别是及时备份以及有问题恢复注册表对windows用户来说就显得非常重要。 <ref name="baidu:registry">百度:https://baike.baidu.com/item/%E6%B3%A8%E5%86%8C%E8%A1%A8</ref> </q> == 运行注册表 == # windows+R 运行“regedit”(或“regedt32”) # “C:\Windows\SysWOW64\regedit.exe”(regedit.exe或regedt32.exe)(32bit位于:“C:\Windows\System32\regedt32.exe”) == 数据结构 == [[File:regedit.png|right|700px]] 注册表由键(也叫主键或称“项”)、子键(子项)和值项构成: * 一个键就是分支中的一个文件夹,而子键就是这个文件夹当中的子文件夹,子键同样它也是一个键。 * 一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。 * 一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。 <br/><br/> *数据类型主要有以下四种: {| class="wikitable" style="widtd=50%;" ! 名称 !! 说明 |- |REG_SZ || 字符串:文本字符串 |- |REG_MULTI_SZ || 多字符串值:含有多个文本值的字符串 |- |REG_BINARY || 二进制数:二进制值,以十六进制显示, |- |REG_DWORD ||双字值:一个32位的二进制值,显示为8位的十六进制值。 |} == 目录结构<ref name="wikipedia:registry">维基:https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E8%A1%A8</ref> == 注册表有五个一级分支,其作用如下: {| class="wikitable" style="widtd=70%;" ! 数据类型 !! 说明 |- | HKEY_CLASSES_ROOT || 存储Windows可识别的文件类型的详细列表,以及相关联的程序。 |- | HKEY_CURRENT_USER || 存储当前用户设置的信息。(登录Windows时从HKEY_USERS拷贝相应项) |- | HKEY_LOCAL_MACHINE || 包括安装在计算机上的硬件和软件的信息。(公共配置信息与具体用户无关) |- | HKEY_USERS || 包含使用计算机的用户的信息。 |- | HKEY_CURRENT_CONFIG || 这个分支包含计算机当前的硬件配置信息。 |} == 存储方式<ref name="wikipedia:registry">维基:https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E8%A1%A8</ref> == Windows NT系列(Windows New Technology,新技术视窗操作系统,见[https://zh.wikipedia.org/wiki/Windows_NT Windows NT])操作系统和Windows 9x系列(以Windows 95内核作为蓝本的微软操作系统,见[https://zh.wikipedia.org/wiki/Windows_9x Windows 9x])的存储方式有很大区别。<br/> 注册表被分成多个文件存储,称为Registry Hives,每一个文件被称为一个配置单元。<br/> Windows NT系列的配置单元文件: {| class="wikitable" style="widtd=80%;" ! 名称 !! 注册表分支 !! 作用 |- | SYSTEM || HKEY_LOCAL_MACHINE\SYSTEM || 存储Windows可识别的文件类型的详细列表,以及相关联的程序。 |- | NTUSER.DAT || HKEY_CURRENT_USER || 存储用户参数选择的信息(此文件放置于用户个人目录,和其他注册表文件是分开的) |- | SAM || HKEY_LOCAL_MACHINE\SAM || 用户及密码的数据库 |- | SECURITY || HKEY_LOCAL_MACHINE\SECURITY || 安全性设置信息 |- | SOFTWARE || HKEY_LOCAL_MACHINE\SOFTWARE || 安装的软件信息 |- | DEFAULT || HKEY_USERS\DEFAULT || 缺省启动用户的信息 |- | USERDIFF || HKEY_USERS || 管理员对用户强行进行的设置 |} Windows 9x系列的配置单元文件: {| class="wikitable" style="widtd=80%;" ! 名称 !! 注册表分支 !! 作用 |- | CLASSES || HKEY_CLASSES_ROOT || 存储软件组件库有关信息 |- | USER.DAT || HKEY_USERS || 存储用户参数选择的信息 |- | SYSTEM.DAT || HKEY_LOCAL_MACHINE || 系统信息 |} == 分散与集中之争<ref name="wikipedia:registry">维基:https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E8%A1%A8</ref> == 关于分散的文本文件和集中的注册表两种软件配置方式的优劣,目前仍有争论。主流操作系统中,Linux操作系统一直使用单独的文本文件来存放配置信息。而Windows平台下基于.NET框架的软件对注册表的依赖性也大大减弱。事实上,.NET软件通常使用纯文本的XML(称为app.config)文件而不是注册表进行配置,这在某种意义上是向当初的ini文本配置方式的一种回归。部分绿色软件支持者认为,集中式的注册表要求软件需要进行专门的安装步骤才可以正常运行,而单独的文本配置文件则可以不需要安装,只要将软件的文件目录拷贝过来就可以使用;当不再需要软件的时候,除删除相关文件外对于注册表也需要进行卸载步骤,才有可能不在系统中留下痕迹(很多软件即使提供了卸载步骤,仍然会留下痕迹),如果使用文本配置文件,则能做得更干净。但是,文本配置方式导致某些系统软件的配置较为困难且缺乏统一的界面(如Linux中的情况),也是不争的事实,尽管现在已经有很多软件可以方便进行系统配置,但仍存在标准不够统一的问题。<br/> <br/> 著名开源软件Fetchmail的作者Eric S. Raymond在《UNIX编程艺术》一书中有如下叙述:<br/> :<pre>对比terminfo数据库和Windows注册表,我们发现注册表出名地容易受到错误代码的破坏。这可能会使整个系统都无法使用。即使系统没有瘫痪,但如果破坏本身干扰了专用的注册表编辑工具,恢复工作就会很困难。</pre> <br/> 从2000年以来部分恶性病毒如熊猫烧香等的破坏情形看,的确存在“破坏本身干扰注册表编辑器”的问题。在某些情况下,病毒程序会监视系统进程列表,并强行关闭名为regedit的任何程序。这使得受损用户难以直接通过编辑注册表进行恢复。<br/> <br/> 注册表是Windows操作系统的核心,越来越多的黑客程序将攻击对象转向了注册表。一些程序(尤其是恶意程序),为了达到随系统自动启动的目的,会在注册表创建启动项,因此监控注册表能够有效地预防该类恶意程序的攻击。 == 常用 == === 系统启动项 === Windows操作系统的系统启动项是在注册表中设置的,在注册表中常见的自启动位置如下: # '''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/2017/05/24/Windows/CurrentVersion/'''中的'''Run'''、'''RunOnce'''、'''RunOnceEx'''、'''RunServices'''和'''RunServicesOnce'''; # '''HKEY_CURRENT_USER/SOFTWARE/Microsoft/2017/05/24/Windows/CurrentVersion'''中的'''Run'''和'''Runonce'''; # '''HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/2017/05/24/WindowsNT/CurrentVersion/Winlogon/Notify''' 在这些注册表位置下,如果添加一新键值,并指定运行的程序,那么只要操作系统启动时,该程序自动启动。 === 右键菜单 === 右键菜单都在注册表中HKEY_CLASSES_ROOT分支下: # 所有文件都有的右键在:'''HKEY_CLASSES_ROOT\AllFilesystemObjects'''下, # 磁盘驱动器的右键在:'''HKEY_CLASSES_ROOT\Drive'''下, # 文件夹的右键在:'''HKEY_CLASSES_ROOT\Folder'''下, # 还有一个和右键有关的是:'''HKEY_CLASSES_ROOT\Directory''', # 一般对文件的操作放在:'''HKEY_CLASSES_ROOT\*\shellex\Context Menu Handlers''' # 一般对文件夹的操作放在: ## '''HKEY_CLASSES_ROOT\Directy\shell''' ## '''HKEY_CLASSES_ROOT\Directy\shellex\Context Menu Handlers''' ## '''HKEY_CLASSES_ROOT\Folder\shell''' ## '''HKEY_CLASSES_ROOT\Folder\shellex\Context Menu Handlers''' * 两个Windows基本概念:Folder/Directory, 资料夹/文件夹:'''Folder是包含驱动器根目录的,而Directory则不包括''' <br/><br/> * Windows10能够添加右键菜单,但是不能添加子菜单(多番尝试失败),在注册表中查看到的子菜单都不是直接通过注册表实现 === 注册表中的Shell和ShellEx === 该Shell键用于和文件类型上下文菜单一起使用的静态动词ShellExecute。它们很容易实现,因为它们只是指定命令的字符串。如果需要,可以使用可选的COM对象(DropTarget等)进行扩展。 该ShellEx键是用于外壳扩展,这些是COM对象和在壳中有各种扩展点和每一种类型是ShellEx的的一个子项。ShellEx\ContextMenuHandlers是纯Shell密钥的Shell扩展版本。此处列出了不同类型的Shell扩展。 shell文件夹中定义的菜单,在右键上直接显示 shellex文件夹中定义的菜单,在右键上显示为多级菜单 == 参考 == <references />
返回至“
注册表
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息