1. ホーム
  2. windows

[解決済み] Windowsレジストリを編集する場合、どのレジストリエディタバージョンでregファイルを開始すればよいですか(必要な場合)?

2022-03-03 23:11:56

質問

によると マイクロソフト ナレッジベース記事 310516 Windowsのレジストリを編集する.regファイルは、次のどちらかで開始する必要があります。

  • Windows Registry Editor Version 5.00
    Windows 2000、Windows XP、Windows Server 2003用
    または
  • REGEDIT4
    Windows 95、Windows 98、Windows NT 4.0用。

Windows 7 の場合、次のように開始するのが正しいですか? Windows Registry Editor Version 5.00 それともバージョン6にすべきでしょうか?

.batファイルを実行する場合、実際には全く必要ないのでしょうか?

現在のバージョンは レジストリエディタ メニューの ヘルプ メニューの項目で レジストリエディタについて .

解決方法は?

バッチファイルからWindowsのレジストリを処理するための標準的なアプリケーションは、主に2つ使用されています。

  • レジ.exe
  • regedit.exe

Windows x64では、32ビットアプリケーションと64ビットアプリケーションの両方が存在し、32ビットバージョンは32ビットアプリケーションのようにレジストリにアクセスするため、次のような意味になります。 レジストリリダイレクタ がアクティブになり、64 ビットアプリケーションのレジストリキーは 32 ビットアプリケーションからは見えません。 REG レジディット .

を使用するのが一般的です。 REG の代わりに レジディット バッチファイル内のわずかなキーや値を取得(読み取りアクセス)または設定(書き込みアクセス)するためのものです。

の使い方は REGEDIT へのキーのエクスポート (読み取りアクセス) やレジストリファイルからのデータのインポート (書き込みアクセス) に使用する場合でも、Windows Vista 以降は常に管理者権限が必要です。 hkey_current_user (略称:HKCU)。

を使用することで REG のような多くの操作は クエリ (読み取りアクセス) または 追加 (HKCUへのアクセス(書き込み)は、管理者権限を必要としません。もちろん キー_ローカル_マシン (略称: HKLM)は管理者権限が必要で、その他にもあまり使わない操作があります。コマンドプロンプトウィンドウでの実行 reg /? をクリックすると、利用可能な操作が表示されます。 reg query /?reg add /? をコンソールウィンドウで実行すると、Windowsレジストリのデータを取得(問い合わせ)または設定(追加)するための構文とオプションが表示されます。

.regファイルは、ファイルの最初の行に以下の内容が含まれている場合、有効なレジストリデータを含むファイルとしてのみインポート時に解釈されます。

  • REGEDIT4
    または
  • Windowsレジストリエディタ バージョン5.00

レジストリエディタのバージョンやWindowsのバージョンではありません。ファイル自体のレジストリデータの形式に関するバージョン情報です。つまり、レジストリファイルのフォーマットのバージョンということになります。レジストリファイルの1行目 必ず は、この2つの文字列のどちらかを持っています。

このヘッダー行がない*.regファイルをインポートしようとすると、エラーが発生します。

Windows 2000(もあります。 regedt32.exe ) 以降のバージョンの Windows では、レジストリファイルのフォーマットバージョン 4 と 5 の両方がサポートされています。

Windows 95、98、Millennium、NT4は、フォーマット4のレジストリファイルのみをサポートしています。

つまり、レジストリファイルのどの形式を使用するかは、現在(2016年)では主にデータ次第ということですね。

主な違いは、対応する エンコーディング テキストデータの

レジストリファイルのフォーマット REGEDIT4 を使用した1文字1バイトのテキストファイルのみとすることができます。 コードページ Windowsで定義されている ロケールと言語 の設定は、Unicode を認識しないアプリケーションのためのもので、これは Windows-1252 北米・西ヨーロッパ諸国向け そのため、レジストリファイルの形式は REGEDIT4 を含むことはできません。 ユニコード は,コード値が255(10進数,16進数で0xFF)を超える文字である。

レジストリファイルのフォーマット Windowsレジストリエディタ バージョン5.00 に従って1文字あたり1バイト以上でエンコードされたテキストをサポートしています。 ユニコード 規格に準拠しています。そのため、*.reg ファイルは Windowsレジストリエディタバージョン5.00 が作成されます。 REGEDIT として UTF-16 リトルエンディアン でエンコードされたテキストファイルは バイトオーダーマーク (FF FE)を使用します。

したがって、インポート/エクスポートするデータがバイナリであっても、テキストであっても、どのファイル形式を使用してもかまいません。 ASCII 文字(コード値 < 10進128)がレジストリデータ全体の99.99%に相当します。

ASCII以外の文字については、Windowsのコマンドインタプリタがどのコードページを使用しているかを知ることがすでに重要です。 コードページ 437 (米国、カナダ)または コードページ850 (西ヨーロッパ)のGUIコードページWindows-1252とは異なります。コマンドプロンプトウィンドウで実行する chcp または mode con は、コンソール用Windowsコマンドインタプリタが現在のコンピュータで使用しているデフォルトのコードページを出力します。

どうしてもUnicodeの文字列にも対応したい場合は、format Windowsレジストリエディタバージョン5.00 .

Unicodeの仮想的な例を見てみましょう。

Windowsレジストリのキー HKCU\RegFormat の2つのUnicode文字列が定義されています。

  • タイプの文字列 REG_SZ という名前で Two Not Equal 3 をUnicode文字列の値で指定します。

    2 ≠ 3

  • タイプの複数行の文字列 REG_MULTI_SZ という名前で Formulas をUnicode文字列の値で指定します。

    2 µs × 3 = 6 µs
    A = π × r²

マイクロソフトの記事を見る レジストリ値の種類 , レジストリ変更の配布 そして レジストリのデータ型 レジストリの値の種類についての詳細は、こちらをご覧ください。

キーのエクスポート HKCU\RegFormat フォーマットで Windowsレジストリエディタ バージョン5.00 Windows 2000 以降の標準フォーマットである UTF-16 LE エンコードされたテキストファイルは、596 バイトのコンテンツとなります。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ≠ 3"
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
  20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
  00,20,00,72,00,b2,00,00,00,00,00

このファイルのバイトストリームは、16進ビューア/エディタに次のように表示されます。

00000000h: FF FE 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 ; ÿþW.i.n.d.o.w.s.
00000010h: 20 00 52 00 65 00 67 00 69 00 73 00 74 00 72 00 ;  .R.e.g.i.s.t.r.
00000020h: 79 00 20 00 45 00 64 00 69 00 74 00 6F 00 72 00 ; y. .E.d.i.t.o.r.
00000030h: 20 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00 ;  .V.e.r.s.i.o.n.
00000040h: 20 00 35 00 2E 00 30 00 30 00 0D 00 0A 00 0D 00 ;  .5...0.0.......
00000050h: 0A 00 5B 00 48 00 4B 00 45 00 59 00 5F 00 43 00 ; ..[.H.K.E.Y._.C.
00000060h: 55 00 52 00 52 00 45 00 4E 00 54 00 5F 00 55 00 ; U.R.R.E.N.T._.U.
00000070h: 53 00 45 00 52 00 5C 00 52 00 65 00 67 00 46 00 ; S.E.R.\.R.e.g.F.
00000080h: 6F 00 72 00 6D 00 61 00 74 00 5D 00 0D 00 0A 00 ; o.r.m.a.t.].....
00000090h: 22 00 54 00 77 00 6F 00 20 00 4E 00 6F 00 74 00 ; ".T.w.o. .N.o.t.
000000a0h: 20 00 45 00 71 00 75 00 61 00 6C 00 20 00 33 00 ;  .E.q.u.a.l. .3.
000000b0h: 22 00 3D 00 22 00 32 00 20 00 60 22 20 00 33 00 ; ".=.".2. .`" .3.
000000c0h: 22 00 0D 00 0A 00 22 00 46 00 6F 00 72 00 6D 00 ; ".....".F.o.r.m.
000000d0h: 75 00 6C 00 61 00 73 00 22 00 3D 00 68 00 65 00 ; u.l.a.s.".=.h.e.
000000e0h: 78 00 28 00 37 00 29 00 3A 00 33 00 32 00 2C 00 ; x.(.7.).:.3.2.,.
000000f0h: 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 ; 0.0.,.2.0.,.0.0.
00000100h: 2C 00 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.b.5.,.0.0.,.7.
00000110h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000120h: 30 00 30 00 2C 00 64 00 37 00 2C 00 30 00 30 00 ; 0.0.,.d.7.,.0.0.
00000130h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 ; ,.2.0.,.0.0.,.3.
00000140h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000150h: 30 00 30 00 2C 00 33 00 64 00 2C 00 30 00 30 00 ; 0.0.,.3.d.,.0.0.
00000160h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 32 00 30 00 ; ,.\..... . .2.0.
00000170h: 2C 00 30 00 30 00 2C 00 33 00 36 00 2C 00 30 00 ; ,.0.0.,.3.6.,.0.
00000180h: 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 ; 0.,.2.0.,.0.0.,.
00000190h: 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 33 00 ; b.5.,.0.0.,.7.3.
000001a0h: 2C 00 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 ; ,.0.0.,.0.0.,.0.
000001b0h: 30 00 2C 00 34 00 31 00 2C 00 30 00 30 00 2C 00 ; 0.,.4.1.,.0.0.,.
000001c0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 64 00 ; 2.0.,.0.0.,.3.d.
000001d0h: 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 ; ,.0.0.,.2.0.,.0.
000001e0h: 30 00 2C 00 63 00 30 00 2C 00 30 00 33 00 2C 00 ; 0.,.c.0.,.0.3.,.
000001f0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 64 00 37 00 ; 2.0.,.0.0.,.d.7.
00000200h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 30 00 30 00 ; ,.\..... . .0.0.
00000210h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.2.0.,.0.0.,.7.
00000220h: 32 00 2C 00 30 00 30 00 2C 00 62 00 32 00 2C 00 ; 2.,.0.0.,.b.2.,.
00000230h: 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 30 00 ; 0.0.,.0.0.,.0.0.
00000240h: 2C 00 30 00 30 00 2C 00 30 00 30 00 0D 00 0A 00 ; ,.0.0.,.0.0.....
00000250h: 0D 00 0A 00                                     ; ....

最初の2バイトはコードページWindows-1252で次のように表示されます。 ÿþ は、テキストエディタではテキスト編集モードで表示されないUTF-16 LE BOMの2バイトです。

しかし、エクスポートされたキー HKCU\RegFormat フォーマットで REGEDIT4 をクリックすると ファイルタイプ エクスポートダイアログのドロップダウンリストを選択し Win9x/NT4レジストリファイル の場合、ANSI(正確にはWindows-1252)エンコードのテキストファイルとなり、内容はわずか180バイトになります。

REGEDIT4

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ? 3"
"Formulas"=hex(7):32,20,b5,73,20,d7,20,33,20,3d,20,36,20,b5,73,00,41,20,3d,20,\
  c0,20,d7,20,72,b2,00,00

このファイルのバイトストリームは、16進ビューア/エディタに次のように表示されます。

00000000h: 52 45 47 45 44 49 54 34 0D 0A 0D 0A 5B 48 4B 45 ; REGEDIT4....[HKE
00000010h: 59 5F 43 55 52 52 45 4E 54 5F 55 53 45 52 5C 52 ; Y_CURRENT_USER\R
00000020h: 65 67 46 6F 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 ; egFormat].."Two 
00000030h: 4E 6F 74 20 45 71 75 61 6C 20 33 22 3D 22 32 20 ; Not Equal 3"="2 
00000040h: 3F 20 33 22 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 ; ? 3".."Formulas"
00000050h: 3D 68 65 78 28 37 29 3A 33 32 2C 32 30 2C 62 35 ; =hex(7):32,20,b5
00000060h: 2C 37 33 2C 32 30 2C 64 37 2C 32 30 2C 33 33 2C ; ,73,20,d7,20,33,
00000070h: 32 30 2C 33 64 2C 32 30 2C 33 36 2C 32 30 2C 62 ; 20,3d,20,36,20,b
00000080h: 35 2C 37 33 2C 30 30 2C 34 31 2C 32 30 2C 33 64 ; 5,73,00,41,20,3d
00000090h: 2C 32 30 2C 5C 0D 0A 20 20 63 30 2C 32 30 2C 64 ; ,20,\..  c0,20,d
000000a0h: 37 2C 32 30 2C 37 32 2C 62 32 2C 30 30 2C 30 30 ; 7,20,72,b2,00,00
000000b0h: 0D 0A 0D 0A                                     ; ....

どのような違いがあるのでしょうか?

  1. レジェディット は、まずREG_SZ型の文字列をUnicodeからコードページWindows-1252に変換し、データをエクスポートしました。その結果、文字 ? の代わりに 非等号 の文字列で、ユニコード値 U+2260 を持つ。 REG_SZ なぜなら、この文字はコードページWindows-1252では使用できないからです。

  2. 複数行の文字列は、16進数値がちょうど半分になります(1文字あたり2バイトではなく、ちょうど1バイト)。

  3. 小型PI の Unicode 値 U+03C0 は、値 C0 (下位バイトのみ)で格納され、したがって、現在は文字 À この文字は、コードページWindows-1252のコード値が0xC0であるためです。

ファイルからフォーマットでデータを取り込む Windowsレジストリエディタバージョン5.00 を実行すると、Windowsレジストリに以前と同じデータが取得されます。

しかし、ファイルからデータをインポートする場合、形式は REGEDIT4 の結果になります。

  • タイプの文字列 REG_SZ という名前で Two Not Equal 3 をANSI文字列の値で指定します。

    2 ? 3

  • タイプの複数行の文字列 REG_MULTI_SZ 名前付き Formulas をUnicode文字列の値で指定します。

    2 µs × 3 = 6 µs
    A = À × r²

文字 µ×² はコード値 < 255 (10進数) であり、したがって、レジストリファイルのフォーマットにも正しく格納することができます。 REGEDIT4 . しかし π は、フォーマット4で正しくエンコードできません。

形式のレジストリファイル Windowsレジストリエディタバージョン5.00 は、それ自体がUnicodeでエンコードされたテキストファイルであってはなりません。また、Windows-1252でエンコードされた内容のレジストリファイルである可能性もあります。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"=hex(1):32,00,60,22,33,00
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
  20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
  00,20,00,72,00,b2,00,00,00,00,00

として16進数ビューア/エディタに表示されます。

00000000h: 57 69 6E 64 6F 77 73 20 52 65 67 69 73 74 72 79 ; Windows Registry
00000010h: 20 45 64 69 74 6F 72 20 56 65 72 73 69 6F 6E 20 ;  Editor Version 
00000020h: 35 2E 30 30 0D 0A 0D 0A 5B 48 4B 45 59 5F 43 55 ; 5.00....[HKEY_CU
00000030h: 52 52 45 4E 54 5F 55 53 45 52 5C 52 65 67 46 6F ; RRENT_USER\RegFo
00000040h: 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 4E 6F 74 20 ; rmat].."Two Not 
00000050h: 45 71 75 61 6C 20 33 22 3D 68 65 78 28 31 29 3A ; Equal 3"=hex(1):
00000060h: 33 32 2C 30 30 2C 36 30 2C 32 32 2C 33 33 2C 30 ; 32,00,60,22,33,0
00000070h: 30 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 3D 68 65 ; 0.."Formulas"=he
00000080h: 78 28 37 29 3A 33 32 2C 30 30 2C 32 30 2C 30 30 ; x(7):32,00,20,00
00000090h: 2C 62 35 2C 30 30 2C 37 33 2C 30 30 2C 32 30 2C ; ,b5,00,73,00,20,
000000a0h: 30 30 2C 64 37 2C 30 30 2C 32 30 2C 30 30 2C 33 ; 00,d7,00,20,00,3
000000b0h: 33 2C 30 30 2C 32 30 2C 30 30 2C 33 64 2C 30 30 ; 3,00,20,00,3d,00
000000c0h: 2C 5C 0D 0A 20 20 32 30 2C 30 30 2C 33 36 2C 30 ; ,\..  20,00,36,0
000000d0h: 30 2C 32 30 2C 30 30 2C 62 35 2C 30 30 2C 37 33 ; 0,20,00,b5,00,73
000000e0h: 2C 30 30 2C 30 30 2C 30 30 2C 34 31 2C 30 30 2C ; ,00,00,00,41,00,
000000f0h: 32 30 2C 30 30 2C 33 64 2C 30 30 2C 32 30 2C 30 ; 20,00,3d,00,20,0
00000100h: 30 2C 63 30 2C 30 33 2C 32 30 2C 30 30 2C 64 37 ; 0,c0,03,20,00,d7
00000110h: 2C 5C 0D 0A 20 20 30 30 2C 32 30 2C 30 30 2C 37 ; ,\..  00,20,00,7
00000120h: 32 2C 30 30 2C 62 32 2C 30 30 2C 30 30 2C 30 30 ; 2,00,b2,00,00,00
00000130h: 2C 30 30 2C 30 30 0D 0A 0D 0A                   ; ,00,00....

このレジストリファイルをインポートすると、WindowsレジストリにUnicode文字列がそれにもかかわらず生成されます。

2 ≠ 3
2 µs × 3 = 6 µs
A = À × r²

2進数表現を用いる hex(1) 型の値に対して REG_SZ は標準ではありません。この例は、私が手作業で作成したもので、型が REG_SZ また、バッチファイルから生成しやすい非ユニコードエンコーディングのレジストリファイルも使用できます。

しかし、もし 名前 キーや値の中に U+00FF を超える Unicode 文字が含まれている場合は、レジストリファイルのフォーマットである Windowsレジストリエディタ バージョン5.00 レジストリファイルは、リトルエンディアンの16ビットUnicode Transformation Formatを使用してUnicodeエンコードされています。

機能参照 SHRegWriteUSValue について ヘックス ( ? ) ... REG _ ? レジストリタイプテーブルです。

ちなみに。一度書いたUltraEditのスクリプト GetStringFromRegHex.js の16進数値を取得するために使用します。 hex(2) ... REG_EXPAND_SZhex(7) ... REG_MULTI_SZ テキストエディターUltraEditで開いたレジストリファイルで選択された値がテキストで表示されます。

コマンドライン

%SystemRoot%\System32\regedit.exe /a /e "%USERPROFILE%\Desktop\EntireWindowsRegistry.reg"

レジストリファイルフォーマット4を使って、Windowsレジストリ全体をANSIでWindowsデスクトップにエクスポートします。

オプションなしで同じコマンドラインを使用した場合 /a は、レジストリファイルフォーマット5を使用して、Windowsレジストリ全体をUnicodeでエクスポートします。