TOPへ ID:0034

 レジストリのカスタマイズ 

 Windowsレジストリのカスタマイズ
 

 
+レジストリのカスタマイズ

  ・レジストリとは?

  ・ファイルと編集
  ・レジストリハイブファイル
  ・レジストリのバックアップ
  ・レジストリキーとレジストリ値の作成
  ・コマンドでレジストリを編集する
  ・レジストリ登録ファイルを使用し、レジストリ変更を配布する

  ・レジストリの復元
  ・レジストリのアクセス権を編集する
  ・「SubInACL」コマンドでアクセス権を編集する
  ・グループポリシーで設定を変更すればレジストリで編集するよりも安全&確実
  ・フリーソフトのレジストリモニタを変更を追跡する

 


1.レジストリとは?

Windowsにおけるレジストリとは、OSやアプリケーションの設定を登録し、保存するデータベースを指す。

もともと、現在のWindowsファミリーの根源になったWindows3.1におけるレジストリは、ファイルの種類とアプリケーションの関連付けを登録する設定ファイル「REG.DAT」のことを指していた。Windows3.1では、OSやアプリケーションの設定を「WIN.INI」や「SYSTEM.INI」といったテキスト形式の設定ファイルに保存していた。しかし、その後登場したWIndows9x/NTは、1台のPCを複数のユーザで利用することを前提としていたために、レジストリデータベースを用意して、設定ファイルを徐々に廃止することにした。特にWindowsNT系OSは、バックグラウンドで「サービス」や「タスク」が複数のユーザ環境を使い分けながら動作しているので、ユーザ別の環境設定は欠かせない。

レジストリの編集は「レジストリエディタ」で行う。WindowsNT/2000では2種類のレジストリエディタが用意されている。ひとつはWindows9xから導入されたファイルエクスプローラのようなインターフェースの「Regedit.exe」、もうひとつはWindows3.1の「プログラムマネージャ」や「ファイルマネージャ」の表示と似ている「Regedt32.exe」である。使いやすさでは「Regedit.exe」だが、「Regedt32.exe」はレジストリキーのアクセスが編集できたり、誤操作を防止するために「読み取り専用モード」が装備されていたりと多機能である。WindowsXPのレジストリエディタはファイルエクスプローラに似た表示でありながら、アクセス権の編集機能も装備しており(ただし読み取り専用モードは装備していない)、 「Regedit.exe」「Regedt32.exe」のどちらを実行しても同じレジストリエディタが起動する。

レジストリエディタを起動するには、「スタートメニュー」-「ファイル名を指定して実行」を選択し、「名前」に「regedit」と入力する。

 

左ペインに「レジストリーキー」、右ペインに「レジストリ値」が並ぶ2ペイン構成になっている。左ペインのレジストリーキーの中で、「マイコンピュータ」の下に表示される、「HKEY_CLASSES_ROOT」「HKEY_CURRENT_USER」などの5つのレジストリキーは「レジストリハイブ」と呼ばれている。

 レジストリの表示を確認したら、バックアップユーティリティを使ってレジストリのバックアップを作成してみる。

 @「スタートメニュー」-「すべてのプログラム」-「アクセサリー」-「システムツール」-「バックアップまたは復元ウィザード」を開く
 A「バックアップまたは復元ウィザード」にある「詳細モードに切り替えて実行する」をクリックする
 B「バックアップ」タブをクリックし、左ペインにある「System State」にチェックを入れる
 C「バックアップを格納するメディア名またはファイル名」に、「<任意のドライブの任意のフォルダ>\SystemState.bkf」と入力する。
   なるべく、Windowsをインストールしたドライブと違えるようにする。
 D「バックアップの開始」をクリックして、さらに「バックアップの開始」をクリックする。



2.ファイルと編集

次に、レジストリエディタの中で重要な「ファイル」メニューと「編集」メニューについて説明する。

「ファイル」メニューには、レジストリの読み取りや書き出し、ネットワークコンピュータのレジストリ操作などの機能が格納されている。「インポート」を実行すると、「レジストリ登録ファイル」や後述する「レジストリハイブファイル」からレジストリキーとレジストリ値を取り込んで、現在のレジストリと合成することができる。また、「エキスポート」は指定したレジストリキー以下の内容を、レジストリ登録ファイルやレジストリハイブファイル、テキストファイルにエクスポートできる機能である。使う機会は少ないが、Windows95/NTと互換性のあるレジストリ登録ファイル形式でエクスポートすることも可能である。

「ハイブの読み込み」は、「HKEY_LOCAL_MACHINE」か「HKEY_USERS」を選択したときだけ実行できるメニューである。レジストリハイブファイルをこのレジストリハイブの下に読み込んで編集できる。また「ハイブのアンロード」を実行すると、読み込んだレジストリハイブファイルが切り離される。例えば、ドライバーなどの設定ミスでWindowsXPが起動しなくなったときに、正常なWindowsXPで、問題のあるレジストリハイブファイルを読み込んで修正することもできる。

「ネットワークレジストリへの接続」と「ネットワークレジストリの切断」では、リモートコンピュータのレジストリを読み込んだり、切り離したりする。ネットワーク経由でレジストリを操作するには、リモートコンピュータの「Remote Registry」サービスが実行中でなければならない。

「編集」メニューには、レジストリキーやレジストリ値の追加・変更・削除・アクセス権の設定などの機能がある。左ペインでレジストリキーを選択して「編集」メニューをクリックすると、「新規」や「アクセス許可」が表示されるが、右ペインでレジストリ値を選択して、「編集」メニューを開くと、「修正」「バイナリデータの修正」が表示される。選択したデータによってメニューの内容が変化するので注意が必要である。

「新規」にはサブメニューがあり、「キー」を選択すると現在のレジストリキーの下にサブキーが作成できる。「文字列値」などを選択すると、レジストリ値を新規作成できる。レジストリエディタが扱えるデータ型は5種類しかないが、WindowsXPには実に14種類ものデータ型を使い分けている。

WindowsXPには、レジストリエディタで作成可能な5種類のデータ型と、「新規」メニューに表示されない9種類のデータ型が用意されている。
番号 データ型 レジストリ
エディタの
データ型選択表示名
レジストリ
登録ファイル
のデータ型
識別表示
説明
1 REG_SZ 文字列値 値の名前="設定値" ヌルターミネート(文字列の最後を「ヌル文字」(0x00)で終了する形式)された文字列を格納する。文字コードはUNICODEまたはANSIが使用できる。値は1つだけ設定できる。
2 REG_BINARY バイナリ値 hex フリーフォーマットのバイナリ値を格納する。値は1つだけ設定できる。「48,02」のように、2桁の16進数をカンマで区切って記述する。
3 REG_DWORD DWORD値 dword 32ビットの数値(ダブルワード値)を格納する。値は1つだけ設定できる。1バイト=8ビット、1ワード=16ビット(2バイト)、1ダブルワード=32ビット(4バイト)、1クワッドワード=64ビット(8バイト)となる。
4 REG_MULTI_SZ 複数行文字列値 hex(7) ヌルターミネートされた文字列を複数格納する。最終行の末尾はヌル文字を2つ続けて終端する。値は複数指定できる。
5 REG_EXPAND_SZ 展開可能な文字列値 hex(2) 展開されていない環境変数を含む、ヌルターミネートされた文字列を格納する。環境変数には「%SystemRoot%」や「%PATH%」などがある。
6 REG_RESOURCE_LIST なし hex(8) デバイスドライバが使用するハードウェアリソース情報を格納する。「HKEY_LOCAL_MACHINE\HARDWARE\ResourceMap」のサブツリーで使用される。
7 REG_FULL_RESOURCE_DESCRIPTOR なし hex(9) 物理デバイスが使用するハードウェアリソース情報を格納する。「HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION」のサブツリーで使用される。
8 REG_RESOURCE_REQUIREMENTS_LIST なし hex(a) 「REG_RESOURCE_LIST」で定義された、デバイスドライバが使用可能なハードウェアリソース情報のリストを格納する。「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Arbiters\AllocationOrder」などで使用される
9 REG_LINK なし hex(6) Windowsがデバイスとドライバを結びつける際に内部で使用する、UNICODEのシンボリックリンクを格納する
10 REG_NONE なし なし 特定のデータ型を持たない値を格納する
11 REG_DWORD_LITTLE_ENDIAN なし なし REG_DWORDと同じ。x86 CPUのアーキテクチャーは「リトルエンディアン」であり、例えば「0x12345678」という数値はメモリ上に「0x78 0x56 0x34 0x12」という並び順で格納される
12 REG_DWORD_BIG_ENDIAN なし hex(5) 32ビットの数値を格納するが、「0x12345678」という数値はメモリ上に「0x12 0x34 0x45 0x78」という並び順で格納される。この型式を「ビックエンディアン」という
13 REG_QWORD なし なし 64ビットの数値(クワッドワード値)を格納する。値は1つだけ設定できる
14 REG_QWORD_LITTLE_ENDIAN なし なし REG_QWORDと同じ

新規作成時に選択できないデータ型は、レジストリ登録ファイルを使って編集する。

「アクセス許可」では、レジストリキーごとにアクセス権を設定できる。個々のレジストリ値にはアクセス権を設定できないので、間違えないように気をつける。レジストリのアクセス権はファイルシステムに依存しないので、FATやFAT32パーティション上にWindowsXPをインストールしていても、レジストリにアクセス権を設定可能である。

「削除」と「名前の変更」は、最上位のレジストリハイブを選択しているときには実行できない。また、レジストリキーには必ず規定値が設定されているが、規定値の名前を変えたり、削除したりすることもできない。左ペインでレジストリキーを選択したときに右ペインに表示される「(規定)REG_SZ(値の設定なし)」がそのキーの規定値となる。



3.レジストリハイブファイル

レジストリハイブには、それぞれ決まった役割がある。

レジストリハイブの名前 省略形 レジストリハイブの役割
HKEY_LOCAL_MACHINE HKLM このコンピュータのハードウェア情報や、全ユーザ共通のアプリケーション情報を保存する。他のコンピュータに設定を引き継ぐことはできない。
HKEY_CURRENT_USER HKCU 現在ログオンしているユーザだけに適用される。デスクトップ設定やアプリケーション情報を保存する。「移動ユーザープロファイル」に対応し、別のコンピュータに現在のユーザ環境を引き継ぐことができる。「HKEY_USERS\<ユーザーのSID>」の下にもまったく同じレジストリキーと値が存在する。
HKEY_CLASSES_ROOT HKCR アプリケーションの関連付けや右クリック時のメニュー、ドラッグ&ドロップの動作、ショートカットの設定などを保持する。「HKEY_LOCAL_MACHINE\SOFTWARE\Classes」と同じ内容を指している。
HKEY_USERS HKU 全ユーザのユーザ別設定と、「HKEY_USERS\.DEFAULT」サブキーにデフォルトのユーザ設定を保持する。
HKEY_CURRENT_CONFIG HKCC ハードウェアプロファイル情報を保存する。「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles\Current」と同じ内容を指している
HKEY_PERFORMANCE_DATA なし WindowsNT以降でのみ利用可能な、パフォーマンス情報を保持した仮想キー。実体のファイルはなく、レジストリエディタでも表示されない。レジストリ値として得られるパフォーマンスデータは、システムオブジェクトマネージャが動的に生成する
HKEY_DYN_DATA HKDD Windows9xでのみ使用する、プラグ&プレイ情報を保存した仮想キー。元になる実体のファイルはなく、Windowsの起動時にメモリ内に作成されて、シャットダウンで消滅する

「HKEY_DYN_DATA」は、Windows9x専用のレジストリハイブで、WindowsNT系列のOSには存在しない。このほか、レジストリエディタでは表示されない「HKEY_PERFORMANCE__DATA」という特殊なレジストリハイブも存在する。

レジストリエディタは、「マイコンピュータ」をルートとして、レジストリハイブが整然としたツリー構成で表示される。しかし、システム内部では5つのレジストリハイブを細分化して、6つの「レジストリハイブファイル」として管理している。レジストリの実体となるレジストリハイブファイルは次の2箇所のフォルダに分散して保存されている。

  環境変数「%SystemRoot%」
  デフォルト値「C:\WINDOWS」

  環境変数「%UserProfile%」
  デフォルト値「C:\Document and Settings\<ユーザ名>」

  ●「%SystemRoot%System32\config」フォルダ
   default:デフォルトユーザープロファイル(HKEY_USERS\.DEFAULTに対応)
   SAM:ユーザー認証情報(HKEY_LOCAL\MACHINE\SAMに対応)
   SECURITY:セキュリティ情報(HKEY_LOCAL_MACHINE\SECURITYに対応)
   software:ソフトウェア情報(HKEY_LOCAL_MACHINE\SOFTWAREに対応)
   system:システム構成(HKEY_LOCAL_MACHINE\SYSTEMに対応)

  ●「%UserProfile%」フォルダ
   NTUSER.DAT:ユーザプロファイル(HKEY_CURRENT_USERに対応)


「%SystemRoot%\System32\config」フォルダにある「default.sav」と「system.sav」は、レジストリハイブファイル「default」「system」が破損したときの予備ファイルであり、最小限の設定が保存されている。また、「<ファイル名>.log」ファイルは、ファイル名に対応するレジストリハイブファイルの変更履歴を記録している。ちなみに、Windows95/98のレジストリハイブファイルは「User.dat」と「System.dat」の2つ、WindowsMeでは、「User.dat」「System.dat」「Classes.dat」の3つになっている。

レジストリエディタを起動して、左ペインで「HKEY_LOCAL_MACHINE\SYSTEM」キーを選択し、「ファイル」メニューを開くと、通常は無効の「ハイブファイルのアンロード」がアクティブになる。これは「HKEY_LOCAL_MACHINE」レジストリハイブのサブキー「\SYSTEM」に「system」レジストリハイブファイルがロードされた状態を示している。




4.レジストリのバックアップ

自動スケジューリングで定例的にバックアップを取得していたとしても万全とは言えない。レジストリは常に内容が変化するものであるため、編集作業をする直前には、必ずバックアップを取得すること。

 @スタートメニューから「すべてのプログラム」-「アクセサリ」-「システムツール」-「バックアップまたは復元ウィザード」を開く
 A「バックアップまたは復元ウィザード」にある「詳細モードに切り替えて実行する」をクリックする
 B「バックアップ」タブをクリックし、左ペインにある「System State」にチェックをつける


   

 C「バックアップを格納するメディア名またはファイル名」に、「<任意のドライブの任意のフォルダ>\SystemState.bkf」と入力する。Windowsをインストールしたドライブ
   (システムドライブ:C:\)とは異なるドライブがよい。
 D「バックアップの開始」をクリックして、さらに「バックアップの開始」をクリックする。

 


5.レジストリキーとレジストリ値の作成

レジストリのバックアップが完了したら、レジストリエディタを起動して、レジストリキーを新規作成するシミュレーションを以下に説明する。操作方法はエクスプローラでフォルダやファイルを新規作成する手順とほぼ変わらない。どのキーや値を選択しているかさえ気をつけていれば致命的なミスをする可能性は低い。

 @スタートメニューから「ファイル名を指定して実行」を開き、コマンドラインに「Regedit」と入力して、「OK」をクリックする。
 Aレジストリエディタが起動したら、左ペインで「HKEY_CURRENT_USER」にある「Software」を開く。「HKEY_CURRENT_USER」は現在ログオンしているユーザ自身のレジストリ
   であるため、もし操作ミスをしても、ほかのユーザやシステムには影響がない。
 B「Software」を右クリックして、「新規」-「キー」を選択する。
 C左ペインに「新しいキー #1」というキーが作成されて名前変更受付状態になる。「test」と入力して、「Enter」キーを押す。Windowsはキーや名前の大文字/小文字を
   区別しないので、「TEST」でも「test」でも同じとして認識される(アプリケーションは区別される場合がある)
 Dもし、手順(4)で誤って名前を確定してしまった場合には、新規作成したキーを右クリックして「名前の変更」を選択するか、キーを選択した状態で「F2」キーを押して、
   名前を入力しなおす。

 作成した「test」レジストリキーを選択すると、右ペインには「(規定)REG_SZ(値の指定なし)」と表示される。ここに続けて新しいレジストリ値を
 作成してみる。

 @「test」キーを右クリックして、「新規」-「文字列値」を選択する
 A右ペインに「新しい値 #1」というレジストリ値が作成されるので、「Sample」と入力して「Enter」キーを押す。
 Bもし、手順Aで誤って名前を確定した場合は、新規作成したレジストリ値を右クリックして「名前の変更」を選択するか、レジストリ値を選択した状態で「F2」キーを押して、
   名前を入力し直す。
 C「Sample」を右クリックして「修正」を実行し、「文字列の編集」ウィンドゥを開いて「値のデータ」に任意の文字列を入力する。なお、設定値を変更するには、レジストリ値を
   選択して「Enter」キーを押す。


   

なお、作成したレジストリキーやレジストリ値を削除するには、キーや値を右クリックして「削除」を実行するか、選択状態で「Delete」キーを押せばよい。レジストリキーを削除すれば連動してレジストリ値やサブキーも削除される。



6.コマンドでレジストリを編集する

レジストリ値を使えば、「編集」メニューや右クリックメニューでレジストリ値をビジュアルに編集できる。しかし、多数のレジストリ値を編集する場合に、1つ1つ編集するのは手間がかかる。また、レジストリエディタを使用して変更すると、変更履歴が残らないという問題もある。変更前後のレジストリ値と設定値が記録されれば十二分だが、最低でもどのレジストリ値を変更したかは記録しておきたい。

このような場合に便利なのが、WindowsXP標準の「Reg」コマンドである。

 >Reg add HKCU\Software\test /v Sample /t REG_SZ /d "さんぷる"

 操作は正しく終了しました

 >Reg add HKCU\Software\test /v Sample /t REG_SZ /d "サンプル"
 Value Sample exists, overwrite(Y/N)? y

 操作は正しく終了しました

 >Reg compare HKLM\SYSTEM\CurrentControlSet\Services\W32Time \\TAKAI\HKLM\SYSTEM\CurrentControlSet\Services\W32Time /s
 <Value: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time SpecialPollTimeRemaining
  REG_MULTI_SZ time.nist.gov,796cb7c\0\0\0\0\0\0\0\0\0\0\0\0
 <Value: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time SpecialPollTimeRemaining
  REG_MULTI_SZ time.nist.gov,796deda\0\0\0\0\0\0\0\0\0\0\0\0

 Result Compared: Different

 操作は正しく終了しました


レジストリの編集をバッチファイルで実行すれば、変更後のレジストリ値と設定値を残すことができるだけでなく、バッチファイルを使って複数のコンピュータに同じ変更作業を行うことができる。例えば「Reg add」コマンドは次の操作をローカルコンピュータとリモートコンピュータの両方で実行できる。

 
 ・新しいレジストリキーを作成する
  ・新しいレジストリ値を作成し、データ型を指定して値を設定する
  ・既存のレジストリ値のデータ型を変更する
  ・既存のレジストリ値の設定値を変更する


なお、レジストリキーの新規作成とレジストリ値の新規作成は同時に実行可能である。ただし、リモートコンピュータのレジストリを操作する場合は操作対象のOSがWindowsNT/2000/XPとWindows Server2003であること、管理者権限を持っていることが必須条件となる。

では、Reg addコマンドでどのようなことができるか見てみる。Reg addコマンドの構文は以下のとおり。

  
Reg add <レジストリキー> [/v レジストリ値] [/ve] 「/t データ型」 [/s セパレータ] [/d 設定値] [/f]

@レジストリキー

新規作成するレジストリキーのパスを指定する。新しいレジストリ値を作成したり、設定値を変更する場合は、既存のレジストリキーのパスを指定する。「\\コンピュータ名\レジストリキー」の形式で指定すれば、リモートコンピュータのレジストリを操作することができる。なお、レジストリキーの先頭はレジストリハイブ名で始まるが、レジストリハイブの指定には「HKLM」「HKCU」「HKCR」「HKU」「HKCC」というような省略形を指定することもできる。リモートコンピュータのレジストリを操作する場合は、「HKLM」と「HKU」だけ指定可能である。レジストリハイブの省略形表記は、「3.レジストリハイブファイル」参照。


A/t データ型


レジストリ値のデータ型を指定する。指定できるデータ型は次の9種類が用意されている。

  ・REG_SZ(文字列値)
  ・REG_BINARY(バイナリ値)
  ・REG_DWORD(DWORD値)
  ・REG_MULTI_SZ(複数行文字列値)
  ・REG_EXPAND_SZ(展開可能な文字列値)
  ・REG_LINK
  ・REG_DWORD_BIG_ENDIAN
  ・REG_DWORD_LITTLE_ENDIAN
  ・REG_FULL_RESOURCE_DESCRIPTOR



B/s セパレータ


データ型に「REG_MULTI_SZ」を指定したときのデータを区切る文字を指定する。例えば、「/s ,」とすれば、データは「ABC,DEF,GHI」のようにカンマで区切って複数行を1行で表現できる。


C/d 設定値


レジストリ値に設定する値を指定する。数値はデフォルトで10進数表記だが、「0x」を付けると16進数として解釈される。例えば「/d 123」は10進数の123(16進数で0x7b)だが、「/d 0x123」とすると10進数では291になる。


D/f


上書きの確認メッセージを表示しない。

このほかにも、レジストリキーやレジストリ値を削除する「Reg delete」コマンドもある。Regコマンドはレジストリエディタで実行できる操作を全てカバーしている。しかも、Regコマンドには2つのレジストリ値を比較する「Reg compare」コマンドもある。このコマンドを利用すれば、ユーザ間のレジストリの違いやネットワークコンピュータとローカルコンピュータの差異を発見することも可能である。

機能 コマンドとオプション リモート実行 その他
レジストリキーの追加/変更
レジストリ値の追加/変更
データ型の変更
Reg add <レジストリキー> [/v レジストリ値:/ve]
[/t データ型] [/s セパレータ] [/d 設定値] [/f]
/ve:規定のレジストリ値の設定値をヌル文字列に
する
レジストリキーの削除
レジストリ値の削除
Reg delete <レジストリキー>
[/v レジストリ値:/ve:/va] [/f]
/ve:設定値がヌル文字列のレジストリ値を一括
 削除する。「(規定)REG_SZ(ヌル文字列)」を
 「(規定)REG_SZ(値の指定なし)」に戻す
 こともできる
/va:指定したレジストリキーにあるレジストリ値
 を一括削除するが、サブキーは削除しない
レジストリキーの比較
レジストリ値の比較
Reg compare <レジストリキー1> <レジストリキー2>
[/v レジストリ値:/ve] [/od:/oa:/os:/on] [/s]
/od:相違点だけで表示する(デフォルト)
/oa:相違点と一致点の両方を表示する
/os:一致点だけを表示する
/on:何も表示しない
/s:比較対象にサブキーも含める
レジストリキーのコピー
レジストリ値のコピー
Reg copy <レジストリキー1> <レジストリキー2>
[/s] [/f]
/s:サブキーも同時にコピーする
レジストリ値の表示 Reg query <レジストリキー> [/v レジストリ値:/ve] [/s] /ve:設定値がヌル文字列のレジストリ値を表示
 するが、実際に使用するとエラーになる
/s:サブキーも表示する
レジストリキーのエクスポート Reg export <レジストリキー> <ファイル名> × エクスポートしたファイルはテキスト形式の
「レジストリ登録ファイル」で拡張子「.reg」を
手動で指定する必要がある
レジストリキーのインポート Reg import <ファイル名> × レジストリ登録ファイルをインポートする
レジストリハイブの保存 Reg save <レジストリキー> <レジストリハイブファイル名> 保存したファイルはバイナリ型式で、拡張子
「.hiv」を手動で指定する必要がある
レジストリハイブの復元 Reg restore <レジストリキー> <レジストリハイブファイル名> × レジストリハイブファイルは、拡張子「.hiv」を指定
して、「Reg save」コマンドで作成する
レジストリハイブのロード Reg load <レジストリキー> <レジストリハイブファイル名> レジストリハイブファイルは、拡張子「.hiv」を指定
して、「Reg save」コマンドで作成する
レジストリハイブのアンロード Reg unload <レジストリキー> <レジストリキー>には「Reg load」でハイブを
ロードしたレジストリキーを指定する。



7.レジストリ登録ファイルを使用し、レジストリ変更を配布する

Regコマンドは遠隔地にあるコンピュータも操作できるので非常に便利である。しかし残念なことに1回のコマンド実行で1つのレジストリキーやレジストリ値しか操作できない。この問題を解決するには、バッチファイルにRegコマンドを列挙する方法と、レジストリ登録ファイルを使用して一気にレジストリを編集する方法がある。ここでは、レジストリ登録ファイルを使用する方法を紹介する。

レジストリ登録ファイルは拡張子「.reg」を持つ、以下のような内容のテキストファイルである。

 Windows Registry Editor Version 5.00

 [HKEY_CURRENT_USER\Software\test]
 "Sample1"=dword:20040922
 "Sample2"="さんぷる"


先頭行はレジストリエディタのバージョン情報で、不適切なバージョンのレジストリ登録ファイルは利用できない。[ ]に書かれたレジストリキーに続いてレジストリ値、データ型、設定値が並んでいるが、これを1ブロックとして、複数のブロックを列挙することもできる。このファイルをファイルエクスプローラでダブルクリックするだけで、レジストリに変更が取り込まれる。レジストリ登録ファイルを保存しておけば、そのまま変更履歴にもなる。

しかし、レジストリ登録ファイルをゼロから手作りすることは、かなりの知恵と手間が必要になる。あえて困難にチャレンジしたくない場合には、あらかじめレジストリエディタで必要な編集を済ませておき、操作対象のレジストリキーを右クリックして「エクスポート」を実行して、レジストリ登録ファイルの雛形を作成するとよい。

最後にレジストリキー削除の方法を2つ紹介する。次のようにレジストリキーの指定の先頭に「-」(マイナス)記号を付けると、既存のレジストリキーを削除できる。その場合には、レジストリ値やサブキーも一括して削除される。

 [-HKEY_CURRENT_USER\Software\test]


さらに、次のようにレジストリ値を記述すると、指定したレジストリ値を個別に削除することも可能である。

 "Sample1"=-


レジストリ登録ファイルをダブルクリックすると、バックグラウンドでレジストリエディタが起動して編集処理を実行する。しかし途中で確認メッセージが表示されるので、ユーザー操作が必要になってしまう。ユーザー操作なしでレジストリを編集するには「Regedit /s <レジストリ登録ファイル名>」コマンドを実行すればよい。




8.レジストリの復元

レジストリのアクセス権を操作する前には、バックアップを実行する。手順は前章を参考にする。今回はバックアップしたレジストリの復元手順を紹介する。

 @Windowsの起動ロゴが表示される直前に「F8」キーを押して、Windowsをセーフモードで起動する。
 Aバックアップユーティリティを起動して、「詳細モード」に切り替える。
 B「メディアの復元と管理」タブを選択し、右ペインで「SystemState.bkf」をダブルクリックして「System State」をチェックする。
 C「ファイルの復元先」ドロップダウンリストで、「元の場所」が選択されていることを確認し、「復元の開始」をクリックする。
 D「システム状態の復元は、別の場所に復元しない限り、常に現在のシステム状態を上書きします」と表示されたら、「OK」をクリックする。
 E「復元の確認」ダイアログボックスで、「OK」をクリックし、復元を続行する。
 F「復元の進行状況」ダイアログボックスで「閉じる」をクリックし、Windowsを通常モードで再起動する。

バックアップユーティリティが使いにくい場合は、スタートメニューから「すべてのプログラム」を開き、「アクセサリ」→「システムツール」→「システムの復元」で復元ポイントを作成しておくという方法もある。この方法だとウイザードで簡単に復元ポイントを作成/復元したり、復元を取り消したりもできる。しかし、復元ポイントは「システムのプロパティ」→「システムの復元」タブで設定したディスク容量を使い果たすと、古い復元ポイントから順番に上書きされてしまう。そのため、半永久的なバックアップとして使えないという欠点がある。また、復元ポイントにはユーザープロファイルも含まれるので、復元を実行するとデスクトップに置いたファイルが消えてしまったり、アイコンの配置が変わってしまったりすることがある。「システムの復元」は、あくまで一時的なバックアップ手段として利用する。




9.レジストリのアクセス権を編集する

レジストリを変更するには、@レジストリエディタ(Regedit.exe)で編集するA「Reg」コマンドを使用するHレジストリ登録ファイルを編集する、の3つの方法がある。しかし、どの方法もレジストリのアクセス権までは編集できない。実は、レジストリキーはNTFSファイルシステム上のフォルダのように、独自のアクセス権を持っている。

バックアップと復元をマスターしたら、いよいよレジストリのアクセス権を編集する。アクセス権の設定は、レジストリキーで行う。冒頭にNTFSファイルシステム上のフォルダアクセス権に例えたが、ファイルに相当するレジストリ値に、アクセス権を設定できない点は、NTFSファイルシステムと異なる。ただし、レジストリキーのアクセス権はファイルシステ
ムに依存しないので、FAT/FAT32ファイルシステム上でもレジストリキーにアクセス権を設定することが可能である。では、早速レジストリエディタを起動する。ここでは、前回作成した「HKEY_CURRENT_USER\Software\test」キーを利用する。同キーを右クリックし、「アクセス許可」を選択すると現在のアクセス権を一覧表示できる。ここに「RESTRICTED」という名前で「読み取り」アクセス権が与えられた、見慣れないエントリがある。これはアプリケーションのレジストリ使用を制限するための、特殊なセキュリティ構成要素(セキュリティプリンシパル)である。

サブキーのアクセス権は、NTFSファイルシステムと同様に上位のレジストリキーから「継承」できる。「アクセス許可」の「詳細設定」をクリックすると、「継承元」に「CURRENT_USER」と表示される。これはレジストリハイプ「HKEY_CURRENT_USER」のアクセス権が、「HKEY_CURRENT_USER\Software\test」にも適用されるということを表している。アクセス権の継承を制御するのは、詳細設定の「アクセス許可」タブにある2つのチェックボックスである。それぞれの意味と機能は次のとおり。

  
■子オブジェクトに適用するアクセス許可エントリを親から継承し、それをここで明示的に定義されているものに含める

このチェックボックスをオンにすると、上位のレジストリキーからアクセス権を受け継ぎ、現在アクセス権を表示しているレジストリ(サブ)キーのアクセス権を設定する。また、サブキーに独自のアクセス許可エントリを追加すると、上位から継承されたアクセス権と独自のアクセス権が混在して表示される。このチェックボックスはデフォルトでオンになっているので、「test」サブキーは上位の「Software」キーのアクセス権を継承する。「test」サブキーには独自のアクセス許可エントリはない。このとき上位キーの「Software」キーは、レジストリハイプ「HKEY_CURRENT_USER」のアクセス権を継承し、独自のアクセス許可エントリはない。その結果、「test」サブキーは「HKEY_CURRENT_USER」のアクセス権をそのまま継承することになる。

ちなみに、チェックボックスをオフにするとアクセス榛が継承されなくなる。「セキュリティ」ダイアログボックスで「コピー」をクリックして継承元のアクセス権をコピーするか、「削除」をクリックしてサブキーに独自のアクセス許可エントリを新規作成する。

  
■子オブジェクトすべてのアクセス許可エントリを、ここに表示されているエントリで子オブジェクトに適用するもので置換する

かなり意味がわかりにくい説明文だが、要約すると「現在アクセス権を表示しているキーではなく、その下にあるすべてのサブキーのアクセス権を、現在アクセス権を表示しているキーのアクセス権設定で置き換える」ということである。このチェックボックスはデフォルトでオフになっている。ちなみに、詳細設定ダイアログボックスの「監査」タブで監査
エントリを追加すると、フォルダやファイルの監査と同様にレジストリを監査が有効になる。これで、ユーザーやアプリケーションのレジストリアクセスをセキュリティイベントログに記録できる。「監査」タブにはアクセス権と同様に、監査エントリの継承に関するチェックボックスが2つ用意されている。デフォルトで上位のキーの監査エントリを継承するよう設定されているので、上位のキーに監査を設定すればサブキーも監査対象に含めることができる。




10.「SubInACL」コマンドでアクセス権を編集する

もう1つ、レジストリエディタを使用し、GUIでアクセス権を編集する方法があるが、決められたアクセス権を複数のユーザーやPCに設定するには手間がかかりすぎる。そこでリソースキットに収録されている「SubInACL」コマンドを使って、アクセス権の編集をバッチ処理してみる。「SubInACL」コマンドは、マイクロソフトのダウンロードセンターから入手する。同社のダウンロードセンターのWebサイトを開いて、「Microsoft U.S.ダウンロードセンターも検索する」をオンにして、キーワード「SubInACL」でチェックボックスを検索する。

  ・SubInACL.exe

一時フォルダに保存した「Subinacl.msi」パッケージファイルをダブルクリックすると、「C:\Program Files\Windows Resourcr Kits\Tools」フォルダに「Subinacl.exe」「Subinacl.htm」「ToiolDownloadreadme.htm」の3つのファイルが作成される。「Subinacl.htm」はHTML型式のヘルプファイルである。「SubInACL」コマンドを使う前に読んでおく。コマンドプロンプトを開いてカレントフォルダを「C:\Program Files\Windows Resource Kits\Tools」に移動すると、「SubInACL」コマンドを実行できる。文法は次のとおり。

  
Subinacl [オプション] オブジェクトタイプ オブジェクト名 [アクション=パラメータ]

@オプション

レジストリのアクセス権編集時に役立つ「/outputlog=ファイル名」「/errorlog=ファイル名」がある。いずれも指定したファイルに操作のログを残してくれる。


Aオブジェクトタイプ

レジストリハイプのアクセス権を編集するには「/keyreg」を、サブキーのアクセス権を編集するには「/subkeyreg」を、それぞれ指定する。ただし、実際にはどちらを指定してもサブキーのアクセス権を編集できるようである。


Bアクションとパラメータ

アクションとパラメータは、例えば「/grant=<ユーザ一名>=<アクセス権>」の型式で指定する。

●(左)アクションとパラメータ。パラメータの最後に「=」を付けるか付けないかで実行結果が変わるので、慎重にパラメータを設定する

●(右)アクセス権の指定。「R(読み取り)」アクセス権には、「Q(値の照会)」「E(サブキーの列挙)」「Y(通知)」「A(読み取り制御)」の4つの詳細アクセス権が含まれる


操作内容 アクションとパラメータ
アクセス権を表示する(デフォルト) /display=dacl
監査の設定を表示する /display=sacl
所有者を表示する display=owner
所有者を設定する setowner=<所有者名>
アクセス許可のエントリを追加編集する /grant=<ユーザ名>=<アクセス権>
フルコントロールのアクセス権を許可する /grant=<ユーザ名>
アクセス拒否のエントリを追加編集する /deny=<ユーザ名>=<アクセス権>
フルコントロールのアクセスを拒否する /deny=<ユーザ名>
アクセス許可と拒否のエントリを削除する /grant=<ユーザ名>=
または
/deny=<ユーザ名>=
アクセス許可と拒否のエントリを全て削除する /perm
成功の監査を設定する /sgrant=<ユーザ名>=<アクセス権>
すべての成功の監査を設定する /sgrant=<ユーザ名>
失敗の監査を設定する /sdeny=<ユーザ名>=<アクセス権>
すべての失敗の監査を設定する /sdeny=<ユーザ名>
成功と失敗の監査を設定する /sallowdeny=<ユーザ名>=<アクセス権>
すべての成功と失敗の監査を設定する /sallowdeny=<ユーザ名>
監査のエントリ消去する /sgrant=<ユーザ名>=
または
/sdeny=<ユーザ名>=
監査のエントリをすべて削除する /audit
AA
アクセス権指定 意味
F フルコントロール
R 読み取り
 値の照会
 サブキーの列挙
 通知
 読み取り制御
A 読み取り制御
Q 値の照会
S 値の設定
C サブキーの作成
E サブキーの列挙
Y 通知
L リンクの作成
D 削除
W DACの書き込み
O 所有者の書き込み



ユーザー名はグループ名でもよく、「ドメイン名\ユーザ一名」の型式でも指定できる。アクセス権は右表のように、あらかじめ組み合わせが決められている「F(フルコントロール)」と「R(読み取り)」を指定する。そのほかにも「Q(億の照会)」や「D(削除)」などの詳細なアクセス権を組み合わせて「/grant=<ユーザ一名>=QD」のように指定することも可能である。なお、パラメータの「=<アクセス権>」部分を省略して「/grant=<ユーザ一名>」と指定すると、自動的にフルコントロールが設定される。しかし、「<アクセス権>」の部分だけを省略して「/grant=<ユーザ一名>=」と指定すると、エントリが削除されてしまう。最後に「=」を付けるか付けないかで結果がまったく変わってしまうので注意する。アクセス権は、ユーザーやグループごとに設定したアクセス権を列挙して構成される。ユーザーやグループ個別のアクセス権を「AccessControlEntry(ACE)」と呼び、アクセス権全体を「AccessControlList(ACL)」と呼んで区別している。さらに、1つのACEの中には、「値の照会」「削除」などのアクセス権の要素が列挙される。例えば「/grant=user1=QD」アクションを実行すると、ACLに「user1」のACEが追加され、「値の照会」と「削除」の権限が「user1」に与えられる。レジストリのACLには「Discretionary ACL(DACL)」と「SystemACL(SACL)」の2種類がある。DACLは「随意アクセス制御リスト」と訳され、レジストリのアクセス権を構成するACLである。もう1つのSACLは監査の設定を制御している。アクション「/display==dacl」を実行したときに表示される「/pace」は、「Permission ACE」のことである。また、「/display=sacl」の実行時に表示される「/aace」は「Audit ACE」を指している。

・「test」サブキーのアクセス権を表示する

Subinacl /subkeyreg HKEY_CURRENT_USER\Software\test

C:\Program Files\Windows Resource Kits\Tools&gt;Subinacl /subkeyreg HKEY_CURRENT_US<BR>ER\Software\test

==============================================
*KeyReg HKEY_CURRENT_USER\Software\test
==============================================
/control=0x0
/owner       =xppro\user1
/primary group   =xppro1\なし
/audit ace count  =0
/perm. ace count  =8
/pace =xppro1\user1  ACCESS_ALLOWED_ACE_TYPE-0x0
  Type of access:
    Full Control
  Detailed Access Flags :
    HKEY_QUERY_VALUE-0x1    KEY_SET_VALUE-0x2   KEY_CREATE_SUB_KEY-0x4
    HKEY_ENUMERATE_SUB_KEYS-0x8 KEY_NOTIFY-0x10    KEY_CREATE_LINK-0x20
     DELDETE-0x10000
    READ_CONTROL-0x20000    WRITE_DAC-0x40000   WRITE_OWNER-0x80000

/pace =xppro1\user1  ACCESS_ALLOWED_ACE_TYPE-0x0
    CONTAINER_INHERIT_ACE-0x2  INHERIT_ONLY_ACE-0x8  OBJECT_INHERIT_ACE-0x1
  SubKey - Type of Access:




・ユーザー「user2」に「読み取り」のアクセス権を与える
Subinacl /subkeyreg HKEY_CURRENT_USER\Software\test /grant=user2=R

C:\Program Files\Windows Resource Kits\Tools&gt;Subinacl /subkeyreg HKEY_CURRENT_US
ER\Software\test /grant=user2=R
Software\test : new ace for xppro1\user2
HKEY_CURRENT_USER\Software\test : 1 change(s)

Elapsed Time: 00 00:00:00<BR>Done:  1, Modified  1,Failed  0,Syntax errors  0
Last Done : HKEY_CURRENT_USER\Software\test

C:\Program Files\Windows Resource Kits\Tools>



・ユーザー「user2」の監査を設定する
Subinacl /subkeyreg HKEY_CURRENT_USER\Software\test /sallowdeny=user2

C:\Program Files\Windows Resource Kits\Tools>Subinacl /subkeyreg HKEY_CURRENT_US
ER\Software\test /audit

Elapsed Time: 00 00:00:00
Done:  1, Modified  1,Failed  0,Syntax errors  0
Last Done : HKEY_CURRENT_USER\Software\test

C:\Program Files\Windows Resource Kits\Tools>Subinacl /subkeyreg HKEY_CURRENT_US
ER\Software\test /sallowdeny=user2
Software\test : new ace for xppro1\user2
HKEY_CURRENT_USER\Software\test : 1 change(s)

Elapsed Time: 00 00:00:00
Done:  1, Modified  1,Failed  0,Syntax errors  0
Last Done : HKEY_CURRENT_USER\Software\test

C:\Program Files\Windows Resource Kits\Tools>



最後に監査の設定がレジストリエディタで表示されない場合は、次のように「/audit」アクションを実行して、先に監査エントリを削除してから「/sgrant」「/sdeny」「/sallowdeny」アクションを実行するとよい。

Subinacl /subkeyreg HKEY_CURRENT_USER\Software\test /audit




11.グループポリシーで設定を変更すればレジストリで編集するよりも安全&確実

WindowsXP Professionalの「グループポリシー」と「ローカルセキュリティポリシー」は、OS自身や「Internet Explorer(IE)」などの動作を決める大切な設定である。しかし、この2つに密接な関係があることは、あまり知られていない。ここではグループポリシーとレジストリの関係を、「レジストリモニタ」を使って視覚的に追跡してみる。

グループポリシーはユーザーアカウントの管理、ユーザーの権利や権限の設定、エクスプローラやコントロールパネル、IE、Windowsファイアウォールな抒)動作を決定する設定項目である。残念ながらWindows XP Home Editionには搭載されていない。管理ツールの「ローカルセキュリティポリシー」はセキュリティ関連のポリシーに特化しているが、これはグループポリシーの「コンピュータの構成」から「セキュリティの設定」だけを切り出したものである。グループポリシーを編集するには、スタートメニューから「ファイル名を指定して実行」を開き、コマンドラインに「Gpedit.msc」とタイプして「グループポリシーエディタ」を起動させる。「グループポリシー」ウインドウの左ペインには「コンピュータの構成」と「ユーザーの構成」がある。2つの内容は次のとおり。



@コンピュータの構成

ログオンするユーザーに関係なく、コンピュータに適用されるポリシー。「ようこそ」画面が表示される前に適用されるので、ユーザーがログオンしていない状態でも効果がある。ユーザーアカウントの管理に大きく関係しているのは、「アカウントポリシー」である。一方、ユーザーの権利や権限の設定は「アカウントポリシー」と同じ階層にある「ローカルポリシー」で行う。


Aユーザーの構成

ユーザーがログオンすると適用されるポリシー。本来はActiveDirectoryドメイン環境で「組織単位(OU)」を使ってユーザーを区別したときに効果を発揮する。ローカルコンピュータのグループポリシー(ローカルグループポリシー)にある「ユーザーの構成」は、コンピュータに登録されたすべてのユーザーに適用される。そのため、ユーザがログオンしていなければ「コンピュータの構成」だけが有効で、ログオン後は「コンピュータの構成」と「ユーザーの構成」の両方が有効になる。では実際にグループポリシーの効果を知るべく、パスワードの長さに関するポリシーを変更してみる。WindowsXPではパスワードなしでもログオンできるが、セキュリティを確保するためには8文字以上のパスワードを設定することが望ましい。次の手順で「パスワードの長さ」ポリシーを操作し、長さの制限を変更する。

 @スタートメニューから「ファイル名を指定して実行」を開き、コマンドラインに「Gpedit.msc」とタイプし、「グループポリシー」を開く。
 A「グループポリシー」の左ペインで、「コンピュータの構成」→「Windowsの設定」→「セキュリティの設定」→「アカウントポリシー」→「パスワードポリシー」を開く。
 B右ペインにある「パスワードの長さ」をダブルクリックし、「パスワードの長さのプロパティ」を開く。デフォルトでは「7文字以上」になっている。
 C「パスワードの長さ」の欄に「8」と入力する。ちなみに、数値が「0」のときだけ「パスワードを必要としません」と表示される。
 D「OK」をクリックして「パスワードの長さのプロパティ」を閉じ、「グループポリシー」ウインドウも閉じる。「グループポリシー」ウインドウを閉じると、即座にポリシーの変更が
  反映される。 
 Eコントロールパネルにある「ユーザーアカウント」で、自分のパスワードを空のパスワードにして、パスワードの変更が拒否されることを確認する。

初めからパスワードを設定しておらず、新たにパスワードを設定した場合は、「ようこそ」画面でパスウードを入力しないとログオンできなくなる。自動的にログオンできるようにするには、自動ログオンを再設定する。

グループポリシーの設定は、最終的にローカルコンピュータのレジストリを変更している。基本的に1つのポリシーは1つのレジストリ値を変更するが、関連する複数のレジストリ値を同時に変更するポリシーもある。OS自身や付属アプリケーションは、レジストリを読み取り、ポリシーに則した動作を実行する。つまり、レジストリから動作変更情報を読み取る機能のないアプリケーションには、グループポリシー変更の効果がないのである。

レジストリエディタでレジストリを直接編集すると、操作をミスする危険性が残る。なるべくグループポリシーで設定するほうが安全である。グループポリノシーでは設定値の有効範囲のチェックも行われるので、無効な億を設定してしまうことがない。「未構成」「有効」「無効」の3択タイプのポリシーであれば、「未構成」を選ぶだけで簡単にデフォルト値に戻すことができる。ちなみに、Windows XP SP2ではグループポリシーに多数のポリシーが追加されている。レジストリも大きく変更されているようである。どのレジストリ値が追加されたのか、どんな値が設定されたのかを知りたければ、実際にアプリケーションやグループポリシーで設定を変更し、レジストリエディタでチェックしてみるとよい。




12.フリーソフトのレジストリモニタを変更を追跡する

Windowsやアプリケーションの設定を変更すると、通常「HKEY_LOCAL_MACHINE」ハイプと「HKEY_CURRENT_USER」ハイプのどちらかのサブキーに保存される。コンピュータ全体に関わる設定であれば「HKEY_LOCAL_MACHINE」ハイブ、ログオン中のユーザー独自の変更なら「HKEY_LOCAL_MACHINE」ハイブとなる。この法則を基に、おおよそのレジストリキーの見当を付けてチェックしていくのが一般的である。しかし、複数のレジストリ値が同時に変更されるケースもあるので、「レジストリモニタ」を使用して変更されたレジストリ値を徐々に放り込んでいくと効率的だろう。ここでは、パスワードの連続人力ミスを検出して不正なログオンを防止する「アカウントロックアウトのしきい値」ポリシーを例に、ポリシーがどのようにレジストリに反映されるか、レジストリモニタを使用して調べてみる。今回使用するのは、フリーソフトの「Regmon」である。ダウンロードした「Ntregmon.zip」ファイルを適当なフォルダに展開し、「Regmon.exe」を起動するとレジストリの監視が開始される。ものすごいスピードでスクロールする部分が、現在参照されているレジストリ値である。アプリケーションのウインドウを切り替えたり位置を変えたりするだけで、膨大なレジストリ値が参照され、システム全体の動作が遅くなる。まずは、監視を開始する前にレジストリモニタを調整しておく。ポイントは次のとおり。

 ・ツールバーの「File」にある「Capture.Events」のチェックを外して、モニタを停止させる。
 ・ツールバーの「Edit」にある「ClearDisplay」をクリックして、表示を消去する。
 ・ツールバーの「Options」にある「Filter/Highlight」をクリックして「RegmonFilter」ダイアログボックスを開き、「LogWriters」と「LogSuccesses」の2つを除くすべてのチェック
  ボックスをオフにする。チェックボックスは項目名の右側にあるので、間違えないないようにする。

レジストリモニタのフィルタで「LogWriter」と「LogSuccess」だけを有効にしたのは、グループポリシーを変更するとレジストリに「Write」(書き込み)操作を行うことがあらかじめわかっているためである。しかも、コンピュータの管理者権限を持っているアカウントで操作していれば「SUCCESS」(成功)することもわかっている。これらを監視対象から外し、目的を放り込んで追跡しやすくしておく。レジストリモニタの準備ができたら、変更されるレジストリを突き止める。操作手順は次のとおり。

 @スタートメニューから「ファイル名を指定して実行」を開き、コマンドラインに「Gpedit.msc」とタイプし、「グループポリシー」を開く。
 A「グループポリシー」の左ペインで、「コンピュータの構成」→「Windowsの設定」→「セキュリティの設定」→「アカウントポリシー」→「アカウントロックアウトのポリシー」
   を開く。
 B右ペインで「アカウントロックアウトのしきい値」をダブルクリックし、「アカウントのロックアウトのしきい値」を「5」に変更し、「OK」をクリックする。
 C「提案された値は変更します」ダイアログボックスが開き、「ロックアウトカウントのリセット」と「ロックアウト期間」も合わせて変更されることが提示される。ここではまだ
   「OK」をクリックしてはいけない。
 Dレジストリモニタに表示を切り替え、ツールバーにある「File」→「CaptureEvents」を選択し、レジストリの監視を開始する。
 E「提案された値は変更します」ダイアログボックスに表示を切り替えて「OK」をクリックする。
 F再度、レジストリモニタに切り替えて、「File」→「Capture Events」で監視を停止する。

理想的なモニタでは、「lsass.exe」が実行した「SetValue」と「FlushKey」リクエストの2行だけが記録されるはずである。1行目の「SetValue」リクエストがレジストリの書き込み操作で、「Path」と「Other」にレジストリ値と設定値が表示されている。つまり「アカウントロックアウトのポリシー」は、「HKEY_LOCAL_MACHINE\SAM\SAM」レジストリキーの下にある、「F」という名前のレジストリ値を変更していることが判明した。


●「Request」が「SetValue」と表示されたレコードが、変更されたレジストリ値を示している

# Time Process Request Path Result Other
1 21.30503989 lsass.exe:668 SetValue HKLM\SAM\SAM\Domains\Account\F SUCCESS 02 00 01 00 00 00
2 21.32038485 lsass.exe:668 FlushKey HKLM\SAM\SAM SUCCESS Key: 0xE175A470


レジストリモニタには表示された行をダブルクリックすると、レジストリエディタが起動し、該当のレジストリ値を表示する機能がある。しかし、1行目の「SetValue」レコードをダブルクリックしても値は表示されない。実は「HKEY_LOCAL_MACHINE\SAM\SAM」サブキーより下のレジストリキーは、WindowsXPのセキュリティ機能を管理する非常に重要なレジストリなのである。そのため、システムだけが読み書きできる特別なアクセス権が設定されている。こうして見るとWindowsXPのレジストリには、管理者でさえも触れないヒミツが隠されているようである。未知の世界であるレジストリの深淵を探るのはパワーユーザーにとって魅力的だが、システムをクラッシュさせる危険もある。バックアップの準備をしていない状態では、アクセス権や設定値の変更はしないようにする。

AIX、RS/6000、UNIX、Linux