| Windowsレジストリエディター | |
|---|---|
Windows 11のレジストリのユーザー インターフェイスであるレジストリ エディター | |
| その他の名前 | レジストリエディター |
| 開発者 | マイクロソフト |
| 初回リリース | 1992年4月6日、Windows 3.1 (1992年4月6日) |
| オペレーティング·システム | マイクロソフトウィンドウズ |
| プラットフォーム | IA-32、x86-64、ARM(歴史的にはDEC Alpha、Itanium、MIPS、PowerPC) |
| 含まれるもの | マイクロソフトウィンドウズ |
| タイプ | 階層型データベース |
| ライセンス | 独自の |
| Webサイト | |
Windowsレジストリは、 Microsoft Windowsオペレーティングシステムおよびレジストリを使用するアプリケーションの低レベル設定を保存する階層型データベースです。カーネル、デバイスドライバ、サービス、セキュリティアカウントマネージャ、ユーザーインターフェースはすべてレジストリを使用できます。また、レジストリはシステムパフォーマンスのプロファイリングに使用する カウンターへのアクセスも可能にします。
つまり、レジストリ(Windowsレジストリ)には、Microsoft Windowsオペレーティングシステムのすべてのバージョンにインストールされているプログラムやハードウェアに関する情報、設定、オプション、その他の値が含まれています。例えば、プログラムがインストールされると、プログラムの場所、バージョン、起動方法などの設定を含む新しいサブキーがすべてWindowsレジストリに追加されます。
Windows 3.1で導入されたWindows レジストリは、主にCOMベースのコンポーネントの設定情報を保存していました。Windows 95およびWindows NT では、レジストリの用途が拡張され、個々のプログラムの設定情報を含む多数のINI ファイルに情報を集約・合理化しました。INI ファイルは様々な場所に保存されていました。 [ 1 ] [ 2 ] Windows アプリケーションは Windows レジストリを使用する必要はありません。例えば、.NET Frameworkアプリケーションは設定にXMLファイルを使用しますが、ポータブルアプリケーションでは通常、設定ファイルは実行ファイルと共に保存されます。
Windows レジストリより前は、.INI ファイルは各プログラムの設定をテキスト ファイルまたはバイナリ ファイルとして保存し、多くの場合、マルチユーザー シナリオでユーザー固有の設定を提供しない共有の場所に配置されていました。対照的に、Windows レジストリは、すべてのアプリケーション設定を 1 つの論理リポジトリ (およびいくつかの個別のファイル) に標準化された形式で保存します。Microsoft によると、これは .INI ファイルに比べていくつかの利点があります。[ 2 ] [ 3 ]バイナリ形式を使用するとファイルの解析がより効率的に行われるため、テキストの INI ファイルよりも読み書きが速くなります。さらに、.INI ファイルに格納されるテキスト情報とは対照的に、レジストリには厳密に型指定されたデータregedit.exeを格納できます。これは、組み込みの Windows レジストリ エディターを使用してキーを手動で編集する場合の利点です。ユーザーベースのレジストリ設定は、読み取り専用のシステム場所からではなく、ユーザー固有のパスから読み込まれるため、レジストリを使用すると複数のユーザーが同じマシンを共有でき、権限の少ないユーザーでもプログラムを実行できます。リモート レジストリサービスが実行中で、ファイアウォール ルールで許可されている限り、スクリプトからなど、標準のAPIセットを使用してネットワーク接続経由でレジストリにアクセスし、リモート管理/サポートを行うことができ、バックアップと復元も簡素化されます。
レジストリはデータベースであるため、アトミック更新などの機能によってシステムの整合性が向上します。 2 つのプロセスが同時に同じレジストリ値を更新しようとすると、一方のプロセスの変更がもう一方のプロセスの変更に先行し、データの全体的な一貫性が維持されます。 .INI ファイルに変更が加えられた場合、このような競合状態により、どちらの更新試行にも一致しない不整合なデータが発生する可能性があります。 Windows Vista 以降のオペレーティング システムでは、カーネル トランザクション マネージャーによってレジストリへのトランザクション更新が提供されており、従来のコミット - アボート セマンティクスを使用して、複数のキーまたは値の変更にわたるアトミック性の保証が拡張されています。 (ただし、NTFSもファイル システムに対してこのようなサポートを提供しているため、理論上は従来の構成ファイルで同じ保証が得られることに注意してください。)
レジストリには、キーと値という2つの基本要素が含まれます。レジストリキーはフォルダに似たコンテナオブジェクトです。レジストリ値はファイルに似た非コンテナオブジェクトです。キーには値とサブキーを含めることができます。キーはWindowsのパス名に似た構文で参照され、階層を示すためにバックスラッシュが使用されます。キーの名前は、大文字と小文字を区別せず、バックスラッシュを含まない必要があります。
レジストリ キーの階層には、カーネルによって保存された「ハイブ」から事前にロードされたレジストリ キーの内容、別のルート キー内のサブキーの内容、またはそれに含まれるサブキーと値へのアクセスを提供する登録済みサービスまたは DLL にマップされている既知のルート キー ハンドル (匿名ですが、実効値は定数の数値ハンドル) からのみアクセスできます。
たとえば、HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsHKEY_LOCAL_MACHINE ルート キーのサブキー "Software" のサブキー "Microsoft" のサブキー "Windows" を参照します。
定義済みのルートキーは7つあり、Win32 APIで定義された定数ハンドルに従って、または同義の略語(アプリケーションによって異なります)で伝統的に命名されています。[ 4 ]
Windowsの他のファイルやサービスと同様に、すべてのレジストリキーは、ユーザー権限、アプリケーションが取得したセキュリティトークン、またはシステムによって適用されるシステムセキュリティポリシーに応じて、アクセス制御リスト(ACL)によって制限される場合があります(これらの制限は、システム自体によって事前に定義され、ローカルシステム管理者またはドメイン管理者によって設定される場合があります)。異なるユーザー、プログラム、サービス、またはリモートシステムは、同じルートキーから階層の一部または異なる階層のみを参照する場合があります。
レジストリ値は、キー内に格納される名前とデータのペアです。レジストリ値は、レジストリキーとは別に参照されます。レジストリキーに格納される各レジストリ値には、大文字と小文字を区別しない一意の名前が付けられます。レジストリ値を照会および操作するWindows API関数は、親キーを識別するキーパスまたはハンドルとは別に値の名前を取得します。レジストリ値の名前にはバックスラッシュが含まれる場合がありますが、そうすると、一部の従来のWindowsレジストリAPI関数(Win32では使用が非推奨)を使用する場合、キーパスとの区別が難しくなります。
この用語はやや誤解を招く可能性があります。各レジストリキーは連想配列に似ており、標準的な用語では各レジストリ値の名前部分を「キー」と呼びます。この用語はWindows 3の16ビットレジストリから引き継がれました。16ビットレジストリでは、レジストリキーに任意の名前とデータのペアを含めることはできず、名前のない値(文字列)を1つだけ含めることができました。この意味で、Windows 3のレジストリは単一の連想配列のようなもので、キー(「レジストリキー」と「連想配列キー」の両方の意味で)が階層構造を形成し、レジストリ値はすべて文字列でした。32ビットレジストリが導入されると、キーごとに複数の名前付き値を作成できる機能も追加され、名前の意味が多少歪んでしまいました。[ 6 ]以前の動作との互換性を保つため、各レジストリキーには「デフォルト」値(名前は空文字列)を持つ場合があります。
各値は、可変長および可変エンコーディングの任意のデータを格納できますが、そのデータは、そのデータの解析方法を定義する記号型(数値定数として定義)に関連付けられています。標準的な型は以下のとおりです。[ 7 ]
| タイプID | シンボリック型名 | レジストリ値に保存されるデータの意味とエンコード |
|---|---|---|
| 0 | レジストリなし | 型なし(保存されている値(ある場合)) |
| 1 | レジストリキー | 文字列値。通常はUTF-16 LEで保存および公開され(Win32 API 関数の Unicode バージョンを使用する場合)、通常は NUL 文字で終了します。 |
| 2 | レジストリエクスパンドSZ | 環境変数を含むことができる「拡張可能な」文字列値。通常はUTF-16LEで保存および公開され、通常はNUL文字で終了します。 |
| 3 | REG_BINARY | バイナリデータ(任意のデータ) |
| 4 | REG_DWORD / REG_DWORD_LITTLE_ENDIAN | DWORD値、32ビットの符号なし整数(0~4,294,967,295 [2 32 – 1] の範囲の数値)(リトルエンディアン) |
| 5 | REG_DWORD_BIG_ENDIAN | DWORD値、32ビットの符号なし整数(0~4,294,967,295 [2 32 – 1] の範囲の数値)(ビッグエンディアン) |
| 6 | 登録リンク | ルートキーとターゲットキーへのパスを指定して、別のレジストリキーへのシンボリックリンク(UNICODE)を作成します。 |
| 7 | REG_MULTI_SZ | 複数文字列の値。空でない文字列の順序付きリストで、通常はUnicodeで保存および公開され、各文字列はヌル文字で終了し、リストは通常2番目のヌル文字で終了します。[ 8 ] |
| 8 | REG_RESOURCE_LIST | リソース リスト (プラグ アンド プレイハードウェアの列挙と構成で使用) |
| 9 | REG_FULL_RESOURCE_DESCRIPTOR | リソース記述子(プラグアンドプレイハードウェアの列挙と構成で使用) |
| 10 | REG_RESOURCE_REQUIREMENTS_LIST | リソース要件リスト(プラグアンドプレイハードウェアの列挙と構成で使用) |
| 11 | REG_QWORD / REG_QWORD_LITTLE_ENDIAN | QWORD値、64ビット整数(ビッグエンディアン、リトルエンディアン、または未指定)(Windows 2000で導入)[ 9 ] |
階層型データベースのルートレベルにあるキーは、通常、Windows API定義に基づいて命名され、すべて「HKEY」で始まります。[ 2 ]これらはしばしば「HK」で始まる3文字または4文字の短縮名(例:HKCU、HKLM)に省略されます。技術的には、これらは特定のキーへの定義済みハンドル(既知の定数値を持つ)であり、メモリ内に保持されるか、ローカルファイルシステムに保存され、システムカーネルによって起動時に読み込まれ、その後、ローカルシステムで実行されているすべてのプロセス間で(さまざまなアクセス権とともに)共有されるか、ユーザーがシステムにログオンしたときにユーザーセッションで開始されるすべてのプロセスに読み込まれ、マッピングされます。
HKEY_LOCAL_MACHINE(ローカルマシン固有の構成データ)ノードとHKEY_CURRENT_USER(ユーザー固有の構成データ)ノードは互いに似た構造を持っています。ユーザーアプリケーションは通常、まずHKEY_LOCAL_MACHINEキーで設定を検索しHKEY_CURRENT_USER\Software\Vendor's name\Application's name\Version\Setting name、見つからない場合はHKEY_LOCAL_MACHINEキーの同じ場所を検索します。ただし、管理者が適用するポリシー設定の場合は逆のことが当てはまり、HKLMがHKCUよりも優先される場合があります。Windowsロゴプログラムには、さまざまな種類のユーザーデータの保存場所に関する特定の要件があり、アプリケーションの使用に管理者レベルのアクセスが必要とされないように、最小権限の概念に従う必要があります。 [ a ] [ 10 ]
HKLMと略されるHKEY_LOCAL_MACHINEは、ローカルコンピュータに固有の設定を保存します。[ 11 ]
HKLMによって特定されるキーは、実際にはディスク上には保存されず、システムカーネルによってメモリ内に保持され、他のすべてのサブキーをマッピングします。アプリケーションは追加のサブキーを作成することはできません。Windows NTでは、このキーには「SAM」、「SECURITY」、「SYSTEM」、「SOFTWARE」の4つのサブキーが含まれており、これらは起動時に%SystemRoot%\System32\config\フォルダ内のそれぞれのファイルに読み込まれます。5つ目のサブキー「HARDWARE」は揮発性で動的に作成されるため、ファイルには保存されません(現在検出されているすべてのプラグアンドプレイデバイスのビューを公開します)。Windows Vista以降では、6つ目と7つ目のサブキー「COMPONENTS」と「BCD」は、カーネルによってオンデマンドでメモリにマッピングされ、システムパーティション上の %SystemRoot%\System32\config\COMPONENTSブート構成データから読み込まれます。\boot\BCD
HKLM\SAM」キーは通常、ほとんどのユーザーに対して空として表示されます(ローカルシステムの管理者またはローカルシステムを管理するドメインの管理者によってアクセスが許可されている場合を除く)。このキーは、ローカルシステムが管理権限で承認または構成されているすべてのドメイン(実行中のシステムのローカルドメインも含みます。このローカルドメインのSAMデータベースは「SAM」という名前のサブキーに格納されています。必要に応じて、補助ドメインごとに1つずつ、他のサブキーが作成されます)。各 SAM データベースには、それぞれのドメインで作成および構成されたすべての組み込みアカウント (ほとんどがグループ エイリアス) と構成済みアカウント (ユーザー、グループ、およびそのエイリアス、ゲスト アカウントと管理者アカウントを含む) が含まれます。そのドメイン内の各アカウントには、そのドメインにログオンするために使用できるユーザー名、ドメイン内の一意の内部ユーザー ID、有効な認証プロトコルごとに各ユーザーのパスワードの暗号化ハッシュ、ユーザー レジストリ ハイブの保存場所、さまざまなステータス フラグ (たとえば、アカウントを列挙してログオン プロンプト画面に表示できるかどうか)、およびアカウントが構成されたドメインのリスト (ローカル ドメインを含む) が含まれます。HKLM\SECURITY」キーは通常、ほとんどのユーザー(管理者権限を持つユーザーからアクセスを許可されている場合を除く)に対して空で、現在のユーザーがログオンしているドメインのセキュリティデータベースにリンクされています(ユーザーがローカルシステムドメインにログオンしている場合、このキーはローカルマシンに保存され、ローカルシステム管理者または組み込みの「システム」アカウントとWindowsインストーラーによって管理されているレジストリハイブにリンクされます)。カーネルはこのキーにアクセスし、現在のユーザーと、このユーザーが実行するすべてのアプリケーションまたは操作に適用されるセキュリティポリシーを読み取り、適用します。また、このキーには「SAM」サブキーが含まれており、これは現在のユーザーがログオンしているドメインのSAMデータベースに動的にリンクされています。HKLM\SYSTEM」キーは通常、ローカルシステムの管理者権限を持つユーザーのみが書き込み可能です。このキーには、Windowsシステム設定に関する情報、安全な乱数生成器(RNG)のデータ、ファイルシステムを含む現在マウントされているデバイスのリスト、ローカルシステムでHKLM\SYSTEM\ControlSet001実行されているシステムハードウェアドライバとサービスの代替構成(現在使用されているものとバックアップを含む)を含む複数の番号付きコントロールセット(「 」など)、HKLM\SYSTEM\Selectこれらのコントロールセットの状態を含む「 」サブキー、およびHKLM\SYSTEM\CurrentControlSet起動時にローカルシステムで現在使用されているコントロールセットに動的にリンクされる「 」が含まれます。構成された各コントロールセットには、次のものが含まれます。 Hardware Profiles\Currentこれらのプロファイルの 1 つに動的にリンクされるサブキー。HKLM\SOFTWARE」サブキーには、ソフトウェアとWindowsの設定(デフォルトのハードウェアプロファイル内)が含まれます。このサブキーは、主にアプリケーションおよびシステムのインストーラによって変更されます。このサブキーはソフトウェアベンダー別に整理されており(ベンダーごとにサブキーが存在します)、Windowsユーザーインターフェースの一部設定用の「Windows」サブキー、ファイル拡張子、MIMEタイプ、オブジェクトクラスID、インターフェースID(OLE、COM/DCOM、ActiveX用)から、ローカルマシン上でこれらのタイプを処理する可能性のあるインストール済みアプリケーションまたはDLLへの登録済み関連付けをすべて含む「Classes」サブキー(ただし、これらの関連付けはユーザーごとに設定可能です。下記参照)、アプリケーションおよびシステムサービス(ローカルネットワークドメイン外で実行されるリモートシステムまたはサービスの認証、承認、または禁止に使用される中央証明書ストアを含む)に対する一般的な使用ポリシーを適用するための「Policies」サブキー(これもベンダー別に整理されています)も含まれます。HKLM\SOFTWARE\Wow6432Node」キーは、64ビットWindows OS上の32ビットアプリケーションによって使用され、「HKLM\SOFTWARE」と同等ですが、別のものです。キーパスは、WoW64によって32ビットアプリケーションにHKLM\SOFTWARE[ 12 ]として透過的に提示されます(64ビットアプリケーションが%SystemRoot%\Syswow64として認識するのと同様に%SystemRoot%\System32)。HKCU\Software\Classesとマシンベースの両方のサブキーで構成されていますHKLM\Software\Classes。上記の両方のサブキーに特定の値が存在する場合、HKCRの値がHKCU\Software\Classes優先されます。[ 13 ]この設計により、 COMオブジェクトをマシンベースまたはユーザーベースで登録できます。(HKU)\(SID)\...(SID)がWindows SIDに対応するサブキーです。「(HKCU)」キーに以下のサフィックスが(HKCU)\Software\Classes\...付いている場合は、(HKU)\(SID)_CLASSES\...(SID)にサフィックス文字列「_CLASSES」が付加されたサブキーです。レジストリは統合された階層型データベースとして提示されているが、レジストリのブランチは実際にはハイブと呼ばれる多数のディスクファイルに保存されている。[ 17 ](ハイブという言葉は社内ジョークである。)[ 18 ]
一部のハイブは揮発性で、ディスク上に全く保存されません。例えば、 で始まるブランチのハイブがこれに該当しますHKLM\HARDWARE。このハイブはシステムハードウェアに関する情報を記録し、システムの起動とハードウェア検出の実行のたびに作成されます。
システム上のユーザーの個別設定は、ユーザーごとにハイブ(ディスクファイル)に保存されます。ユーザーがログインすると、システムはHKEY_USERSキーのユーザーハイブを読み込み、HKCU(HKEY_CURRENT_USER)シンボリック参照を現在のユーザーを指すように設定します。これにより、アプリケーションは現在のユーザーの設定をHKCUキーに暗黙的に保存/取得できるようになります。
すべてのハイブが一度に読み込まれるわけではありません。起動時には最小限のハイブセットのみが読み込まれ、その後はオペレーティングシステムの初期化時、ユーザーのログイン時、またはアプリケーションによってハイブが明示的に読み込まれるたびに、ハイブが読み込まれます。
レジストリは物理的に複数のファイルに保存されており、通常、レジストリ内のデータを操作するユーザー モード API からは見えなくなります。Windows のバージョンによってファイルの種類や保存場所は異なりますが、すべてローカル マシン上にあります。Windows NT のシステム レジストリ ファイルの保存場所は です。%SystemRoot%\System32\config\ユーザー固有の HKEY_CURRENT_USER ユーザー レジストリ ハイブは、Ntuser.datユーザー プロファイル内に保存されます。このファイルはユーザーごとに 1 つ存在し、ユーザーが移動プロファイルを持っている場合、このファイルはログアウト時とログイン時にサーバーとの間でコピーされます。2 つ目のユーザー固有のレジストリ ファイルである UsrClass.dat には COM レジストリ エントリが含まれ、既定では移動しません。
Windows NTシステムは、レジストリをバイナリファイル形式で保存します。このファイルは、これらのオペレーティングシステムのレジストリエディタでエクスポート、ロード、アンロードできます。以下のシステムレジストリファイルは、以下の場所に保存されます%SystemRoot%\System32\config\。
Sam–HKEY_LOCAL_MACHINE\SAMSecurity–HKEY_LOCAL_MACHINE\SECURITYSoftware–HKEY_LOCAL_MACHINE\SOFTWARESystem–HKEY_LOCAL_MACHINE\SYSTEMDefault–HKEY_USERS\.DEFAULTUserdiff– ハイブとは関連付けられていません。オペレーティングシステムのアップグレード時にのみ使用されます。[ 19 ]次のファイルは各ユーザーのプロファイル フォルダーに保存されます。
%USERPROFILE%\Ntuser.dat– (HKEY_CURRENT_USER によってリンクされています)HKEY_USERS\<User SID>Windows 2000、Server 2003、および Windows XP の場合、ファイルの関連付けと COM 情報には、次の追加のユーザー固有ファイルが使用されます。
%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat(パスはローカライズされています) – HKEY_USERS\<User SID>_Classes(HKEY_CURRENT_USER\Software\Classes)Windows Vista 以降では、パスは次のように変更されました。
%USERPROFILE%\AppData\Local\Microsoft\Windows\Usrclass.dat(パスはローカライズされていません) エイリアス%LocalAppData%\Microsoft\Windows\Usrclass.dat– HKEY_USERS\<User SID>_Classes ( HKEY_CURRENT_USER\Software\Classes)Windows 2000はレジストリハイブの代替コピー(.ALT)を保持しており、破損が検出されるとそれへの切り替えを試みます。[ 20 ] Windows XPおよびWindows Server 2003では、シャットダウンまたはクラッシュ時に不整合となったシステムハイブをNTLDRで処理し、最新の状態に更新できるSystem.altため、ハイブは保持されません。さらに、このフォルダには、Windowsのインストール後および初回起動時に作成されたシステムのレジストリハイブのコピーも含まれています。 System.log%SystemRoot%\Repair
各レジストリデータファイルには、「.log」拡張子を持つ関連ファイルがあり、これはトランザクションログとして機能し、中断された更新が次回の起動時に完了することを保証するために使用されます。[ 21 ]レジストリファイルは内部的に4KBの「ビン」 に分割されており、 その中には「セル」のコレクションが含まれています。[ 21 ]
レジストリファイルは、Windows MEでは および という名前でディレクトリに保存されます。また%WINDIR%、各ユーザープロファイル(プロファイルが有効になっている場合)には、 のユーザープロファイルディレクトリに独自のファイルがあります。 USER.DATSYSTEM.DATCLASSES.DATUSER.DAT%WINDIR%\Profiles\<Username>\
唯一のレジストリ ファイルが呼び出されREG.DAT、ディレクトリに保存されます%WINDIR%。
レジストリ ファイルにアクセスするには、次のいずれかを使用してデバイスを特別なモードに設定する必要があります。
上記のいずれかの方法が機能した場合、デバイスのレジストリ ファイルは次の場所にあります。
{電話}\EFIESP\Windows\System32\config レジストリには、オペレーティングシステム、インストール済みアプリケーション、そして各ユーザーとアプリケーションの個別の設定に関する重要な構成情報が含まれています。レジストリ内のオペレーティングシステム構成を不注意に変更すると、取り返しのつかない損害を引き起こす可能性があるため、通常、インストール/構成および削除中にレジストリデータベースに変更を加えるのはインストーラプログラムのみです。ユーザーがレジストリを手動で編集する場合、Microsoftは変更前にレジストリのバックアップを実行することを推奨しています。[ 22 ]コントロールパネルからプログラムを削除しても、完全に削除されない場合があり、不足しているプログラムへの参照によってエラーや不具合が発生した場合、ユーザーはプログラムファイルなどのディレクトリ内を手動で確認しなければならないことがあります。その後、ユーザーはアンインストールしたプログラムへの参照をレジストリから手動で削除する必要があるかもしれません。これは通常、を使用して行われますRegEdit.exe。[ 23 ] Windows固有の問題を回避する場合、レジストリの編集が必要になることがあります。例えば、ドメインへのログオンに関する問題は、レジストリを編集することで解決できます。[ 24 ]
Windows レジストリは、などのプログラムを使用して手動で編集できますRegEdit.exeが、これらのツールでは最終更新日などのレジストリのメタデータの一部は公開されません。
3.1/95シリーズのオペレーティングシステム用のレジストリエディタは 、RegEdit.exeWindows NT用のは ですRegEdt32.exe。これらの機能はWindows XPに統合されています。多くのWindows CEバージョンでは、 に類似したオプションのサードパーティ製ツールがRegEdit.exe利用可能です。
レジストリ エディターを使用すると、ユーザーは次の機能を実行できます。
.REG、バイナリハイブ形式でのデータのエクスポート.REGファイル.REGREGファイル(登録エントリとも呼ばれる)は、 INIベースの構文を使用してレジストリの一部をエクスポートおよびインポートするための、テキストベースの人間が読めるファイルです。REGファイルには主に2つのバージョンがあります。
REGEDIT4。[ 26 ]Windows 9x形式の.REGファイルはWindows 2000以降でインポートできます。[ 26 ].REGこれらの後期システムではWindows 9x/NT形式のファイルの エクスポートも可能です。
データは.REG次の構文を使用してファイルに保存されます。[ 26 ]
[<ハイブ名>\<キー名>\<サブキー名>] "値の名前" = <値の型>:<値のデータ>キーのデフォルト値は、@「値の名前」の代わりに使用して編集できます。
[<ハイブ名>\<キー名>\<サブキー名>] @ = <値の型>:<値のデータ>文字列値には > は必要ありません<Value type(例を参照)。ただし、バックスラッシュ(\)は二重バックスラッシュ(\\)として、引用符(")はバックスラッシュ引用符(\")として記述する必要があります。(エスケープの要件は完全に一貫しているわけではありません。エスケープされていない先頭のバックスラッシュを持つ文字列を含むファイルも存在し、システムによってインポート時に受け入れられます。)[ 27 ]
たとえば、HKLM\SOFTWARE\Foobarキーに「値 A」、「値 B」などの値を追加するには、次のようにします。
Windows レジストリ エディター バージョン 5.00 [ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "値A" = "<エスケープ文字を含む文字列データ>" "値B" = hex:<バイナリデータ(16進値のカンマ区切りリスト)> "値C" = dword:<DWORD値の整数> "値D" = hex(0):<REG_NONE(16進値のカンマ区切りリスト)> "値E" = hex(1):<REG_SZ(UTF-16LE NUL終端文字列を表す16進値のカンマ区切りリスト)> "値F" = hex(2):<拡張可能な文字列データ(UTF-16LE NUL終端文字列を表す16進値のカンマ区切りリスト)> "値G" = hex(3):<バイナリデータ( 16進数値のリスト)> ; 「値B」に等しい「値H」= hex(4):<DWORD値(リトルエンディアンバイトオーダーの4つの16進値のカンマ区切りリスト)> 「値I」= hex(5):<DWORD値(ビッグエンディアンバイトオーダーの4つの16進値のカンマ区切りリスト)> 「値J」= hex(7):<複数文字列値データ(UTF-16LE NUL終端文字列を表す16進値のカンマ区切りリスト)> 「値K」= hex(8):<REG_RESOURCE_LIST(16進値のカンマ区切りリスト)> 「値L」= hex(a):<REG_RESOURCE_REQUIREMENTS_LIST(16進値のカンマ区切りリスト)> 「値M」= hex(b):<QWORD値(リトルエンディアンバイト順の8つの16進数値のコンマ区切りリスト)>.REGファイルをダブルクリックするか、コマンド ラインで /s スイッチを使用すると、ファイルのデータをレジストリに追加したり、レジストリにマージしたりできます。REGまた、ファイルを使用してレジストリ データを削除することもできます。
キー(およびすべてのサブキー、値、データ)を削除するには、キー名の前にマイナス記号(-)を付ける必要があります。[ 26 ]
たとえば、HKLM\SOFTWARE\Foobarキー(およびすべてのサブキー、値、データ)を削除するには、
[ - HKEY_LOCAL_MACHINE \SOFTWARE\Foobar]値(とそのデータ)を削除するには、削除する値の-等号( )の後にマイナス記号( )を付ける必要があります=。[ 26 ]
たとえば、HKLM\SOFTWARE\Foobarキーから「値 A」と「値 B」の値(およびそのデータ)のみを削除するには、次のようにします。
[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "値A" =- "値B" =-キーのデフォルト値HKLM\SOFTWARE\Foobar(およびそのデータ)のみを削除するには:
[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] @ =-セミコロンで始まる行はコメントとみなされます。
; これはコメントです。.regファイルの任意の場所に記述できます。[ HKEY_LOCAL_MACHINE \SOFTWARE\Foobar] "Value" = "Example string"Windowsグループポリシーは、ポリシーに基づいて複数のマシンまたは個々のユーザーのレジストリキーを変更できます。ポリシーがマシンまたはマシンの個々のユーザーに対して初めて有効になると、ポリシーの一部として指定されたレジストリ設定がマシンまたはユーザーの設定に適用されます。
Windowsは更新されたポリシーを探し、定期的に(通常は90分ごとに)適用します。[ 28 ]
ポリシーは、そのスコープを通じて、どのマシンとユーザーにポリシーを適用するかを定義します。マシンまたはユーザーがポリシーのスコープ内かどうかは、一連のルールによって定義されます。これらのルールは、組織ディレクトリ内のマシンまたはユーザーアカウントの場所、特定のユーザーまたはマシンアカウント、あるいはセキュリティグループに基づいてフィルタリングできます。Windows Management Instrumentationの式を使用することで、より高度なルールを設定できます。このようなルールでは、コンピューターのベンダー名、CPUアーキテクチャ、インストールされているソフトウェア、接続先のネットワークなどのプロパティに基づいてフィルタリングできます。
例えば、管理者は経理部門のマシン用にレジストリ設定を1セット、来客エリアのキオスク端末用に(ロックダウン)レジストリ設定を1セット、それぞれ異なるポリシーを作成できます。マシンがスコープ間で移動された場合(例:名前の変更、別の組織単位への移動)、適切なポリシーが自動的に適用されます。ポリシーが変更されると、そのポリシーは現在そのスコープ内にあるすべてのマシンに自動的に再適用されます。
ポリシーは、設定の選択と変更のためのユーザーインターフェースを提供する多数の管理テンプレートを通じて編集されます。管理テンプレートのセットは拡張可能であり、リモート管理をサポートするソフトウェアパッケージでは独自のテンプレートを登録できます。
| 登録 | |
|---|---|
| 開発者 | マイクロソフト |
| オペレーティング·システム | マイクロソフトウィンドウズ |
| タイプ | 指示 |
| ライセンス | 独自の商用ソフトウェア |
| Webサイト | docs |
| レジニ | |
|---|---|
| 開発者 | マイクロソフト |
| オペレーティング·システム | マイクロソフトウィンドウズ |
| タイプ | 指示 |
| ライセンス | 独自の商用ソフトウェア |
| Webサイト | docs |
レジストリはコマンドラインから様々な方法で操作できます。Windows XP以降のバージョンには、Reg.exeおよびRegIni.exeユーティリティツールが含まれています。旧バージョンのWindowsの場合は、リソースキットCDまたはWindowsのオリジナルインストールCDも利用できます。
また、.REG次のコマンドを使用して、コマンドラインからファイルをインポートすることもできます。
RegEdit.exe /sファイル
/s は、ファイルがレジストリにサイレントマージさ/sれることを意味します。パラメータを省略した場合、ユーザーに操作の確認を求めます。Windows 98、Windows 95、および少なくとも一部のWindows XPの構成では/s、このスイッチは、RegEdit.exe管理者が無効化できるレジストリ設定を無視します。この/sスイッチを使用するとRegEdit.exe、操作が失敗した場合に適切なリターンコードが返されますが、Reg.exeこれは とは異なります。
RegEdit.exe /eファイル
レジストリ全体をV5形式でUNICODE.REGファイルにエクスポートしますが、
RegEdit.exe /eファイルHKEY_CLASSES_ROOT[\<キー>] RegEdit.exe /eファイルHKEY_CURRENT_CONFIG[\<キー>] RegEdit.exe /eファイルHKEY_CURRENT_USER[\<キー>] RegEdit.exe /eファイルHKEY_LOCAL_MACHINE[\<キー>] RegEdit.exe /eファイルHKEY_USERS[\<キー>]
指定された (サブ) キー (スペースが含まれている場合は引用符で囲む必要があります) のみをエクスポートします。
RegEdit.exe /aファイル
レジストリ全体を V4 形式で ANSI.REGファイルにエクスポートします。
RegEdit.exe /aファイル<キー>
指定された (サブ) キー (スペースが含まれている場合は引用符で囲む必要があります) のみをエクスポートします。
を使用することもできますReg.exe。以下はレジストリ値Versionの値を表示するサンプルです。
Reg.exe クエリ HKLM\Software\Microsoft\ResKit /v バージョン その他のコマンド ライン オプションには、VBScriptまたはJScriptに加え、CScript、WMI、Windows PowerShellWMIC.exeなどがあります。
レジストリの権限は、コマンドラインRegIni.exeとSubInACL.exeツールを使用して操作できます。例えば、HKEY_LOCAL_MACHINE\SOFTWAREキーの権限は次のように表示できます。
SubInACL.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE /display 
Windows PowerShellには、レジストリをファイルシステムに似た場所として表示するレジストリプロバイダーが付属しています。ファイルシステム内のファイルやディレクトリを操作するのと同じコマンドを使用して、レジストリのキーと値を操作できます。[ 29 ]
また、ファイルシステムと同様に、PowerShellは現在の場所という概念を使用しており、これはコマンドがデフォルトで動作するコンテキストを定義します。Get-ChildItem(エイリアスls、dirまたはからも利用可能gci)は、現在場所の子キーを取得します。Set-Location(またはエイリアスcd)コマンドを使用することで、ユーザーは現在の場所をレジストリの別のキーに変更できます。[ 29 ]項目名の変更、項目の削除、新しい項目の作成、項目またはプロパティの内容の設定を行うコマンドは、キー名の変更、キーまたはサブツリー全体の削除、値の変更に使用できます。
PowerShellスクリプトファイルを使用することで、管理者は実行時にレジストリに変更を加えるスクリプトを作成できます。これらのスクリプトは管理者に配布し、管理者が個々のマシンで実行できるようにすることができます。PowerShellレジストリプロバイダーはトランザクションをサポートしており、レジストリへの複数の変更を単一のアトミックトランザクションにまとめることができます。アトミックトランザクションは、すべての変更がデータベースにコミットされるか、スクリプトが失敗した場合は変更がデータベースにコミットされないかのいずれかを保証します。[ 29 ] [ 30 ]
レジストリは、Advanced Windows 32 Base API Library (advapi32.dll) のAPIを通じて編集できます。[ 31 ]レジストリAPI関数のリスト:
多くのプログラミング言語は、Windows APIをラップする組み込みのランタイムライブラリ関数またはクラスを提供しており、これによりプログラムはレジストリに設定を保存できます(Microsoft.Win32.Registry例: VB.NET、C#、TRegistryDelphi 、Free Pascal)。Visual Basic 6などのCOM対応アプリケーションはWSHオブジェクトを使用できます。別の方法として、Windowsリソースキットツールをコードから実行する方法がありますが、 [ 32 ]これはあまり良いプログラミング方法とは言えません。 WScript.ShellReg.exe
同様に、Perl( を使用)、Python(winreg を使用)、Tcl(レジストリパッケージにバンドルされている)、[ 33 ] Windows Powershell、Windows Scripting Hostなどのスクリプト言語でも、スクリプトからレジストリを編集できます。 Win32::TieRegistry
Windows Driver Kitから入手可能なoffreg.dll [ 34 ]は、advapi32.dllによって提供されるものと同様の、現在ロードされていないレジストリハイブの作成と操作のための一連のAPIを提供します。
Windows PEまたはLinux (後者の場合はオープン ソースツールを使用)からオフライン システムのレジストリ (ハイブ) を編集することもできます。
登録不要のCOMが導入される前は、開発者はインプロセスおよびアウトプロセスのバイナリに初期化コードを追加して、そのオブジェクトが動作するために必要なレジストリ構成を実行することが推奨されていました。.DLL や .OCX ファイルなどのインプロセスバイナリの場合、モジュールは通常 DllInstall() と呼ばれる関数をエクスポートし[ 35 ]、インストールプログラムから呼び出すことも、Regsvr32.exe などのユーティリティを使用して手動で起動することもできます。[ 36 ]アウトプロセスバイナリは通常、必要なレジストリ設定を作成または削除するコマンドライン引数 /Regserver および /Unregserver をサポートしています。[ 37 ] DLL Hell の問題 によって動作が停止した COM アプリケーションは、通常、インストールプログラムを再度起動することなく、RegSvr32.exe または /RegServer スイッチを使用して修復できます。[ 38 ]
Windowsは、特定のレジストリキーが変更された場合に通知イベントを受信するようにユーザーモードアプリケーションを登録できるようにするAPIを公開しています。[ 39 ] また、カーネルモードアプリケーションが他のアプリケーションによって行われたレジストリ呼び出しをフィルタリングおよび変更できるようにするAPIも利用可能です。[ 40 ]
Windowsは、リモートレジストリサービスが実行され、正しく構成され、ネットワークトラフィックがファイアウォールで保護されていない場合、[ 41 ]RegConnectRegistry機能を介して別のコンピュータのレジストリへのリモートアクセスもサポートします。 [ 42 ]
Windows NTの各バージョンのレジストリキーには、それぞれセキュリティ記述子が関連付けられます。セキュリティ記述子には、どのユーザーグループまたは個々のユーザーにアクセス権限を付与または拒否するかを記述したアクセス制御リスト(ACL)が含まれます。レジストリ権限セットには、ユーザーまたはユーザーグループに対して明示的に許可または拒否できる10個の権限が含まれます。
| 許可 | 説明 |
|---|---|
| クエリ値 | レジストリ キーの値を読み取る権限。 |
| 値の設定 | 新しい値を書き込む権利 |
| サブキーを作成 | サブキーを作成する権限。 |
| サブキーを列挙する | サブキーの列挙を許可します。 |
| 通知 | レジストリ キーまたはサブキーの変更通知を要求する権利。 |
| リンクを作成 | オペレーティング システムによって予約されています。 |
| 消去 | キーを削除する権利。 |
| DACLの書き込み | コンテナの DACL のアクセス許可を変更する権利。 |
| 書き込み所有者 | コンテナの所有者を変更する権限。 |
| 読み取り制御 | DACL を読む権利。 |
オペレーティングシステム内の他のセキュリティ保護可能なオブジェクトと同様に、セキュリティ記述子上の個々のアクセス制御エントリ(ACE)は明示的に指定することも、親オブジェクトから継承することもできます。[ 43 ]
Windowsリソース保護はWindows Vista以降のバージョンのWindowsの機能であり、セキュリティを使用して管理者とシステムによる一部の機密キーへの書き込みアクセスを拒否し、マルウェアや偶発的な変更からシステムの整合性を保護します。[ 44 ]
セキュリティ記述子上の特別なACEは、レジストリキーとサブキーに対する強制的な整合性制御を実装することもできます。低い整合性レベルで実行されているプロセスは、たとえそのプロセスのアカウントにACLを通じてアクセス権が付与されていたとしても、レジストリキー/値の書き込み、変更、削除を行うことはできません。例えば、保護モードで実行されているInternet Explorerは、現在ログオンしているユーザーの中程度および低い整合性レベルのレジストリキー/値を読み取ることはできますが、変更できるのは低い整合性レベルのキーのみです。[ 45 ]
セキュリティ以外の理由により、レジストリキーは削除または編集できません。NUL文字を含むレジストリキーは、標準的なレジストリエディタでは削除できず、RegDelNullなどの特別な削除ユーティリティが必要です。[ 46 ] [ 47 ]
Windows のさまざまなエディションでは、長年にわたってレジストリをバックアップおよび復元するためのさまざまな方法がサポートされてきましたが、その一部は現在では非推奨になっています。
HKLM\SYSTEM\CurrentControlSet、ハードウェアおよびデバイス ドライバーの情報を保存するキーが再リンクされます。%Windir%\Sysbckupからも実行できます。[ 49 ]RDISK.EXEには、レジストリ全体をバックアップおよび復元するユーティリティが含まれています。 [ 50 ]Windows 2000以降のバージョンのWindowsでは、グループポリシー処理エンジンのレジストリ固有のクライアント拡張機能を通じて、グループポリシーを使用してレジストリ設定を適用します。[ 53 ]ポリシーは、を使用して1台のコンピュータにローカルに適用することも、を使用してドメインgpedit.msc内の複数のユーザーとコンピュータに適用することもできます。 gpmc.msc
Windows 95、Windows 98、Windows ME、およびWindows NT 4.0では、管理者はポリシーファイル(POLICY.POL)と呼ばれる特別なファイルをレジストリに組み込むことができます。ポリシーファイルを使用すると、管理者は管理者以外のユーザーによるレジストリ設定(例えば、Internet Explorerのセキュリティレベルやデスクトップの背景の壁紙など)の変更を防止できます。ポリシーファイルは主に、多数のコンピュータを保有し、不正なユーザーや不注意なユーザーからビジネスを保護する必要がある企業で使用されます。
ポリシーファイルのデフォルトの拡張子は です.POL。ポリシーファイルは、適用する設定をユーザーとグループ(「グループ」とは定義されたユーザーの集合)ごとにフィルタリングします。そのため、ポリシーファイルはレジストリにマージされ、ユーザーが設定を元に戻すだけでポリシーを回避できないようにします。ポリシーファイルは通常、LAN経由で配布されますが、ローカルコンピュータに配置することもできます。
ポリシーファイルは、Windows 95/Windows 98用のファイル名を持つMicrosoftの無料ツールpoledit.exeと、Windows NT用のコンピュータ管理モジュールによって作成されます。このエディタは、権限を使用するシステムで実行するには管理者権限が必要です。また、エディタはローカルコンピュータの現在のレジストリ設定を直接変更することもできます。また、別のコンピュータにリモートレジストリサービスがインストールされ起動されている場合は、そのコンピュータのレジストリも変更できます。ポリシーエディタは、変更可能な設定を.ADMファイルから読み込みます。そのうちの1つはWindowsシェルが提供する設定を含んでいます。この.ADMファイルはプレーンテキストで、すべての文字列を1か所に保存できるため、ローカライズが容易です。
Windows NTカーネルは、「InifileMapping」と呼ばれる機能を使用して、INIファイル関連のAPIをHKEY_CURRENT_USERなどのレジストリ位置にある仮想ファイルにリダイレクトすることをサポートしています。 [ 54 ] この機能は、システムフォルダがユーザー固有のデータや設定を保存するのに適切な場所とはみなされなくなったWindows NTプラットフォーム上で、 16ビット版Windows向けに作成されたレガシーアプリケーションを実行できるようにするために導入されました。この機能は元々16ビットアプリケーション向けに設計されていましたが、非準拠の32ビットアプリケーションもこの方法でリダイレクトできます。
Windows Vistaでは、限定的なレジストリ仮想化が導入されました。これにより、最小権限の原則を尊重せず、代わりに読み取り専用のシステムの場所 (HKEY_LOCAL_MACHINE ハイブなど) にユーザー データを書き込もうとする、不適切に作成されたアプリケーションは、アプリケーション自体を変更することなく、より適切な場所に自動的にリダイレクトされます。
同様に、アプリケーション仮想化は、アプリケーションの無効なレジストリ操作をすべてファイルなどの場所にリダイレクトします。ファイル仮想化と併用することで、アプリケーションをマシンにインストールすることなく実行できるようになります。
整合性の低いプロセスもレジストリ仮想化を使用する場合があります。例えば、Windows Vista以降の「保護モード」で実行されているInternet Explorer 7または8は、一部のセキュリティ脆弱性を阻止するために、ActiveXコントロールによるレジストリ書き込みをサンドボックス化された場所に自動的にリダイレクトします。
アプリケーション互換性ツールキット[ 55 ]は、HKEY_LOCAL_MACHINEまたはHKEY_CLASSES_ROOTレジストリ操作をHKEY_CURRENT_USERに透過的にリダイレクトできるシムを提供し、権限が不十分なユーザーに対してアプリケーションが動作しない原因となる「 LUA」バグに対処します。
Windows 95のレジストリは、レジストリが破損するとオペレーティングシステムの再インストールが必要になったため、批評家から単一障害点(SPOF)と呼ばれていました。しかし、Windows NTではトランザクションログを使用して更新中の破損を防いでいます。現在のバージョンのWindowsでは、データベース更新中に停電などの重大な事態が発生した場合でも整合性を確保するために、2階層のログファイルを使用しています。 [ 56 ]回復不可能なエラーが発生した場合でも、Windowsはシステム起動時に破損したレジストリエントリを修復または再初期化できます。[ 56 ]
libguestfsとhivex(ホストWindowsインストール以外のシステム(非Windowsシステムを含む)からレジストリを読み書きするためのツール)の作者であるリチャードWMジョーンズは、次のような批判をしている。 [ 27 ]
\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_1af4&dev_1001&subsys_00000000。REG_SZ元々7ビットASCIIで保存されていましたが、後にUTF-16LEに変更されました。そのため、ハイブを正しく読み書きするには、それに関連付けられているWindowsのバージョンを知っておく必要があります。Windowsでは、プログラムデータの保存にレジストリを使用するかどうかは開発者の裁量に委ねられています。Microsoftは、XMLファイル(MSXML経由)またはデータベースファイル(SQL Server Compact経由)にデータを保存するためのプログラミングインターフェースを提供しており、開発者はこれらをレジストリの代わりに使用できます。また、開発者はMicrosoft以外の代替手段を使用したり、独自のデータストアを開発したりすることもできます。
Windows レジストリのバイナリベースのデータベース モデルとは対照的に、他のオペレーティング システムではデーモンとアプリケーションの構成に別々のプレーン テキストファイルを使用しますが、管理を容易にするためにこれらの構成をグループ化します。
/etc//usr/local/etc//Library/フォルダに保存されますが、ユーザーごとの構成ファイルは~/Library/ユーザーのホームディレクトリ内の対応するフォルダに保存され、システムによって設定された構成ファイルは に保存されます/System/Library/。これらのそれぞれのディレクトリ内では、アプリケーションは通常、サブディレクトリにプロパティリストPreferences/ファイルを保存します。/etc/objrepos。.REG、ヘッダー行が「WINE REGISTRY Version 2」に変更され、パス(キー)がハイブの名前で始まらない点が異なります。レジストリを使用することで解決できる、.INI ファイルの使用によって発生するその他の問題や制限を示しています。
{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク){{cite web}}:|archive-url=形式が正しくありません: タイムスタンプ (ヘルプ)CS1 メンテナンス: url-status (リンク)