分享
 
 
 

.Reg文件格式

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

.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月以前的,因此不再翻译)

原文:

Thethe .reg file format

J.Mostert

1 introduction

the .reg file format is used by regedit, the program supplied with windows

3.x,

windows 95, and windows nt, to import and export settings from the

registry.

note that i will not explain what the registry is, how it works, or what

it can

be used for. there are other documents describing the registry and it's

most

interesting parts all over the net - check out some of the links at the

end of

this document. also, i will not provide you with information on regedit for

windows 3.x - i know that it exists, but not if it's format is in any way

like

the regedit of 95/nt. besides, the registry is much less interesting on

windows

3.x.

2 description

the file is formatted as plain ascii text. every line is ended with a cr/lf

combination.

2.1 header

it starts with regeditx, where x is regedit's version number - on 95/nt,

it's

4, making the string regedit4.

this is also the only part of the file actually checked by regedit when

it's

importing - if the file contains any formatting errors, regedit will not

notify

you and simply skip the settings that contain errors.

in particular, regedit will pretty much accept anything as long as it

starts

with regeditx, and ignore anything erroneous. yes, that does add up to the

microsoft stupid mistakes list.

2.2 keys

key names are exported as they are encountered, but need not be in any

order.

subkeys are explicitly named. for example, if you had the key

hkey_classes_root\clsid and it's subkey

hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d} (which

represents the classid of the control panel, by the way), they would be

exported as:

[hkey_classes_root\clsid]

[hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d}]

for a key name to be valid, it must start with one of the root key names:

hkey_classes_root, hkey_current_user, hkey_local_machine, hkey_users,

hkey_current_config and hkey_dyn_data.

a key name may only contain printable ascii characters (that is, characters

with values from 32 through 127) and may not contain spaces, backslashes \

or

the wildcards * and ?.

every key name is followed by it's values, starting on the line directly

following it. the list of values is terminated with an empty line, and may

be

empty itself.

for example:

[key-name]

[second-key-name]

"value1"=something

"value2"=something

[third-key-name]

if a key is specified which does not exist, it is created, along with any

parent keys that do not exist. for example, if the key

hkey_users\jeroen\test\subkey is specified, and only the key

hkey_users\jeroen

exists, the key hkey_users\jeroen\test is also created.

note that you cannot delete keys or values - you can only add them if they

don't already exist, or modify them if they do.

2.3 values

there are three kinds of values in the registry: strings, binary values,

and

dwords. they represent a collection of characters, a collection of bytes,

and a

32-bit integer, respectively.

values consist of a name, enclosed in quotes "", followed by an equal sign

= ,

followed by the value value (there's no other way to put it).

every key, even if created empty, contains at least one string value -

this is

the value shown as (default) in regedit. to set it's value, use @ as the

value

name, and omit the usual quotes around the value name.

example:

@="this is the default value."

2.3.1 strings

strings may be any size. they are represented within quotes "", and contain

normal ascii characters.

the quote " and backslash \ are also allowed in strings - however, they

must be

represented as \" and \\, respectively. also, regedit can import and

export all

non-ascii characters except for linefeed (or newline, ascii code 10).

should a

linefeed end up in a string, regedit will export this as a real newline,

splitting the string in two lines. when reimporting this string, regedit

will

only read the first line. the moral of the story: don't store linefeeds in

strings.

examples of strings:

"foo"="bar"

"foopath"="c:\\windows\\system"

"foomessage"="this/nmessage/nactually/nconsists/nof/one/nlong/nline."

2.3.2 binary values

binary values are used where strings and dwords fail. they can be used to

represent any type of data. they are represented as hex:xx,yy,zz where

xx,yy

and zz are hexadecimal representations of single bytes. they may be any

length.

lengthy binary values can be divided into multiple lines using the c line

separator \. for example:

"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

also take note that this is only allowed with binary values. in

particular, you

cannot divide strings this way. and yes, this is pretty stupid.

although i usually ignore microsoft, they recommend you shouldn't store

more

than around two kilobytes of binary data at most, and i agree with them for

once.

example of binary values:

"foo"=hex:00,de,ca,de,12,34

2.3.2.1 types of binary values

along with 'regular' binary values, there are also some special types of

data

which regedit represents as special binary values, like this:

"foobar"=hex(type):xx,xx,xx,xx,...

where type is a number ranging from zero to ten in the current versions of

windows, as follows:

type name

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

reg_none means 'no defined value type'. no, i don't know what it's good

for -

reg_binary is already a catch-all type for everything that has no type.

perhaps

it's used for values that have no contents, although i can't imagine what

that

would be good for.

2.3.2.1.2 reg_sz

a null-terminated string. this is the same as the string type, represented

as

bytes. for example, these definitions are equal:

"barfoo"=hex(1):41,42,43,44,00

and

"barfoo"="abcd"

see also 2.3.1, strings.

2.3.2.1.3 reg_expand_sz

a null-terminated string that contains unexpanded references to environment

variables. when an application reads this string from the registry, it can

let

windows replace the references with the environment variable value.

for example, the following value

"forbaa"=hex(2):25,50,41,54,48,25,3b,53,6f,6d,65,74,68,69,6e,67,00

represents the string "%path%;something". when this string is read, the

"%path%" section can be replaced with the contents of your path variable.

2.3.2.1.4 reg_dword, reg_dword_little_endian

represents a little-endian dword (the common format of windows dwords). in

little-endian format, the most significant byte of a word is the high-order

byte. see also 2.3.3, dwords.

2.3.2.1.5 reg_dword_big_endian

represents a big-endian dword (used on macintoshes, for example). as you

can

probably guess, in big-endian format, the most significant byte of a word

is

the low-order byte.

2.3.2.1.6 reg_link

represents a unicode symbolic link. no, i don't know what this is, and i

probably don't want to know either.

2.3.2.1.7 reg_multi_sz

a collection of null-terminated strings, null-terminated. for example:

"farboo"=hex(7):41,42,43,44,00,45,46,47,48,00,00

represents two strings: "abcd" and "efgh".

2.3.2.1.8 reg_resource_list

a device driver resource list. another one in the category "don't know and

don't want to know."

2.3.2.1.9 reg_full_resource_descriptor

undocumented. it's probably ment for windows itself only, as device driver

stuff.

2.3.2.1.10 reg_resource_requirements_list

undocumented. it's probably ment for windows itself only, as device driver

stuff.

2.3.3. dwords

dwords are 32-bit integers represented as dword:xxxxxxxx, where x is a

hexadecimal digit. they're pretty boring, as that's all i can tell about

them.

example of dword values:

"foo"=dword:00decade

3. the end

that's about it - the .reg format is pretty simple, but it does the job.

should you find any unclarities, mistakes or things you think are missing,

contact me by emailing to "j.mostert@oke.nl".

4. well, almost, we still need the links

oh yeah, here are the links i promised, listed in no particular order. they

were all valid on november 4th, 1997.

http://help.mindspring.com/technotes/96dec/registry1.htm

this is the registry page at technotes+, the site for a lot of tips and

tricks

about pretty much anything technical. it contains an introduction to the

registry, and how it should be used. i recommend to read this first if

you've

never even heard about this registry thing.

http://www.geocities.com/siliconvalley/pines/2857/

this is a registry page by neil mcquarry, and a nice one it is, too. it

contains a quick introduction to the registry, a brief description of .reg

files, and a detailed description of various keys of interest. recommended

if

you want to get the most of the registry.

http://www.amazon.com

this is amazons home page, "earth's biggest bookstore". try their search

function to search for "windows registry" - this will provide you with more

than enough literary references. no online information, however.

http://www.windows95.com/tips

this is the tips section of windows95.com. although it doesn't contain just

registry tips, it's really worth checking out. but then again, all of

windows95.com is worth checking out. if you have windows 95/nt, be sure to

visit it.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有