4.6 Windows リソース保護 (WRP)

4. 新機能や機能変更に伴う互換性問題

この章では、以下のような新機能や機能変更に伴う、互換性問題について紹介します。

WRP とは

WRP とは、Windows のリソースやコンポーネントを、読み取り専用で保護する機能です。OS が使用しているシステム ファイルやフォルダー、レジストリなどが、故意もしくは偶発的に不正に変更されてしまうと、システムが不安定になるなど、信頼性が損なわれる可能性があります。

そこで、これらのリソースに対しては、通常のユーザーからは変更されないよう読み取り専用として設定されます。これは、ビルトインの Administrator、Administrators、System アカウントでさえも例外ではありません。図 4-23 は、「explorer.exe」ファイルのアクセス許可を示しています。Windows Vista や Windows 7 では、管理者やシステム アカウントに対してさえも、「読み取りと実行」権しか与えられていないのが分かります。そのため、たとえ管理者でも上書き保存や、削除はできません。代わりに、「TrustedInstaller」ユーザーに対しては、「フル コントロール」権が許可されています。このユーザーは、「Windows モジュール インストーラー サービス」で使用されるユーザー アカウントです。

図 4-23: Windows XP と Windows Vista/Windows 7 のシステムファイルへのアクセス許可

図 4-23: Windows XP と Windows Vista/Windows 7 のシステム ファイルへのアクセス許可

保護されるリソースの一覧は、Microsoft の Web サイト「Protected Resource List」(英語)を参照してください。

ページのトップへ


既存アプリケーションへの影響と回避策

WRP によって保護されたシステム ファイルやレジストリに変更処理を試みると、アクセス拒否エラーが表示されます。アプリケーションのインストール時などに、エラーが起こることが多いと予想されます。

以下の 3 つの条件を満たす場合、アクセス拒否エラーの表示を OS 側で自動的に制御します。そのため、エラー メッセージは表示しません。

  • インストーラーの実行権限がアプリケーション マニフェストで定義されていない
  • 管理者権限でアプリケーションが実行されている
  • WRP で保護されたリソースの変更や作成、削除によるエラーである

エラーが表示されないため、コードは成功したかのように見えますが、WRP リソースへの変更はおこなわれません。

ページのトップへ


WRP 対応アプリケーションの作成

Microsoft が提供している再配布パッケージや、サービス パック等以外でシステム ファイルやコンポーネントのインストールや更新をおこなわないようにします。それ以外のプログラムでの変更は失敗します。これは管理者で実行しても同様です。また、再配布パッケージを分解したり、再パッケージ化したりして配布しようとしても失敗します。

ファイルのプロパティや、レジストリ エディターを使ってアクセス許可を確認することができます。WRP により保護されている場合には、「TrustedInstaller」にフル コントロール、Administrators や SYSTEM、および Users には読み取りと実行権しか与えられていません。

また、アプリケーションの中から、WRP により保護されているかどうかを確認するには、以下の API を使用します。なお、Windows インストーラーは、この操作を自動的におこなっています。

ファイル SfcIsFileProtected()
レジストリ SfcIsKeyProtected()

WRP で保護されるキーの作成や修正、削除をおこなうと、アクセス拒否エラーが通知されます。WRP のために発生したアクセス拒否エラーへの対処方法は、このエラーがアプリケーションに与える影響によって、以下の 2 種類が考えられます。

  • アプリケーションが既存のキーや値への書き込みをおこなっている場合、エラーメッセージを無視することができます。
  • キーや値が存在しない場合は、開発者としてアプリケーションへの影響を判断する必要があります。このキーがアプリケーションを正常に実行するために必要かどうかを考え、必要でない場合は、エラーを無視することができます。必要である場合は、アプリケーションを再設計して代替キーに書き込むなどの対応策が必要となります。

ページのトップへ