存档:Windows 桌面应用 v3.0 的认证要求
文档版本: 3.0
文档日期: 2012 年 6 月 29 日
本文档包含桌面应用参加Windows 8桌面应用认证计划必须满足的技术要求和资格资格。 对于 Windows 7,此程序称为 Windows 软件徽标计划。
欢迎使用!
Windows 平台支持广泛的产品和合作伙伴生态系统。 在产品上显示 Windows 徽标表示 Microsoft 和你的公司之间对质量的一种关系和共同承诺。 客户信任你的产品上的 Windows 品牌,因为它可确保它符合兼容性标准,并在 Windows 平台上表现良好。 成功通过 Windows 应用认证可在 Windows 兼容中心展示你的应用,这也是在 Windows 应用商店中列出桌面应用引用的必要步骤。
Windows 应用认证计划由计划和技术要求组成,可帮助确保具有 Windows 品牌的第三方应用在运行 Windows 的电脑上易于安装且可靠。 客户重视所购买系统中的稳定性、兼容性、可靠性、性能和质量。 Microsoft 将其投资重点放在满足设计为在适用于电脑的 Windows 平台上运行的软件应用的这些要求。 这些工作包括兼容性测试,以便在运行 Windows 软件的电脑上实现体验一致性、提高性能并增强安全性。 Microsoft 兼容性测试是与行业合作伙伴合作设计的,并不断改进,以响应行业发展和消费者需求。
Windows 应用认证工具包用于验证是否符合这些要求,并替换 Windows 7 软件徽标计划中用于验证的 WSLK。 Windows 应用认证工具包是适用于Windows 8的 Windows 软件开发工具包 (SDK) 中包含的组件之一。 它还集成在 Microsoft Visual Studio 2012 Express for Windows 8 中。
应用资格
要使应用有资格获得Windows 8桌面应用认证,它必须满足以下条件和本文档中列出的所有技术要求。
- 它必须是独立应用
- 它必须在本地Windows 8.1计算机上运行
- 它可以是经过认证的 Windows Server 应用的客户端组件
- 它必须是代码和功能完成
1. 应用兼容且可复原
应用崩溃或停止响应的时间会导致用户非常沮丧。 应用应具有复原能力和稳定性,消除此类故障有助于确保软件更具可预测性、可维护性、性能和可信度。
- 1.1 你的应用不得依赖于 Windows 兼容模式、AppHelp 消息或任何其他兼容性修补程序
1.2 你的应用不得依赖于 VB6 运行时
1.3 你的应用不得加载任意 DLL 以使用 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows AppInit_dlls截获 Win32 API 调用。
2. 应用必须遵守 Windows 安全最佳做法
使用 Windows 安全最佳做法有助于避免暴露在 Windows 攻击面中。 攻击面是恶意攻击者利用目标软件中的漏洞来利用操作系统的入口点。 最严重的安全漏洞之一是特权提升。
- 2.1 你的应用必须使用强且适当的 ACL 来保护可执行文件 2.2 你的应用必须使用强且适当的 ACL 来保护目录 2.3 你的应用必须使用强且适当的 ACL 来保护注册表项 2.4 你的应用必须使用强且适当的 ACL 来保护包含对象的目录 2.5 你的应用必须减少非管理员对易受篡改的服务的访问 2.6 你的应用必须通过快速阻止服务从每 24 小时重启两次以上开始重启
Windows 应用认证计划将通过验证 ACL 和服务是否以不会使 Windows 系统处于危险之中的方式实现,来验证 Windows 攻击面是否未公开。
3. 应用支持 Windows 安全功能
Windows 操作系统具有许多支持系统安全和隐私的功能。 应用必须支持这些功能才能维护操作系统的完整性。 编译不当的应用可能会导致缓冲区溢出,进而导致拒绝服务或允许恶意代码执行。
- 3.1 你的应用不得使用 AllowPartiallyTrustedCallersAttribute (APTCA) 来确保对强名称程序集的安全访问
3.2 必须使用 /SafeSEH 标志编译应用,以确保安全异常处理
3.3 必须使用 /NXCOMPAT 标志编译应用,以防止数据执行
3.4 必须使用 /DYNAMICBASE 标志编译应用,以便地址空间布局随机化 (ASLR)
3.5 你的应用不得读取/写入共享 PE 部分
4. 应用必须遵守系统重启管理器消息
当用户启动关闭时,他们通常强烈希望看到关闭成功;他们可能急于离开办公室,只是希望他们的电脑关闭。 应用必须通过不阻止关闭来尊重此需求。 虽然在大多数情况下,关闭可能并不重要,但应用必须做好应对严重关闭的可能性的准备。
- 4.1 你的应用必须正确处理关键关闭
- 在严重关闭时,返回 FALSE 到WM_QUERYENDSESSION的应用将WM_ENDSESSION并关闭,而响应WM_QUERYENDSESSION超时的应用将终止。
- WM\_QUERYENDSESSION,LPARAM = ENDSESSION\_CLOSEAPP (0x1) 。
控制台应用可以调用 SetConsoleCtrlHandler 以指定将处理关闭通知的函数。 服务应用可以调用 RegisterServiceCtrlHandlerEx 来指定将接收关闭通知的函数。
- WM\_ENDSESSION,LPARAM = ENDSESSION\_CLOSEAPP (0x1) 。
应用至少应通过保存任何用户数据并声明重启后所需的信息来做好准备。
5. 应用必须支持干净、可逆的安装
干净、可逆的安装允许用户成功管理 (在其系统上部署和删除) 应用。
- 5.1 你的应用必须正确实现干净、可逆的安装
- DisplayName
- InstallLocation
- Publisher
- UninstallString
- VersionMajor 或 MajorVersion
- VersionMinor 或 MinorVersion
- 如果安装失败,应用应能够回滚计算机并将计算机还原到以前的状态。
- 在安装或更新结束时,重新启动计算机不应是唯一的选项。 用户应有机会稍后重启。
- Windows 清单工具和遥测工具需要有关已安装应用的完整信息。 如果使用基于 MSI 的安装程序,MSI 会自动创建以下注册表项。 如果未使用 MSI 安装程序,则安装模块必须在安装过程中创建以下注册表项:
6. 应用必须对文件和驱动程序进行数字签名
验证码数字签名允许用户确保软件是正版软件。 它还允许检测文件是否已被篡改,例如是否感染了病毒。 实施内核模式代码签名是一项 Windows 功能,称为代码完整性 (CI) ,它通过在每次文件映像加载到内存时验证文件的完整性来提高操作系统的安全性。 CI 检测恶意代码是否修改了系统二进制文件。 当内核模块的签名无法正确验证时,还会生成诊断和系统审核日志事件。
- 6.1 必须使用 Authenticode 证书对所有可执行文件 (.exe、.dll、.ocx、.sys、.cpl、.drv、.scr) 进行签名
6.2 应用安装的所有内核模式驱动程序必须具有通过 Windows 硬件认证计划获取的 Microsoft 签名。 所有文件系统筛选器驱动程序都必须由 Microsoft 签名。
6.3 例外和豁免
- 仅对未签名的第三方可再发行组件(驱动程序除外)考虑放弃。 需要一份通信证明,请求可再发行 () 的签名版本才能授予此豁免。
7. 应用不会基于操作系统版本阻止安装或应用启动检查
在没有技术限制的情况下,不要人为地阻止客户安装或运行其应用,这一点很重要。 通常,如果应用是为 Windows Vista 或更高版本的 Windows 编写的,则它们不必检查操作系统版本。
- 7.1 你的应用不得执行版本检查是否相等
- 作为一个包交付的应用,这些应用也在 Windows XP、Windows Vista 和 Windows 7 上运行,需要检查操作系统版本,以确定在给定操作系统上安装哪些组件。
- 仅检查操作系统的最低版本的应用仅在安装期间 (,而不是在运行时) 仅使用批准的 API 调用,并在应用清单中正确列出最低版本要求。
- 安全应用 (防病毒、防火墙等) 、系统实用程序 (,例如,仅使用批准的 API 调用检查操作系统版本的) 碎片整理、备份和诊断工具。
- 如果需要特定功能,检查该功能本身是否可用。 如果需要 Windows XP,检查 windows XP 或更高版本 (>= 5.1) 。 这样,检测代码将继续在 Windows 的未来版本上运行。 驱动程序安装程序和卸载模块绝不应检查操作系统版本。
8. 应用未在安全模式下加载服务或驱动程序
安全模式允许用户对 Windows 进行诊断和故障排除。 不得将驱动程序和服务设置为在安全模式下加载,除非它们用于存储设备驱动程序等基本系统操作或诊断和恢复目的(如防病毒扫描程序)。 默认情况下,当 Windows 处于安全模式时,它仅启动预装 Windows 的驱动程序和服务。
- 8.1 例外和豁免
- 必须在安全模式下启动的驱动程序和服务需要豁免。 豁免请求必须包括写入 SafeBoot 注册表项的每个适用的驱动程序或服务,并描述应用或服务必须在安全模式下运行的技术原因。 应用安装程序必须使用以下注册表项注册所有此类驱动程序和服务:
注意: 必须测试这些驱动程序和服务,以确保它们在安全模式下正常运行,不会出现任何错误。
9. 应用必须遵循用户帐户控制准则
某些 Windows 应用在管理员帐户的安全上下文中运行,应用通常会请求过多的用户权限和 Windows 特权。 控制对资源的访问使用户能够控制其系统,并保护他们免受不需要的更改。 不需要的更改可能是恶意的,例如控制计算机的 rootkit,或者是由具有有限权限的人员执行的操作的结果。 控制对资源的访问的最重要规则是提供用户执行其必要任务所需的最低访问标准用户上下文。 遵循用户帐户控制 (UAC) 指南在应用需要时为应用提供必要的权限,而不会使系统不断面临安全风险。 大多数应用在运行时不需要管理员权限,应该可以以标准用户身份运行。
- 9.1 应用必须具有定义执行级别的清单,并告知操作系统应用需要哪些权限才能运行
- 执行级别设置为 highestAvailable 和/或 requireAdministrator 的管理或系统工具
- 只有辅助功能或 UI 自动化框架应用将 uiAccess 标志设置为 true,以绕过用户界面特权隔离 (UIPI) 。 若要正确启动应用利用率,此标志必须是 Authenticode 签名的,并且必须驻留在文件系统中的受保护位置,即 Program Files。
- 应用清单标记仅适用于 EXE,不适用于 DLL。 这是因为 UAC 不会在创建进程期间检查 DLL。 还值得注意的是,UAC 规则不适用于 Microsoft 服务。 清单可以是嵌入的,也可以是外部的。
若要创建清单,请创建名称 <为 app_name>.exe.manifest 的文件,并将其存储在 EXE 所在的目录中。 请注意,如果应用具有内部清单,则忽略任何外部清单。 例如:
<requestedExecutionLevel level=“”asInvoker |highestAvailable |requireAdministrator“” uiAccess=“”true|false“”/>
- 必须将任何管理功能移动到使用管理权限运行的单独进程。 面向用户的应用,例如通过“开始”菜单上的程序组访问的应用,并且需要提升的应用必须经过验证码签名。
- 对于使用提升的权限 (requireAdministrator 或 highestAvailable) 运行其main进程的应用,需要豁免。 main进程标识为用户应用的入口点。 在以下情况下,将考虑放弃:
10. 默认情况下,应用必须安装到正确的文件夹
用户应使用文件的默认安装位置获得一致且安全的体验,同时保留在其所选位置安装应用的选项。 此外,还必须将应用数据存储在正确的位置,以允许多人使用同一台计算机,而不会损坏或覆盖彼此的数据和设置。 Windows 在文件系统中提供特定位置来存储程序和软件组件、共享应用数据以及特定于用户的应用数据
- 10.1 默认情况下,必须在“程序文件”文件夹中安装应用
- 注册表在 Software\Microsoft\Windows\CurrentVersion 下运行 HKLM 和 或 HKCU
- 注册表在 Software\Wow6432Node\Microsoft\windows\CurrentVersion 下运行 HKLM 和 或 HKCU
- “开始”菜单全部程序 > 启动
- 对于 %ProgramFiles% 中的本机 32 位和 64 位应用,%ProgramFiles (x86) %(适用于在 x64 上运行的 32 位应用)。 用户数据或应用数据不得存储在此位置,因为为此文件夹配置了安全权限。
- 例如,你的应用不应设置以下任一项:
- 使用正确的方法来安装文件,例如字体或驱动程序。
- 安装应用后,没有用于存储数据的正确用户位置。 安装后,应用尝试在计算机级别修改默认关联行为将失败。 相反,必须在每用户级别声明默认值,这可以防止多个用户覆盖彼此的默认值。
- 对于写入全局程序集缓存 (GAC 的应用,需要豁免) .NET 应用应将程序集依赖项保密,并将其存储在应用目录中,除非明确需要共享程序集。
11. 应用必须支持多用户会话
Windows 用户应能够运行并发会话,而不会发生冲突或中断。
- 11.1 你的应用必须确保在本地或远程多个会话中运行时,应用的正常功能不会受到不利影响
11.2 你的应用设置和数据文件不得跨用户保留
11.3 必须将用户的隐私和首选项与用户的会话隔离
11.4 应用实例必须相互隔离
- 这意味着来自一个实例的用户数据对应用的另一个实例不可见。 不应在活动用户会话中听到非活动用户会话中的声音。 如果多个应用实例使用共享资源,则应用必须确保不存在冲突。
- 请参阅 UAC 要求。
12. 应用必须支持 x64 版本的 Windows
随着 64 位硬件越来越普遍,用户希望应用开发人员通过将其应用迁移到 64 位来利用 64 位体系结构的优势,或者 32 位版本的应用在 64 位版本的 Windows 下运行良好。
- 12.1 你的应用必须本机支持 64 位,或者至少基于 32 位 Windows 的应用必须在 64 位系统上无缝运行,以保持与 64 位版本的 Windows 的兼容性
12.2 你的应用及其安装程序不得包含任何 16 位代码或依赖于任何 16 位组件
12.3 你的应用设置必须检测并安装适用于 64 位体系结构的正确驱动程序和组件
12.4 任何 shell 插件必须在 64 位版本的 Windows 上运行
12.5 在 WoW64 模拟器下运行的应用不应尝试颠覆或绕过 Wow64 虚拟化机制
- 如果应用需要检测它们是否在 WoW64 模拟器下运行的特定方案,则应通过调用 IsWow64Process 来执行此操作。
结论
随着这些要求的发展,我们将注意以下修订历史记录中的更改。 稳定的要求对于尽最大努力至关重要,因此我们将致力于确保我们所做的更改是可持续的,并继续保护和增强你的应用。
再次感谢你加入我们的承诺,提供出色的客户体验。
修订历史记录
Date | 版本 | 修订说明 | 文档链接 |
---|---|---|---|
2011 年 12 月 20 日 | 1.0 | 预览版文档的初始草稿。 | |
2012 年 1 月 26 日 | 1.1 | 更新到第 2 节。 | 1.1 |
2012 年 5 月 31 日 | 1.2 | 添加了摘要测试结果 | 1.2 |
2012 年 6 月 29 日 | 3.0 | Windows 8最终文档 | 3.0 |
详细了解桌面应用认证
要求 | 说明 | 更多详细信息 |
---|---|---|
兼容性和复原能力 | 崩溃 & 挂起对用户造成重大干扰,并造成挫折。 应用应具有复原能力和稳定性,消除此类故障有助于确保软件更具可预测性、可维护性、性能和可信度。 |
Windows Vista、Windows 7 和 Windows 8 操作系统 应用程序验证工具 AppInit DLL |
遵循Windows 安全中心最佳做法 | 使用 Windows 安全最佳做法有助于避免暴露在 Windows 攻击面中。 攻击面是恶意攻击者利用目标软件中的漏洞来利用操作系统的入口点。 最严重的安全漏洞之一是特权提升。 |
Attack Surface Analyzer 访问控制列表 |
支持Windows 安全中心功能 | Windows 操作系统已实施许多措施来支持系统安全和隐私。 应用程序必须支持这些措施才能维护 OS 的完整性。 编译不当的应用程序可能会导致缓冲区溢出,进而可能导致拒绝服务或使恶意代码执行。 |
BinScope 工具参考 |
遵循系统重启管理器消息 | 当用户启动关闭时,在绝大多数情况下,他们强烈希望看到关闭成功;他们可能急于离开办公室,“只是想”关闭他们的电脑。 应用必须通过不阻止关闭来尊重此需求。 虽然在大多数情况下,关闭可能并不重要,但应用必须做好应对严重关闭的可能性的准备。 |
Windows Vista 中的应用程序关闭更改 重启管理器开发 |
干净可逆安装 | 干净、可逆的安装允许用户成功管理 (在其系统上部署和删除) 应用。 |
如何:与 ClickOnce 应用程序一起安装必备组件 在 64 位系统上安装应用程序 |
对文件和驱动程序进行数字签名 | 验证码数字签名允许用户确保软件是正版软件。 它还允许检测文件是否已被篡改,例如,如果文件已被病毒感染。 实施内核模式代码签名是一项 Windows 功能,称为代码完整性 (CI) ,它通过在每次文件映像加载到内存时验证文件的完整性来提高操作系统的安全性。 CI 检测恶意代码是否修改了系统二进制文件。 当内核模块的签名无法正确验证时,还会生成诊断和系统审核日志事件。 |
Windows 上内核模块的数字签名 |
不要基于操作系统版本阻止安装或应用启动检查 | 在没有技术限制的情况下,不要人为地阻止客户安装或运行其应用,这一点很重要。 通常,如果应用是为 Windows Vista 或更高版本编写的,则它们应该没有理由检查操作系统版本。 |
操作系统版本控制 |
不要在安全模式下加载服务和驱动程序 | 安全模式允许用户对 Windows 进行诊断和故障排除。 除非系统的基本操作需要 (例如,存储设备驱动程序) 或出于诊断和恢复目的 (例如,防病毒扫描程序) ,驱动程序和服务不得设置为在安全模式下加载。 默认情况下,安全模式不会启动大多数未预装 Windows 的驱动程序和服务。 除非系统出于基本操作或诊断和恢复目的需要它们,否则它们应保持禁用状态。 |
确定操作系统是否在安全模式下运行 |
遵循用户帐户控制 (UAC) 准则 | 某些 Windows 应用在管理员帐户的安全上下文中运行,许多应用需要过多的用户权限和 Windows 特权。 通过控制对资源的访问,用户可以控制其系统免受不需要的更改 (不需要的更改可能是恶意的,例如 rootkit 偷偷接管计算机,或来自具有有限权限的人员的操作,例如,员工在工作计算机上安装禁止的软件) 。 控制对资源的访问的最重要规则是提供用户执行其必要任务所需的最低访问标准用户上下文。 遵循 UAC 指南可在需要时为应用提供必要的权限,而不会使系统不断面临安全风险。 |
用户帐户控制 UAC:应用程序更新指南 |
默认安装到正确的文件夹 | 用户应使用文件的默认安装位置获得一致且安全的体验,同时保留将应用安装到所选位置的选项。 此外,还必须将应用数据存储在正确的位置,以允许多人使用同一台计算机,而不会损坏或覆盖彼此的数据和设置。 |
安装/卸载要求摘要 |
支持多用户会话 | Windows 用户应能够运行并发会话,而不会发生冲突或中断。 |
远程桌面服务编程指南 |
支持 Windows 的 x64 版本 | 随着 64 位硬件越来越普遍,用户希望应用开发人员通过将其应用迁移到 64 位来利用 64 位体系结构的优势,或者 32 位版本的应用在 64 位版本的 Windows 下运行良好。 |
应用程序兼容性:Windows Vista 64 位 |