DOS命令行(10)——reg/regini-注册表编辑命令行工具

注册表的介绍

注册表(Registry,*、港澳译作登錄檔)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。
 

1. 数据结构

注册表由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构的一个节点,而子键就是这个节点的子节点,子键也是键。一个值项则是一个键的一条属性,由名称(name)、数据类型(datatype)以及数据(data)组成。一个键可以有多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。
在注册表编辑器(Regedit.exe)中,数据结构显示如下,其中,command键就是open键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为%SystemRoot%\system32\NOTEPAD.EXE "%1"
DOS命令行(10)——reg/regini-注册表编辑命令行工具
以上信息的意义是:txt类型的文件在右键菜单里"打开"一项使用的程序是”NOTEPAD.EXE",即用记事本打开文件。
 

2. 数据类型(即值类型)

注册表的数据类型主要有以下五种:
显示类型(在编辑器中)
数据类型
说明
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
 

3. 分支结构

注册表有一下五个一级分支:
名称
缩写
作用
HKEY_CLASSES_ROOT
HKCR
存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER
HKCU
存储当前用户设置的信息。
HKEY_LOCAL_MACHINE
HKLM
包括安装在计算机上的硬件和软件的信息。
HKEY_USERS
HKU
包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG
HKCC
这个分支包含计算机当前的硬件配置信息。
 

4. 存储方式

Windows NT系列操作系统和Windows 9x系列的存储方式有很大区别。注册表被分成多个文件存储,称为Registry Hives,每一个文件被称为一个配置单元。
在早期的Windows 3.x系列中,注册表仅包含一个reg.dat文件,所存放的内容后来演变为HKEY_CLASSES_ROOT分支。
Windows NT家族的配置单元文件:
名称
注册表分支
作用
SYSTEM
HKEY_LOCAL_MACHINE\SYSTEM
存储计算机硬件和系统的信息
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
管理员对用户强行进行的设置
 

5. 编辑注册表

① 使用注册表编辑器(Regedit.exe)
Microsoft公司不建议用户自行更改注册表,因为如果对注册表进行了不当修改,就有可能造成Windows系统的某些功能失效,甚至导致系统崩溃。但是,Microsoft公司仍然在Windows中提供了注册表编辑器,它位于%systemroot%\regedit.exe。在Windows NT中使用的则是界面有所不同的REGEDT32.exe。而在Windows 2000中,两个程序同时存在于系统中。部分的原因是Windows 2000版本的regedit.exe尚不支持对注册表数据设置安全性。但在Windows XP及以后的操作系统中,regedit.exe已经能够支持注册表安全设置了,因此REGEDT32.exe失去了存在的必要。不过它仍被保留,只是该程序执行时仅仅会自动调用regedit.exe。
除了编辑本台计算机上注册表数据之外,注册表编辑器亦可以通过文件菜单下的“加载配置单元”菜单项编辑直接编辑文件系统上的注册表数据文件。该功能可以允许用户打开文件系统中的RegHive文件,并将其中的数据映射到HKEY_USERS或者HKEY_LOCAL_MACHINE项下的一个子项之中。
② 使用命令行工具
Windows自带了一个管理注册表的命令行工具——reg。只需在命令提示符中运行并指定参数,即可以命令行的形式对注册表进行各项管理操作。支持的操作有增删改查、导入导出注册表文件(reg文件)、导入导出或加载配置单元(RegHive)等。
③ 使用脚本
在Windows 98以后的操作系统中,增加了一个脚本语言解释器,可以用来执行一些系统任务。它可以支持VBScript和JavaScript两种脚本语言,都提供了访问注册表的功能。某些病毒就利用这一点通过修改注册表进行传播。
④ 使用第三方或自行编写的软件
访问注册表的系统功能对编程人员是开放的,因此有许多软件都有读写注册表的功能。事实上,Windows平台下开发的软件几乎都在不同程度上修改注册表,以便保存一些在程序多次运行之间需要保留的信息,以及让软件可以通过某种特定方式(例如,右键菜单)启动。也有一些软件是专门开发出来对注册表进行优化和设置的。
⑤ 使用reg文件
reg文件也是一种修改注册表的方式。在注册表编辑器中,用户可以通过“文件”菜单中的“导出”菜单项来备份注册表中的某些项目到一个reg文件之中;之后用户可以再次通过“导入”菜单项将这些项目还原。reg文件本身也在系统中被关联到regedit.exe,因此直接双击打开reg文件也会起到将其中的项目导入到注册表中的效果。
而事实上,reg文件是根据一定格式编写的纯文本文件。因此,熟练的用户可以直接使用文本编辑器(比如记事本)来创建自己的reg文件,这样做无需在注册表中根据路径一级一级地访问,而且可以直接对大量项目进行批量修改。这些文件还可以被分发给非专业的用户,帮助他们快速地完成注册表的编辑,以减少出错的可能。
 

reg

DOS命令行(10)——reg/regini-注册表编辑命令行工具

1. reg query

命令格式:reg query KeyName [/v [ValueName] | /ve] [/s] [/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator] [/reg:32 | /reg:64]
参数说明:
  • KeyName [\\Machine\]FullKeyMachine - 远程机器名称,省略当前机器的默认值。在远程机器上只有 HKLM 和 HKU 可用。 FullKey - 以 ROOTKEY\SubKey 名称形式ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey - 在选择的 ROOTKEY 下的注册表项的全名。
  • /v 具体的注册表项值的查询。如果省略,会查询该项的所有值。 只有与 /f 开关一起指定的情况下,此开关的参数才是可选的。它指定只在值名称中搜索。
  • /ve 查询默认值或空值名称(默认)。
  • /s 循环查询所有子项和值(如 dir /s)。
  • /se 为 REG_MULTI_SZ 在数据字符串中指定分隔符(长度只为 1 个字符)。默认分隔符为 "\0"。
  • /f 指定搜索的数据或模式。如果字符串包含空格,请使用双引号。默认为 "*"。
  • /k 指定只在项名称中搜索。
  • /d 指定只在数据中搜索。
  • /c 指定搜索时区分大小写。 默认搜索为不区分大小写。
  • /e 指定只返回完全匹配。 默认是返回所有匹配。
  • /t 指定注册表值数据类型。 有效的类型是: REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, REG_DWORD, REG_QWORD, REG_BINARY, REG_NONE 默认为所有类型。
  • /z 详细: 显示值名称类型的数字等值。
  • /reg:32 指定应该使用 32 位注册表视图访问的注册表项。
  • /reg:64 指定应该使用 64 位注册表视图访问的注册表项。
 
例1、查看主键"HKEY_CURRENT_USER"下的子键
reg query HKCU
例2、查看键"HKEY_CURRENT_USER\Software\360"下所有的子键和值
reg query HKCU\Software\360 /s
例3、查找主键"HKEY_LOCAL_MACHINE"下所有子键中,键名称完全匹配为"Run"的子键
reg query HKLM /s /f Run /k /e
例4、查看键 "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"
的值
reg query HKLM\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
 

2. reg add

命令用法:reg add KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64]
参数说明:
    • KeyName [\\Machine\]FullKeyMachine - 远程机器名称,省略当前机器的默认值。在远程机器上只有 HKLM 和 HKU 可用。 FullKey - 以 ROOTKEY\SubKey 名称形式ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey - 在选择的 ROOTKEY 下的注册表项的全名。
  • /v 所选项之下要添加的值名称。
  • /ve 为注册表项添加空白值名称(默认)。
  • /t RegKey 数据类型
  • [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ] 如果忽略,则采用 REG_SZ。
  • /s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符。如果忽略,则将 "\0" 用作分隔符。
  • /d 要分配给添加的注册表 ValueName 的数据。
  • /f 不用提示就强行覆盖现有注册表项。
  • /reg:32 指定应该使用 32 位注册表视图访问的注册表项。
  • /reg:64 指定应该使用 64 位注册表视图访问的注册表项。
 
例1、在键"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Authentication\LogonUI\Background"下添加一个值,名称为"OEMBackground",类型为"REG_DWORD",数据为"1"(需要管理员权限运行)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background /v OEMBackground /t REG_DWORD /d 1 /f
在Windows7中执行该命令就可以修改开机登录界面的壁纸。将壁纸重命名为"backgroundDefault"并把设置好的壁纸放在"C:\Windows\System32\oobe\info\Backgrounds"路径下,没有"info\Backgrounds"目录需要手动创建,即可
 
例2、将"C:\Windows\backdoor.exe"添加到用户开机启动项(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run),设置值名称为"backdoor",数据类型为键的默认值
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v backdoor /d "C:\Windows\backdoor.exe" /f
 
例3、通过注册表关闭UAC(需要管理员权限运行)
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA /t REG_DWORD /d 0 /f
 
例4、将本地安全设置中的"账户:使用空密码的本地账户只允许进行控制台登录"设置为"已禁用"
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v limitblankpassworduse /d 0 /t REG_DWORD /f
 
 

regini

Regini程序操作系统自带的,从XP开始就有,主要是用于修改注册表及注册表权限。我们就从这两方面介绍regini的用法。Regini必须要指定操作脚本,也就是,提前将你要操作的内容写在一个文本文件中,然后用regini命令去读取这个文件,然后执行。
命令格式:Regini text_file_name
 
这里我们主要是要解释这个text_file_name(这个名字随便取,没有特别限定)如何去写,因为命令行都是一样,不一样的是文本文件。
 

1. 修改注册表权限

text_file_name语法:
 
注册表项 [x y z]
解释:
注册表项,比如:HKEY_LOCAL_MACHINE\SOFTWARE\Maxel
 
[x y z]:x,y,z都是数字,他们分别是:Administrators everyone System,代码参考下表:
 
  • 1 - Administrators 完全访问
  • 2 - Administrators 读取访问
  • 3 - Administrators 读取、写入访问
  • 4 - Administrators 读取、写入、删除访问
  • 5 - Creator 完全访问
  • 6 - Creator 读取、写入访问
  • 7 - everyone 完全访问
  • 8 - everyone 读取访问
  • 9 - everyone 读取、写入访问
  • 10 - everyone 读取、写入、删除访问
  • 11 - Power Users 完全访问
  • 12 - Power Users 读取、写入访问
  • 13 - Power Users 读取、写入、删除访问
  • 14 - System Operators 完全访问
  • 15 - System Operators 读取、写入访问
  • 16 - System Operators 读取、写入、删除访问
  • 17 - System 完全访问
  • 18 - System 读取、写入访问
  • 19 - System 读取访问
  • 20 - Administrators 读取、写入、执行访问
  • 21 - Interactive User 完全访问
  • 22 - Interactive User 读取、写入访问
  • 23 - Interactive User 读取、写入、删除访问
 
示例:让注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Maxel,任何人都只读
 
Text_file_name的内容如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Maxel [2 8 19]
 
然后命令提示符执行regini text_file_name即可。
 

2. 创建注册表写入键值

这里还是说text_file_name格式,语法:
注册表项
Value=数据类型 值
 
实例,在HKEY_LOCAL_MACHINE\SOFTWARE\Maxel下创建个hello的字符串,并设置值为4
 
HKEY_LOCAL_MACHINE\SOFTWARE\Maxel
"hello"=REG_SZ 4
 
然后执行:regini text_file_name
 

通过注册表修改文件默认打开方式

以下以.cpp文件为例
1.win+R,然后输入regedit,打开注册表。
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
2.找到HKEY_CLASSES_ROOT键,寻找子键.cpp,若没有则需要新建一个项
DOS命令行(10)——reg/regini-注册表编辑命令行工具
DOS命令行(10)——reg/regini-注册表编辑命令行工具
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
3.将".cpp"的默认的数值数据改为"cppfile"(这个随便取的,只要后面对应的也改一下就行了) 
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
4.再在HKEY_CLASSES_ROOT键下新建项"cppfile",同时在"cppfile"项下新建项"DefaultIcon"和"shell"
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
5.在"shell"项下新建"open",再在"open"下新建"command"
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
6.项"DefaultIcon"的默认的数值数据为文件图标的路径
DOS命令行(10)——reg/regini-注册表编辑命令行工具
 
7.项"command"的默认的数值数据为该类型默认打开方式的程序的路径,路径后要加上“"%1"”,表示鼠标双击时用该程序打开.cpp文件
DOS命令行(10)——reg/regini-注册表编辑命令行工具
注:%1 前面是一个空格
 

扩展

1. 注册表添加右键菜单

  • 如何在注册表中添加右键菜单
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell 文件右键菜单
HKEY_CLASSES_ROOT\Directory\Background\shell 桌面右键菜单
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
HKEY_CLASSES_ROOT\Folder\shell
  • 如何删除右键菜单中图形属性和图形选项
找到注册表
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 项。
删除
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\igfxcui  项
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\igfxDTCM 项;
即可。
Note:如果后续想恢复该项,建议备份注册表。
 

2. 在右键菜单中添加注册DLL选项

Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\dllfile\shell] [HKEY_CLASSES_ROOT\dllfile\shell\register] @="注册DLL文件" [HKEY_CLASSES_ROOT\dllfile\shell\register\command] @="regsvr32 %1" [HKEY_CLASSES_ROOT\dllfile\shell\Unregister] @="卸载DLL文件" [HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command] @="regsvr32 /u %1"
 

3. 一个在注册表中添加右键菜单的实例

//xxx.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\notepad] @="notepad open" [HKEY_CLASSES_ROOT\*\shell\notepad\command] @="D:\\20170901工作文档\\notepad.6.9.2\\notepad++.exe %1"
 

DOS命令行(10)——reg/regini-注册表编辑命令行工具

上一篇:Prism框架下的登录窗口跳转


下一篇:1+2+3+...+n 递归