轉自: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
然后打開
試試吧