次の方法で共有


UAC アーキテクチャ

次の図は、UAC アーキテクチャの詳細を示しています。

UAC アーキテクチャを説明する図。

ユーザー

  • ユーザーが特権を必要とする操作を実行する: 操作によってファイル システムまたはレジストリが変更された場合、Virtualization が呼び出されます。 その他のすべての操作では ShellExecute が呼び出されます。
  • ShellExecute: ShellExecute は CreateProcess を呼び出します。 ShellExecute は、CreateProcess から ERROR_ELEVATION_REQUIRED エラーを検索します。 エラーが発生した場合、ShellExecute はアプリケーション情報サービスを呼び出して、昇格されたプロンプトで要求されたタスクの実行を試みます。
  • CreateProcess: アプリケーションで昇格が必要な場合、CreateProcess は ERROR_ELEVATION_REQUIREDを使用して呼び出しを拒否します。

System

  • アプリケーション情報サービス:

    • 1 つ以上の昇格された特権またはユーザー権限を実行する必要があるアプリを起動するのに役立つシステム サービス。
    • Application Information サービスは、昇格が必要な場合に、管理ユーザーのフル アクセス トークンを使用してアプリケーションの新しいプロセスを作成することで、このようなアプリを開始するのに役立ちます。
    • 構成されているポリシーによっては、ユーザーが同意を与える場合があります。
  • ActiveX インストールの昇格:

    • ActiveX がインストールされていない場合は、UAC スライダー レベルがチェックされます。
    • ActiveX がインストールされている場合、[ユーザー アカウント制御: 昇格を求めるメッセージが表示されたらセキュリティで保護されたデスクトップに切り替える] グループ ポリシー設定がオンになります。
  • UAC スライダー レベルを確認する: UAC には、4 つのレベルの通知から選択するスライダーがあります。

    • 常に通知 は次のようになります。
      • プログラムがソフトウェアをインストールしようとしたり、コンピューターに変更を加えたりしたときに通知します。
      • Windows 設定を変更したときに通知します。
      • 応答するまで他のタスクを固定します。
      • 新しいソフトウェアを頻繁にインストールする場合や、なじみのない Web サイトにアクセスする場合にお勧めします。
    • プログラムが自分のコンピューターに変更を加えようとした場合にのみ、通知 を受け取ります。
      • プログラムがソフトウェアをインストールしようとしたり、コンピューターに変更を加えたりしたときに通知します。
      • Windows の設定を変更した場合は通知されません。
      • 応答するまで他のタスクを固定します。
      • アプリを頻繁にインストールしたり、なじみのない Web サイトにアクセスしたりしない場合にお勧めします。
    • プログラムが自分のコンピューターに変更を加えようとした場合にのみ通知します (デスクトップを暗くしないでください)。
      • プログラムがソフトウェアをインストールしようとしたり、コンピューターに変更を加えたりしたときに通知します。
      • Windows の設定を変更した場合は通知されません。
      • 応答するまで、他のタスクを固定しないでください。
      • 推奨されません。 このオプションは、コンピューターのデスクトップを暗くするのに長い時間がかかる場合にのみ選択します。
    • 通知しない (UAC プロンプトを無効にする) は、次の操作を 行います。
      • プログラムがソフトウェアをインストールしようとしたり、コンピューターに変更を加えたりしたときに通知を受け取りません。
      • Windows の設定を変更した場合は通知されません。
      • 応答するまで、他のタスクを固定しないでください。
      • セキュリティ上の問題のため、推奨されません。
  • セキュリティで保護されたデスクトップが有効: [ユーザー アカウント制御]: 昇格ポリシーの設定を求めるメッセージが表示されたら、セキュリティで保護されたデスクトップに切り替えます

    • セキュリティで保護されたデスクトップが有効になっている場合、管理者と標準ユーザーのプロンプト動作ポリシー設定に関係なく、すべての昇格要求がセキュリティで保護されたデスクトップに送信されます。
    • セキュリティで保護されたデスクトップが有効になっていない場合、すべての昇格要求は対話型ユーザーのデスクトップに移動し、管理者と標準ユーザーのユーザーごとの設定が使用されます。
  • CreateProcess:

    • CreateProcess は AppCompat、Fusion、インストーラーの検出を呼び出して、アプリに昇格が必要かどうかを評価します。
    • その後、ファイルが検査され、要求された実行レベルが判別されます。このレベルは、ファイルのアプリケーション マニフェストに格納されます。
    • マニフェストで指定された要求された実行レベルがアクセス トークンと一致せず、エラー (ERROR_ELEVATION_REQUIRED) が ShellExecute に返された場合、CreateProcess は失敗します。
  • AppCompat:

    • AppCompat データベースは、アプリケーションのアプリケーション互換性修正エントリに情報を格納します。
  • Fusion:

    • Fusion データベースには、アプリケーションを記述するアプリケーション マニフェストからの情報が格納されます。
    • マニフェスト スキーマが更新され、新しい要求された実行レベル フィールドが追加されます。
  • インストーラーの検出:

    • インストーラー検出は、セットアップ ファイルを検出し、ユーザーの知識と同意なしにインストールが実行されないようにするのに役立ちます。

カーネル

  • 仮想化: 仮想化テクノロジを使用すると、準拠していないアプリが原因を特定できない方法で、サイレント モードで実行または失敗しないようにします。 UAC は、保護された領域に書き込むアプリケーションのファイルとレジストリの仮想化とログ記録も提供します。
  • ファイル システムとレジストリ: ユーザーごとのファイルとレジストリの仮想化は、コンピューターごとのレジストリとファイルの書き込み要求をユーザーごとの同等の場所にリダイレクトします。 読み取り要求は、最初に仮想化されたユーザーごとの場所にリダイレクトされ、コンピューターごとの場所の 2 番目にリダイレクトされます。

スライダーが UAC を完全にオフにすることはありません。 [ 通知なし] に設定すると、次のようになります。

  • UAC サービスを実行したままにする
  • UAC プロンプトを表示せずに、管理者によって開始されたすべての昇格要求が自動適用されるようにする
  • 標準ユーザーのすべての昇格要求を自動的に拒否する

重要

UAC を完全に無効にするには、[ユーザー アカウント制御: すべての管理者を管理承認モードで実行する] ポリシーを無効にする必要があります。 UAC が無効になっていると、一部のユニバーサル Windows プラットフォーム アプリが機能しない場合があります。

仮想化

エンタープライズ環境のシステム管理者はシステムのセキュリティ保護を試みるため、多くの基幹業務 (LOB) アプリケーションは標準のユーザー アクセス トークンのみを使用するように設計されています。 その結果、UAC がオンになっているときにほとんどのアプリを置き換える必要はありません。

Windows には、UAC 準拠ではなく、管理者のアクセス トークンを正しく実行する必要があるアプリのファイルとレジストリの仮想化テクノロジが含まれています。 UAC に準拠していない管理アプリが 、Program Files などの保護されたフォルダーに書き込もうとすると、UAC は、変更しようとしているリソースの独自の仮想化ビューをアプリに提供します。 仮想化されたコピーは、ユーザーのプロファイルに保持されます。 この方法では、非準拠アプリを実行するユーザーごとに、仮想化されたファイルの個別のコピーが作成されます。

ほとんどのアプリ タスクは、仮想化機能を使用して適切に動作します。 仮想化ではほとんどのアプリケーションを実行できますが、長期的なソリューションではなく、短期的な修正です。 アプリ開発者は、ファイル、フォルダー、レジストリの仮想化に依存するのではなく、できるだけ早く準拠するようにアプリを変更する必要があります。

仮想化は、次のシナリオではオプションではありません。

  • 仮想化は、管理者特権で完全な管理アクセス トークンを使用して実行されるアプリには適用されません
  • 仮想化では、32 ビット アプリのみがサポートされます。 Nonelevated 64 ビット アプリは、Windows オブジェクトへのハンドル (一意の識別子) を取得しようとすると、アクセス拒否メッセージを受け取ります。 ネイティブ Windows 64 ビット アプリは、UAC と互換性があり、正しい場所にデータを書き込む必要があります
  • 要求された実行レベル属性を持つアプリ マニフェストがアプリに含まれている場合、仮想化は無効になります

要求実行レベル

アプリ マニフェストは、実行時にアプリがバインドする必要がある共有アセンブリとプライベート のサイド バイ サイド アセンブリを記述して識別する XML ファイルです。 アプリ マニフェストには、UAC アプリの互換性を目的としたエントリが含まれています。 アプリ マニフェストにエントリを含む管理アプリは、ユーザーのアクセス トークンにアクセスするためのアクセス許可をユーザーに求めます。 アプリ マニフェストにはエントリがありませんが、ほとんどの管理アプリは、アプリ互換性の修正を使用して変更なしで実行できます。 アプリ互換性の修正は、UAC に準拠していないアプリケーションが正常に動作できるようにするデータベース エントリです。

すべての UAC 準拠アプリには、要求された実行レベルがアプリケーション マニフェストに追加されている必要があります。 アプリケーションがシステムへの管理アクセスを必要とする場合、要求された実行レベルでアプリをマークするには 、管理者が必要 です。これにより、システムはこのプログラムを管理アプリとして識別し、必要な昇格手順を実行します。 要求された実行レベルは、アプリに必要な特権を指定します。

インストーラー検出テクノロジ

インストール プログラムは、ソフトウェアを展開するように設計されたアプリです。 ほとんどのインストール プログラムは、システム ディレクトリとレジストリ キーに書き込みます。 これらの保護されたシステムの場所は、通常、インストーラー検出テクノロジの管理者のみが書き込み可能です。つまり、標準ユーザーはプログラムをインストールするのに十分なアクセス権がありません。 Windows は、インストール プログラムを検出し、管理者の資格情報または承認を管理者ユーザーに要求して、アクセス権で実行します。 Windows では、アプリケーションをアンインストールする更新プログラムやプログラムもヒューリスティックに検出されます。 UAC の設計目標の 1 つは、インストール プログラムがファイル システムとレジストリの保護された領域に書き込むため、ユーザーの知識と同意なしにインストールが実行されないようにすることです。

インストーラーの検出は、次の場合にのみ適用されます。

  • 32 ビット実行可能ファイル
  • 要求された実行レベル属性のないアプリケーション
  • UAC が有効になっている標準ユーザーとして実行されている対話型プロセス

32 ビット プロセスが作成される前に、次の属性がチェックされ、インストーラーであるかどうかを判断します。

  • ファイル名には、"install"、"setup"、"update" などのキーワードが含まれます。
  • バージョン管理リソース フィールドには、ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、およびエクスポート名というキーワードが含まれています。
  • サイド バイ サイド マニフェストのキーワードは、実行可能ファイルに埋め込まれます。
  • 特定の StringTable エントリ内のキーワードは、実行可能ファイルにリンクされます。
  • リソース スクリプト データ内のキー属性は、実行可能ファイルにリンクされます。
  • 実行可能ファイルには、対象のバイト シーケンスが含まれています。

キーワードとバイトシーケンスは、さまざまなインストーラー テクノロジから観察される一般的な特性から派生しました。

ユーザー アカウント制御: アプリケーションのインストールを検出し、インストール プログラムを検出するには、インストーラーの検出に昇格ポリシーを有効にする必要があります。 詳細については、「 ユーザー アカウント制御設定の一覧」を参照してください。