Share via


アプリケーション ハイブのレジストリ操作のフィルター処理

ユーザー モード アプリケーションは、レジストリ内のアプリケーション ハイブを使用して、アプリ固有の状態データを格納します。

レジストリ フィルター ドライバーは、アプリケーション ハイブに対する レジストリ操作の RegistryCallback ルーチンの呼び出しを受け取ります。 これらの呼び出しでは、アプリケーション ハイブに対するレジストリ操作と、他の種類のレジストリ ハイブに対する操作は区別されません。

アプリケーション ハイブを読み込むには、アプリが RegLoadAppKey を呼び出します。

アプリケーション ハイブは、\\REGISTRY\\MACHINE または \\REGISTRY\\USER の下ではなく \\REGISTRY\\A の下に読み込まれます。

\\REGISTRY\\A を走査する方法はない点に注意してください。 \REGISTRY\A の下でキーを開こうとすると、エラー ステータス STATUS_ACCESS_DENIED で失敗します。

アプリケーション ハイブのキーにアクセスするため、アプリは RegLoadAppKey を呼び出すときに受け取るハンドルを使用します。

オペレーティング システムは、ハイブに対するすべてのハンドルが閉じられた後、アプリケーション ハイブを自動的にアンロードします。

各キーが独自のセキュリティ記述子でセキュリティ保護されている他の種類のレジストリ ハイブとは対照的に、アプリケーション ハイブのセキュリティはハイブ ファイルのセキュリティ記述子に基づいています。 これは、次のことを意味します。

  • アプリケーション ハイブ内の個々のキーに対してセキュリティ記述子を設定しようとすると、エラー ステータス STATUS_ACCESS_DENIED で失敗します。
  • ハイブの読み込みに成功したエンティティは、ハイブ全体を変更できます。

作成キー操作とオープン キー操作 (RegNtPreOpenKeyRegNtPreOpenKeyExRegNtPreCreateKeyRegNtPreCreateKeyEx 通知値で示されています) を処理するレジストリ フィルター ドライバーは、絶対パス (\\REGISTRY\\A\\ から始まります) を使用してアプリケーション ハイブを開かないように注意する必要があります。レジストリ マネージャーのみがこれを行えます。 レジストリ フィルター ドライバーがこの方法でアプリケーション ハイブを開こうとすると (たとえば、ZwOpenKey ルーチンを呼び出すことにより)、操作はエラー ステータス STATUS_ACCESS_DENIED で失敗します。

絶対パス名の文字列は、REG_CREATE_KEY_INFORMATIONREG_CREATE_KEY_INFORMATION_V1REG_OPEN_KEY_INFORMATION、または REG_OPEN_KEY_INFORMATION_V1 構造の CompleteName メンバーに表示されます。