2013年5月1日水曜日

特定のアプリケーションを実行するときに「ユーザアカウント制御」ダイアログを表示させない - Compatibility Administrator で「カスタムの互換修正プログラム」を作成する

1. 「ユーザアカウント制御」ダイアログを表示してほしくない

アプリケーションを起動するときに、「ユーザアカウント制御」のダイアログが表示されることがある。

例えば、メモリを定期的に開放する Wise Memory Optimizer.exe をクリックすると、

SnapCrab_No-0192

次のプログラムにこのコンピュータへの変更を許可しますか?

起動する度に、「はい」のボタンを押すことが面倒なでの、このダイアログ表示しないようにしたい。

 

「ユーザーアカウント制御」のメリット

「ユーザーアカウント制御」があることにより、「管理者ユーザ」で  Windows をより安全に運用できる。

ユーザーアカウント制御 – Wikipedia によると、

Windows XPまでは、管理者ユーザは管理特権を持っており、マルウェアを含む全てのソフトウェアは管理特権を持った状態で実行し、OSの全てにアクセスすることができた。逆に管理者でない場合、権限が必要な動作を行おうとすると権限がないというエラーメッセージを受け取ることになる。

Windows Vistaからは、管理者のユーザとしてログオンするとアクセストークンが2つ用意される。1つは標準ユーザと同じ権限、もう1つは完全な管理者の権限を持っている。管理者としてログオンしてプログラムを実行しても通常は標準ユーザと同じ権限しかなくセキュリティもしくはOSの安定性に関わる操作を行おうとすると、「昇格のプロンプト」[1]と呼ばれる、実行を許可するか確認を取るダイアログが表示される。ここでユーザが許可すると、権限が「昇格」されてはじめてプログラムは管理者権限で実行される。

「管理者ユーザ」と「管理者権限」は異なる。そのため、特定のプログラムを実行するときに「権限の昇格」を許可するダイアログが表示される。

 

2. 「ユーザアカウント制御」と「タスクスケジューラーの作成」による方法

How to create a whitelist UAC for Windows 7? | #comment: code snippets によると、

「権限の昇格」を許可するダイアログが表示されないようにするには、次の2つの方法がある。

  1. 「ユーザアカウント制御の設定」でコンピューターに対する変更を通知しない。
  2. タスクスケジューラーで、「最上位の特権で実行する」タスクを作成する。

 

ユーザアカウント制御の設定

ただし、「コンピューターに対する変更を通知しない」設定にすることは、セキュリティ上望ましくない。

  • コントロール パネル > システムとセキュリティ > アクション センター

における「ユーザーアカウント制御設定の変更」で、スライダーを「通知しない」に方に設定することにより、ダイアログの表示を抑制できる。しかし、この設定は、「既定」のままにしておいた。

SnapCrab_No-0193

 

タスクスケジューラーによる設定

タスクスケジューラーを利用する方法は、以下を参照。

ポイントは、「タスクを作成」するときに、「最上位の特権で実行する」にチェックを入れること。

 

3. Compatibility Administrator で「カスタムの互換修正プログラム」を作成する

上記以外に、Compatibility Administrator を利用して、カスタムの互換性修正プログラムを作成する方法がある。

予め前提となる知識を押さえておく。

 

a. 互換モード

互換モード – Wikipedia とは、

Windows XPVista7においては、以前のバージョンのWindowsでしか動かないソフトウェアをインストールや実行を行う際のモードとして互換モードが搭載されている。マイクロソフトの互換性データベースに登録されているソフトは自動的に互換モードで起動されるが、手動で設定することで任意のソフトを互換モードで起動することもできる[1][2]。なお互換性データベースは「Microsoft Application Compatibility Toolkit」(略称ACT)を使用することで閲覧できる[3]

詳しくは、Windowsの互換性テクノロジの仕組み(前編) - @IT によると、

Windows 2000やWindows XPは、NT5カーネルと呼ばれる1990年代に設計されたカーネルをベースに開発されている。一方、Windows VistaやWindows 7は、Longhornカーネルと呼ばれる最新のカーネルをベースに開発されている。

カーネルが異なると、どのような影響が出るのか。それにはいくつか要素が考えられるが、最新カーネルにおけるセキュリティ・アーキテクチャの変更が最も大きな影響を及ぼす。これは、アプリケーションの実行プロセスを高/中/低の3段階で定義するというもので、低プロセスから中プロセス、中プロセスから高プロセスへのメッセージのやり取りを遮断するという機能を実装している。

Windows OSには、上記のようなアプリケーションとOSの間で発生し得る互換性問題を回避するための仕組みとして「Windows互換性テクノロジ」と呼ばれる機能が標準で実装されている。

Windows互換性テクノロジの実体は、アプリケーションとOSの間を取り持つ「shim」と呼ばれる仲介アプリケーション(追加コード)である。shimは、Windows OSへの要求、Windows OSからの応答、またはその両方に変更を加えることができる。要は、互換性のない要求や応答を途中で偽装して、不具合が生じないようにつじつまを合わせてしまうのだ。

Windowsの互換性テクノロジの仕組み(前編) - @IT

Windows XPからWindows 7へ移行する際に互換性問題が生じやすい最大の原因としては、ユーザー・アカウント制御(UAC)と呼ばれるセキュリティ対策機能が挙げられる。UACが有効な環境では、コンピュータの動作に影響する可能性がある操作や、ほかのユーザーに影響する設定を変更する操作が実行される前に、ユーザーに許可を求めるか、管理者パスワードの入力を求められる。

Windows XPの場合、管理者ユーザーの下では、アプリケーションは常に管理者権限で動作していた。しかしWindows 7では、管理者ユーザーであっても普段は標準ユーザー権限でアプリケーションを実行し、UACを介して権限を昇格した場合のみアプリケーションを管理者権限で実行できる。そのため、管理者権限を必要とする従来の(UAC非対応の)アプリケーションは、実行途中で動作を止められてしまう可能性がある。

このようなUACの挙動に対して効果的なshimのうち、代表的なものを下表で紹介する。 …

 

b. Resource Hacker でアプリケーションの「実行モード」を確認する

仮想アプリとUACについて(裏技あり) | アプリ仮想化奉行 によると、

UAC の動作を設定するのは、アプリケーションマニフェストと呼ばれる物になります。
大きく分けると以下の3パターンで UAC の挙動を制御します。
・EXE自体に埋め込む場合
・ファイルとしてEXEと同じフォルダに設置
・アプリケーションの互換モードにより設定(EXEを右クリックして管理者として実行等)

UAC の実行モードは以下の3つから選択します。
RequireAdministrator (管理者として実行)
管理者権限を持つユーザーの場合は、昇格を行う画面が表示されます。
一般ユーザーの場合は、管理者のID/PWを入力する画面が表示されます。
HighestAvailable(持ちうる最高の権限で実行)
管理者権限を持つユーザーの場合は、昇格を行う画面が表示されます。
一般ユーザーの場合は、UACの画面が表示されずにアプリが起動します。
RunAsInvoker(そのままの権限で実行)
UACの画面が表示されずにアプリが起動します。

Windows Vista でのユーザー アカウント制御の理解と構成 > 「アプリケーション互換性のための、要求実行レベルでのアプリケーションのマーク」によると、

アプリケーションのためにどの要求実行レベルが選択されるのかは、アプリケーションが実行するシステムレベルの操作の種類で決まります。選択できる 3 種類の要求実行レベルを次に示します。

RunAsInvoker : アプリケーションを親プロセスと同じ Windows 特権とユーザー権利で実行する必要があります。この設定は、アプリケーションの互換性データベースがないことに相当します。アプリケーションは、起動元の親プロセスと同じ特権で起動されます。これにより、アプリケーションがセキュリティの脅威にさらされる可能性は減少します。なぜなら、大半のアプリケーションでは、親プロセスは Explorer.exe であり、これは標準ユーザー アプリケーションとして実行されるからです。完全な管理者として実行される cmd.exe シェルから起動される RunAsInvoker アプリケーションは、完全管理者アクセス トークンで "起動者として実行" されます。

RunAsHighest :

  • アプリケーションを現在のユーザーが取得できる最上位の Windows 特権とユーザー権利で実行する必要があります。ただし、ユーザーは必ずしも管理者である必要はありません。…

RunAsAdmin : このアプリケーションは管理者のためにのみ実行し、完全管理者アクセス トークンで起動する必要があります。標準ユーザー コンテキストでは正常に実行されません。…

仮想アプリとUACについて(裏技あり) | アプリ仮想化奉行 (先ほどのつづき)

対象のEXEファイルに埋め込まれている、アプリケーションマニフェスト(Application Manifest)を変更する。
ResourceHacker等を使って書き換えます
level="highestAvailable"またはrequireAdministratorの部分を
RunAsInvokerへ変更

Resource Hacker – Wikipedia とは、

対応する形式のファイルを開くとそのファイルのリソースがツリー構造上で表示される。リソースをバイナリ形式で保存したり、格納されているアイコンやポインタ、リソースなどを置き換えたり、リソースを追加、削除することができる。

Resource Hacker より最新のバージョンをダウンロード。

Resource Hacker で WiseMemoryOptimzer.exe を開く。

Ctrl + F で検索ダイアログを開き、

level=

という文字列を検索する。その結果、以下の記述が見つかった。

level="requireAdministrator"

つまり、このアプリケーションは管理者として実行する必要がある。そのため、アプリケーションを実行するときに、UAC のダイアログが表示される。

 

c. Compatibility Administrator のインストールと実行

カスタムの互換性修正プログラムを作成するために、

Download Microsoft Application Compatibility Toolkit from Official Microsoft Download Center より、

  • ApplicationCompatibilityToolkitSetup.exe

をダウンロードして、インストールする。

Compatibility Administrator の使用 によると、

Application Compatibility Toolkit (ACT) では、32 ビットおよび 64 ビット バージョンの Compatibility Administrator がインストールされます。32 ビット アプリケーション用のカスタム データベースの作成と操作を行う場合は、32 ビット バージョンを使用し、64 ビット アプリケーション用のカスタム データベースの作成と操作を行う場合は、64 ビット バージョンを使用する必要があります。

SnapCrab_No-0194

32ビット か64ビットアプリケーションかを確認するには、タスクマネージャーで WiseMemoryOptimzer.exe  のプロセスのイメージ名を見る。末尾に *32 とあるので、32ビットアプリケーション。

よって、Application Compatibility Toolkit (32-bit) を起動。

 

d. 互換修正プログラムの作成とインストール

カスタムの互換性修正プログラムを作成する によると、(※ 実際に入力・選択した値を赤文字で示した。以下同様。)

    1. Compatibility Administrator の左側のウィンドウの [Custom Databases] 見出しの下で、互換性修正プログラムの適用先データベースの名前(New Database(1)[Untitled_1])を右クリックし、[Create New]、[Application Fix] の順にクリックします。SnapCrab_No-1163

      [Create new Application Fix] ウィザード画面が表示されます。

    2. 互換性修正プログラムの適用先アプリケーションの名前(WiseMemoryOptimzer No UAC とした)を入力し、アプリケーション ベンダーの名前を入力します。コンピューターに保存されているアプリケーション ファイル (.exe) の場所を指定し、[Next] をクリックします。SnapCrab_No-1164

      [Compatibility Modes] ウィザード画面に、使用できる互換モードが表示されます。

    3. 互換性修正プログラムの適用先オペレーティング システムを選択し、互換性修正プログラムに適用できる互換モードのいずれか(RunAsInvoker)をクリックし、[Next] をクリックします。SnapCrab_No-1165

      [Compatibility Fixes] ウィザード画面に、使用できる互換性修正プログラムが表示されます。

    4. 作成する互換性修正プログラムに適用する追加の互換性修正プログラムを選択し、[Next] をクリックします。

      [Matching Information] ウィザード画面に、プログラムの識別に使用される既知の照合情報が表示されます。

    5. アプリケーションを AppHelp メッセージに対応付ける基準が他にもある場合は追加で選択し、[Finish] をクリックします。

最後に Save ボタンを押して、Database Name として、適当に WiseMemoryOptimzer と名前を付けて保存した。

SnapCrab_No-1168

次に、作成したデータベースをイントールする。

カスタム互換性データベースのインストールおよびアンインストール によると、

カスタム データベースをインストールするには
  1. Compatibility Administrator の左側のウィンドウで、ローカル コンピューターにインストールするカスタム データベース(WiseMemoryOptimzer)をクリックします。

  2. [Fie] メニューの [Install] をクリックします。

SnapCrab_No-1169これにより、

  • コントロール パネル > プログラム > プログラムと機能

における「プログラムのアンインストールまたは変更」の一覧の中に

WiseMemoryOptimzer No UAC

が含まれていることが確認できる。

この状態で WiseMemoryOptimzer.exe を実行すると、 UAC のダイアログは表示されなくなる。

`WiseMemoryOptimzer No UAC’ をアンインストールすると、UAC のダイアログが再び表示されるようになる。

 

参考サイト