Windows UAC

UAC (User Account Control) とは、Windowsのユーザーアカウント制御のことです。この記事では、UACの使い方をご紹介します。

Table of Contents

  1. 1 UACの無効化
  2. 2 アプリケーション・マニフェスト
    1. 2.1 <assembly>
    2. 2.2 <assemblyIdentity>
    3. 2.3 <requestedExecutionLevel>
  3. 3 ファイルとレジストリの仮想化

1 UACの無効化

Windows 7でユーザーアカウント制御を無効化するには、次の手順で行う。

  1. スタートメニューから[スタート] - [コントロールパネル]を選択して、コントロールパネルを開く。
  2. 「ユーザー アカウントと家族のための安全設定」をクリックする。
  3. 「ユーザー アカウント」をクリックする。
  4. 「ユーザー アカウント制御設定の変更」をクリックする。
  5. 「コンピュータに対する変更の通知を受け取るタイミングの選択」を「既定」から「以下の場合でも通知しない」に変更する。
  6. Windowsを再起動する。

2 アプリケーション・マニフェスト

アプリケーション・マニフェストを適用するには、2通りの方法がある。

外部マニフェストファイルは XML ファイルであり、ファイル名は次の規則に従う。

AppName.exe.manifest

ここで、 AppName は実行ファイルのプログラム名である。

アプリケーションにリソースとしてマニフェストが埋め込まれていて、なおかつ外部マニフェストファイルも使用した場合、リソースに埋め込まれたマニフェストは無効になる。

アプリケーションマニフェストの記述例を示す。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="AppName" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>
</assembly>

2.1 <assembly>

アプリケーションマニフェストのルート要素。

2.2 <assemblyIdentity>

assembly要素の子要素で、assembly要素の子要素の中では一番最初に記述する必要がある。

2.3 <requestedExecutionLevel>

level属性
level属性の値には次のいずれかを指定する。
属性値 説明
asInvoker 親プロセスと同じトークン(権限)でアプリケーションを実行する
highestAvailable 現在のユーザが取得できる最も高い特権でアプリケーションを実行する
requireAdministrator 管理者がユーザであれば、昇格の許可を求めるダイアログが表示される。標準ユーザであれば、管理者のパスワード入力を求めるダイアログが表示される。許可が得られれば、アプリケーションは管理者として実行される。

通常、管理者権限への昇格が不要なアプリケーションの場合はasInvokerを指定し、管理者権限で実行すべきアプリケーションの場合はrequireAdministratorを指定する。

uiAccess属性
uiAccess属性の値には、trueかfalseを指定する。
属性値 説明
false 通常のアプリケーション
true UIPI(ユーザインタフェース特権の分離)の制限を回避

3 ファイルとレジストリの仮想化

管理者権限領域への書き込みアクセスが権限不足で失敗した場合、標準権限の領域へリダイレクトされる。これにより、アプリケーションが権限を持たないフォルダやレジストリキーに書き込みを行った場合でもエラーとならずに実行できる。

%ProgramFiles%
%LocalAppData%\VirtualStore\Program Files
%ProgramData%
%LocalAppData%\VirtualStore\ProgramData
%WinDir%
%LocalAppData%\VirtualStore\Windows
HKEY_LOCAL_MACHINE\Software
HKEY_CURRENT_USER\Software\Classes\VirtualStore\Machine\Software

読み取りアクセス時は、先に仮想領域がチェックされる。