.NET/Vista:.NET Fx アプリを簡単にUAC対応にする方法

posted on 2006年10月15日 23:42 投稿者 Elfaria

Edited at 2006/10:16 22:25

Windows Vistaで新しく加わったUAC(ユーザーアクセス制御)な話。

自作のアプリケーション等々をUACに対応させる方法です。Manifestファイルを使用する方法。

簡単に言うと、Manifestファイルを作成し、そこに、以下(<Assembly>から下)のような記述を埋め込みます。(宣言は飛ばしても良いかと)

<?xml version="1.0" encoding="utf-8"?> 
   <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
         <security> 
            <requestedPrivileges
               <requestedExecutionLevel level="asInvoker" /> 
            </requestedPrivileges
         </security> 
      </trustInfo>
</assembly>

で、肝心なのが赤字の部分と青地の部分。
実行時のレベルを指定してます。

RequestPrivileges っては、文字通り必要な昇格権限の定義。
RequestExecutionLevel で、必要な昇格権限を指定します。
level= で、必要なレベル。
uiAccess= で、ユーザインタフェースがアクセスするか(?)を指定(True/False)

Level= の指定は、asInboker を含めて、以下のものが指定できます(Vista Beta1の際の資料を基にしてますので、RC1/2では変わってる可能性あるかも…)

  • AsInvoker
  • HighestAvaliable
  • RequireAdministrator

MSDNのリファレンスを訳してみる。(参考:Developer Best Practices and Guidelines for Applications in a Least Privileged Environment
(?) がついている部分は、うまく訳せなかったところ。

level= の部分:
asInvoker …継承元(親)のプロセスのアクセストークンを使用してアプリケーションを起動
HighestAvaliable …現在のユーザよりも高い権限に昇格して、アプリケーションを起動
RequireAdministrator …完全なAdministrator権限でアプリケーションを起動(?)

level= が指定されていない場合、asInvokerとして起動するようです。

uiAccess= の部分:
False … 他のウィンドウに対して情報を提供しないもの(?)
True …他のウィンドウに対して情報を提供するもの、UI Accessibility なアプリケーションはTrueにする(たとえば、スクリーンキーボードとか。)

親プロセスの所持しているアクセストークンによる動作表(?)(上記リンクページ中盤)

現在のユーザーが、Build-inなAdministrator アカウントを使っている場合(注:VistaではAdministratorアカウント自体は既定で無効になっている)

親プロセスのトークン 承諾したポリシー None or AsInvoker HighestAvailable RequireAdministrator
完全な管理者権限 (Do not Care) 完全なAdministrator権限で起動
UACのプロンプトは表示されない

現在のユーザが、Administratorsグループのメンバになっている場合

親プロセスのトークン 承諾したポリシー None or AsInvoker HighestAvailable RequireAdministrator
制限ユーザ なし(昇格しない場合?) 制限ユーザでアプリケーションが起動 完全なAdministrator権限で起動
UACプロンプトは非表示
制限ユーザ 実行に同意 制限ユーザでアプリケーションが起動 完全なAdministrator権限で起動,
実行に同意するかどうかのプロンプト画面が表示
制限ユーザ 昇格 制限ユーザでアプリケーションが起動 完全なAdministrator権限で起動,
昇格するかどうかのプロンプト画面

完全Administrator権限

(Do not Care) 完全なAdministrator権限で起動
UAC プロンプトは非表示
完全なAdministrator権限で起動,
UAC プロンプトは非表示

現在のユーザーが、制限ユーザの場合。

親プロセスのトークン 承諾したポリシー None or AsInvoker HighestAvailable RequireAdministrator
制限ユーザ なし(Silent?) 制限ユーザで起動 アプリケーションの起動に失敗する
制限ユーザ 実行に同意 制限ユーザで起動 アプリケーション起動前に、Administratorへ昇格するかどうかのプロンプトが表示される
制限ユーザ 昇格 制限ユーザで起動 アプリケーション起動前に、Administratorへ昇格するかどうかのプロンプトが表示される

訳が中途半端です。ごめんなさい。

コメント