<Return[R]><Top>

RegRestoreKey

Declare Function Api_RegRestoreKey& Lib "advapi32" Alias "RegRestoreKeyA" (ByVal hKey&, ByVal lpFile$, ByVal dwFlags&)

Declare Function RegRestoreKey Lib "advapi32" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long

指定されたファイル内のレジストリ情報を読み取り、指定されたキーを上書きコピーする。このレジストリ情報で、キーとそのすべてのサブキーを指定する。

パラメータ
hKey
    現在開いているキーのハンドルを指定する。

    代わりに、あらかじめ定義されている次の予約済みハンドルのいずれかを指定することもできる。
    HKEY_CLASSES_ROOT
    HKEY_CURRENT_CONFIG
    HKEY_CURRENT_USER
    HKEY_LOCAL_MACHINE
    HKEY_USERS
    このキーとその子孫キーが保持しているすべての情報は、lpFile パラメータで指定したファイル内の情報で上書きされる。
lpFile
    レジストリ情報を保持しているファイルの名前を表す、NULL で終わる文字列へのポインタを指定する。通常、RegSaveKey 関数を使って

    作成したファイルを指定する。
dwFlags
    キーを復元する方法をを示すフラグを指定する。次の値のいずれかを指定する

    値                                                 

意味                                                                                                                  

    REG_FORCE_RESTORE

 

このフラグを指定すると、hKey パラメータで指定したキーに関連するハンドルが開いている場合、またはレジストリ階層でそのキーよりも下に位置するサブキーのハンドルが開いている場合でも、復元操作を実行する。

    REG_NO_LAZY_FLUSH

 

このフラグを指定すると、hKey パラメータで指定したキーまたはハイブの遅延フラッシュ(遅延書き込み)を行わない。自動的にフラッシュすることもなく、一定の時間が経過した後に定期的にフラッシュすることもない。

    REG_REFRESH_HIVE

 

 

 

このフラグを指定すると、hKey パラメータが指すハイブ全体を、直前のフラッシュが行われた直後の状態へ復元する。このハイブに対する遅延フラッシュを禁止しておかなければならない(あらかじめこのパラメータで REG_NO_LAZY_FLUSH を指定して、RegRestoreKey 関数を呼び出しておく)。また、呼び出し側に TCB 特権を割り当てておかなければならないし、hKey パラメータで、ハイブのルート(HKEY_LOCAL_MACHINE など)を指定しなければならない。

    REG_WHOLE_HIVE_VOLATILE

 

このフラグを指定すると、(メモリのみに格納される)揮発性の一連のレジストリ情報セット(ハイブ)を新しく作成する。hKey パラメータで、HKEY_USERS または HKEY_LOCAL_MACHINE を指定しなければならない。


戻り値
    関数が成功すると、ERROR_SUCCESS が返る。
    関数が失敗すると、Winerror.h ヘッダーファイル内で定義されている、0 以外のエラーコードが返る。

    FORMAT_MESSAGE_FROM_SYSTEM フラグを指定して 関数を呼び出すと、エラーの一般的な説明を取得できる。

解説
    hKey パラメータで指定したキーに所属するサブキーのいずれかが開いている場合、RegRestoreKey 関数は失敗する(ただし、dwFlags パラ

    メータで REG_FORCE_RESTORE フラグを指定すると、このような場合でも復元を強制的に行う)。また、呼び出し側プロセスに

    SE_RESTORE_NAME 特権がない場合も、この関数は失敗する。
    この関数は、hKey パラメータで指定したキーに所属するサブキーとレジストリエントリを、lpFile パラメータで指定したファイルのトップレベルキ

    ーに所属するサブキーとレジストリエントリで置き換える。このファイル内のトップレベルキーは、どのような名前であってもかまわない。たとえ

    ば、hKey パラメータでキー A を指定したときに、その下にサブキー B と C が存在しているとする。一方、lpFile パラメータで指定したファイ

    ル内にキー X があり、その下にサブキー Y と Z が存在していると仮定する。RegRestoreKey 関数を呼び出した後は、レジストリのキー A

    の下に、サブキー Y と Z が存在している。同様に、A のすぐ下のレジストリエントリは、X のすぐ下のレジストリエントリによって置換され

    る。
    レジストリエディタ(Regedt32.exe または Regedit.exe)は、ここで言う「レジストリエントリ」を「値」(英語版は Value)と呼んでいる。どちらも

    同じものを意味していて、「名前」(レジストリエントリ名)と「データ」(レジストリエントリのデータ)で構成されている。
    この関数は、lpFile パラメータで指定したファイルが保持している新しい情報を使って、hKey パラメータで指定したキーの内容全体を置き換

    える。ただし、キーの名前は変化しない。
    hKey パラメータでリモートコンピュータのキーを指定した場合、lpFile パラメータで指定したパスは、リモートコンピュータを基準とする相対パ

    スを意味する。