Share via


VSS でのレジストリのバックアップと復元の操作

Windows レジストリ サービスでは、レジストリ ライターと呼ばれる VSS ライターがサポートされています。これにより、要求者はシャドウ コピーされたボリュームに格納されているデータを使用してシステム レジストリをバックアップできます。 レジストリ ライターの詳細については、「 In-Box VSS Writers」を参照してください。

レジストリ ライターは、レジストリのインプレース バックアップと復元を実行します。 さらに、レジストリ ライターはシステム ハイブのみを報告します。ユーザー ハイブは報告されません。

Windows Server 2003: レジストリ ライターは、中間リポジトリ ファイル (スピット ファイルとも呼ばれます) を使用してレジストリ データを格納します。 さらに、レジストリ ライターはシステム ハイブとユーザー ハイブを報告します。

レジストリ ライターのライター ID は AFBAB4A2-367D-4D15-A586-71DBB18F8485 です。

Windows XP: レジストリ ライターはありません。 レジストリ データは、起動可能な状態ライターによって報告されます。そのライター ID は F2436E37-09F5-41AF-9B2A-4CA2435DBFD5 です。

Note

Microsoft は、Windows (すべてのリリース) でオンライン システム状態の復元を実装するための開発者または IT プロフェッショナルのテクニカル サポートを提供していません。 Microsoft が提供する API と手順を使用してオンライン システム状態の復元を実装する方法については、 MSDN コミュニティ センターで入手できるコミュニティ リソースを参照してください。

 

Note

次の情報は、Windows Server 2003 および Windows XP にのみ適用されます。

 

VSS を使用したレジストリ バックアップ

レジストリ ライターは、システム\CurrentControlSet\コントロール\ハイブリストHKEY_LOCAL_MACHINEキー\によって定義された場所に、アクティブなレジストリ ファイルをエクスポートして保存します。

このレジストリ エントリの値の名前は、保存するレジストリ ハイブを識別し、値のデータはファイル (hive ファイル) を含むファイルを提供します。 Hive ファイルは、\Device\HarddiskVolumeX\パス\ファイル名の形式で指定されます。

たとえば、システム\CurrentControlSet\コントロール\ハイブリストHKEY_LOCAL_MACHINE\下に、\REGISTRY\MACHINE\SOFTWARE = \Device\HarddiskVolume1\Windows\System32\config\SOFTWARE が表示される場合があります。

レジストリ ライターを使用すると、ハイブ ファイルがシャドウ コピーの前にディスクに保存されます。

レジストリ ハイブをバックアップするとき、リクエスターは \Device\HarddiskVolumeX をボリュームのシャドウ コピーの デバイス オブジェクト 文字列に置き換えます。

Note

QueryDosDevice 関数を使用して、\Device\HarddiskVolumeX パスを同等の Win32 パスに変換できます。 詳細については、「 ファイル ハンドルからファイル名を取得する 」または「 ボリューム パス名を表示する」を参照してください

 

VSS 以外の Win32 API を使用したレジストリの復元

Note

レジストリの復元は、Windows Server 2016 以降ではサポートされていません。

オンライン (セーフ モードまたはフル オペレーティング システム) の復元の場合は、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\コントロール\セッション マネージャー\PendingFileRenameOperations レジストリ キーのサブキーを保持する必要があります。

MoveFileEx 関数と MoveFileTransacted 関数は、このレジストリ キーを使用して、dwFlags パラメーターのMOVEFILE_DELAY_UNTIL_REBOOT値を使用して名前が変更されたファイルに関する情報を格納します。

PendingFileRenameOperations レジストリ キーの内容を保持するには、バックアップ アプリケーションで RegLoadKey 関数を呼び出して、アクティブなレジストリに復元するレジストリ ファイルを接続する必要があります。 バックアップ アプリケーションでは、さまざまなレジストリ関数を使用して、必要なキーと値を読み込まれたハイブにコピーできます。 コピーが完了したら、 RegFlushKey 関数と RegUnloadKey 関数を呼び出す必要があります。

オフライン (Windows Recovery Environment または Windows PE) の復元では、 PendingFileRenameOperations レジストリ キーを優先する必要はありません。

Windows Server 2003 で VSS 以外の Win32 API を使用したレジストリの復元

Note

次の情報は、Windows Server 2003 で実行されるディザスター リカバリー (ベア メタル回復とも呼ばれます) に関連する復元操作にのみ適用されます。

 

レジストリを復元する場合、バックアップ アプリケーションは、一部のサブキーを現在のレジストリから復元するレジストリに移動する必要があります。

これを行うには、バックアップ アプリケーションで RegLoadKey を呼び出して、現在アクティブなレジストリに復元するレジストリ ファイルを接続します。 その後、さまざまなレジストリ関数を使用して、必要なキーと値を読み込まれたハイブにコピーできます。 コピーが完了すると、 RegFlushKeyRegUnloadKey が呼び出されます。

復元時に上書きしてはならない、 HKEY_LOCAL_MACHINE\SYSTEMの下 のレジストリ キーを復元アプリケーション (リクエスター) に示すレジストリ キーがあります。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

システム状態の復元プロセスの一部には、以前にバックアップされたレジストリの復元が含まれます。

Windows オペレーティング システムの一時的なバージョンをインストールするプロセスでは、新しくインストールされた システム ハイブ にキーが確立され、その値は復元操作から存続する必要があるため、バックアップ アプリケーションは、HKEY_LOCAL_MACHINE\SYSTEMハイブを復元する際に特別な注意を払う必要があります。

たとえば、交換システムに元のシステムとは異なるネットワーク インターフェイス カードがある場合、前のカードの元のキーを復元すると、予期しない結果が発生します。 これは、プラグ アンド プレイ サービスによって適切なサービスとドライバーのレジストリ エントリが検出され、レジストリに配置されているためです。 これらの値は、システムの復元後に適切に起動するために保持する必要があります。

このセクションでは、バックアップ アプリケーションが、 HKEY_LOCAL_MACHINE\SYSTEM hive の復元を実行するときに保持するキーとファイルを検出する方法について説明します。 場合によっては、新しくインストールされたインストール ハイブから復元するハイブにキーをプログラムでコピーする必要があります。 それ以外の場合は、製品のレジストリ キーが置き換えられないようにすることは、製品の INF 構成ファイルでこのようなキーを指定するのと同じくらい簡単です。

保持するキー (およびキー データ) は、 HKEY_LOCAL_MACHINE\SYSTEM ハイブの 下に列挙されます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

key をREG_MULTI_SZ文字列のセットとして使用します (このドキュメントでは キー文字列 と呼ばれます)。

バックアップ アプリケーション (リクエスター) は、任意のアプリケーションまたはサービスでいつでも値を追加できるため、アクティブなレジストリと新しく復元されたレジストリ内のこれらのキーの値を調べる必要があります。

バックアップ アプリケーションによるキー文字列の解釈方法は、そのターミナル文字によって決まります。

  1. 円記号 ('\') で終わるキー文字列は、サブキーとして解釈されます。 このような部分文字列が検出された場合、バックアップ アプリケーションはすべてのデータとすべての下位キーを保持する必要があります。

    たとえば、次の例では、すべての下位キーとデータを復元操作全体で保持するように指定します。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmio\boot情報\

    このためには、このキーとすべての下位キーとデータを、既存のレジストリ (つまり、Windows のインストールによって作成されたもの) から新しく復元されたレジストリにコピーする必要があります。 これはキー 置換 操作と呼ばれます。 この操作により、復元されたレジストリ内の対応するキーが置き換えられます。

  2. 終了文字がアスタリスク ('*') であるキー文字列は、すべてのサブキーをマージするように指定します。 たとえば、キー文字列は次のようになります。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\*

    は、既存のレジストリ内のサービス キー (Windows のインストールによって作成されたものなど) を復元されたレジストリにマージする必要があることを指定します。 これは キーマージ 操作と呼ばれ、既存のハイブと復元されたハイブの両方にサブキーが存在する場合、復元されたディレクトリ内のキーは次の例外で保持されます。

    • 既存のハイブのサブキーに "start" という名前の値が含まれている場合、復元されたサブキーには含まれません。
    • 既存のハイブと復元されたハイブの両方のサブキーに "start" という名前の値が含まれており、既存のハイブの数値が小さい場合。

    レジストリの "start" 値は、サービスまたはドライバーがいつ開始されるかを指定し、0 から 4 の数値を指定できます。 値が小さいほど、起動プロセスが早くサービスが開始されます。

    このキーが既存のディレクトリと復元されたディレクトリの両方に存在する場合は、各ハイブの開始キーの値を調べる必要があります。 既存のハイブの値が復元されたディレクトリの値より小さい場合は、低い値を保持する必要があります。

    もう一度、このキーは、サービスまたはドライバーをブート時、システム時、手動、自動、または無効にするかどうかを判断するために使用されます。 小さい値は、以前の開始時刻を表します。 サービスまたはドライバーが次の起動時に正しく起動されるように、新しいレジストリに以前の開始時刻を適用する必要があります。

  3. 終了文字が円記号でもアスタリスクでもないキー文字列は、保持されるレジストリ値として解釈されます。

    たとえば、キー文字列は次のようになります。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

    キーをプログラムで保持できるメカニズムには、Win32 レジストリ API が含まれます。 たとえば、次に 1 つのアルゴリズムを列挙します。

    1. バックアップされたシステム ハイブ ファイルをファイルに復元します。 この例では、名前を System.reg にします。

    2. RegLoadKey を使用して、一時名で System.reg をHKEY_LOCAL_MACHINEに読み込みます。 たとえば、そのような名前の 1 つは次のようになります。

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

    3. 両方のレジストリ コピーから KeysNotToRestore サブキーの値を列挙し、リストのスーパーセットを作成します。 既存のキーから各キーをコピーします。

      HKEY_LOCAL_MACHINE\SYSTEM

      キーを

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      上で説明したセマンティクスに従ってキー。

    4. 完了したら、 RegFlushKey&RegUnloadKey エントリ ポイントを使用して、

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      キーを System.reg に戻します。

    5. 最後に、 RegReplaceKey を 使用して、System.reg が を置き換えることを指定します。

      HKEY_LOCAL_MACHINE\SYSTEM

      hive ファイル、SYSTEM。