レジストリの基礎知識
公開日:
カテゴリ: Windows
Windowsのレジストリの基礎知識についてまとめました。
レジストリとは
レジストリはWindows OSにおける各種設定を保存するデータベースです。ファイルに設定を記録するより遥かに高速に動作します。Windows上で動作するものであれば、システムからサードパーティ製のアプリケーションまで、幅広く使用されます。
レジストリはシステムに統合されており、可搬性はありません。ポータブルと呼ばれるアプリケーションはレジストリを使用せず、設定をファイルに書き出します(あるいは設定を保存しません)。
値データ
レジストリはキーと呼ばれる仮想的なディレクトリによって階層構造になっており、キー内にKey-Value方式で値を格納します。各キーには1つの名前の無い文字列値(レジストリエディタでは(既定)
と表示される)が存在します。
値はデータ型が存在し、型によって格納できるデータが決まっています。
データ型 | 型名 | 格納できる値 |
---|---|---|
文字列値 | REG_SZ | 任意の文字列値 |
バイナリ値 | REG_BINARY | 任意のバイナリ値 |
DWORD(32ビット)値 | REG_DWORD | 32ビットの数値 |
QWORD(64ビット)値 | REG_QWORD | 64ビットの数値 |
複数行文字列値 | REG_MULTI_SZ | 改行を入力可能な文字列値 |
展開可能な文字列値 | REG_EXPAND_SZ | 環境変数等の展開可能な文字列を含む文字列値 |
レジストリの構造
レジストリはコンピュータを起点として、以下のキーを持ちます。省略記法が存在するキーは、キー名の代わりに省略記法でもアクセスできます。
キー名 | 省略記法 | 内容 |
---|---|---|
HKEY_CLASSES_ROOT | HKCR | 関連付け等の設定 |
HKEY_CURRENT_USER | HKCU | 現在のユーザの設定 |
HKEY_LOCAL_MACHINE | HKLM | コンピュータの設定 |
HKEY_USERS | 各ユーザの設定 | |
HKEY_CURRENT_CONFIG | HKCC | ハードウェアの設定 |
HKEY_CLASSES_ROOT(HKCR)
HKEY_CLASSES_ROOT
(HKCR
)は実際にその名前のキーは存在せず、HKCU\Software\Classes
とHKLM\Software\Classes
を結合したビューです。両方に存在する場合はHKCU
が優先されます。
主にファイルやプロトコルの関連付け設定の参照に使用します。関連付け設定ではユーザがインストールしたアプリケーションと全ユーザに向けて管理者がインストールしたアプリケーションの両方が見える必要があり、このキー配下を見ることで実現できます。
このキー配下を編集すると、HKCU\Software\Classes
側に存在するものはHKCU
側が、それ以外のものはHKLM
側の値が編集されます。環境によって編集される実体が異なる関係上、ややこしく事故の元であるため、基本的にはこのキーは編集しないでHKCU
やHKLM
のSoftware\Classes
を編集したほうが良いでしょう。
HKEY_CURRENT_USER(HKCU)
現在操作しているユーザのレジストリです。そのユーザの設定や、そのユーザが動作させているアプリケーションの設定が格納されています。このキー配下を編集する際は特権は必要ありません。
実体はHKEY_USERS
キー内の自身の識別子のキーです。
HKEY_LOCAL_MACHINE(HKLM)
コンピュータ全体の設定や、全ユーザ共通の設定が格納されています。グループポリシーなどもこのキー配下で設定します。
HKEY_USERS
現在操作しているユーザの他、他のサインインしているユーザ、新規ユーザのデフォルト、その他一部システムユーザのレジストリがそれぞれ格納されています。サインイン時にロードされて表示されるようになるため、サインイン状態でない他のユーザのレジストリは表示されません。
HKEY_CURRENT_CONFIG(HKCC)
HKEY_CURRENT_CONFIG
(HKCC
)は実際にその名前のキーは存在せず、HKLM\System\CurrentControlSet\Hardware Profiles\Current
のエイリアスとなっています。ハードウェア関連の設定が格納されています。
実体の保存先
各ユーザ(HKEY_USERS
)のレジストリは%USERPROFILE%\NTUSER.DAT
に保存されます。大抵はユーザのサインアウト時にファイルに書き込まれるようです。
コンピュータのレジストリは%SYSTEMROOT%\System32\config
内に保存されます。ユーザには読み取りを含めてアクセス権は与えられておらず、特権でアクセス権を取得するかセーフモードでなければ中身は覗けません。
レジストリの編集
レジストリを編集する方法は様々ですが、直接編集する方法のうちWindows標準で利用できる代表的なものは以下の通りです。
レジストリエディタ(regedit)
GUIで編集するレジストリの管理ツールです。おそらくユーザがレジストリを触る方法としては最もメジャーなものでしょう。
- アドレスバーにレジストリキーのパスを入力してEnterを押下すると、そのキーへ移動可能
HKCU
やHKLM
などの省略記法も自動で展開される
- 値の設定時に10進数と16進数の選択/相互変換が可能(格納される値はどちらでも同じ)
- キーのコンテキストメニュー(右クリックメニュー)から、特定のキーをエクスポート可能
- キーのコンテキストメニュー(右クリックメニュー)から、キーのアクセス許可を変更可能
regファイル
レジストリの内容をファイルに書き出したものです。正確にはレジストリエディタ(regedit)の機能の一部であり、regファイルはレジストリエディタに関連付けられています。レジストリエディタでエクスポートするとこの形式で出力されます。
ファイルフォーマットはini
ファイルに近く、[キーのパス]
でセクション、その後ろにそのキー内のKey-Valueを入力します。
名前の無い文字列値は値名を@
、値を削除するには値を-
、キーを削除するにはキーのパスの先頭に-
を指定します。キーの削除は配下のサブキーもすべて削除されます。
Windows Registry Editor Version 5.00
; フォーマットサンプル (文字列値の場合は型名が不要)
; [キーのパス]
; 値名=型名:値
; キーの追加・指定
[HKEY_CURRENT_USER\Software\MyApp]
; 値の追加・設定
[HKEY_CURRENT_USER\Software\MyApp]
"MyString"="my string"
"MyDword"=dword:00000001
@="No name attribute"
; 値の削除
[HKEY_CURRENT_USER\Software\MyApp]
"MyString"=-
"MyDword"=-
; キーの削除
[-HKEY_CURRENT_USER\Software\MyApp]
regコマンド
主にコマンドラインでレジストリを操作するためのツールです。バッチファイル等で自動化する場合に便利です。
/f
オプションが無い場合は確認プロンプトが表示されます。名前の無い文字列値は/ve
オプションで設定できます。
rem キーの追加
reg add "HKCU\Software\MyApp" /f
rem 値の追加
reg add "HKCU\Software\MyApp" /v "MyString" /d "my string" /f
reg add "HKCU\Software\MyApp" /v "MyDword" /t REG_DWORD /d 1 /f
reg add "HKCU\Software\MyApp" /ve /d "No name attribute" /f
rem 値の削除
reg delete "HKCU\Software\MyApp" /v "MyString" /f
reg delete "HKCU\Software\MyApp" /v "MyDword" /f
rem キーの削除
reg delete "HKCU\Software\MyApp" /f
その他、regファイルをインポート・エクスポートしたり、他のレジストリの本体ファイル(NTUSER.DAT
など)をロードして編集することもできます(reg load
/reg unload
コマンド)。
PowerShell
PowerShellではレジストリ単体として操作するコマンドではなく、ファイルの属性等の様々なプロパティを変更するコマンドの一部として提供されています。
名前の無い文字列値は値名を(Default)
にすることで設定できます(大文字小文字は区別しません)。
# キーの追加
New-Item -Path "HKCU:\Software\MyApp"
# 値の追加(新規の場合は"New-ItemProperty"でも可)
Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "MyString" -Value "my string"
Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "MyDword" -Value 1
Set-ItemProperty -Path "HKCU:\Software\MyApp" -Name "(Default)" -Value "No name attribute"
# 値の削除
Remove-ItemProperty -Path "HKCU:\Software\MyApp" -Name "MyString"
Remove-ItemProperty -Path "HKCU:\Software\MyApp" -Name "MyDword"
# キーの削除
Remove-Item -Path "HKCU:\Software\MyApp"
参考
カテゴリ: Windows