轉(zhuǎn)自:http://hi.baidu.com/oumeida/blog/item/119af6dde7e57ce877c638cf.html
.reg文件格式
原作:j.mostert
翻譯:淡月兒
1 概述
注冊(cè)表編輯器使用.reg文件格式導(dǎo)入、導(dǎo)出注冊(cè)表設(shè)置,支持的操作系統(tǒng)包括windows3.x,windows95/98/nt及以上。盡管注冊(cè)表的作用和原
理十分重要,但本文不打算介紹,你可以通過(guò)文末列出的網(wǎng)址,獲得相關(guān)的信息。同時(shí),windows3.x的.reg文件格式與windows95以上不盡相同
,本文將忽略這方面的內(nèi)容,畢竟windows3.x的注冊(cè)表已經(jīng)不太重要。
2 詳細(xì)說(shuō)明
.reg文件是ascii碼組成的無(wú)格式純文本,每一行以“cr/lf”結(jié)尾。
2.1 文件頭
.reg文件開頭是注冊(cè)表編輯器的版本,windows95/nt下版本是4,你可以使用這樣的字符串:regedit4。在執(zhí)行導(dǎo)入前,注冊(cè)表編輯器將會(huì)檢
查版本是否正確,并在不匹配時(shí)給與提示,這也是注冊(cè)表編輯器對(duì).reg文件做的唯一檢查。一般情況下,注冊(cè)表編輯器會(huì)默默忽略掉錯(cuò)誤的文
件內(nèi)容不予導(dǎo)入注冊(cè)表,更多情況下會(huì)把可能導(dǎo)致問(wèn)題的內(nèi)容導(dǎo)入注冊(cè)表,這是微軟注冊(cè)表編輯器的一個(gè)缺陷。
2.2 鍵
鍵和子鍵被原樣導(dǎo)出至.reg文件,沒(méi)有順序差別。
例如:
hkey_classes_root\clsid鍵下面有hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d}這個(gè)子鍵(這個(gè)鍵的作用是在控制
面板上添加一個(gè)類聲明),它按如下格式導(dǎo)出:
[hkey_classes_root\clsid]
[hkey_classes_root\clsid\{21ec2020-3aea-1069-a2dd-08002b30309d}]
任何一個(gè)有效鍵值都必須包含完整的路徑,因此必定以根鍵開頭,根鍵包括:
hkey_classes_root
hkey_current_user
hkey_local_machine
hkey_users
hkey_current_config
hkey_dyn_data
鍵名只可以由ascii碼中的可打印字符組成(即ascii碼32至127所代表的字符),鍵名不可以包含空格、反斜杠( \ )以及通配符( * 和 ? )。
每一個(gè)鍵名下緊跟著它的鍵值,鍵值列表以空行結(jié)束,一個(gè)鍵的鍵值列表可以就是一個(gè)空行。
例如:
[key-name]
[second-key-name]
"value1"=something
"value2"=something
[third-key-name]
假如在文件中指定了一個(gè)不存在的鍵值,那么在導(dǎo)入的時(shí)候這個(gè)鍵連同它的根鍵(假如不存在的話)都將被創(chuàng)建。
例如:
文件中指定了hkey_users\jeroen\test\subkey這個(gè)鍵;
注冊(cè)表中只存在hkey_users\jeroen這個(gè)鍵;
當(dāng)導(dǎo)入以后,hkey_users\jeroen\test這個(gè)鍵會(huì)被創(chuàng)建。
注意,你只能添加或修改鍵和鍵值,而不能刪除它們。
(譯者注:事實(shí)上可以刪除,方法是在鍵名前面加上 - 號(hào),該鍵連同其子鍵將被刪除;在指定鍵值為 - ,可以刪除該鍵值。)
2.3 鍵值
注冊(cè)表鍵值可以是三種數(shù)據(jù)類型:字符串(string)、二進(jìn)制值(binary value)和雙機(jī)器字(dword,即32位整數(shù))。鍵值的名稱以引號(hào) " 包含
,值緊跟在等號(hào) = 之后。每一個(gè)鍵都包含至少一個(gè)字符串類型的鍵值,這個(gè)鍵值在注冊(cè)表編輯器中顯示為“默認(rèn)值”(default)。你可以通過(guò)
指定名稱為 @ 的值來(lái)修改默認(rèn)值。
例如:
@="this is the default value."
2.3.1 字符串
字符串可以是任意長(zhǎng)度的,用引號(hào) " 包含起來(lái)的由ascii碼字符組成的值。字符 " 和 \ 也可以包含在字符串中,不過(guò)需要用 \" 和 \\ 進(jìn)
行轉(zhuǎn)義。同時(shí),注冊(cè)表編輯器可以導(dǎo)入導(dǎo)出除換行符(以及新行符,即ascii碼10所指定的字符)以外的非acsii碼字符。
當(dāng)一個(gè)字符串值中包含換行符,在導(dǎo)出的時(shí)候會(huì)被輸出成兩行,但是再次導(dǎo)入時(shí),只能導(dǎo)入第一行,第二行將被忽略。因此請(qǐng)牢記:不要在
字符串值中包含換行符。
例如:
"foo"="bar"
"foopath"="c:\\windows\\system"
"foomessage"="this/nmessage/nactually/nconsists/nof/one/nlong/nline."
2.3.2 二進(jìn)制值
在字符串和雙字不適用的場(chǎng)合,可以使用二進(jìn)制值。二進(jìn)制值可以用來(lái)儲(chǔ)存任意類型的數(shù)據(jù),其格式為 hex:xx,yy,zz 等,其中xx、yy、zz
是用16進(jìn)制值表示的單字節(jié)值,二進(jìn)制值可以是任意長(zhǎng)度的。
較長(zhǎng)的二進(jìn)制值可以用c語(yǔ)言多行符 \ 分割成多行顯示。
例如:
"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
請(qǐng)記住,\ 符只能夠應(yīng)用在二進(jìn)制值當(dāng)中。另外,微軟聲明一個(gè)二進(jìn)制值不可以存儲(chǔ)超過(guò)2k的資料,這也是值得注意的。
二進(jìn)制值的例子:
"foo"=hex:00,de,ca,de,12,34
2.3.2.1 特定二進(jìn)制類型
除了常規(guī)的二進(jìn)制值,還有若干特定類型的二進(jìn)制值。我們可以這樣指定:
"foobar"=hex(type):xx,xx,xx,xx,...
這些類型由 0 到 10 這些數(shù)字代表,具體如下:
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類型
默認(rèn)的二進(jìn)制值類型,應(yīng)用在無(wú)特殊要求的場(chǎng)合。
2.3.2.1.2 reg_sz類型
以'\0'結(jié)尾的字符串。這是用二進(jìn)制值來(lái)指定的字符串值,以下兩種表達(dá)方法是一樣的:
"barfoo"=hex(1):41,42,43,44,00
"barfoo"="abcd"
參見(jiàn)2.3.1,字符串。
2.3.2.1.3 reg_expand_sz類型
包含隱含串的字符串,一般是對(duì)環(huán)境變量的引用。當(dāng)一個(gè)應(yīng)用程序讀到這樣字符串,系統(tǒng)將把引用串轉(zhuǎn)換為正確的環(huán)境變量值。
下面的例子表示字符串"%path%;something",當(dāng)這個(gè)值被引用的時(shí)候,"%path%"會(huì)被轉(zhuǎn)化為當(dāng)前系統(tǒng)的 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類型
小段對(duì)齊,是通常的雙字?jǐn)?shù)據(jù)類型,在這種格式下存儲(chǔ),高位字節(jié)在前,低位字節(jié)在后。
2.3.2.1.5 reg_dword_big_endian類型
大段對(duì)齊,是蘋果機(jī)的雙字?jǐn)?shù)據(jù)類型,在這種格式下存儲(chǔ),低位字節(jié)在前,高位字節(jié)在后。
2.3.2.1.6 reg_link類型
unicode符號(hào)連接。
2.3.2.1.7 reg_multi_sz
多字節(jié)字符串集,以連續(xù)兩個(gè)'\0'結(jié)束,例如:
"farboo"=hex(7):41,42,43,44,00,45,46,47,48,00,00
表示"abcd"和"efgh"兩個(gè)字符串。
2.3.2.1.8 reg_resource_list
設(shè)備驅(qū)動(dòng)程序資源列表。
2.3.2.1.9 reg_full_resource_descriptor
微軟保留數(shù)據(jù)類型,用于輔助設(shè)備驅(qū)動(dòng)程序。
2.3.2.1.10 reg_resource_requirements_list
微軟保留數(shù)據(jù)類型,用于輔助設(shè)備驅(qū)動(dòng)程序。
2.3.3. 雙字?jǐn)?shù)據(jù)類型
雙字?jǐn)?shù)據(jù)類型,即32位整數(shù),表示為 dword:xxxxxxxx,其中 x 是一個(gè)表示4位二進(jìn)制的16進(jìn)制值。
例如:
"foo"=dword:00decade
3 結(jié)語(yǔ)
本文簡(jiǎn)要介紹了.reg文件的格式,由于作者水平有限,錯(cuò)漏之處在所難免,假如您發(fā)現(xiàn)了錯(cuò)誤,請(qǐng)不吝賜教.
我的email:j.mostert@oke.nl。
4 參考資料
以下是關(guān)于注冊(cè)表知識(shí)的網(wǎng)址,希望對(duì)大家有所幫助。
(譯者注:由于這些鏈接都是1997年4月以前的,因此不再翻譯)
參考資料:http://www.cn-doc.com/_soft_ect_doc/2005_08_18_23/20050818234403397.htm
我在網(wǎng)上看到REG文件對(duì)注冊(cè)表的操作可以不受注冊(cè)表編輯器被禁用的限制,我就試了一下,我把注冊(cè)表禁用了,然后想把解除注冊(cè)表禁用的REG文件導(dǎo)
入注冊(cè)表,可是導(dǎo)不進(jìn)去,還是提示“注冊(cè)編緝已被管理員停用”,不是說(shuō)REG文件對(duì)注冊(cè)表的操作可以不受注冊(cè)表編輯器被禁用的限制嗎,怎么我卻導(dǎo)入不進(jìn)
去!
問(wèn)題補(bǔ)充: 在DOS下好像是一樣的
用記事本
REGEDIT4
[HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVer-
sion\Policies\System]
\〃DisableRegistryTools\〃=dword:00000000
保存為C:\reg.reg
然后打開
試試吧