随感而发

杂七杂八

统计

留言簿(13)

阅读排行榜

评论排行榜

【转】.reg文件格式

转自:http://hi.baidu.com/oumeida/blog/item/119af6dde7e57ce877c638cf.html

.reg文件格式

原作:j.mostert
翻译:淡月儿

1 概述
注册表编辑器使用.reg文件格式导入、导出注册表设置,支持的操作系统包括windows3.x,windows95/98/nt及以上。尽管注册表的作用和原

理十分重要,但本文不打算介绍,你可以通过文末列出的网址,获得相关的信息。同时,windows3.x的.reg文件格式与windows95以上不尽相同

,本文将忽略这方面的内容,毕竟windows3.x的注册表已经不太重要。

2 详细说明
.reg文件是ascii码组成的无格式纯文本,每一行以“cr/lf”结尾。

2.1 文件头
.reg文件开头是注册表编辑器的版本,windows95/nt下版本是4,你可以使用这样的字符串:regedit4。在执行导入前,注册表编辑器将会检

查版本是否正确,并在不匹配时给与提示,这也是注册表编辑器对.reg文件做的唯一检查。一般情况下,注册表编辑器会默默忽略掉错误的文

件内容不予导入注册表,更多情况下会把可能导致问题的内容导入注册表,这是微软注册表编辑器的一个缺陷。

2.2 键
键和子键被原样导出至.reg文件,没有顺序差别。
例如:
hkey_classes_root\clsid键下面有hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d}这个子键(这个键的作用是在控制

面板上添加一个类声明),它按如下格式导出:
[hkey_classes_root\clsid]
[hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d}]
任何一个有效键值都必须包含完整的路径,因此必定以根键开头,根键包括:
hkey_classes_root
hkey_current_user
hkey_local_machine
hkey_users
hkey_current_config
hkey_dyn_data
键名只可以由ascii码中的可打印字符组成(即ascii码32至127所代表的字符),键名不可以包含空格、反斜杠( \ )以及通配符( * 和 ? )。

每一个键名下紧跟着它的键值,键值列表以空行结束,一个键的键值列表可以就是一个空行。
例如:
[key-name]

[second-key-name]
"value1"=something
"value2"=something

[third-key-name]
假如在文件中指定了一个不存在的键值,那么在导入的时候这个键连同它的根键(假如不存在的话)都将被创建。
例如:
文件中指定了hkey_users\jeroen\test\subkey这个键;
注册表中只存在hkey_users\jeroen这个键;
当导入以后,hkey_users\jeroen\test这个键会被创建。

注意,你只能添加或修改键和键值,而不能删除它们。
(译者注:事实上可以删除,方法是在键名前面加上 - 号,该键连同其子键将被删除;在指定键值为 - ,可以删除该键值。)

2.3 键值
注册表键值可以是三种数据类型:字符串(string)、二进制值(binary value)和双机器字(dword,即32位整数)。键值的名称以引号 " 包含

,值紧跟在等号 = 之后。每一个键都包含至少一个字符串类型的键值,这个键值在注册表编辑器中显示为“默认值”(default)。你可以通过

指定名称为 @ 的值来修改默认值。
例如:
@="this is the default value."

2.3.1 字符串
字符串可以是任意长度的,用引号 " 包含起来的由ascii码字符组成的值。字符 " 和 \ 也可以包含在字符串中,不过需要用 \" 和 \\ 进

行转义。同时,注册表编辑器可以导入导出除换行符(以及新行符,即ascii码10所指定的字符)以外的非acsii码字符。
当一个字符串值中包含换行符,在导出的时候会被输出成两行,但是再次导入时,只能导入第一行,第二行将被忽略。因此请牢记:不要在

字符串值中包含换行符。
例如:
"foo"="bar"
"foopath"="c:\\windows\\system"
"foomessage"="this/nmessage/nactually/nconsists/nof/one/nlong/nline."

2.3.2 二进制值
在字符串和双字不适用的场合,可以使用二进制值。二进制值可以用来储存任意类型的数据,其格式为 hex:xx,yy,zz 等,其中xx、yy、zz

是用16进制值表示的单字节值,二进制值可以是任意长度的。
较长的二进制值可以用c语言多行符 \ 分割成多行显示。
例如:
"bar"=hex:48,00,00,00,01,00,00,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,\
00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,\
0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,0a,00,00,00,00,00,c4,ac,01,\
00
请记住,\ 符只能够应用在二进制值当中。另外,微软声明一个二进制值不可以存储超过2k的资料,这也是值得注意的。
二进制值的例子:
"foo"=hex:00,de,ca,de,12,34

2.3.2.1 特定二进制类型
除了常规的二进制值,还有若干特定类型的二进制值。我们可以这样指定:
"foobar"=hex(type):xx,xx,xx,xx,...
这些类型由 0 到 10 这些数字代表,具体如下:
0 reg_none
1 reg_sz
2 reg_expand_sz
3 reg_binary
4 reg_dword, reg_dword_little_endian
5 reg_dword_big_endian
6 reg_link
7 reg_multi_sz
8 reg_resource_list
9 reg_full_resource_descriptor
10 reg_resource_requirements_list

2.3.2.1.1 reg_none类型
默认的二进制值类型,应用在无特殊要求的场合。

2.3.2.1.2 reg_sz类型
以'\0'结尾的字符串。这是用二进制值来指定的字符串值,以下两种表达方法是一样的:
"barfoo"=hex(1):41,42,43,44,00
"barfoo"="abcd"
参见2.3.1,字符串。

2.3.2.1.3 reg_expand_sz类型
包含隐含串的字符串,一般是对环境变量的引用。当一个应用程序读到这样字符串,系统将把引用串转换为正确的环境变量值。
下面的例子表示字符串"%path%;something",当这个值被引用的时候,"%path%"会被转化为当前系统的 path 值。
"forbaa"=hex(2):25,50,41,54,48,25,3b,53,6f,6d,65,74,68,69,6e,67,00

2.3.2.1.4 reg_dword, reg_dword_little_endian类型
小段对齐,是通常的双字数据类型,在这种格式下存储,高位字节在前,低位字节在后。

2.3.2.1.5 reg_dword_big_endian类型
大段对齐,是苹果机的双字数据类型,在这种格式下存储,低位字节在前,高位字节在后。

2.3.2.1.6 reg_link类型
unicode符号连接。

2.3.2.1.7 reg_multi_sz
多字节字符串集,以连续两个'\0'结束,例如:
"farboo"=hex(7):41,42,43,44,00,45,46,47,48,00,00
表示"abcd"和"efgh"两个字符串。

2.3.2.1.8 reg_resource_list
设备驱动程序资源列表。

2.3.2.1.9 reg_full_resource_descriptor
微软保留数据类型,用于辅助设备驱动程序。

2.3.2.1.10 reg_resource_requirements_list
微软保留数据类型,用于辅助设备驱动程序。

2.3.3. 双字数据类型
双字数据类型,即32位整数,表示为 dword:xxxxxxxx,其中 x 是一个表示4位二进制的16进制值。
例如:
"foo"=dword:00decade

3 结语
本文简要介绍了.reg文件的格式,由于作者水平有限,错漏之处在所难免,假如您发现了错误,请不吝赐教.
我的email:j.mostert@oke.nl。

4 参考资料
以下是关于注册表知识的网址,希望对大家有所帮助。


(译者注:由于这些链接都是1997年4月以前的,因此不再翻译)
参考资料:http://www.cn-doc.com/_soft_ect_doc/2005_08_18_23/20050818234403397.htm

我在网上看到REG文件对注册表的操作可以不受注册表编辑器被禁用的限制,我就试了一下,我把注册表禁用了,然后想把解除注册表禁用的REG文件导 入注册表,可是导不进去,还是提示“注册编缉已被管理员停用”,不是说REG文件对注册表的操作可以不受注册表编辑器被禁用的限制吗,怎么我却导入不进 去!

问题补充: 在DOS下好像是一样的

用记事本
REGEDIT4
[HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVer-
sion\Policies\System]
\〃DisableRegistryTools\〃=dword:00000000
保存为C:\reg.reg
然后打开
试试吧


posted on 2009-04-08 12:27 shongbee2 阅读(2078) 评论(0)  编辑 收藏 引用 所属分类: windows相关


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理