辅助技术是在 Windows 桌面上运行的应用程序,可帮助辅助功能用户与计算机上运行的操作系统和其他应用程序(包括新 Windows UI 中的应用程序)进行交互。 辅助技术应用程序的工作原理是从操作系统和其他应用程序中检索信息,然后以用户可访问的方式呈现信息。 辅助技术应用程序还可以根据用户的输入以编程方式“驱动”操作系统和其他应用程序。

辅助技术应用程序的性质要求它们跨越进程边界,并有权访问运行在完整性级别更高的进程 (IL) 。 (辅助技术应用程序在中等 IL.) 例如,当用户尝试执行需要管理权限的任务时,Windows 会显示一个对话框,要求用户同意继续。 此对话框在更高的 IL 下运行,以防止其跨进程通信,使恶意软件无法模拟用户输入。 同样,桌面登录屏幕在更高的 IL 下运行,以防止其他进程访问它。

辅助技术应用程序通常需要访问受保护的系统 UI 元素或可能以更高特权级别运行的其他进程。 因此,辅助技术应用程序必须受系统信任,并且必须以特殊特权运行。

若要访问更高 IL 进程,辅助技术应用程序必须在应用程序的清单中设置 UIAccess 标志,并由具有管理员权限的用户启动。

访问权限受到如下限制:

  • 清单中没有 UIAccess 的应用程序以中等 IL 开头,并且无法访问提升 (“medium+”IL) 进程 UI。
  • 应用程序在清单中具有 UIAccess,并且由不在管理员组中的用户启动,启动为“中+”IL,并且无法访问提升的 UI (没有以“高”IL 运行的 UI,例如通过右键单击启动的应用 -> 以管理员身份运行 ) 。
  • 应用程序具有 UI 访问权限,并且由管理员用户启动,启动为“高”IL,并且可以访问提升的 UI,因为它具有相同的 IL。
  • UIAccess 不足以使进程在 IL 边界中向上移动。

    除了有权访问更高 IL 进程之外,具有这些权限的辅助技术应用程序还可以随时作为 z 顺序中的最顶层应用程序运行,这意味着每当用户需要时,辅助技术应用程序都可以可见且可用。

    前面列出的方案均不提供对在系统 IL 下运行的 UI 的访问权限。 只有在 SYSTEM (和系统 IL) 下的用户帐户控件 (UAC) 桌面中启动该过程时,才可能执行此操作。 在这种情况下,设置 UIAccess 不起作用。

    辅助技术应用程序的 UIAccess 要求

    辅助技术应用程序是一种 Windows Windows 桌面应用程序,它与在桌面和新的 Windows UI 中运行的其他进程进行交互,以从系统和应用程序获取信息。 然后,辅助技术应用程序可以向辅助功能用户提供信息。

    辅助技术应用程序通过在应用程序清单中设置 UIAccess 标志来访问其他进程。 若要使用 UIAccess 标志,辅助技术应用程序必须满足以下要求。

  • 需要显示、与另一个应用程序交互或反映来自其他应用程序的信息,以提供辅助功能方案的信息和/或
  • 需要以最顶部的窗口身份运行以获取或显示此信息。
  • 若要使用 UIAccess,辅助技术应用程序需要:

  • 使用证书进行签名,以便与在更高特权级别运行的应用程序进行交互。
  • 受系统信任。 应用程序必须安装在需要用户帐户控制 (UAC) 提示进行访问的安全位置。 例如,“程序文件”文件夹。
  • 使用包含 uiAccess 标志的清单文件生成。
  • 不应使用 UIAccess:

  • 由非辅助技术的应用程序。

  • 由辅助技术应用程序显示与其目标辅助功能方案无关的信息或 UI。

  • 由只想在新 Windows UI 中的其他应用程序上方显示的应用程序。

    为新 Windows UI 开发的应用程序没有 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 安全性、签名应用程序和创建清单的详细信息,请参阅 MSDN 上的 Windows Vista 和 Windows Server 2008 开发人员故事:用户帐户控制的 Windows Vista 应用程序开发要求 (UAC)

    UI 自动化基础知识

  •