オフライン レジストリ ライブラリは、アクティブなシステム レジストリの外部でレジストリ ハイブを変更するために使用されます。
オフライン レジストリ ライブラリは、オペレーティング システム イメージのサービスなどのレジストリ更新シナリオを対象としています。 オフライン レジストリ関数には、標準のレジストリ関数では使用できない次の機能が用意されています。
- オフライン レジストリ関数を使用して、サポートされている任意のレジストリ形式でレジストリ ハイブを変更できます。 標準レジストリ関数は、アクティブなレジストリ ハイブにのみ変更を加えることができます。変更は、システム上で実行されている Windows のバージョンと互換性がある必要があります。
- オフライン レジストリ ライブラリでは、レジストリ ハイブ ファイルを開く読み取りアクセス権と、ファイルを保存するための書き込みアクセス権のみが必要です。 ハイブ内のオブジェクトに対して他のアクセス チェックは実行されないので、標準のユーザー特権で Hive を変更できます。 標準レジストリ関数では、アクティブ なレジストリへのハイブの読み込みは、管理アクセスを必要とする特権操作です。
オフライン レジストリ関数は、次の理由でシステム レジストリ関数の代わりに使用しないでください。
- オフライン レジストリ関数を使用してプロセス間でレジストリ ハイブを共有することはできません。
- オフライン レジストリ関数では単純なロックが使用され、マルチスレッド アプリケーションのパフォーマンスが大幅に低下する可能性があります。
- オフライン レジストリ関数で行われた変更は、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 呼び出されない限り、変更は保持されません)。Hive を保存した後、ORCloseHive 関数を使用して Hive を閉じ、それに関連付けられているリソースを解放します。
オフライン レジストリ ハイブは、OROpenHive 関数を使用して開かれた場合にのみ検証されます。 ハイブが破損している場合、操作は単に失敗します。ハイブの修復は試行されません。 hive 内のオブジェクトに対するアクセス チェックは、RegLoadKey 関数を使用してアクティブ レジストリに読み込まれるまで実行されません。
オフライン レジストリ関数は、定義済みキーをサポートしていません。
オフライン レジストリ関数に渡されるすべてのキーと値の名前の文字列は、Unicode である必要があります。
関連トピック