支援技術のセキュリティに関する考慮事項
支援技術は、Windows デスクトップで実行され、オペレーティング システムや、コンピューター上で実行されている他のアプリケーション (新しい Windows UI のアプリケーションなど) とアクセシビリティ ユーザーが対話できるように支援するアプリケーションです。 支援技術アプリケーションは、オペレーティング システムや他のアプリケーションから情報を取得し、その情報をユーザーがアクセスしやすい形で提示することによって機能します。 支援技術アプリケーションは、ユーザーからの入力に基づいて、オペレーティング システムやその他のアプリケーションをプログラムで "駆動" させることもできます。
支援技術アプリケーションは、その性質上、プロセスの境界を越える必要があり、また自身よりも高い整合性レベル (IL) で実行されるプロセスにアクセスできる必要があります (支援技術アプリケーションは、中程度の IL で実行されます)。たとえば、ユーザーが管理者特権を必要とするタスクを実行しようとすると、Windows はユーザーに続行の同意を求めるダイアログ ボックスを表示します。 このダイアログ ボックスは、悪意のあるソフトウェアがユーザーによる入力をシミュレートできないようにプロセス間通信から保護するために、より高い IL で実行されます。 同様に、デスクトップ ログオン画面は、他のプロセスからアクセスされないように、より高い IL で実行されます。
支援技術アプリケーションは、通常、保護されるシステム UI 要素へのアクセス、またはより高い特権レベルで実行されている可能性のある他のプロセスへのアクセスが必要です。 そのため、支援技術アプリケーションはシステムによって信頼されている必要があり、特別な特権で実行する必要があります。
より高い IL のプロセスにアクセスするには、支援技術アプリケーションは、アプリケーションのマニフェストに UIAccess フラグを設定し、管理者権限を持つユーザーによって起動される必要があります。
Note
アクセス特権には、次のような制約があります。
- マニフェストに UIAccess がないアプリケーションは、中程度の IL で起動し、昇格された ("中程度以上" の IL の) プロセス UI にはアクセスできません。
- マニフェストに UIAccess があり、管理者グループに属していないユーザーによって起動されたアプリケーションは、"中程度以上" の IL として起動し、昇格された UI にアクセスできません (右クリック -> [管理者として実行] で起動されるアプリなど、"高い" IL として実行されるものはありません)。
- アプリケーションに UIAccess があり、管理者ユーザーによって "高い" IL として起動されると、そのアプリケーションは同じ IL を持っているため、昇格された UI にアクセスできます。
IL の境界を越えてプロセスを移動させる場合、UIAccess だけでは不十分です。
これらの特権を持つ支援技術アプリケーションは、より高い IL プロセスにアクセスできるだけでなく、いつでも z オーダーで最上位アプリケーションとして実行できるため、ユーザーが必要とするときにいつでも支援技術アプリケーションを表示して使用可能にすることができます。
重要
上記のシナリオのいずれも、システム IL で実行されている UI へのアクセスを提供しません。 これは、プロセスが SYSTEM (およびシステム IL) の下にあるユーザー アカウント制御 (UAC) デスクトップで起動された場合にのみ可能です。 この場合、UIAccess を設定しても効果はありません。
支援技術アプリケーションの UIAccess 要件
支援技術アプリケーションは、システムとアプリケーションから情報を取得するために、デスクトップおよび新しい Windows UI で実行されている他のプロセスと対話する Windows デスクトップ アプリケーションです。 支援技術アプリケーションはその後で、アクセシビリティ ユーザーに情報を提供できます。
支援技術アプリケーションは、アプリケーション マニフェストに UIAccess フラグを設定することで、他のプロセスにアクセスできます。 UIAccess フラグを使用するには、支援技術アプリケーションが次の要件を満たしている必要があります。
- アクセシビリティ シナリオの情報を提供するために、他のアプリケーションからの情報を表示、操作、または反映する必要がある、および/または
- この情報を取得または表示するには、最上位のウィンドウとして実行する必要がある。
UIAccess を使用するには、支援技術アプリケーションで次の操作を行う必要があります。
- 証明書を使用して署名し、より高い特権レベルで実行されているアプリケーションと対話する。
- システムによって信頼される。 アプリケーションは、アクセス時にユーザー アカウント制御 (UAC) プロンプトを必要とする安全な場所にインストールする必要があります。 たとえば、Program Files フォルダーです。
- uiAccess フラグを含むマニフェスト ファイルを使用してビルドする。
次を使って UIAccess を使用しないでください。
支援技術ではないアプリケーション。
対象のアクセシビリティ シナリオに関連しない情報または UI を表示する支援技術アプリケーション。
新しい Windows UI で他のアプリケーションの上に表示するだけのアプリケーション。
Note
UWP アプリケーションには、使用可能なオプションとして UIAccess がありません。
アプリケーション マニフェスト ファイルでの UIAccess の設定
保護されたシステム UI にアクセスするためには、マニフェスト ファイル内に特別な属性が含まれるマニフェスト ファイルを使ってアプリケーションをビルドする必要があります。 この uiAccess 属性は、次のコード例に示すように、requestedExecutionLevel タグに含まれています。
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>
このコードの level 属性の値は一例にすぎません。
UIAccess は既定で "false" です。 属性を省略した場合、またはマニフェストがない場合、アプリケーションは保護された UI にアクセスできません。
Windows のセキュリティ、アプリケーションの署名、マニフェストの作成の詳細については、「Windows Vista および Windows Server 2008 の開発者向けストーリー: ユーザー アカウント制御 (UAC) のための Windows Vista アプリケーション開発要件」を参照してください。
関連トピック