Windows Vista Developer Story:针对用户帐户控制的 Windows Vista 应用程序开发要求

Microsoft Corporation

Windows Vista Developer Story(英文)所含内容面向的是开发人员以及有兴趣深入探讨 Windows Vista 中某些新功能和扩展功能的其他技术专家和管理人员。它将以短文的形式在 Windows Vista 开发人员中心上发布,大约每两周发布一次。这些文章只是 Windows 帮助文件的摘要,可从此处下载

注意 本主题为预发布文档,在以后发布的版本中可能会有所更改。

注意 要提供关于文章的反馈,请将电子邮件发送到 Vistadev@microsoft.com

目录

本文包含的信息可帮助应用程序开发人员确保其应用程序兼容“用户帐户控制”(UAC)。本文包括以下各部分:

  • 为什么需要用户帐户控制? - 详述开发 UAC 的原因。

  • UAC 工作原理 - 详述 UAC 功能。

  • UAC 是否会影响您的应用程序? - 如何确定您是否有必要使应用程序兼容 UAC。

  • 为 Windows Vista 设计应用程序 - 如何设计兼容 UAC 的应用程序。

  • 为标准用户部署和修补应用程序 - 如何确保可为标准用户部署您的应用程序。

  • 故障排除常见问题 - 列出 Microsoft .NET 应用程序方面的常见开发和安装问题。

  • 参考资料 - 包括虚拟化参考资料和安全设置参考资料。

注意 本文的全部内容均可在 Windows 帮助文件中找到,该文件可从此处下载。若要在帮助文件中查找本主题,请依次展开“基础”、“安全应用程序”、“开发安全应用程序”,然后单击“用户帐户控制 (UAC)”。

为什么需要用户帐户控制?

一直以来,应用程序开发人员所创建的 Microsoft Windows 应用程序都需要过多的用户权限和 Windows 特权,这就经常要求执行用户是管理员身份。结果,几乎没有几个 Windows 用户是在要求的用户最小权限和 Windows 最小特权下运行。由于标准用户应用程序兼容性问题,许多力求在易部署性、易用性与安全性之间取得均衡的企业通常都采取作为管理员部署其桌面的方法。

为何在 Microsoft Windows Vista 之前的计算机上难以作为标准用户运行?以下内容详述了另外的原因:

  1. 许多 Windows 应用程序都要求登录用户是管理员,但实际上并不要求管理员级的访问。这些应用程序会在允许运行之前执行多种管理员访问检查,其中包括:

    • 管理员访问令牌检查。

    • 系统受保护位置中的“完全访问”访问请求。

    • 将数据写入到受保护位置,例如,%ProgramFiles%、%WinDir% 和 HKLM\Software。

  2. 许多 Windows 应用程序在设计时都没有采用最小特权这个概念,并且没有将用户和管理员功能分为两个不同的进程。

  3. 默认情况下,Windows 2000 和 Windows XP 将每个新用户帐户都创建为管理员;因此,关键的 Windows 组件(如“日期和时间”、“电源管理”控制面板)对于标准用户就不能正常工作。

  4. Windows 2000 和 Windows XP 管理员必须创建两个不同的用户帐户 - 一个帐户用于管理任务,另一个是标准用户帐户,用于执行日常任务。这样,用户必须退出其标准用户帐户,并作为管理员重新登录或使用“运行方式”才能执行任何管理任务。

借助“用户帐户控制”(UAC),Microsoft 将提供一种可以简化企业和家庭标准用户桌面部署的技术。

按照最初在 Microsoft Windows NT 3.1 操作系统中的设计构建 Windows 安全体系结构后,UAC 小组力求实现一种兼有灵活性和更多安全性的标准用户模型。对于 Windows 先前版本,在登录过程中会为管理员创建一个访问令牌。该管理员访问令牌包含了多数 Windows 特权和管理安全标识符 (SID)。它保证了管理员可以安装应用程序、配置操作系统和访问任何资源。

在 Windows Vista 中,UAC 小组采用了一种截然不同的方法来创建访问令牌。当管理员用户登录到 Windows Vista 计算机时,将创建两个访问令牌:一个是筛选后的标准用户访问令牌,一个是完整的管理员访问令牌。此时,使用标准用户访问令牌而不是管理员访问令牌来启动桌面 (Explorer.exe)。所有子进程都从桌面的这个初始启动(explorer.exe 进程)继承而来,从而有助于限制 Windows Vista 的攻击面。默认情况下,所有用户(包括管理员)都作为标准用户登录到 Windows Vista 计算机。

注意 对于以上综述存在一种例外情况:访客登录计算机时所具备的用户权限和特权要低于标准用户。

当管理员尝试执行管理任务(例如,安装应用程序)时,UAC 会提示用户批准该操作。当用户批准该操作时,任务将通过管理员的完整管理员访问令牌启动。这是默认的管理员提示行为,可在本地安全策略管理器单元 (secpol.msc) 中使用组策略 (gpedit.msc) 进行配置。

注意 启用了 UAC 的 Windows Vista 计算机上的管理员帐户也称为“管理批准模式下的管理员帐户”。管理批准模式标识了管理员的默认用户体验。

每次管理提升也是特定于进程的,这可防止其他进程未提示用户进行批准就使用访问令牌。这样,管理员用户可以对安装哪些应用程序进行更精确的控制,同时又极大冲击了期望登录用户使用完整管理员访问令牌运行的恶意软件。

通过使用 UAC 基础结构,标准用户也有机会按流程提升并执行管理任务。当标准用户尝试执行管理任务时,UAC 会提示用户输入有效的管理员帐户凭据。这是默认的标准用户提示行为,可在本地安全策略管理器单元 (secpol.msc) 中使用组策略 (gpedit.msc) 进行配置。

Windows Vista 更新

以下更新体现了 Windows Vista 在功能方面累积的核心变化。

  • 默认情况下将启用 UAC

  • 所有后续的“用户帐户”均创建为“标准用户”

  • 默认情况下,在安全桌面上显示提升提示

  • 后台应用程序的提升提示会最小化到任务栏上

  • 在用户的登录路径中阻塞提升

  • 默认情况下,在新安装的系统中禁用内置管理员帐户

  • 用户帐户控制和远程应用场景

  • 新的默认访问控制列表 (ACL) 设置

有关以上所列的 Windows Vista 更新的详细信息,请参阅 Windows 帮助文件,该文件可从此处下载

UAC 工作原理

本部分为应用程序开发人员介绍了 UAC 的体系结构和功能组件,其中包括主题“Windows Vista 的新技术”和“UAC 体系结构”。

Windows Vista 的新技术

以下各部分详细介绍了 Windows Vista 所应用的新技术。

  • 安装程序检测

  • 通过 Windows Installer 4.0 为标准用户修补应用程序

  • 用户界面特权隔离

  • 虚拟化

有关 Windows Vista 新技术和访问令牌变化的详细信息,请参阅 Windows 帮助文件的“新技术”部分,该文件可从此处下载

UAC 体系结构

以下图表体现了可执行程序在 Windows Vista 中的启动流程。

UAC 体系结构

.

以下内容介绍了 UAC 体系结构图表中显示的流程以及当可执行程序尝试启动时如何实现 UAC。

标准用户启动路径

Windows Vista 标准用户启动路径与 Windows XP 启动路径类似,只不过包含了一些修改。

  1. ShellExecute() 调用 CreateProcess()。

  2. 如果应用程序需要提升,CreateProcess() 会调用 AppCompat、Fusion 和 Installer Detection 进行评估。然后,对可执行程序进行检查以确定其 requestedExecutionLevel(存储在可执行程序的应用程序清单中)。AppCompat 数据库存储应用程序的应用程序兼容性修复条目信息。Installer Detection 检测安装执行程序。

  3. CreateProcess() 返回声明 ERROR_ELEVATION_REQUIRED 的 Win32 错误代码。

  4. ShellExecute() 专门等待这个新错误,收到该错误后,立即全面调用“应用程序信息服务”(AIS) 以尝试进行提升后的启动。

已提升启动路径

Windows Vista 的已提升启动路径是一种新的 Windows 启动路径。

  1. AIS 收到来自 ShellExecute() 的调用,然后重新评估所请求的执行级别和组策略,以确定是否允许提升并定义提升用户体验。

  2. 如果请求的执行级别需要提升,则该服务将使用从 ShellExecute() 传入的 HWND 启动调用方交互桌面上的提升提示(基于组策略)。

  3. 如有必要,在用户给予同意或提供有效凭据后,AIS 将检索与相应用户关联的对应访问令牌。例如,对于只属于备份操作员组的用户成员和属于本地管理员组的用户成员,请求 highestAvailable 的 requestedExecutionLevel 的应用程序所要检索的访问令牌是不同的。

AIS 重新发出 CreateProcessAsUser() 调用,提供管理员访问令牌并指定调用方的交互桌面。

UAC 是否会影响您的应用程序?

您的应用程序是否会受到 UAC 的影响取决于应用程序的当前状态。多数情况下,无需进行任何更改就可符合 Microsoft Windows® 安全要求。然而,有一些应用程序(包括业务线 (LOB) 应用程序)可能需要对其安装、运行和更新过程进行更改才能在 Windows Vista UAC 环境中正常工作。

注意 如果应用程序在 Windows XP 上可作为标准用户正常运行,那么它同样也可以在 Windows Vista 上作为 STANDARD 用户正常运行。

有关本主题的详细信息,请参阅 Windows 帮助文件中的以下分部分,该文件可从此处下载

  • 为什么需要消除应用程序的管理依存性?

  • 降低应用程序的总体拥有成本

  • 如何确定应用程序是否存在管理依存性?

  • 对于合法的管理员应用程序有什么要求?

为 Windows Vista 设计应用程序

以下列表介绍了为 Windows Vista 设计应用程序的工作流:

  1. 第一步:测试应用程序的应用程序兼容性。

  2. 第二步:将应用程序分类为标准用户、管理员或混合用户应用程序。

  3. 第三步:重新设计应用程序功能以兼容 UAC。

  4. 第四步:重新设计应用程序用户界面以兼容 UAC。

  5. 第五步:重新设计应用程序的安装程序。

  6. 第六步:创建应用程序清单并将应用程序嵌入其中。

  7. 第七步:测试应用程序。

  8. 第八步:使用 Authenticode 对应用程序签名。

  9. 第九步:加入 Windows Vista Logo Program。

在以上列出的步骤中,多数都为开发人员提供了范例和代码示例。有关以上所列步骤的详细信息,请参阅 Windows 帮助文件,该文件可从此处下载。

为标准用户部署和修补应用程序

通常,各企业必须考虑如何以自动化方式将应用程序安装到其用户的工作站上,以此来降低管理成本。这个问题基本上涉及两方面,一是如何将这些应用程序打包以进行部署,二是利用什么技术对其进行部署。在小型企业环境中,可能不需要采用加强的自动化部署机制。有关为标准用户部署和修补应用程序的详细信息,请参阅 Windows 帮助文件,该文件可从此处下载

故障排除常见问题

以下各部分详细介绍了 Windows Vista 中应用程序方面的一些常见问题。

这些常见问题包括:

  • ActiveX 安装问题

  • 未安装 ActiveX 文档

  • 需要应用程序、框架或外接程序

  • 进行安装/修补需要管理权限

  • 每用户的应用程序设置位置

  • UAC/DR 应用程序默认情况下在受保护目录中保存数据

有关详细信息,请参阅 Windows 帮助文件的“故障排除常见问题”部分,该文件可从此处下载

参考资料

本部分包括虚拟化参考资料和安全设置参考资料。

有关详细信息,请参阅 Windows 帮助文件的“参考资料”部分。

注意 本文的全部内容均可在 Windows 帮助文件中找到,该文件可从此处下载。若要在帮助文件中查找本主题,请依次展开“基础”、“安全应用程序”、“开发安全应用程序”,然后单击“用户帐户控制 (UAC)”。

转到原英文页面