オフライン レジストリ ライブラリについて
オフライン レジストリ ライブラリは、アクティブなシステム レジストリの外部でレジストリ ハイブを変更するために使用されます。
オフライン レジストリ ライブラリは、オペレーティング システム イメージのサービスなどのレジストリ更新シナリオを対象としています。 オフライン レジストリ関数には、標準レジストリ関数では使用できない以下の機能が用意されています。
- オフライン レジストリ関数を使用すると、サポートされている任意のレジストリ形式でレジストリ ハイブを変更できます。 標準レジストリ関数は、アクティブなレジストリ ハイブにのみ変更を加えることができます。変更は、システムで実行されている Windows のバージョンと互換性がある必要があります。
- オフライン レジストリ ライブラリには、レジストリ ハイブ ファイルを開く読み取りアクセス権と、ファイルを保存するための書き込みアクセス権のみ必要です。 ハイブ内のオブジェクトに対して他のアクセス チェックは実行されないため、標準ユーザー特権でハイブを変更できます。 標準レジストリ関数では、アクティブなレジストリへのハイブの読み込みは、管理アクセスを必要とする特権操作です。
オフライン レジストリ関数は、次の理由のため、システム レジストリ関数の代わりに使用しないでください。
- オフライン レジストリ関数を使用してプロセス間でレジストリ ハイブを共有することはできません。
- オフライン レジストリ関数では単純なロックが使用されるため、マルチスレッド アプリケーションのパフォーマンスが大幅に低下する可能性があります。
- オフライン レジストリ関数で行われた変更は、ORSaveHive 関数が呼び出されるまで保存されません。
アプリケーションでは、システム レジストリのセキュリティ要件をバイパスするためにオフライン レジストリ関数を使用しないでください。 ハイブを読み込むには、RegLoadKey 関数に必要な特別な特権を持たないアプリケーションで RegLoadAppKey 関数を使用することができます。
Windows Server 2003 および Windows XP: RegLoadAppKey 関数はサポートされていません。
オフライン レジストリ ハイブは、オフライン レジストリ関数を使用してメモリに読み込まれているレジストリ ハイブです。 空のオフライン レジストリ ハイブを作成するには、ORCreateHive 関数を使用します。 既存のレジストリ ハイブを変更するには、RegSaveKey または RegSaveKeyEx 関数を使用して、アクティブなシステム レジストリからファイルにハイブを保存し、OROpenHive 関数を使用してファイルを開きます。
ORCreateHive 関数と OROpenHive 関数は、オフライン レジストリ ハイブのルート キーへのハンドルを返します。 このハンドルは、次の例外を除き、オフライン レジストリ ハイブ内の他のキーへのハンドルと同じように使用できます。ORCreateKey 関数と OROpenKey 関数を使用して、ルート キーへのハンドルを返すことはできません。ORCloseKey 関数を使用して、ルート キーを閉じることはできません。ORDeleteKey 関数を使用して、ルート キーを削除することはできません。 いずれの場合も、関数は ERROR_INVALID_PARAMETER で失敗します。
ORCreateKey 関数を使用して開いているオフライン レジストリ ハイブにキーを追加し、ORSetValue 関数を使用してキーの値を設定します。 オフライン レジストリ ライブラリでは、キーと値の列挙、取得、削除、セキュリティや仮想化動作などのキー属性の設定など、他の基本的なレジストリ操作がサポートされています。 関数の一覧については、「オフライン レジストリ ライブラリ関数」をご覧ください。
開いているオフライン レジストリ ハイブに加えられた変更を保存するには、ORSaveHive 関数を使用してハイブをファイルに保存します。 (変更は、ORSaveHive が呼び出された場合を除き保持されません)。ハイブを保存した後、ORCloseHive 関数を使用してハイブを閉じ、それに関連付けられているリソースを解放します。
オフライン レジストリ ハイブは、OROpenHive 関数を使用して開かれた場合のみ検証されます。 ハイブが破損している場合、操作はそのまま失敗します。ハイブの修復は試行されません。 ハイブ内のオブジェクトに対するアクセス チェックは、RegLoadKey 関数を使用してアクティブ なレジストリにハイブが読み込まれるまで実行されません。
オフライン レジストリ関数は、定義済みのキーをサポートしていません。
オフライン レジストリ関数に渡されるすべてのキーと値の名前の文字列は、Unicode でなければなりません。
関連トピック