Windows 8 和 Windows Server 2012 兼容性手册



Windows 8 和 Windows Server 2012兼容性手册有关 Windows 兼容性、可靠性以及性能的开发人员指南2012 年 9 月 11 日?摘要在本手册 中,我们提供有关 Windows??8 和 Windows Server??2012 操作系统中的更改功能和新功能的信息。还提供验证现有和计划的应用与新操作系统的兼容性的指南。我们假定你熟悉以前版本的 Windows。本手册 面向设计为在?Microsoft?Windows?环境中使用的应用的第三方开发人员,可以在 (v=vs.85).aspx 处查看本手册,并且可以在 处下载。本内容适用于: Windows 8 Windows Server 2012 Windows Server 2008 R2Windows?7Windows Server 2008Windows Vista?Windows Server 2003Windows Server 2003免责声明:本文档按“原样”提供。本文档中所述的信息和观点(包括引用的?URL?和其他 Internet 网站)可能随时更改,恕不另行通知。使用本文档所带来的风险由你自行承担。本文档不向你提供使用?Microsoft?产品中任何知识产权的合法权利。你可以复制和使用本文档作为内部参考之用。你可以修改本文档作为内部参考。? 2011 Microsoft. 保留所有权利。目录 TOC \o "1-2" \h \z \u 引言 PAGEREF _Toc337160820 \h 4客户端和服务器兼容性 PAGEREF _Toc337160821 \h 5操作系统版本 PAGEREF _Toc337160822 \h 6安全应用检测规则更新 PAGEREF _Toc337160823 \h 7确定填充码状态 PAGEREF _Toc337160824 \h 8服务器应用必须能够在没有服务器图形 Shell 的情况下运行 PAGEREF _Toc337160825 \h 9从 Windows 8 中删除了远程数据服务服务器组件 PAGEREF _Toc337160826 \h 12文件类型和协议关联模型 PAGEREF _Toc337160827 \h 13桌面活动审查器 PAGEREF _Toc337160828 \h 15东亚语言输入指南 PAGEREF _Toc337160829 \h 19软件输入面板与软件键盘 PAGEREF _Toc337160830 \h 22将文本输入切换从每线程更改为每用户 PAGEREF _Toc337160831 \h Framework 4.5 为默认值,.NET Framework 3.5 为可选 PAGEREF _Toc337160832 \h 25启动默认的 Web 浏览器或 Windows 8 应用后,可能无法显示桌面应用 PAGEREF _Toc337160833 \h 28高对比度模式 PAGEREF _Toc337160834 \h 29应用(可执行文件)清单 PAGEREF _Toc337160835 \h 33以队列形式呈现的模型已弃用 PAGEREF _Toc337160836 \h 37Windows?8 的程序兼容性助手方案 PAGEREF _Toc337160837 \h 38删除了桌面小工具 PAGEREF _Toc337160838 \h 56高级格式 (4K) 磁盘兼容性更新 PAGEREF _Toc337160839 \h 57逻辑单元的精简配置 PAGEREF _Toc337160840 \h 67增强存储现在对于 WINPE 和服务器 SKU 是可选的 PAGEREF _Toc337160841 \h 69虚拟磁盘服务正在转换为 Windows 存储管理 API PAGEREF _Toc337160842 \h 70删除了本地卷的以前版本的 UI PAGEREF _Toc337160843 \h 72StorAHCI 取代了 MSAHCI PAGEREF _Toc337160844 \h 73Windows 7 备份和还原已弃用 PAGEREF _Toc337160845 \h 74卸载数据传输 PAGEREF _Toc337160846 \h 75桌面窗口管理器始终启用 PAGEREF _Toc337160847 \h 77Direct2D 呈现不支持呈现到 Internet?Explorer?9 中的“富”元文件 PAGEREF _Toc337160848 \h 80DX9 过时硬件支持的变更 PAGEREF _Toc337160849 \h 81MSAA 不可用于 Windows 应用商店应用 PAGEREF _Toc337160850 \h 82已经对 NDIS 6.30 驱动程序弃用端口 3 PAGEREF _Toc337160851 \h 83新功能和增强功能 PAGEREF _Toc337160852 \h 84提前启动反恶意软件 PAGEREF _Toc337160853 \h 85内核模式驱动程序的安全启动功能签名要求 PAGEREF _Toc337160854 \h 87测量的启动 PAGEREF _Toc337160855 \h 88启动应用 PAGEREF _Toc337160856 \h 89自动维护 PAGEREF _Toc337160857 \h 92第三方输入法编辑器 PAGEREF _Toc337160858 \h 100新 API 允许应用向存储介质发送 “TRIM 和 Unmap” 提示 PAGEREF _Toc337160859 \h 107多路径 I/O 现在支持扩展存储请求块 PAGEREF _Toc337160860 \h 110弹性文件系统 PAGEREF _Toc337160861 \h 112文件服务器 API 支持 PAGEREF _Toc337160862 \h 113新的文件历史记录功能 PAGEREF _Toc337160863 \h 114操作系统现在控制光盘驱动器的电源 PAGEREF _Toc337160864 \h 115支持 USB 3.0 PAGEREF _Toc337160865 \h 116工具、最佳做法和指南 PAGEREF _Toc337160866 \h 117Windows 评估工具包 PAGEREF _Toc337160867 \h 118Windows 应用认证包 PAGEREF _Toc337160868 \h 123Windows Server 应用认证工具包 PAGEREF _Toc337160869 \h 125Windows 硬件认证工具包 PAGEREF _Toc337160870 \h 127引言Windows?8 和 Windows Server 2012?引入了最新的操作系统技术和软件开发平台,可供全球的应用开发人员和企业使用。为了进一步改进?Windows?的安全性、可靠性、性能以及用户体验,Microsoft?引入了很多新的功能、改进了现有的功能并剔除了一些功能。尽管 Windows 8 和 Windows Server 2012 的目标是与大多数针对之前发布的操作系统编写的各个应用保持较高的兼容性,但由于进行了创新、加强了安全性并且提高了可靠性,不可避免会出现某些兼容性问题。总的来说,Windows?8?和 Windows Server 2012 与现有应用的兼容性还是比较高的。本文档是基于 Windows Vista 和 Windows Server 2008 应用程序兼容性手册 () 以及 Windows 7 和 Windows Server?2008 R2 应用程序质量手册 ((v=VS.85).aspx) 中包含的概念而构建的。与这两个手册一样,本文档向你介绍如何验证你的应用是否与新的操作系统兼容,并且概述一些 Windows?8 和 Windows Server?2012 中已知的不兼容的问题。此外,Microsoft 正在投资几个新功能和增强功能,目的是帮助你构建更高质量的应用以及当应用无法在 Windows?8 和 Windows?Server?2012 上正常工作时帮助你进行诊断。本手册 包含三十多个主题,这些主题分为三个主要部分: 客户端和服务器兼容性新功能和增强功能工具和最佳做法在此版本的手册 中新增了以下四个主题:从 Windows 8 中删除了 RDS 服务器组件东亚语言输入指南软件输入面板与软件键盘删除了桌面小工具更新了一个主题:将文本输入切换从每线程更改为每用户我们邀请你查看这些主题,以便了解如何优化你的应用以及如何利用此最新版本的 Windows 提供的功能。客户端和服务器兼容性本部分介绍你应该特别注意的操作系统的更改,因为这些更改可能会影响现有的应用,同时还介绍应该如何在客户端、服务器或两者上设计新的应用。下面是本部分所涉及的主题列表,按功能区域分组:AppCompat操作系统版本安全应用检测规则更新确定填充码状态服务器应用必须能够在没有服务器图形 Shell 的情况下运行从 Windows?8 中删除了 RDS 服务器组件文件类型和协议关联模型桌面活动审查器东亚语言输入指南软件输入面板与软件键盘将文本输入切换从每线程更改为每用户.NET Framework 4.5 为默认值,.NET Framework 3.5 为可选启动默认的 Web 浏览器或 Windows?8 应用后,可能无法显示桌面应用高对比度模式应用(可执行文件)清单以队列形式呈现的模型已弃用Windows?8 的程序兼容性助手方案删除了桌面小工具存储和文件系统高级格式 (4K) 磁盘兼容性更新逻辑单元的精简配置 增强存储现在对于 WINPE 和服务器 SKU 是可选的VDS 正在过渡到基于 WMIv2 的 Windows 存储管理 API删除了本地卷的以前版本的 UIStorAHCI 取代了 MSAHCIWindows?7 备份和还原已弃用卸载数据传输其他桌面窗口管理器始终启用Direct2D 不支持在 Internet Explorer?9 中呈现为“富”元文件DX9 过时硬件支持中的变更MSAA 不可用于 Windows 应用商店应用已经对 NDIS 6.30 驱动程序弃用端口?3 操作系统版本平台客户端 — Windows?8 服务器 — Windows?Server 2012 描述Windows?8 和 Windows?Server?2012 的内部版本号为 6.2。所有 API 版本都将返回此版本号 (GetVersion, GetVersionEx)。表现此更改的表现特定于应用。这意味着明确检查操作系统版本的任何应用都将获得较高的版本号,这可导致以下一种或多种情形:应用安装工具可能无法安装应用,并且应用可能无法启动 应用可能变得不稳定或者发生故障 应用可能生成错误消息,但会继续正常运行 缓解操作对于依赖之前版本的客户端应用,使用以下 VersionLie 填充码:Win7RTMVersionLie(也可以用在服务器上)VistaSP2VersionLieWinXPSP3VersionLie若要检查版本而不阻止用户安装或运行应用,请进行“大于或等于检查”。你可以将其与 VerifyVersionInfo Win32 API 结合使用((VS.85).aspx)。解决方案通常,应用不应该进行操作系统版本检查。如果某个应用需要某个特定的功能,最好尝试查找此功能,仅当缺少所需的功能时才会失败。至少,应用应该始终接受大于或等于所支持的操作系统最低版本的版本号。仅当有特定的法律、商务或者系统组件要求时,才会出现例外。资源应用程序兼容性工具包下载 已知的兼容性修复程序、兼容性模式以及 AppHelp 消息 安全应用检测规则更新平台客户端 — Windows?8 服务器 — Windows?Server 2012 描述添加到 Windows?8 中的 Windows 应用商店应用全都安装在 “Program Files” (%programfiles%) 下一个名为 \program files\WindowsApps 的通用位置。表现这可能会导致与现有配置发生冲突,并且某些防病毒/反恶意软件探测器会将此位置视为可能存在问题的位置。缓解操作当前建议如下:不在 \program files\WindowsApps 下存储任何自定义应用 防病毒/反恶意软件供应商应该更新其启发,以便不会将该位置标识为恶意位置确定填充码状态平台客户端 — Windows?8 服务器 — Windows?Server 2012 描述当由于各种原因而填充应用时,Windows?8 会记录事件。确定你的应用是否被填充的最简单方法是检查事件查看器。转到 Applications and Services Logs\Microsoft Windows Application-Experience Program\Telemetry。缓解操作避免填充的最简单方法是重命名可执行文件或者将主要版本增加?1(重新编译可执行文件)。服务器应用必须能够在没有服务器图形 Shell 的情况下运行平台服务器 — Windows?Server 2012 描述服务器图形 Shell 功能包括 Windows?Explorer 和 Internet?Explorer,默认情况下在 Windows?Server?2012 的“带有 GUI 的服务器”安装上安装。可以卸载服务器图形 Shell 功能以便减少可能的服务和性能占用,因此可能会导致限制服务器的重新启动次数,同时仍然允许管理工具在服务器上本地运行。管理员卸载服务器图形 Shell 之后,服务器处于“最精简服务器界面”配置中:然后,管理员可以选择在“最精简服务器界面”配置(该配置包含一组本地管理工具)中运行,以此作为默认设置,而不选择在“带有 GUI 的服务器”配置中运行。这会允许本地监控和管理,同时会减少资源使用并降低服务的频率。如果管理员需要其中的功能,那么他们可以稍后重新安装服务器图形?Shell。(管理员还可以从服务器核心安装启动,并且使用“按需功能”功能“构建”到“最精简服务器界面”配置。)服务器应用必须能够在“最精简服务器界面”配置中运行,以便利用减少的资源利用以及服务占用。该功能可以通过以下两种方式实现:允许管理员选择不安装需要服务器图形 Shell 的应用部分、检测服务器图形 Shell 是否存在并禁用应用的某些方面。“最精简服务器界面”减少了资源以及服务占用,因为服务器图形?Shell?中包含的很多 API 和二进制文件在此配置中不可用。在恰当的情况下,服务器应用还应该允许通过其他 Windows 服务器或 Windows 客户端安装进行远程管理(最好通过 Windows?PowerShell 远程处理)。这样便能够更好地对“最精简服务器界面”配置中的一台或多台计算机进行集中管理,甚至对较低占用配置(如“服务器核心”)的计算机进行集中管理。表现如果某个应用需要“最精简服务器界面”配置中不可用的任何 API 或二进制文件,那么该应用可能无法在屏幕上正确显示和/或该应用无法使用。缓解操作服务器应用开发人员应该标识他们应用中需要任何已删除的 API 或二进制文件的那些部分,并加入用于服务器管理员标识使用“最精简服务器界面”时无法正常运行的应用部分的信息。如果应用的那些部分可以进行选择性安装或者对产品功能来说不是绝对需要的,那么仍然可以安装该应用并在“最精简服务器界面”配置下运行。如果在没有服务器图形?Shell?的情况下应用根本无法使用,则应该记录此限制并且应该指示服务器管理员安装服务器图形?Shell。(如果添加到服务器核心安装,则可能需要使用“按需功能”添加功能。)此外,应用应该在启动时检查所有所需的文件是否可用,因为在安装该应用之前或之后,可以随时卸载服务器图形 Shell。解决方案依赖最小的可能依赖关系集,对应用进行模块化处理以便核心应用功能可以工作,而无需安装更多重量级用户界面组件。开发以下应用:不需要任何已删除 API 或二进制文件,而是依赖“最精简服务器界面”或“服务器核心”中包含的功能。这将减少维护需求,同时提高性能和用户满意度。当存在服务器图形?Shell?可用时可能会添加大量功能的应用部分时,应用开发人员可以:允许有选择地安装利用服务图形 Shell 的其他功能,因此可以从“最精简服务器界面”配置的安装中忽略这些功能。检查服务器图形 Shell 是否存在并且适应应用行为应用开发人员还应该确保服务器应用尽可能能够正确进行远程管理。检测“最精简服务器界面”和“服务器核心”Windows?Server 将为安装的每个服务器级别安装一个对应的注册表值。你可以查询这些键是否存在,以确定是否安装和启用了服务器图形?Shell?或“最精简服务器界面”功能。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows?NT\CurrentVersion\Server\ServerLevels:Server CoreMinimal Server InterfaceServer Graphical ShellServerCore=1XXXServer-Gui-Mgmt=1XXServer-Gui-Shell=1X上表中的 “X” 表示当安装相应的功能时会存在该注册表项。请注意,这些服务器级别是累加的;如果安装了服务器图形?Shell,则也安装了“最精简服务器界面”和“服务器核心”。在这种情况下,两个注册表项都 将存在。测试检查你的应用代码,看是否有使用任何已删除的?API?和二进制文件的要求。从“核心应用程序”二进制文件中删除这些内容的任何实例之后,在不包含服务器图形?Shell?的环境中测试你的应用。诸如进程监视器之类的工具可能会对此有所帮助。如果你无法完全停止对这些?API?和二进制文件的使用,则确保你的应用在“最精简服务器界面”或“服务器核心”上运行时平稳地失败。资源MSDN 上的现有服务器核心文档 (v=vs.85).aspx从 Windows?8 中删除了远程数据服务服务器组件平台客户端 — Windows 8服务器 — Windows Server 2012描述远程数据服务 (RDS) 服务器在 Windows?8 中不可用:删除了文件 msadcf.dll(该文件托管默认的“业务对象”RDSServer.DataFactory)及其关联的文件(msadcfr.dll、msadcfr.dll.mui、handler.reg 和 handsafe.reg)删除了文件?msdfmap.dll(该文件为默认的处理程序),还删除了文件 msdfmap.ini删除了文件 msadcs.dll(即 ISAPI)表现客户无法在 Windows?8 上托管 RDS 服务器。缓解操作 客户可以在具有?Windows?7?或其他版本级别较低的操作系统的计算机上保留他们的 RDS 服务器。解决方案客户可以在具有?Windows?7?或其他版本级别较低的操作系统的计算机上保留他们的 RDS 服务器。资源数据访问技术路线图 文件类型和协议关联模型平台客户端 — Windows 8 服务器 — Windows Server 2012 描述在?Windows?8?中,已经对文件类型和协议关联模型进行了更改。应用不再能通过编程方式将自己设置为某个文件类型或协议的默认处理程序。现在,用户始终控制文件类型或协议的默认处理程序。表现此更改呈现给用户的方式取决于应用的设计方式,例如:很多应用都在每次运行时检查它们是否是默认设置,如果不是,则会提示用户将它们设为默认设置。但是,由于应用不再可以通过精确查询来确定哪个应用是文件类型或协议的默认处理程序,因此这些行为都无效。很多应用在其安装程序中都有一个内置的对话框或菜单,该对话框或菜单指定应用应该作为默认设置的文件类型。但是,由于应用不再可以通过编程方式将自己设置为文件类型或协议的默认处理程序,因此该行为不再有效。缓解操作用户可以采取很多措施来适应这些更改:通过上下文提示用户选择默认的应用来处理文件类型、协议或两者(尚未指定其中一个时)为用户提供在安装可以处理文件类型或协议的新应用之后更改其默认处理程序的选项默认程序控制面板允许用户为应用或为文件类型、协议或两者设置默认值;应用可以链接到控制面板可以通过 Windows 资源管理器更改默认设置 解决方案由于这些更改的缘故,我们提供了此 API 指南:IApplicationAssociationRegistration?API 中的某些方法调用功能已进行了更改,不应再使用。不要 调用?QueryAppIsDefault/QueryAppIsDefaultAll?来确定应用是否是默认设置不要 调用 QueryCurrentDefault 来确定哪个应用(如果有)是当前默认值不要 调用 SetAppIsDefault/SetAppIsDefaultAll 来设置默认应用指南如下:不要 进行查询来查看哪个应用是文件类型或协议的默认处理程序不要 尝试监视文件类型或协议的默认处理程序中的更改不要 尝试将应用设置为文件类型或协议的默认处理程序不要 尝试从应用内管理文件类型或协议的默认设置如果你想允许应用的用户访问默认的管理?UI(不再支持应用内的管理 UI),请 与设置默认程序控制面板集成调用 IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI 允许用户访问特定应用的“设置默认程序”控制面板页测试进行测试以验证应用是否在“设置默认程序”控制面板中正确注册进行测试以验证应用是否正确注册,从而出现在注册进行处理的文件类型、协议或两者的 OpenWith 列表中进行测试以验证安装应用且用户调用应用注册进行处理的文件类型、协议或两者后是否出现新应用通知资源Windows 开发者预览版桌面应用中文件类型和协议关联的最佳做法文件类型关联和自动播放生成会议演示文稿 桌面活动审查器 平台客户端 — Windows 8 注意:仅在支持连接待机的?Windows?8?客户端计算机上提供?DAM。服务器 SKU 上不提供 DAM。注意:Windows 应用商店应用不会受到 DAM 的影响。描述我们的客户正在转向更轻、更小且更灵活的平台来满足他们的计算需求。在转向移动设备的过程中,用户越来越关心他们设备的电池寿命。桌面活动审查器 (DAM) 是 Windows 8 中为了确保支持连接待机的设备拥有始终如一的较长电池使用时间而设计的几个新功能之一。当打开设备电源,但关闭屏幕时会发生连接待机。在这种电源状态中,从技术上来说系统始终“打开”(目的是支持诸如邮件、VoIP、社交网络以及与 Windows应用商店应用即时消息传递之类的关键方案)。这类似于用户按电源按钮时智能手机所处的状态。因此,在连接待机期间软件(包括应用和操作系统软件)必须行为良好。创建 DAM?的目的是采用类似于睡眠状态(ACPI?设备上的?S3)的方式抑制桌面应用执行。实现方式是在进入连接待机时挂起或限制系统中的桌面软件进程。这样支持连接待机的系统便能够提供最小的资源使用以及始终如一的较长电池使用时间,同时 Windows应用商店应用能够提供他们承诺的连接体验。详细信息DAM?是一个内核模式驱动程序,如果系统支持连接待机,则会在系统启动时加载和初始化该程序。(这通过评估?CallNtPowerInformation?返回的SYSTEM_POWER_CAPABILITIES 结构中的?AOAC?字段是否设置为?TRUE?来确定)。当启用 DAM 且创建你的桌面进程时,DAM 会将你的进程添加到系统管理的作业对象:如果进程是在会话 0 中创建的,则 DAM 会将该进程添加到要限制的作业对象。如果进程是在交互式会话(会话 1 或更高)中创建的,则?DAM?会将该进程添加到要挂起的作业对象。注意:对于?Windows?8,可以嵌套作业对象。这意味着?DAM?对作业对象的使用不会干扰应用对作业对象的现有使用。当屏幕打开时,DAM?未占用,不影响系统上的任何进程。当系统处于连接待机状态时,根据系统上的活动,DAM 可能会限制或挂起进程。要挂起的进程挂起它们的所有线程(任何情况下都不允许运行);保持应用状态(进程内存)。要限制的进程在挂起和取消挂起之间循环(大多数时间处于挂起状态)请注意,Windows?还可能会检测是否正在发生重要活动,并且在该活动期间可能会在较长的时间内对受限制的服务取消挂起。还要注意,当处于连接待机状态时,传感器和网络可能无法使用,因此受限制的进程应该设计为对较差的网络条件具有弹性(对于大多数进程来说,这不需要进行任何更改)。当使用或未使用 DAM 挂起时,DAM 触发向要挂起且已选择消息传递的进程对象发送 WM_POWERBROADCAST 消息(通过 API 调用或兼容性填充码,这将在后面部分进行介绍)。几秒钟的延迟之后,DAM 挂起该进程。使用或未使用?DAM?限制时都没有任何通知。进程应该不需要修改;进程继续工作,只是速度较慢。表现在处于连接待机状态期间,通常会挂起或限制进程。对于大多数挂起的应用来说,这应该与 S3 挂起/恢复或 S4 休眠/恢复转换非常类似。表现可能包括但不限于运行时间与时钟时间的不一致、计时器行为的不一致,或者完成挂起之前或之后操作系统状态的显著更改。挂起和限制是作为一个整体发生的(所有可挂起的进程都一致地挂起和取消挂起,并且所有可限制的进程都一致地限制和取消限制),因此两个挂起进程或两个限制进程之间的通信不会引发问题。依赖进程间通信的软件可能需要特殊考虑:会话 0(已限制)和会话 1+(已挂起)之间的通信 — 示例包括表示当前服务状态的任务栏图标或 UI 组件用户模式(会话?0?或?1)和驱动程序(既未受限制也未挂起)之间的通信) — 示例包括代表驱动程序工作的服务在这些情况下,如果进程间通信未正确处理,则应用可能会显示挂起或无响应(但用户可能无法直接看到该影响,因为当处于连接待机状态时屏幕将关闭)。但是多数情况下,应该已经针对进程间通信问题开发了强大的服务和驱动程序。为 Web 创建软件或依赖 Web 的供应商应该考虑进程挂起如何影响连接生存时间和握手。此外,由于处于连接待机模式时网络连接可能不可用,在会话?0?中创建进程的开发人员应该特别注意间歇的网络连接如何影响进程。解决方案Windows应用商店应用不会受到?DAM?的影响。如果你的桌面应用受到?DAM?的影响,则可以使用以下方法之一请求在进行挂起之前进行通知(例如,为了保存状态或关闭网络连接):如果你的应用有一个窗口?(HWND)?并且你希望通过你的窗口程序处理这些通知,则调用?RegisterSuspendResumeNotification?来注册这些消息(或者调用UnregisterSuspendResumeNotification 取消注册)。你可以在 Flags 参数中使用?DEVICE_NOTIFY_WINDOW_HANDLE?并传入窗口的?HWND?作为 Recipient 参数。收到的消息为 WM_POWERBROADCAST 消息。如果你的应用没有窗口?(HWND)?或者你希望直接回调,则调用PowerRegisterSuspendResumeNotification 来注册这些消息(或者调用PowerUnregisterSuspendResumeNotification 来取消注册)。你必须在DEVICE_NOTIFY_CALLBACK 中使用 Flags 参数并在 Recipient 参数中传递类型 PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS 的值。如果你的应用无法重新编译,则可以选择通过?AppCompat?工具包(使用 PromoteDAM 填充码)接收这些 WM_POWERBROADCAST 消息。挂起消息为 WM_POWERBROADCAST,其中 wParam=PBT_APMSUSPEND;该消息同时播发到系统上所有选择的进程。你的应用必须快速有效地在挂起路径上进行任何工作。播发通知后超时是全局的,而非针对每个进程,因此如果该路径中所需的工作非常多,那么你的进程可能会争用系统资源。恢复消息为?WM_POWERBROADCAST,其中?wParam=PBT_APMRESUME;恢复后,该消息同时播发到进程中所有选择的进程。无法保证系统从联机待机状态退出的相对传递时间。测试跨连接待机转换测试软件。资源Windows 7 的移动电池使用时间解决方案 SYSTEM_POWER_CAPABILITIES (v=vs.85).aspx CallNtPowerInformation 函数http:/msdn.library/windows/desktop/aa372675(v=vs.85).aspx 作业对象(v=vs.85).aspx RegisterSuspendResumeNotification UnregisterSuspendResumeNotification PowerRegisterSuspendResumeNotification AppCompat 工具包 东亚语言输入指南平台客户端 — Windows 8服务器 — Windows Server 2012描述在?Windows?8?中,为日语、简体中文、繁体中文、朝鲜语的大多数?UI?一致地启用 ClearType 字体,在经典和沉浸式样式中都是如此。字体系列字体名称不变: 日语朝鲜语简体中文繁体中文Meiryo UIMalgun GothicMicrosoft YaHei UIMicrosoft JhengHei UI字体规格(9? 磅)在 Windows?8 中,为了提供与英文 UI 相同的 UI 外观以及一致的用户体验,简体中文和繁体中文 UI 字体更加严格遵守 Segoe UI 规格。9 磅Microsoft Yahei UIMicrosoft JhenHei UIMalgun TothicMeiryo UISegoe UItmAscent1312121212tmDescent44333tmHeight1716151515tmInternalLeading54333高度(100DU 的像素值)213200188188188注册表设置Windows?8 已经更新了东亚语言的 FontLink 链并在以下位置进行了定义:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink,目的是支持简体中文和繁体中文的新字体: 日语 SKU:指向 Meiryo?UI 的 Segoe?UI 链接朝鲜语?SKU:指向 Malgun?Gothic 的 Segoe?UI 链接简体中文 SKU:指向 Microsoft?YaHei?UI 的 Segoe?UI 链接繁体中文 SKU(包括香港 SKU):指向 Microsoft JhengHei UI 的 Segoe UI 链接此外,所有 UI 字体都彼此链接。Segoe UI 和东亚 (EA) ClearType 字体之间的字体粗细映射:Segoe UIEA ClearType 字体细常规半细常规常规常规半粗粗体粗体粗体沉浸式阅读对于沉浸式阅读方案(如电子书籍)来说,UI?字体为默认字体。沉浸式阅读假定较长的阅读时间并且意味着可能会将较长的文本分为多个章节。电子阅读应用可能允许读者更改字体。我们还期望更多电子书内容采用设计人员指定的常用嵌入字体格式。交互式文本UI?字体用在诸如用户在其中撰写文本的邮件或聊天之类的应用程序中。这些字体属于为阅读屏幕上的较长文本而设计的?sans?serif?字体系列。它是?Microsoft Outlook、Word 和 PowerPoint 中的默认字体。现代 CSS 实现中用于阅读和交互的东亚语言字体:默认设置@authoringFontFamily: Calibri, Verdana, Arial, Helvetica, sans-serif;@readingFontFamily: Cambria, Times New Roman, Times, serif;@fontSizeAuthoring: 14.66667px;@fontSizeReading: 14.66667px;日语@authoringFontFamily: Meiryo, Calibri, Verdana, Arial, Helvetica, sans-serif;@readingFontFamily:?MS Gothic, Cambria, Times New Roman, Times, serif;@fontSizeAuthoring: 15.33px;@fontSizeReading: 14.66667px;朝鲜语@authoringFontFamily: Malgun Gothic, Calibri, Verdana, Arial, Helvetica, sans-serif;@readingFontFamily:?Batang, Cambria, Times New Roman, Times, serif;@fontSizeAuthoring: 15.66px;@fontSizeReading:?14.66667px;zh-Hans@authoringFontFamily: Microsoft YaHei, Calibri, Verdana, Arial, Helvetica, sans-serif;@readingFontFamily:?SimSun, Cambria, Times New Roman, Times, serif;@fontSizeAuthoring: 14.66667px;@fontSizeReading: 15.5px;zh-Hant@authoringFontFamily: Microsoft JhengHei, Calibri, Verdana, Arial, Helvetica, sans-serif;@readingFontFamily: MingLiu, Cambria, Times New Roman, Times, serif;@fontSizeAuthoring: 14.66667px;@fontSizeReading: 14.66667px;表现Windows?8?中的此字体更改可能会影响在未指定字体的情况下调用公共控件和公共文件对话框的新应用程序和现有应用程序。例如,如果在未设置特定字体的 MFC 应用程序中有一个?CPropertySheet 对话框,则属性表将使用新的 ClearType 字体。另一方面,此更改不会影响 WinForms 控件。测试测试你的应用程序,看是否需要进行任何修改,如指定字体或调整控件大小。软件输入面板与软件键盘平台客户端 — Windows 8描述在以前版本的?Windows?中,软件键盘用来在没有物理键盘的情况下输入字符。设计软件输入面板 (SIP) 的目的是改进 Windows?8 触摸设备的输入体验。东亚语言 SIP 发送字符代码而不是发送 v-key 事件,这与软件键盘的行为方式不同。如果应用程序或网站只处理键事件,那么该应用程序可能无法如期工作。表现如果应用程序完全基于 v_Key 事件,则用户将无法对该应用程序执行操作。有一些网站在 JavaScript 代码中使用了 v_Key 事件,目的是在用户发送之前获取输入文本。例如,当用户输入邮政编码时,网站可以显示地址。如果网站无法显示地址候选,则用户可以自己输入地址。缓解操作用户可以使用标准布局,代替优化布局。另一种选择是使用英文 SIP。解决方案开发人员可以将应用程序更改为处理字符代码,而不处理?v_Key?事件。使用 JavaScript 事件处理程序 onKeyUp() 和 onKeyDown() 的网站可以使用 oninput()。备用选项是禁用 TSF。将文本输入切换从每线程更改为每用户平台客户端 — Windows 8 服务器 — Windows Server 2012 描述以前,输入语言键盘布局和 IME 开关(包括 IME 模式)是特定于线程的。例如,如果用户打开了一个记事本文件并且将输入语言从英语更改为日语,然后又打开了一个写字板文件并且将输入语言从英语更改为德语,那么记事本文件将保留日语作为它的输入语言,而写字板文件将保留德语作为它的输入语言。在 Windows?8 和 Windows?Server?2012 中,我们将此每线程的方法更改为每用户的方法。这意味着当在一个应用中更改输入语言或?IME?模式时,如果焦点在其他应用上,则也会在其他应用上应用此更改。在上面的示例中,当用户将记事本文件输入语言更改为日语,然后打开一个写字板文件时,写字板输入语言也将为日语。如果用户将写字板输入语言更改为德语,则当用户返回记事本文件时,记事本文件的输入语言将为德语,而不是日语。另一个示例是,如果用户在记事本文件中将朝鲜语?IME?模式更改为字母数字模式,然后打开另一个记事本文件,那么该文件也将采用字母数字模式打开。由于默认情况下输入切换现在采用每用户而不是每线程的机制,因此某些桌面应用行为可能有所不同。会话使用默认的方法启动,然后当前设置跟随焦点。每用户输入切换将对新打开的应用使用当前输入方法。桌面应用中使用的以下 API 会受到影响: ImmSetConversionStatus ActivateKeyboardLayout 这些 API 中的语言或 IME 模式将跟随焦点并且在线程之间应用,而不是仅应用于当前线程。当焦点位于前台时,每用户输入切换处于活动状态。如果在焦点位于应用上之后调用?API,那么当焦点稍后移动到其他应用时,API?进行的更改将应用于这些应用。如果在焦点位于应用上之前调用?API,那么?API?所进行的语言或?IME?模式更改将被替换为每用户输入切换,使用用户上次切换到的当前输入语言或 IME 模式。例如,用户在应用 A 中键入时使用英语。然后用户启动应用 B,该应用调用 API ActivateKeyboardLayout 将输入语言更改为德语。如果在焦点位于应用?B?上之后调用 API,那么不仅应用 B 的输入语言为德语,而且当用户返回应用 A 时,应用 A 的输入语言也为德语。如果在焦点位于应用 B 上之前调用?API,那么应用 B 的输入语言将为英语,而不是德语。除了调用 ImmSetConversionStatus 之外,还可以按照应用程序设置的输入范围来更改?IME?模式。某些应用(包括?Windows 应用商店应用)可能会在某些文本字段上设置输入范围,如“密码”字段、URL 字段或电子邮件字段。某些 IME 会对输入范围作出响应并根据输入范围更改 IME 模式。日语 Microsoft IME 行为 日语?IME?按每个应用程序保留转换模式(Hiragana、Halfwidth-AlphaNumeric、Fullwidth-Katakana、Halfwidth-Katakana 和 Fullwidth-AlphaNumeric),这意味着每个应用程序都保留转换模式。这是因为转换模式附加于应用程序的特殊输入字段。切换应用程序之后,Microsoft IME 将作为 Hiragana 模式进行处理。因此,当在每用户模式中使用时,日语 Microsoft IME 忽略通过调用ImmSetConversionStatus 进行的转换模式更改。此 API 在 .NET Framework 的 IME模式属性中使用。建议使用 InputScope 以便在 Windows 8 中在每用户模式下设置 IME 模式。表现在第一个应用中更改输入语言之后,在其他应用中打开的文件将使用与初始应用相同的输入语言。缓解操作若要将输入切换从每用户重置为每线程,请执行以下操作:转到“控制面板”。选择“时钟 | 语言和区域 | 语言配置文件”。单击“高级设置”。在“切换输入法”部分中,选中“允许我为每个应用窗口设置不同的输入法”框。单击“保存”。解决方案开发应用时记住使用每用户模式。对于每用户输入切换,我们不建议应用在用户不知道的情况下重置语言或 IME 模式。如果应用需要更改 IME 模式,我们建议设置输入范围而不是调用 ImmSetConversionStatus。如果应用必须依赖每线程输入切换才能工作,则向用户提供一条消息,指示用户转到“控制面板”并进行上述更改。资源Get-WinLanguageBarOption library/hh852146InputScopeNameValue 枚举(v=vs.110). Framework 4.5 为默认值,.NET Framework 3.5 为可选平台客户端 — Windows?8 服务器 — Windows?Server 2012 描述在 Windows 8 中,默认情况下启用 .NET Framework 4.5。Windows?8 默认情况下不包含 .NET 3.5,但作为一个可选功能,.NET 3.5 的文件可以在 Windows 8 安装介质上使用。如果用户从 Windows 7 升级到 Windows 8,则会完全启用 .NET Framework 3.5 以确保计算机上的任何应用继续正常工作。表现如果用户执行 Windows 8 的全新安装,然后安装需要 .NET Framework 3.5(或 2.0)的应用,那么用户将触发所需 .NET?3.5?文件的请求。正常情况下,将从 Windows 更新下载缺少的文件(请求用户允许之后),但如果无法访问 Windows 更新,那么启用 .NET Framework 3.5 将会失败,除非已为缺少的文件指定备用源。缓解操作若要仅在具有?Windows?8?全新安装的测试计算机上启用 .NET Framework?3.5,请执行以下操作:将 \sources\sxs\ 从安装的操作系统内部版本 ISO 映像复制到 dotnet35 或类似文件夹。例如:xcopy e:\sources\sxs\*.* c:\dotnet35 /s 使用管理权限执行此命令行:Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:\dotnet35 /LimitAccess请注意,sources\SxS 文件夹不得用作重新分发机制,因为不支持此机制。解决方案对于客户来说:Windows?8 包含一个机制,在尝试安装可重新分发的包时或需要 .NET 3.5 的应用程序安装程序调用可重新分发的包时,该机制可自动启用 .NET Framework 3.5。对于应用开发人员(以及 IT 管理员)来说:IT 管理员可以将 .NET?3.5 应用配置为在 .NET?3.5 或 .NET?4.5 上运行(取决于已安装的内容)。若要在?3.5?或?4.5?上运行托管的应用,只需在应用程序配置文件中添加一个部分。这将确保安装了 .NET 3.5 时,应用在 .NET 3.5 上运行;否则应用将在 .NET 4.5 上运行。下面提供了配置文件中其他部分的示例:<configuration>?? <startup>????? <supportedRuntime version="v2.0.50727"/>????? <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>?? </startup></configuration>对于企业或 OEM 来说:若要为 EEAP 内部版本或无法访问 Windows 更新的应用程序启用 .NET Framework 3.5,请执行以下操作: 将 sources\sxs\ 从安装的操作系统内部版本 ISO 映像复制到 dotnet35 或类似文件夹。例如:xcopy e:\sources\sxs\*.* c:\dotnet35 /s 设置注册表项:[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Servicing]“LocalSourcePath”=”c:\dotnet35”对于企业来说:对于配置为使用 WSUS 进行服务的计算机,你可以设置一个注册表项,以允许该计算机使用 Windows 更新来启用 .NET 3.5 而不是 WSUS(如果这样做,将仍然从 WSUS 进行服务)。设置注册表项:[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Servicing] “RepairContentServerSource”=DWORD(2)还可以通过组策略设置该注册表项,以在启用 .NET 3.5 时绕过 WSUS 服务器。该策略位于“本地计算机策略 –> 计算机配置 –> 管理模板 –> 系统”下。选择设置“指定可选组件安装和组件修复的设置”。如果你选择“直接联系?Windows?更新以下载修复内容而非?Windows?Server Update Services (WSUS)”,则添加 Windows 功能(例如,.NET Framework 3.5)或修复功能的任何尝试都将触发从?Windows?更新下载文件。对于此选项,目标计算机需要 Internet 和 WU 访问。如果 WSUS 已配置为源,则正常的服务操作将继续使用 WSUS。有关通过注册表项设置本地源位置的注意事项IT 管理员可以通过注册表项为 .NET 3.5 文件设置本地源位置,以便用户可以使用“添加/删除 Windows 功能”对话框来启用具有缺失负载的功能,而无需指定源位置。可以通过组策略控制注册表项的值。支持此注册表项:项类型描述LocalSourcePathREG_EXPAND_SZ默认情况下,要使用的本地源路径。可以指定多个路径,但这些路径应使用“;” 分隔。将按照指定位置的顺序搜索这些位置。在?DISM?命令行上指定的本地源位置优先于在此注册表项中指定的位置。可以在此注册表项中指定文件夹位置。可以使用?WIM,但路径必须是?WIM?文件;不需要装载它,例如:wim:\\machine\share\file.wim:1注意结尾处的 “1”。你必须指定要在 WIM 文件中使用的映像的数字索引。对于已装载的 WIM,源路径需要引用已安装映像的 Windows 目录,而非引用装载点(例如:/source:<mount_point>\windows rather than /source:<mount_point>)。资源实现基于注册表的策略 (v=VS.85).aspx 启动默认的 Web 浏览器或 Windows 8 应用后,可能无法显示桌面应用平台客户端 — Windows?8 服务器 — Windows Server 2012 描述Windows 应用商店用户体验侧重于一次一个应用,Windows?UI 提供的多任务、应用切换和通知。对于参与?Windows?8?用户体验的应用,Windows 应用商店应用的大小已调整为可填充屏幕上可用空间,同时提供最常用的全屏视图。因此,当启动系统上的另一个应用时,你可以不再假定该应用将与你的应用并排在桌面窗口中打开。这总是适用于选择参与 Windows 体验的 Windows 应用商店应用和浏览器。在某些方案中,你可能会同时看到其他应用,例如,如果你在桌面上并且启动其他桌面应用程序或者你有处于贴靠状态的应用程序。表现当桌面应用使用常用的应用激活技术(如对文件或协议使用?ShellExecute?API)时,Windows 启动与该注册关联的应用,该应用可能是 Windows 应用商店应用和/或用户的默认?Web?浏览器(默认?Web?浏览器可能选择参与桌面或新 Windows 8界面)。Windows 8 应用使用全屏启动,隐藏桌面和桌面应用的启动位置。注意:在 Windows 8 中,Internet Explorer 10 配置为默认浏览器,但用户可以选择安装其他浏览器并将其设置为默认浏览器(与 Windows?7 一样)。在Internet Explorer 10 中,当从桌面应用程序中打开链接时,将在桌面上打开 Internet Explorer。但是用户可以更改该设置,以便 Internet Explorer 作为 Windows 应用商店应用打开。我们鼓励浏览器供应商采用类似的“上下文启动”体验;但是开发人员应该针对“并非所有浏览器行为都相似”这一事实进行计划。缓解操作虽然开发人员不能对其应用进行任何更改以缓解此行为,但最终用户可以做一些事情,而你应当告知他们该做些什么。请考虑使用通过扩展的 ShellExecuteEx() API 收集的信息填充上下文对应的对话框。在该对话框中,向用户指示将启动哪个应用以及该应用是Windows 应用商店应用还是桌面应用。CLSID 可用于将 Windows 应用商店应用与桌面应用区别开来。用户选项:使用宽屏显示器的用户可以将?Windows 应用商店应用贴靠到屏幕边缘以显示桌面,这样可以同时查看 Windows 应用商店应用和桌面应用。如果将 Internet Explorer 配置为用户的默认浏览器,用户可通过在控制面板中更改“Internet 选项”来更改其行为。在“程序”选项卡上,用户可以更改 Internet Explorer 处理链接的方式。其他浏览器可能会提供相似的设置。高对比度模式 平台客户端 — Windows 8 服务器 — Windows Server 2012 描述 在以前的?Windows?操作系统中,高对比度模式被限制到在经典主题下运行的主题,不能直观设置其样式。在 Windows 8 和 Windows Server 2012 中,已经删除了经典模式,取而代之的是可以直观设置样式的高对比度主题。这项更改给你带来的主要好处之一是删除了在经典模式下运行的应用的单独代码路径。开发人员仍然需要知道高对比度模式如何影响他们的应用以及如何开发样式完全不可知的应用。这个非常重要,因为虽然不正确地使用或采用主题颜色可能会导致应用在某个视觉样式(如?Aero)下表现正确,但那些同样的应用在高对比度模式下将无法正确响应。例如,在?Aero?中,文本始终是黑色的,突出显示颜色则是浅蓝色。但在高对比度黑色下,突出显示颜色是黑色的。如果你采用黑色文本,与在?Windows?8?以前的许多内置应用中一样,并使用系统默认设置进行突出显示,则用户将看到黑色背景上的黑色文本。在这些情况下,必须了解如何正确使用主题和系统指标,以使应用在所有样式下都能正常运行。表现在应用清单中不包含 Windows 8 <supportedOS> 标记的应用的工作区中未启用主题。因此,应用必须使用在经典主题的高对比度模式下呈现所需的代码路径来呈现工作区。在高对比度主题中,应用的非工作区和工作区中都未启用主题。在应用清单中不包含 Windows 8 <supportedOS> 标记且使用 DwnIsCompositionEnabled() API 在窗口的非工作区进行绘制的应用中,也未启用主题。整个应用在经典主题的高对比度模式下呈现。在清单中增加了对?Windows?8?的支持,但不使用视觉样式进行呈现(即它们对应用中的颜色或图像进行硬编码)的应用可能无法在高对比度主题下正确呈现。可能很难像在高对比度模式下一样阅读文本,或者可能不显示图像。缓解操作高对比度主题中的文本颜色已编写为符合?Microsoft?辅助功能指南。我们将前景与背景之间的高对比率保持为?14:1。如果默认启用的颜色不适合特定的最终用户,最终用户可通过针对那些高对比度主题中“窗口颜色”的控制面板设置轻松地自定义颜色。在高对比度主题中,以下 UI 组件是可自定义的:窗口背景颜色文本颜色超链接颜色禁用的文本已选定文本前景和背景颜色活动窗口标题前景和背景颜色非活动窗口标题前景和背景颜色按钮前景和背景颜色解决方案 如果在高对比度主题下在应用中看到意外行为,以下解决方案之一可能有用: 针对 Windows 8 显示应用: 应用清单中不包含 Windows 8 <supportedOS> 标记的应用呈现其工作区时不包含主题。所有内置应用都应当在应用清单中包含此项。添加 Windows 8 的 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38 GUID 值。通过所有者绘制的 UI 使用视觉样式:所有者绘制的控件应当遵循?MSDN?上的说明,以正确呈现控件部分和状态,包括文本。开发人员不应依赖设备上下文中指定的文本或背景颜色,以便使用非 UxTheme 方法进行呈现。如果讨论的主题没有主题部分,请使用具有相应指标的 GetThemeSysColor,并使用标准?GDI?方法绘制文本。如果没有一个 UxTheme 调用适用,请使用?GetSysColor?方法获取相应的指标。选择文本颜色: 不使用硬编码的文本颜色,即使假设这种颜色适合所有常见方案。交付主题是通过相关指标支持高可见性的方式创建的。例如,COLOR_HIGHLIGHTTEXT 应在COLOR_HIGHLIGHT 作为背景时使用,COLOR_WINDOWTEXT 应在COLOR_WINDOW 作为背景时使用。如果这些关联存在例外,请在主题部分和状态定义自身中处理这些意外,而不是在代码中。设计高对比度 UI 时,该 UI 对于当前应用的高对比度主题应当是不可知的,这一点很重要,因为高对比度用户可以自定义其颜色。响应 WM_ThemeChange 事件:如果你的应用缓存从主题检索到的颜色或以非标准方式应用颜色,请为 WM_THEMECHANGE 添加重新计算存储的颜色值并重新绘制 UI 的消息处理程序。编写高对比度 WWA 应用: Web 应用不能访问 UxTheme API,但编写时仍然应该使用当前的系统指标作为 UI 的基础。以下是 WWA 开发人员可以利用以确保应用符合高对比度的资源:W3C CSS 颜色规范指定了使用系统指标而不是特定颜色的语法Internet Explorer 10 将添加对高对比度媒体查询的支持 WWA 可以利用 IAccessibilityCapabilities::get_HighContrast() 方法检查高对比度的状态对于经典应用中存在的主题部分,Windows 应用商店应用没有许多同样的问题,但你仍然要确保符合高对比度。默认情况下,Internet Explorer 会忽略用户定义的某些样式,而用符合高对比度的值取而代之。例如,background-image、background 和 color CSS 属性将被忽略。如果你不希望 Internet Explorer 忽略你设置的任何属性,且你已经确保 UI 符合高对比度,则可以在父元素上设置新的 M3 CSS 属性 –ms-high-contrast: off。编写高对比度 Windows 应用商店应用: Windows 应用商店应用应当使用?SystemColors?类确定合适的?UI?元素颜色,请记住,有些系统指标颜色设计为一起使用,例如 SystemColors. WindowColor 和 SystemColors.WindowTextColor。这有助于获得卓越的高对比度体验。在以前的 Windows 版本中正确检测高对比度: 在以前?Windows?版本上运行的应用没有访问新高对比度主题的权限,即使清单指定了与正在讨论的?Windows?版本的兼容性。同样,可能需要插入其他代码路径,以便在以前的 Windows 版本中使用的经典环境中处理呈现。在这种情况下,应当通过调用含 PI_GETHIGHCONTRAST 标记的 SystemParametersInfo 函数来检查高对比度的存在与否。这是用于检查高对比度存在与否唯一受支持的方法。测试 测试应用时,请确保此应用在?Window?8?提供的所有内置主题中正常呈现:“Aero”、“基本”、“高对比度?1”、“高对比度?2”、“高对比度黑色”和“高对比度白色”。请确保高对比度主题中的文本清晰可见且易于阅读。资源 Aero 样式类、部分和状态(新的基本主题和高对比度主题也使用这些状态)(VS.85).aspx 所有视觉样式公共的部分和状态(v=VS.85).aspx 通过自定义和所有者绘制的控件使用视觉样式(v=VS.85).aspx GetSysColor 函数(v=VS.85).aspx W3C CSS 颜色模块级别 3 SystemColors 类 SystemParametersInfo 函数(v=VS.85).aspx Microsoft 辅助功能应用(可执行文件)清单平台客户端 — Windows?8 服务器 — Windows Server 2012 描述Windows 中引入的应用(可执行文件)清单的兼容性部分有助于操作系统确定设计应用时的目标 Windows 版本。另外,应用清单使 Windows 能够根据应用所针对的 Windows 版本提供应用期望的行为。清单的兼容性部分使 Windows 能够向新创建的软件提供新行为,同时又能保持现有软件的兼容性。本节也有助于 Windows 在将来的 Windows 版本中提供更大的兼容性。例如,在兼容性部分声明仅支持?Windows?8?的应用在将来的 Windows 版本中将继续接受 Windows?8 行为。表现在清单中没有兼容性部分的应用在 Windows 7 和 Windows?8 以及将来的 Windows 版本上将默认采用 Windows Vista 行为。请注意,Windows XP 和 Windows Vista 会忽略此清单部分,因此该部分对它们没有影响。这些 Windows 组件根据兼容性部分提供不同的行为:远程过程调用 (RPC) 默认线程池Windows?8 和 Windows 7:为改进可伸缩性和减少线程计数,RPC 已切换到 NT 线程池(默认池)。对于 Windows Vista,RPC 使用了专用线程池:对于为 Windows 7 和更高版本的 Windows 编译的二进制文件,则使用默认池。如果在调用任何 RPC API 前调用 I_RpcMgmtEnableDedicatedThreadPool,则使用专用线程池(Vista 行为)。如果在调用 RPC 后调用 I_RpcMgmtEnableDedicatedThreadPool,使用默认池,I_RpcMgmtEnableDedicatedThreadPool 会返回错误 1764,且不支持请求的操作。Windows?Vista(默认):对于为?Windows?Vista?和更低版本的?Windows 编译的二进制文件,则使用专用池。DirectDraw 锁定 Windows?8 和 Windows 7:针对 Windows 7 和更高版本的操作系统的应用无法在 DDRAW 中调用 Lock API 来锁定主要桌面视频缓冲区;执行此操作将导致出现错误,并返回主缓冲区的 NULL 指针。即使桌面窗口管理器元素未启用,也会强制执行此行为。具有为 Windows?7 和更高版本声明的兼容性的应用不得锁定主要视频缓冲区进行呈现。Windows?Vista(默认):应用可以在主要视频缓冲区上获取锁定,因为旧应用依赖于此行为;运行此应用会关闭桌面窗口管理器。对不含剪切窗口的主缓冲区执行的 DirectDraw 位块传送 (bitblt) Windows?8 和 Windows 7:针对 Windows 7 和更高版本的 Windows 的应用被阻止对不含剪切窗口的主要桌面视频缓冲区执行 bitblt;执行此操作将导致出现错误,且不呈现 bitblt 区域。即使你未启用桌面窗口管理器元素,Windows 也会强制执行此行为。具有为 Windows?7 和更高版本声明的兼容性的应用必须对剪切窗口执行 bitblt。Windows?Vista(默认):应用必须能够对不含剪切窗口的主缓冲区执行 bitblt,因为旧应用依赖于此行为;运行此应用会关闭桌面窗口管理器。GetOverlappedResult API Windows?8?和?Windows?7:解决某种争用条件,在这种条件中,使用GetOverlappedResult 的多线程应用可在不在重叠结构中重置事件的情况下返回,这会导致下次调用此函数时过早返回。Windows Vista(默认):向行为提供应用可能依赖的争用条件。必须在 Windows 7 行为之前避免此争用的应用应当在重叠事件上等待,在收到信号时,以 bWait == FALSE 调用 GetOverlappedResult。高对比度模式下的 Shell 主题状态 Windows 8:返回高对比度模式下的实际主题状态。Windows 7:在高对比度模式下返回主题为不可用,因为 DWM 仍然处于打开状态。Windows?Vista(默认):在高对比度模式下返回主题为不可用,因为 DWM 仍然处于打开状态。Shell iPersistFile::Save 方法Windows 8:CShellLink::Save 现在确定 IPersistFile 处理程序是否是使用相对路径参数调用的,如果是,则调用失败。介绍此行为的公开文档指示此路径参数必须是绝对路径:ttp://go.fwlink/?LinkId=228369Windows?7 和早期版本(默认):CShellLink::Save 不确定 iPersistFile 处理程序是否发送相对路径检查,并允许应用继续使用绝对或相对路径。程序兼容性助手 (PCA) Windows 8:具有兼容性部分的应用不能获得 PCA 缓解Windows 7:跟踪具有兼容性部分的应用以获取 Windows?8 更改的潜在兼容性问题(本文档中介绍)Windows?Vista(默认):在某些特定情况下,无法正常安装或运行时期间崩溃的应用可以获得 PCA 缓解。有关详细信息,请参阅“资源”部分。利用特色功能使用最新兼容性信息更新应用清单以获取操作系统支持。本节介绍清单中的增加项:命名空间:Compatibility.v1 (xmlns="urn:schemas-microsoft-com:compatibility.v1">)节名:兼容性(新节)SupportedOS:受支持操作系统的 GUID — 映射到受支持操作系统的 GUID 是:{e2011457-1546-43c5-a5fe-008deee3d3f0} 对于 Windows Vista:这是 Switchback 上下文的默认值{35138b9a-5d96-4fbd-8e2d-a2440225f93a} 对于 Windows 7:在应用清单中设置此值的应用获取 Windows?7 行为{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 对于 Windows?8:在应用清单中设置此值的应用获取 Windows?8 行为Microsoft 将根据需要为将来的 Windows 版本生成和发布 GUID。已更新清单的 XML 示例:注意:应用清单中的属性和标记名称区分大小写。<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--The ID below indicates app support for Windows Vista --><supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!--The ID below indicates app support for Windows 7 --><supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!--The ID below indicates app support for Windows Developer Preview --><supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/></application> </compatibility></assembly>在前一个示例中,所有操作系统的 GUID 提供下级支持。支持多个平台的应用不需要为各个平台提供单独的清单。测试应用可以指定多个受支持的操作系统 ID。如果你已测试或正在测试某操作系统上的应用,则应当添加此受支持操作系统 ID。Windows Vista 和以前的操作系统版本不会注意这些项。从?Windows?7?开始,Windows?将选择清单中的最高版本 GUID 直到正在运行的 Windows 版本,并向应用提供该级别的支持。若要验证应用是否使用新应用清单兼容性部分:使用新兼容性部分和 SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 测试应用,以确保应用使用最新的 Windows?8 行为正常工作。使用新兼容性部分和 SupportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 测试应用,以确保应用使用 Windows?7 行为正常工作。使用新兼容性部分和 SupportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0} 测试应用,以确保应用使用 Windows Vista 行为正常工作。资源QueryActCtxW 函数 (v=VS.85).aspx UAC 清单 Windows 应用程序的应用程序清单 (v=VS.85).aspx 桌面窗口管理器 (DWM) (v=VS.85).aspx 上下文不匹配更新 程序兼容性助手 以队列形式呈现的模型已弃用平台 客户端 — Windows?8 后的版本服务器 — Windows Server 2012 后的版本描述 在 Windows?8 后的 Windows 版本中,以下 API 将返回 E_NOTIMPL:DwmSetPresentParametersDwmSetDxFrameDurationDwmModifyPreviousDxFrameDuration另外,以下 API 将仅接受 hwnd 参数的 NULL 值: DwmGetCompositionTimingInfo我们将停止支持 hwnd != NULL 的 DwmGetCompositionTimingInfo,并将删除相关的功能。如果为 hwnd 指定了非 NULL 值,此 API 将返回 E_INVALIDARG。我们也不赞成使用?DwmGetCompositionTimingInfo?API,建议开发人员转为使用 DXGI 翻转模型和相关的 DX 显示统计信息 API。表现使用以队列形式呈现的模型的应用无法正常运行。确切的表现取决于特定应用程序,但表现范围有显示时间不正确到应用异常退出。在实际中,我们不希望看到很多(如果有)这样的应用。Vista?Media?Player?使用了这种模型,但 Windows?9 上将不再使用此模型(以及可能在旧的 Zune 播放器上)。目前,我们没有实际使用此模型的任何其他应用程序的信息。解决方案 开发人员需要使用 DXGI 翻转显示模式,而不是以队列形式呈现(在 Windows?7 起的 DX9 运行时上可用,且在 Windows 8 中的 DX10 和 DX11 运行时上可用).测试 运行常规测试,以确保内置?Windows?组件和主要产品在将来的?Windows?版本上继续运行。Windows?8 的程序兼容性助手方案 平台客户端 — Windows XP | Windows Vista | Windows 7 | Windows 8 描述程序兼容性助手 (PCA) 是 Windows?8 中的一项功能,可帮助最终用户运行为早期的 Windows 版本设计的桌面应用。Windows?8 有很好的内置应用兼容性,这样为 Windows?7 或更早 Windows 版本设计的应用都可以自动在 Windows?8 上很好地运行。但是,有很少数的应用需要干预,否则可能无法运行。当用户运行某个应用时,PCA 会跟踪该应用,并标识 Windows?8 中某些已知兼容性问题的所有症状。当它检测到任何问题症状时,将向用户提供一个应用所建议修复的机会,该修复有助于在 Windows 8 上更好地运行该应用。方案 PCA 针对 Windows 8 中的一组已知兼容性问题跟踪应用。PCA 跟踪问题,标识修复,并向用户提供含有应用建议修复说明的对话框。用户可以决定是应用建议的修复,还是选择不应用并取消建议操作。如果用户取消,PCA 将不再跟踪该应用。PCA 通常应用三个 Windows 兼容性模式之一 — Windows XP SP3、Windows Vista SP2 或 Windows?7,具体取决于程序(或其安装程序)的编写时间。PCA 使用程序的 LINK_DATE 和 SUBSYSTEM VERSION 属性以及可执行文件清单的 TRUSTINFO 和 COMPATIBILITY 部分确定与哪种模式相关,然后相应地应用 Windows XP SP3(包括管理权限)、Windows Vista SP2 或 Windows?7。文档末尾的术语表列出了 PCA 应用的每个兼容性模式及其描述。对于下面列出的所有方案,PCA 在应用修复后会再次跟踪应用。如果在应用兼容性修复后,应用仍然因为相同的原因失败,则?PCA?会还原该修复。PCA?随后将永久停止跟踪失败的特定应用。虽然?PCA?会跟踪许多潜在的问题,但实际上并非所有问题都会导致应用失败。仅当由于?Windows?兼容性原因导致应用很有可能失败时,PCA?才会建议修复。以下各个部分详细介绍了在?Windows?8?中开发的各个?PCA?方案。每个部分介绍了问题方案和 PCA 提供的能让应用在 Windows 8 中继续正常运行的建议。若要了解有关 Windows 8 中兼容性更改的详细信息,请参考“Windows 8 兼容性手册”中的其他主题。PCA 跟踪并建议修复的方案有:应用无法安装或卸载应用无法运行,并出现 Windows 版本检查消息应用因管理权限无法启动应用因特定内存问题崩溃应用因系统文件不匹配失败应用因 64 位 Windows 上出现未处理的错误失败应用在尝试删除受保护的非 Windows 文件时失败应用在尝试修改 Windows 文件时失败应用因使用 8 或 16 位颜色模式失败应用因图形或显示问题失败应用无法声明 DPI 感知应用因缺少 Windows 功能失败应用因 64 位 Windows 8 中的未签名驱动程序失败通过兼容性设置跟踪安装的应用应用无法启动安装程序或更新程序需要使用管理权限运行的应用安装程序需要使用管理权限运行的旧控制面板小程序下面将详细介绍所有这些方案:应用无法安装或卸载这是安装应用过程中最常见的应用失败类型之一。旧安装程序最常见的两种失败情形是:安装程序不了解?Windows?8?中的用户帐户控制?(UAC)?功能,因此可能无法使用对 Windows 8 的保护区域进行系统更改所需的全部权限运行安装程序会检查 Windows 版本,如果检查到的版本高于它预期的版本,它将自行停止运行 这些失败的情形是安装过程中最常见的两种兼容性失败。PCA 在其他各种 Windows 组件(如 UAC)的帮助下,在启动时检测安装程序,并跟踪程序直到安装结束。如果安装程序无法在?Windows?控制面板的“添加删除程序”部分添加文件或添加有效条目,则 PCA 将视安装已失败。在这种情况下,PCA 会建议一个适合应用的兼容性模式。兼容性模式使安装程序能够在设计它时所针对的?Windows?模式下运行,并能确保应用使用管理权限运行。PCA 会应用 RUNASADMIN 兼容性模式及相应的 Windows XP、Windows Vista 或 Windows 7 兼容性模式。在失败的安装结束时,用户将看到含有 PCA 建议的对话框:用户随后可以选择:使用兼容性设置(建议的选项)运行程序,PCA?随后应用建议的设置(兼容性模式),重新启动安装程序,然后跟踪程序直到安装成功完成指示程序正常安装,在这种情况下,PCA 将不再添加任何设置,并将停止跟踪安装单击“关闭”,在这种情况下,PCA 将不再添加任何设置,并将停止跟踪此安装当用户尝试从?Windows?的“添加删除程序”部分或从应用的卸载程序快捷方式卸载应用时,也可以使用同样的机制帮助卸载应用。应用无法运行,并出现 Windows 版本检查消息 在应用运行时出现的最常见兼容性失败之一是由于 Windows 版本检查。许多应用会在启动时检查 Windows 版本;如果应用不能识别检查到的版本,即使应用可以正常运行,也会自行停止运行。一般情况下,这种检查与 PCA 跟踪的两个条件相关:应用显示警告用户的消息框。示例如下所示:应用立即终止或崩溃如果 PCA 标识应用的这两个条件,它将向用户提供建议。PCA 将允许用户使用兼容性设置重新运行应用。PCA 将根据应用使用相应的 Windows XP、Windows Vista 或?Windows?7?兼容性模式。和在所有方案中一样,用户可以告诉?PCA?应用正常运行,也可以单击“关闭”按钮取消建议的设置。提供的对话框示例如下所示:应用因管理权限无法启动或运行有些应用需用管理权限才能运行和执行其功能。但是在?Windows?8?中,与在 Windows?7 和 Windows Vista 中相似,由于 UAC,应用默认以较低的权限等级来运行。为 Windows Vista 和更高版本设计的新应用一般会使用 EXE 清单的 TRUSTINFO?部分声明其运行所需的权限等级。但是,旧应用的失败一般有两种情形:应用向用户显示它需要管理权限的消息,如下所示:应用立即终止或崩溃如果?PCA?标识应用的这两个条件,它将向用户提供建议。PCA?将允许用户使用管理权限重新运行应用(PCA 应用 RUNASHIGHEST 兼容性模式)。在应用重新运行时,用户将看到 UAC 提示。和在所有方案中一样,用户可以选择使用建议的设置重新运行,也可以单击“关闭”取消建议的设置。提供的对话框示例如下所示:应用因特定内存问题崩溃有些应用会因为众所周知的内存问题崩溃。应用会从内存中取消对某个 DLL 的引用,然后调用一个函数执行相同?DLL?中的代码。这会导致应用立即崩溃。虽然此问题不是由于 Windows?8 兼容性更改才出现,但它是很多应用中相对常见的问题。PCA 会跟踪此问题,以便向用户提供更可靠地运行其应用的机会。对于这些应用,PCA?会在无任何提示的情况下自动应用?PINDLL?兼容性模式。PCA?调用的兼容性模式会阻止应用从内存释放该?DLL。因此,应用对该?DLL?的函数调用将发挥作用,从而阻止应用崩溃并使它继续正常运行。应用因系统文件不匹配失败有些为 Windows?XP 及更低版本设计的应用中包括 Windows 系统 DLL 的副本及其安装程序。安装此类应用时,应用在自己的文件夹中保存旧的 DLL 副本,同时在 Windows 系统文件夹中保存最新版本的 DLL。在?Windows?Vista?和更高版本中,这种情况会导致应用在尝试加载本地?DLL?时失败,因为此 DLL 无法与当前 Windows 系统 DLL 的其余部分很好地一起运行。由于应用通常不能识别此 DLL 的更新版本,因此无法正常工作。当 PCA 检测到此 DLL 无法正常加载时,它将应用一个允许 Windows 从 Windows 系统文件夹中加载最新版本 DLL 的兼容性设置,以便应用可以正常运行。在应用第一次运行失败结束时,用户将看到通知他们已应用设置的 PCA 对话框,如下所示: 应用因 64 位 Windows 上出现未处理的错误失败在 Windows?8 的 64 位版本上,对消息循环回调机制启用了一个新例外。虽然此例外在 Windows?7 中第一次引入,但不是必须使用它处理此错误。在 Windows?8 中,使用消息循环的应用必须处理此新例外。如果不处理,则应用会崩溃。为旧版本 Windows 设计的应用可能无法识别此例外,因此可能无法正确处理此错误(例外)。PCA 检测到由于此未处理的错误失败的应用后,将对应用自动使用 DISABLEUSERCALLBACKEXCEPTION 兼容性模式。在运行结束时应用此设置后,用户将收到如下通知。应用在下一次运行时将使用此模式,并可避免发生此错误。应用在尝试删除受保护的非 Windows 文件时失败一些为 Windows?XP 和更低版本设计的应用会假定它们通常使用完全管理权限运行。作为正常应用行为的一个过程,它们可能会尝试删除受保护的非 Windows?文件(程序文件或 Windows 文件夹中)。删除操作失败时,许多这种应用会崩溃。PCA?检测到这些无法删除受保护文件并崩溃的应用后,将向用户提供建议。PCA?将允许用户使用兼容性设置重新运行应用。和在所有方案中一样,用户可以告诉?PCA?应用正常运行,也可以单击“关闭”按钮取消建议的设置。在这种情况下,PCA 将应用VIRTUALIZEDELETE?兼容性模式。提供的对话框示例如下所示:应用在尝试修改 Windows 文件或注册表项时失败一些为 Windows XP 和更低版本设计的应用会假定它们通常使用完全管理权限运行。作为正常应用行为的一个过程,它们可能会尝试修改、删除或写入 Windows 保护文件(程序文件或 Windows 文件夹中)或 Windows 拥有的注册表项。写入、删除、修改文件或注册表项的任一操作失败时,许多这种应用会崩溃或出现严重故障。PCA 检测到这些无法写入受保护的 Windows 文件或注册表项的应用后,将在应用退出时向用户提供建议。PCA 将允许用户使用兼容性设置重新运行应用。和在所有方案中一样,用户可以告诉?PCA?应用正常运行,也可以单击“关闭”按钮取消建议的设置。在这种情况下,PCA?将应用?WRPMITIGATION?兼容性模式。提供的对话框示例如下所示:应用因使用 8 或 16 位颜色模式失败作为重构适用于 Windows 应用商店应用的 ?Window?8?的一部分,其中一个重要变化是桌面窗口管理器?(DWM) 现在在 Windows 8 中仅支持 32 位颜色。现在将模拟位数较低的颜色模式。许多为 Windows XP 或早期版本设计的旧应用和游戏使用 8 位或 16 位颜色模式。如果没有缓解操作,这些应用将无法在?Windows?8?中执行。但是,当这些应用枚举或尝试使用任何 8?位或 16?位颜色模式进行显示时,PCA 会立即标识出问题,并借助 DWM 的帮助,确保应用在模拟的颜色模式下正常运行。请注意,当应用请求低颜色模式时,会立即发生此操作,且此操作对用户是透明的。用户不必重新启动应用以进行此缓解操作,因为始终需要用此修复来确保应用正常运行。应用因图形和显示问题失败由于桌面窗口管理器 (DWM) 在 Windows 8 中始终处于打开状态,因此,如果应用使用混合模式图形 API(像使用 GDI 和 DirectX API 时)绘制到屏幕上(主要是旧游戏),并尝试使用全屏模式,有些旧 Windows XP 时代的应用可能会失败:DWM?将阻止直接绘制到桌面,游戏或应用将失败,或者在桌面上绘制黑屏,使所有图形都不可见在这些情况下,当应用退出时,Windows?会检测到应用或游戏有全屏模式问题,并应用?DXMAXIMIZEDWINDOWEDMODE?兼容性模式,从而允许应用或游戏在最大化窗口模式而不是全屏模式下运行在运行结束时应用设置后,用户将收到?PCA?的如下通知;应用将在下一次运行时进入兼容性模式,并将能够正常运行应用无法声明 DPI 感知当 Windows 和应用在高 DPI 模式下运行,但应用不通过其 EXE 清单声明其对高 DPI 的感知时,许多旧应用会发生另一个典型的显示问题。由于设置中出现这种不匹配而发生的常见问题有,被剪切的?UI?元素或文本和不正确的字体大小。有关这些问题的详细信息,请参阅此处的链接。在这些情况下,Windows 在检测到该应用是高 DPI 感知应用后,将在第一次运行结束时向该应用使用 HIGHDPIAWARE 兼容性模式。PCA 随后将向用户通知此消息,如下所示:应用因缺少 Windows 功能失败有些应用依赖从 Windows Vista 起即被删除的 Windows 功能。当这些应用尝试加载缺少的 DLL 或 COM 组件时,它们将无法运行。当应用尝试加载缺少的?Windows?功能时,PCA?将检测到这些应用,并提供在应用终止后下载并安装这些组件的建议。用户可以单击“在线获取帮助”查找替代功能或下载并安装此功能。如果需要,用户可以选择不执行任何操作,单击“关闭”即可。应用因 64 位 Windows 8 中的未签名驱动程序失败从 Windows Vista 开始,64 位 Windows 需要数字签名的驱动程序(SYS 文件)。但是,为 Windows Vista 之前的版本设计的旧应用附带未数字签名的驱动程序。如果安装这些未签名的驱动程序,Windows 将不加载它们。在极少数情况下,如果将这些驱动程序标记为启动时驱动程序,则 Windows 可能不会启动。有些旧程序安装未在?64?位?Windows?上签名的驱动程序。任何尝试使用此驱动程序的设备或应用将失败或导致系统崩溃。为防止出现这种情况,PCA 会在应用安装未签名驱动程序时检测到它们,并禁用标记为启动时驱动程序的驱动程序。它还会指示用户获取数字签名的驱动程序,以使应用正常运行。下面是安装驱动程序和应用后显示的消息。如果另一个应用安装相同的驱动程序,此应用也将收到相同的消息。通过兼容性设置跟踪安装的应用当某个安装程序失败时,PCA 会使用各种兼容性模式帮助安装程序,具体取决于失败的类型。使用兼容性设置的安装程序成功后,PCA 将跟踪此安装程序添加的快捷方式。这样做是为了跟踪已安装的应用是否也需要应用于其安装程序的兼容性设置。当用户启动此类应用时,PCA 会提示用户,询问应用是否正常运行。如果用户回答“是”,PCA 会停止跟踪此应用。如果用户回答“否”,则 PCA 将应用已对此应用的安装程序使用的同一兼容性模式,并使用所应用的兼容性模式重新运行此应用。应用无法启动安装程序或更新程序 应用有时会启动需要以管理员身份运行的子程序。当应用尝试启动其更新软件以检查和安装应用的新更新时,通常便是这种情况。当应用直接运行此类子程序时,子程序可能无法启动,因为应用自身不具备管理权限,或因为未使用?UAC?清单将子程序正确标记为进行提升。PCA 会跟踪这些错误,并在主要应用关闭时自动应用有助于子程序正常运行的 ELEVATECREATEPROCESS 兼容性模式。当应用在后续运行时启动子应用时,用户将看到子程序的 UAC 对话框。PCA 对话框的示例如下所示:需要使用管理权限运行的应用安装程序Windows 桌面应用的安装程序需要管理权限,因为它们要向受保护的系统区域写入文件、文件夹和注册表项。Windows?(UAC) 有标识安装程序何时运行的检测逻辑,并通过 UAC 对话框立即提示用户提供管理权限。但是,在某些情况下,此逻辑将无法确定某个应用是否确实为安装程序,且可能无法获取管理权限。这些通常是未使用已知安装技术(如 Windows Installer 或 Install Shield)定制的安装程序。在这些情况下,PCA 会检测到安装程序无法写入其文件。最后,如果安装失败,PCA 将提供应用兼容性设置的建议。如果用户选择单击“运行程序”,PCA 将应用 RUNASADMIN?兼容性模式,并重新运行安装程序。如果用户选择关闭,则不应用任何设置。PCA 对话框的示例如下所示:需要使用管理权限运行的旧控制面板小程序控制面板小程序通常更改系统设置,并需要运行?AD?管理员的能力。但是,那些在 Windows Vista 前编写的小程序没有 EXE 清单,或没有声明其所需权限等级的 TRUSTINFO 部分。运行此类小程序时,PCA 会检测到它们,并在第一次运行结束时提供使用管理设置运行的建议。如果用户选择单击“运行程序”,PCA?将应用?RUNASADMIN?兼容性模式,并重新运行安装程序。如果用户选择关闭,则不应用任何设置。PCA?对话框的示例如下所示:通过用户反馈验证建议的设置在每个方案结束时(使用建议的兼容性设置运行应用后),PCA?将向用户提一个简单的问题:用户可以提供反馈,说明应用使用兼容性设置后正常运行还是失败。此数据将匿名发送给 Microsoft。这有助于确保通过 Windows 更新过程将此类修复内置到 Windows?8,以便将来的 Windows?8 用户不会再遇到同样的应用失败,PCA 也将无需跟踪应用是否出现同样的失败。跟踪无建议的问题由于兼容性原因,应用可能会有多种不同的失败方式。PCA 跟踪的兼容性问题比上述方案中列出的问题更多。在这些情况下,很多时候问题的表现取决于应用。这意味着有些应用会正常地处理此类问题并从中恢复,而有些则不会这样。因此,对于此类问题,虽然 PCA 仍会跟踪应用,但不会直接提供修复建议。PCA 跟踪但没有建议设置或对话框的问题包括以下应用:运行时非常短 — 应用运行的时间不超过三秒在没有管理权限的情况下创建全局内存对象启动时出现错误(Win32 异常)检查管理权限(但可能不会失败)使用 Indeo 编解码器(自 Windows Vista 起已弃用)尝试在受保护的注册表位置(如 HKLM)写入或删除注册表项启动时崩溃通过兼容性选项卡和兼容性疑难解答应用修复如上所述,应用可能会因多种兼容性原因失败。并非所有失败都有明确的 PCA?建议,因为设置与应用相关。但是,用户可以进入“兼容性疑难解答”或“兼容性”选项卡应用某些常见修复,以尝试使失败的应用在?Windows?8?上能够正常运行。在这些情况下,PCA 仍将在应用修复前后跟踪应用的兼容性问题。当应用在进行修复后运行时,PCA 将询问用户修复是否有效。用户回答问题后,数据将通过遥测匿名发送给?Microsoft。此数据从许多用户处收集而得,进行分析,然后通过?Windows?更新将有用的修复广泛分发给所有?Windows?8 用户。使用兼容性疑难解答兼容性疑难解答是?Windows?中的一个机制,允许你诊断应用问题并应用建议的修复,以使它们可以正常运行。仅当?PCA?未对应用提供任何建议时,才需要使用疑难解答。疑难解答会指引用户回答一组问题,并根据用户的回答应用一组修复,并允许用户测试应用和验证修复。验证完成后,修复将永久应用于应用,以使应用在 Windows?8 上更好地运行。疑难解答 UI 如下所示以供参考:可以使用以下两种方式启动兼容性疑难解答:从“开始”屏幕:类型:兼容性疑难解答在“设置”部分下,单击“运行为以前版本的 Windows 编写的程序”磁贴从应用磁贴:在“开始”屏幕上,右键单击应用磁贴。单击“打开文件位置”(仅桌面应用适用)在资源管理器功能区中,单击“应用”选项卡选择“兼容性疑难解答”使用“兼容性”选项卡请注意,仅建议希望尝试不同兼容性设置的专家级用户使用此选项卡。此方法不提供可用于应用的任何类型的修复建议。在这里,用户希望了解应用哪些修复可以使应用正常运行。如果不确定修复是否有效,请使用兼容性疑难解答查找适合应用的修复。若要访问“兼容性”选项卡:从“开始”屏幕:右键单击应用磁贴打开文件位置(仅桌面应用适用)从资源管理器功能区:单击“属性”导航至“兼容性”选项卡选择兼容性修复重新运行应用请注意,你也可以再次回到相同的位置更改或删除修复。你也可以使用选项卡上提供的按钮向计算机上的所有用户应用修复。具有已知兼容性问题的应用除了上面列出的运行时问题检测方案,如果应用有已知的兼容性问题,PCA 还会在应用启动时通知用户。列表存储在系统应用兼容性数据库中。这些消息有两种类型:硬阻止消息?—?如果已知应用不兼容却允许运行该应用,将导致对系统产生严重影响(例如,Windows?崩溃或在安装后无法启动),并显示如下所示的阻止消息。软阻止消息?—?如果应用具有已知的兼容性问题并且可能无法正常工作,则会显示该消息:在这两种情况下,“获取联机帮助”选项会发送?Windows?错误报告,以联机获取 Microsoft?的响应并将该响应显示给用户。通常,这些响应会将用户指向以下三种资源类型之一: 来自应用供应商的更新用于获取更多信息的应用供应商的网站 用于获取更多信息的 Microsoft 知识库文章PCA 的遥测PCA 解决 Windows?8 计算机上的任何应用问题并获得所有用户反馈之后,它将收集有关应用、安装程序、检测到的问题以及应用于应用的兼容性设置的匿名数据,然后将该数据发送回 Microsoft。该数据是从愿意提供此类匿名数据(通过客户体验改善计划 — CEIP)的任何用户收集的。收集该数据之后,分析应用故障和修复,然后通过 Windows 更新机制将修复分发到整个 Windows 生态系统,以便将来该应用的任何用户自动从修复中获益。管理控制和管理 PCA 设置IT 管理员可以采用两种方法控制 PCA 行为:禁用 PCA — 该设置允许 IT 管理员禁用 PCA 向用户显示的对话框;PCA 将仍然跟踪和检测问题并且发回遥测数据禁用应用遥测 — 该设置将禁用 PCA 对遥测数据的任何收集和发送请注意,如果禁用 CEIP,则该设置没有任何影响。设计使用 PCA 的应用开发人员需要确保他们的应用在上述的各种兼容性方案之间运行良好。开发人员必须针对上面的每种方案对应用进行测试和验证,并确保没有任何兼容性问题。如果确定了兼容性问题,则开发人员应该对他们的应用进行所需的修复,以确保兼容性问题得到解决。开发人员应该进行的一些常见修复包括:取消安装和运行时的 Windows 操作系统版本检查取消权限检查(检查管理员访问权限);使用?EXE?清单声明所需权限的正确级别确保应用安装工具中未附带 Windows 二进制文件取消对受保护区域(注册表、文件夹)的写入或者对受保护文件的写入对所有二进制文件(EXE、DLL、SYS 文件)进行数字签名对于安装程序来说,确保添加了正确的“添加/删除程序”条目:该应用元数据条目至少应该包含应用名、发布者、版本字符串以及支持的语言。这将向?PCA?发出指示,说明安装程序已成功完成,并且还将为用户提供一个卸载该应用的简便方法。确保应用(可执行文件)清单的 TRUSTINFO 和 COMPATIBILITY 部分如 Windows?8 兼容性手册中所列的那样进行更新,这将让?PCA?知道该应用是为?Windows?8 设计的,并且还会确保该应用始终本机运行,而无需对其应用任何兼容性模式。若要确保 PCA 考虑为 Windows?8 设计的应用,请执行以下操作:对于 Windows?8 的 TRUSTINFO 和 COMPATIBILITY 部分,必须列出所有 EXE(安装程序或运行时)清单安装程序应该添加一个“添加/删除程序”条目词汇表下面列出了 PCA 使用的兼容性模式以及每个模式的功能的简要描述。模式描述Windows7RTM该模式模拟常用的?Windows?7?行为,包括操作系统版本号 6.1WindowsVistaSP2该模式模拟常用的 Windows Vista SP2 行为,包括操作系统版本号 6.0WindowsXPSp3该模式模拟常用的 Windows XP SP3 行为,包括操作系统版本号 5.1。还包括 RUNASHIGHEST 模式RUNASHIGHEST该模式提示用户使用可用的最高权限运行应用。具有管理权限的用户将看到应用的 UAC 提升权限提示RUNASADMIN该模式始终提示用户使用管理权限运行应用;使用该模式的应用将始终获取 UAC 提升权限提示ELEVATECREATEPROCESS该模式使得主应用的子进程使用管理权限运行;子进程将获取一个 UAC 提升权限对话框PINDLL该模式强制?DLL?位于应用的内存中,即使该应用卸载此 DLL 也是如此DISABLEUSERCALLBACKEXCEPTION该模式拦截用户回调异常并且允许应用继续运行,而无需处理该异常VIRTUALIZEDELETE该模式拦截受保护文件上的删除操作,防止应用由于未处理删除操作中的异常而失败WRPMITIGATION当应用尝试写入、修改或删除 Windows 受保护文件或注册表项时,该模式返回成功(实际上没有完成该操作)DXMAXIMIZEDWINDOWEDMODE该模式标识进入全屏模式的应用并指将这些应用重定向到最大化 Window 模式 HIGHDPIAWARE该模式允许其余 Windows 知道该应用为高 DPI 感知应用,并帮助正确呈现 UI 元素、文本、字体等。删除了桌面小工具平台客户端 — Windows 8服务器 — Windows Server 2012描述从功能角度出发,小工具已被弃用,新的动态磁贴和应用远胜于小工具。小工具还会给用户造成安全风险。作为一个平台,肯定会存在甚至良性的小工具也可以利用的漏洞。因此,为了鼓励?Windows?8?作为我们最现代、最安全的操作系统,我们选择将小工具从操作系统中完全删除。将通知在桌面上拥有小工具的 Windows?7 用户并且小工具将被卸载。表现桌面小工具将在 Windows 桌面上不可用。缓解操作对 Windows?8 来说,桌面小工具 API 和文件夹结构将原地不动。使用此 API 通过编程方式安装和运行小工具的应用程序将继续运行而不会出现故障(但小工具自身不会继续运行)。解决方案桌面应用开发人员不应该在其安装程序中封装小工具。这些小工具只会占用用户的空间,而无法在系统中运行。兼容性、性能、可靠性或可用性测试开发人员能够通过在?Windows?7?中禁用桌面小工具的可选组件来测试此更改的兼容性。若要在 Windows?7 电脑上禁用小工具,请遵循下面的步骤。从“控制面板”导航到“打开或关闭 Windows 功能”。取消选中“Windows 小工具平台”旁边的框。单击“确定”并按照屏幕上的其他指示进行操作。资源小工具中的漏洞可能会允许远程代码执行列表结束 高级格式 (4K) 磁盘兼容性更新平台客户端 — Windows XP | Windows Vista | Windows 7 | Windows 7 SP1 | Windows?8 服务器 — Windows Server 2003 | Windows Server 2008 | Windows?Server?2008?R2 | Windows Server 2008 R2 SP1 | Windows Server 2012 描述本文是为 Windows?7?SP1 和 Windows?Server 2008 R2?1 发布的标题为“512?字节模拟?(512e)?磁盘兼容性更新”的文章的更新版本。此更新包含大量新信息,其中一些信息仅适用于 Windows?8 和 Windows Server 2012。区域密度逐年增加,并且最近出现了?3?TB?磁盘,使用错误纠正机制处理越来越低的信噪比 (SNR) 正在变得空间效率低下;也就是说,为了确保介质可用,需要越来越多的开销。用于改进此错误纠正机制的其中一个存储行业解决方案是,引入包含较大物理扇区大小的不同物理介质格式。这个新的物理介质格式称为高级格式。因此,进行与现代存储设备的扇区大小有关的任何假定都不再安全,并且开发人员将需要研究其代码背后的假定,以确定是否有影响。本主题介绍了高级格式存储设备对软件的影响、讨论了应用可以进行哪些操作来帮助支持这种类型的介质,同时还讨论了?Microsoft?随?Windows?Vista、Windows?7 和 Windows?8 引入的基础结构,以使开发人员能够支持这些类型的设备。尽管本主题中提供的资料提供了改进高级格式磁盘兼容性的指南,但该信息通常也适用于具有运行 Windows?Vista、Windows?7 和 Windows?8 的高级格式磁盘的所有系统。新的较大扇区相关功能概述以下列表概述了为了帮助改进较大扇区磁盘的客户和开发人员体验而作为 Windows?8 和?Windows?Server?2012?一部分提供的新功能。下面是每个项目的详细描述。基于对具有模拟?(512e)?的?4K?磁盘的?Windows?7?SP1?支持构建,为没有模拟(4K?本机)且扇区大小为?4K?的磁盘提供完全内置支持。某些支持的应用和方案包括:能够安装?Windows?并且能够从没有模拟(4K?本机磁盘)的?4K 扇区磁盘启动新的 VHDx 文件格式对 HyperV 的完全支持Windows 备份NT 文件系统 (NTFS) 中的完全支持对新 的存储空间和池 (SSP) 的完全支持对 Windows Defender 的完全支持提供一个新的 API 以查询物理扇区大小 (FileFsSectorSizeInformation):可用于网络卷可以发布任何文件句柄可用于没有权限的应用更加友好的使用模型包含增强的“fsutil”命令行实用工具,以查询具有对齐信息的卷的逻辑和物理扇区大小(没有对齐信息的实用工具的基本版本可用于 Windows 7 (Microsoft KB 982018) 和 Windows Server 2008 R2 (Microsoft KB 982018))高级格式 (4K) 磁盘简介在介质格式中引入此更改的其中一个问题就是可能会导致现有软件和硬件出现兼容性问题。作为一个临时的兼容性解决方案,存储行业正在开始引入这种磁盘,这种磁盘模拟常规 512?字节扇区磁盘,但通过标准 ATA 和 SCSI 命令提供有关真正扇区大小的信息。作为此模拟的结果,大体上有两个扇区大小:逻辑扇区:用于对介质进行逻辑块寻址的单元。我们还将其视为存储可以接受的最小写入单元。这是“模拟”。物理扇区:用于采用一个操作完成设备读取和写入操作的单元。这是原子写入的单元。大多数当前的 Windows?API(如 IOCTL_DISK_GET_DRIVE_GEOMETRY)都将返回逻辑扇区大小,但可以通过 IOCTL_STORAGE_QUERY_PROPERTY 控制代码检索物理扇区大小,相关信息包含在 STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR 结构的BytesPerPhysicalSector 字段中。会在本文的后面部分对此进行详细讨论。较大扇区介质的初始类型存储行业正在不断努力将拥有?4?KB?的物理扇区大小的介质转换到这个新的高级格式存储类型。市场上将发行这两种类型的介质。4 KB 本机:该介质没有模拟层,直接将 4 KB 显示为其逻辑和物理扇区大小。这种新的介质类型的总体问题就是,大多数应用和操作系统不会进行查询以及使 I/O 与物理扇区大小一致,这会导致 I/O 意外失败。512 字节模拟 (512e):该介质具有上面部分中所述的模拟层并将 512 字节显示为其逻辑扇区大小(与当今的常规磁盘类似),但提供其物理扇区大小信息 (4 KB)。这种新的介质类型的总体问题就是大多数应用和操作系统不了解是否存在物理扇区大小。这会导致大量问题,我们将在下面进行论述。较大扇区介质的总体 Windows 支持该表描述了各种介质的官方?Microsoft?支持策略及其报告的结果扇区大小。有关详细信息,请参阅此 KB 文章。公用名报告的逻辑扇区大小报告的物理扇区大小支持的 Windows 版本512 字节本机,512n512 字节512 字节所有版本的 Windows高级格式,512e,AF,512 字节模拟512 字节4 KBWindows?8 Windows Server 2012Windows 7 w/ MS KB 982018Windows 7 SP1Windows Server 2008 R2 w/ MS KB 982018Windows Server 2008 R2 SP1Windows Vista w/ MS KB 2553708Windows Server 2008 w/ MS KB 2553708高级格式,AF,4K 本机,4Kn4 KB4 KBWindows?8 Windows Server 2012其他非 4 KB 或 512 字节非 4 KB 或 512 字节不支持注意:尽管上表中未强调,但 Windows XP、Windows Server 2003 和 Windows Server 2003?R2 不支持 512e 或 4Kn 介质。虽然系统可能至少能启动并运行,但仍然可能会有功能问题、数据损失或次优性能这些未知情形。因此,Microsoft 强烈建议,不要对 Windows XP 或基于 Windows XP 代码库的其他产品(如 Windows Home Server 1.0、Windows Server 2003、Windows Server 2003 R2、Windows XP 64-bit Edition、Windows XP Embedded、Windows Small Business Server 2003 和 Windows Small Business Server 2003 R2)使用 512e 介质。模拟的工作原理:读取–修改–写入 (RMW)存储介质具有一个特定的单元,在该单元中可以修改物理介质。也就是说,只能在物理扇区大小的单元中对介质进行写入或重写。因此,未在此单元级别执行的写入将需要额外步骤,我们将在下面的示例中进行演示。在此方案中,应用需要更新 512 字节逻辑扇区中的 Datastor 记录的内容。此图演示了存储设备完成写入所需的步骤:如上所示,此过程涉及存储设备进行的某些会导致性能损失的工作。为了避免此额外工作,必须对应用进行更新,以便:查询物理扇区大小确保写入与报告的物理扇区大小对齐。尽管最初这可能看起来只是性能问题,但可能是更严重的问题。在下一部分中我们将对此进行讨论。弹性:读取–修改–写入的隐藏成本弹性是指应用在会话之间恢复状态的能力。我们已看过?512e?存储设备执行 512?字节扇区写入所需的内容 — 读取–修改–写入循环。让我们看一看,如果重写介质上之前的物理扇区的过程中断,会发生什么情况。会有什么后果?由于进行硬盘驱动器的此最大更新,物理扇区(即物理扇区所在的介质部分)可能由于部分重写已被损坏,包含的信息不完整。换句话说,你可以将其视为可能丢失所有?8?个逻辑扇区(物理扇区逻辑上包含这些扇区)。尽管具有数据存储的大多数应用经过专门设计,能够从介质错误中恢复,但丢失?8?个扇区(或者换句话说,丢失?8?个提交记录)可能导致无法从容地恢复数据存储。管理员可能需要从备份中手动还原数据库,甚至可能需要执行时间较长的重构。一个更重要的影响是,其他应用的操作导致读取–修改–写入循环可能会导致数据丢失 — 即使你的应用未运行也是如此!这只是因为你的数据和其他应用的数据可能位于相同的物理扇区中。请将此铭记于心,重要的是应用软件重新评估在代码中进行的任何假定,并且注意逻辑–物理扇区大小区别以及本文后面部分所讨论的某些令人感兴趣的客户方案。执行正确的操作(避免读取–修改–写入)尽管某些存储供应商可能在某些 512e 存储设备内引入了某些级别的缓解操作来尽量解决读取–修改–写入循环的性能和弹性问题,但从负载角度而言,缓解操作能够处理的问题实在有限。同样,应用不应该依赖此缓解操作作为长期的解决方案。而且,无法保证所有类别的磁盘都拥有此缓解操作,也无法保证此缓解操作设计精良。这种情况的解决方案不是驱动器中的缓解操作,而是将应用设计为进行正确的操作来帮助支持这种类型的介质。本部分讨论应用可能遇到的较大扇区磁盘问题的常见方案,并建议一个调查途径来尝试解决每个问题。问题 1:分区未对齐物理扇区边界当管理员/用户对磁盘进行分区时,可能尚未在对齐的边界上创建第一个分区。这可能会导致随后的所有写入与物理扇区边界不对齐。从?Windows?Vista?SP1?和 Windows Server 2008 开始,第一个分区放置在磁盘的第一个 1024?KB 处(对于 4GB?或更大的磁盘,对齐则为?64?KB),它与?4?KB?物理扇区边界对齐。但是,如果在 Windows?XP、第三方分区实用工具中进行默认分区或者 Windows API 使用不正确,则所创建的分区可能与物理扇区边界不对齐。开发人员将需要确保使用正确的 API 来帮助确保对齐。下面概述了为了帮助确保分区对齐而推荐的 API。IVdsPack::CreateVolume 和 IVdsPack2::CreateVolume2 API 在创建新卷时不使用指定的对齐参数,而是使用操作系统的默认对齐值(在 Windows?Vista SP1 之前将使用 63?字节,在 Windows?Vista SP1 之后将使用上述的默认值)。使用IVdsCreatePartitionEx::CreatePartitionEx 或IVdsAdvancedDisk::CreatePartition API,这些 API 对需要创建分区的那些应用使用指定的对齐参数。帮助确保对齐正确的最好方法是最初创建分区时就执行正确的操作。否则当执行写入或在初始化时,你的应用将需要考虑对齐 — 这会是非常复杂的过程。问题 2:无缓冲的写入与物理扇区大小不一致最简单的问题是无缓冲的写入与报告的存储介质的物理扇区大小不一致。另一方面,缓冲写入与页面大小 (4 KB) 一致,这与第一代较大扇区介质的物理扇区大小一致。但是,具有数据存储的大多数应用都执行无缓冲的写入,因此将需要确保以物理扇区大小为单位执行这些写入。结果应用 I/O 未对齐的一些方案示例如下:提交记录被填充到 512 字节扇区:具有数据存储的应用通常包含某些形式的提交记录,这些记录保留有关元数据更改的信息或者保留数据存储的结构。为了确保扇区的丢失不会影响多个记录,该提交记录通常会增加到某个扇区大小。对于物理扇区大小较大的磁盘,应用将需要查询前面部分中所示的物理扇区大小,并确保每个提交记录被填充到该大小。对于?4K?磁盘,这样可确保?I/O?不会失败。对于?512e?磁盘,这样不仅仅可以避免读取–修改–写入循环,而且还有助于确保丢失物理扇区时只会丢失一个提交记录。日志文件被写入到未对齐的区块:当更新或附加到日志文件时通常使用无缓冲 I/O。应用可以切换到缓冲 I/O,或者在内部将日志更新缓冲到物理扇区大小的单元,以避免 I/O 失败或触发读取–修改–写入。为了帮助确定你的应用是否发出了无缓冲?I/O,请确保在调用?CreateFile?函数时在 dwFlagsAndAttributes 参数中包含 FILE_FLAG_NO_BUFFERING 标志。而且,如果你当前正在将写入对齐到扇区大小,那么该扇区大小最有可能只是逻辑?扇区大小,因为查询介质扇区大小的大多数现有 API 只是查询寻址的单元,即逻辑扇区大小。此处令人感兴趣的扇区大小是物理扇区大小,它才是真正的原子性单元。检索逻辑扇区大小的 API 的一些示例如下:GetDiskFreeSpace,?GetDiskFreeSpaceExFileFsVolumeInformationIOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_DRIVE_GEOMETRY_EXIVdsDisk::GetProperties,?IVdsDisk3::GetProperties2下面是查询物理扇区大小的方式:Windows 8 的首选方法 对于 Windows?8,Microsoft 引入了一个新的 API,该 API 使开发人员能够轻松在其应用内集成 4K 支持。此新 API 甚至比下面所述的 Windows?Vista 和 Windows?7 的旧方法支持的方案多。该 API 支持以下调用方案:从无权限的应用调用调用到任何有效的文件句柄通过 SMB2 调用到远程卷上的文件句柄简化的编程模型该 API 采用新的信息类形式 FileFsSectorSizeInformation,并且具有关联的结构 FILE_FS_SECTOR_SIZE_INFORMATION,定义如下:typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION { ULONG LogicalBytesPerSector; ULONG PhysicalBytesPerSectorForAtomicity; ULONG PhysicalBytesPerSectorForPerformance; ULONG FileSystemEffectivePhysicalBytesPerSectorForAtomicity; ULONG Flags; ULONG ByteOffsetForSectorAlignment; ULONG ByteOffsetForPartitionAlignment; } FILE_FS_SECTOR_SIZE_INFORMATION, *PFILE_FS_SECTOR_SIZE_INFORMATION;Windows 7 和 Windows Vista 的旧方法Windows?Vista 和 Windows Server 2008 引入了 API 来查询基于 AHCI 的存储控制器的附加存储设备的物理扇区大小。对于 Windows 7 和 Windows Server 2008 R2,自 SP1(或 Microsoft 知识库 982018)起该支持扩展到基于 Storport 的存储控制器。Microsoft 在 MSDN 上提供了一个代码示例,该示例详细介绍了应用如何查询卷的物理扇区大小。该代码示例位于 (v=VS.85).aspx 上。尽管上面的代码示例允许你获取卷的物理扇区大小,但你应该在使用之前对报告的物理扇区大小进行一些基本的健全性检查,因为我们已经观察到某些驱动程序可能不会返回正确格式的数据:确保报告的物理扇区大小大于等于报告的逻辑扇区大小;如果不是这样,那么你的应用应该使用等于报告的逻辑扇区大小的物理扇区大小确保报告的物理扇区大小是 2 的幂;如果不是这样,那么你的应用应该使用等于报告的逻辑扇区大小的物理扇区大小如果物理扇区大小是介于 512 字节和 4?KB 之间的 2 的幂值,那么你应该考虑使用向下舍入到报告的逻辑扇区大小的物理扇区大小如果物理扇区大小是大于 4?KB 的 2 的幂值,那么你应该评估你的应用在使用该值之前处理此方案的能力;否则,你应该考虑使用向下舍入到 4?KB 的物理扇区大小使用此 IOCTL 来获取物理扇区大小有几个限制。限制如下:需要提升的权限;如果你的应用未使用权限运行,那么你可能需要编写上面提到的 Windows 服务应用程序不支持 SMB 卷;你可能还需要编写 Windows 服务应用程序来支持这些卷上的物理扇区大小查询无法发布到任何文件句柄(IOCTL 必须发布到卷句柄)问题 3:依赖 512 字节扇区的文件格式具有标准文件格式(如?VHD?1.0)的某些应用可能对这些文件进行了硬编码,以采用?512?字节扇区大小。因此,对此文件的更新和写入都将导致设备上的读取–修改–写入循环,这可能会导致为客户带来性能和弹性问题。但是,应用可以采用一些方法来为在这种类型的介质上操作提供支持,例如:使用缓冲来确保采用物理扇区大小的单元执行写入。实现一个有助于确保采用报告的物理扇区大小单元执行更新的内部读取–修改–写入。如果可能,将记录增加到物理扇区,这样填充将被解释为空白空间考虑重新设计支持较大扇区的某个版本的应用数据结构问题 4:报告的物理扇区大小可能在会话之间发生变化在很多情形中,托管?Datastor?的基础存储的报告物理扇区大小可能发生变化。这种情况最常见于将?Datastor?迁移到其他卷时,甚至在网络之间迁移时。报告的物理扇区大小的变化对于很多应用来说可能是意外事件,并且可能会导致某些应用无法重新初始化。这不是提供支持的最简单方案,此处只是作为建议提到而已。你应该考虑客户的移动性要求,并且相应调整你的支持以帮助确保客户不会受到使用?4K?本机或 512e 介质的负面影响。用户如可以检索卷的逻辑和物理扇区大小内置 Windows 是一个可显示卷扇区大小信息的实用工具。具有支持的“fsutil”的 Windows 版本如下:Windows?8 Windows Server 2012具有 Microsoft KB 982018 的 Windows 7 SP1具有 Microsoft KB 982018 的 Windows 7具有 Microsoft KB 982018 的 Windows Server 2008 R2 SP1 (v3)具有 Microsoft KB 982018 的 Windows Server 2008 R2 (v3)具有 Microsoft KB 2553708 的 Windows Vista具有 Microsoft KB 2553708 的 Windows Server 2008若要获取扇区大小信息,请按照如下方式从提升的命令提示符调用该实用工具:fsutil fsinfo ntfsinfo <驱动器号>具有 512?字节模拟的 4K 扇区磁盘已将“每扇区字节数”字段设置为 512 并且将“每物理扇区字节数”字段设置为 4096,如下所示:4K?本机磁盘已将“每扇区字节数”和“每物理扇区字节数”字段都设置为?4096,如下所示:512?字节本机磁盘已将“每扇区字节数”和“每物理扇区字节数”字段都设置为?512。注意:如果“每物理扇区字节数”字段显示“不支持”,则表示存储驱动程序不支持 IOCTL_STORAGE_QUERY_PROPERTY,或者检索该信息时遇到错误。资源Windows 常规支持声明适用于 Windows 7 和 Windows Server 2008 R2 的修补程序适用于 Windows Vista 和 Windows Server 2008 的修补程序 支持声明有关 IOCTL_STORAGE_QUERY_PROPERTY 控制代码的常规信息(VS.85).aspxIOCTL_STORAGE_QUERY_PROPERTY 控制代码:(VS.85).aspx有关 STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR 结构的常规信息(VS.85).aspx用于描述 Microsoft 软件更新的标准术语的描述 示例代码,其中包含当调用 IOCTL_STORAGE_QUERY_PROPERTY 控制代码时如何从 STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR 结构中提取报告的存储访问对齐信息(v=VS.85).aspx有关 ImageX 命令行选项的常规信息(WS.10).aspx英特尔芯片组驱动程序支持 4?KB 扇区驱动程序的要求逻辑单元的精简配置平台客户端 — Windows?8 服务器 — Windows Server 2012 描述Windows 精简配置是用于端到端存储配置解决方案的界面。为了提供高度可用、可伸缩且用户友好的存储配置,服务需要从服务器主机到存储目标设备的强大实现。Windows 精简配置功能通过精简配置的逻辑单元 (LUN) 的标识、阈值通知、资源消耗处理、空间回收以及逻辑块寻址 (LBA) 状态检索为系统管理员、IT 经理以及存储管理员提供一个精简配置存储设备的同步视图。Windows 精简配置功能提供一个强大的存储配置服务模型,该模型可以应用于客户端–服务器存储系统、虚拟化存储以及云存储服务。Microsoft 将通过对存储阵列产品实行精简配置徽标计划来确保精简配置功能的高质量。Windows 精简配置存储解决方案: 允许存储管理员使用较少的物理磁盘资源创建较大的 LUN添加或删除物理磁盘资源,而不中断存储配置服务通过阈值设置来警告用户存储卷的使用通过共享存储池配置来支持存储配置根据需求和存储空间的使用来增加或减小存储池的大小Windows 精简配置功能摘要: 精简配置 LUN 标识用于阈值通知、临时资源消耗以及永久资源消耗的句柄存储空间回收逻辑块的映射状态查询表现如果没有正确了解用于精简配置 LUN 的 Windows 句柄,应用可能会由于异常行为或未知原因而失败。使用精简配置 LUN若要在 Windows?8 或 Windows Server 2012 中使用精简配置 LUN,系统和存储管理员应该注意以下事项: 精简配置?LUN?标识;系统管理员或最终用户可以使用碎片整理和存储优化程序实用工具来标识存储设备的介质类型当达到某个阈值或触发某个永久资源消耗事件时,Windows?将记录一个系统事件来警告系统管理员。可以手动执行存储空间回收,也可以通过文件删除通知或存储优化程序的计划程序自动进行。存储管理员应该实现阈值通知来警告系统管理员或最终用户,并避免任何意外的存储服务中断测试 存储阵列只有收到 Windows?8 精简配置证书才能支持 Windows 精简配置功能存储阵列的 Windows 精简配置硬件认证工具包是非常有用的测试工具,可验证存储阵列是否支持 Windows 精简配置功能Windows 期望精简配置?LUN?和完全配置?LUN?在同一系统中一同工作,而没有任何问题资源T10 SCSI 块命令规范 (SBC3r27) Windows 精简配置徽标要求 增强存储现在对于 WINPE 和服务器 SKU 是可选的平台客户端 — Windows?8 服务器 — Windows Server 2012 描述在 Windows?7 USB 设备中始终可以使用增强存储。对于 Windows?8 版本,它可用于所有存储设备。在基于客户端的设备中,默认情况下它处于启用状态;在服务器设备中,它是可选的并且必须通过 WinPE 进行配置。表现如果增强存储未启用,那么服务器设备将失败。在启用它的情况下,必须通过 WinPE 来配置启动设备。解决方案由于增强存储对于运行时服务器来说是可选的,因此开发人员只有将其添加到 WinPE 才能配置和激活这些驱动器。有关详细信息,请参阅部署指南。服务器管理员必须明确将其服务器配置为使用增强存储。虚拟磁盘服务正在转换为 Windows 存储管理 API平台客户端 — Windows?8 服务器 — Windows Server 2012 描述从 Windows?8 和 Windows?Server?8 开始,虚拟磁盘服务 COM 接口已被存储管理 API(一个基于 WMI 的编程接口)取代。若要管理存储子系统、(Windows) 磁盘、分区以及卷,我们强烈建议使用存储管理 API。有关详细信息,请参阅 Windows 存储管理 API。对于除了镜像启动卷(使用镜像卷来托管操作系统)之外的所有使用情况,动态磁盘已经弃用。对于需要在驱动器发生故障时具有弹性的数据,请使用存储空间,它是一个弹性存储虚拟化解决方案。有关详细信息,请参阅存储空间技术预览。你可以在弃用期间继续使用 DiskPart、DiskRAID 和磁盘管理,但这些工具将无法用于存储空间或者无法用于其他任何新的基于 WMIv2 的 Windows 存储管理 API 或内置存储管理实用工具或客户端。API工具VDSWMIDiskPartDiskRAID磁盘管理 GUIPowerShell存储空间控制面板存储子系统是是不适用是不适用是不适用基本磁盘是是是不适用是是否动态磁盘是否是不适用是否否存储空间否是否不适用否是是通过此转换,将提高存储弹性、可用性以及可伸缩性,统一脚本和编程语言,降低存储管理成本并简化远程存储管理。表现VDS 环境中使用的 DiskPart 和 DiskRAID 实用工具不支持新的存储空间。同样,新的存储 PowerShell 实用工具也不支持弃用的动态磁盘。缓解操作Microsoft?强烈建议使用?Windows?存储管理作为任何新的存储管理应用?API?的基础,并且在你的标准更新周期期间,你应计划将基于?VDS?基础结构的现有应用转换为 Windows 存储管理 API。资源Windows 存储管理 API (v=vs.85).aspxWindows PowerShell 中的存储 Cmdlet Windows Management Instrumentation (v=VS.85).aspx Windows PowerShell (v=VS.85).aspx 删除了本地卷的以前版本的 UI 平台客户端 — Windows?8 描述以前版本的?Windows?允许用户从本地卷的“卷影副本”中还原以前版本的各个文件。这些卷影副本是通过卷影复制服务?(VSS)?由“以前的版本”功能创建的。在 Windows?7 中,用户可以在“系统保护”UI(可通过“系统属性”获得)中配置和计划卷影副本。但是,“以前的版本”很少使用,并且会对总体的?Windows?性能有不利影响;因此已经删除了这个功能。在 Windows?8 中,不再提供以下功能:通过“以前的版本”UI 浏览、搜索或还原文件以前版本的功能通过“系统保护”UI 配置或计划文件以前版本的功能但是,用户仍然可以在访问 Windows 服务器上的文件共享时使用“以前的版本”选项卡。表现在?Windows?资源管理器“属性”菜单中,“以前的版本”选项对本地卷不再可用。解决方案需要创建本地卷的卷影副本的开发人员仍然可以通过在自定义代码中调用 VSS?API 来实现此目的。StorAHCI 取代了 MSAHCI平台客户端 — Windows?8 服务器 — Windows Server 2012 描述StorAHCI 是一个 Storport 微型端口,它支持 Windows 中的串行高级技术附加 (SATA) 高级主机控制器接口?(AHCI)?控制器,并且取代了?MSAHCI(一个?ATAport?微型端口)。表现在功能或性能方面应该没有变化;该驱动程序支持的设备与 MSAHCI 支持的设备完全相同。此更改对最终用户是透明的。缓解操作更新依赖?ATAport?绑定的任何实用工具和脚本。不要依赖驱动器名。而是使用标准磁盘检测。Windows 7 备份和还原已弃用平台客户端 — Windows?8 描述尽管“备份和还原”的行为没有变化,但该功能正在弃用,因此不会对其进行更新。该功能很少使用,现在它的功能已被新的“文件历史记录”功能取代。在 Windows?8 中将包含该功能,因此从 Windows?7 升级到 Windows?8 或依赖“备份和还原”功能的狂热者将仍然能够使用该功能。但是,除了“控制面板”之外,“备份和还原”的所有访问点都已被删除。“备份和还原”使用的“控制面板”小程序已被重命名为 Windows 7 文件恢复。设置注册表项以在其映像中禁用备份通知的 OEM 将不再需要进行此设置。我们建议你不要同时使用这两个功能。“文件历史记录”检查是否存在“备份”计划以及是否处于活动状态,如果找到一个“备份”计划,它将不允许用户启用该计划。这种情况下,希望使用“文件历史记录”的用户必须删除 Windows 备份计划。表现工作流可能中断,并且引用以前访问 Windows“备份和还原”功能的方法的文档需要进行更新来反映这些更改。缓解操作应该重写可能触发“备份和还原”的应用,以检查“文件历史记录”是否已启用并且是否允许用户选择他们喜欢的方法。卸载数据传输平台客户端 — Windows?8 服务器 — Windows Server 2012 描述为了提前进行存储数据移动,Microsoft?开发了一项新的数据传输技术?—?卸载数据传输 (ODX)。代替使用缓冲读取和缓冲写入操作,Windows?ODX 启动具有卸载读取的复制操作并从存储设备中检索表示该数据的令牌,然后该令牌使用卸载写入命令,以请求将数据从源磁盘移动到目标磁盘。存储设备的复制管理器根据令牌执行数据移动。在?Windows?8?中,IT?经理和存储管理员能够使用 Windows?ODX?功能与存储设备交互,以通过高速存储网络移动较大的文件或数据。在较大的数据传输期间,Windows?ODX?将大大减少客户端–服务器网络流量以及?CPU?时间使用,因为所有数据移动都在后端存储网络上。ODX?可用于虚拟机部署、海量数据迁移以及分层存储设备支持中,并且通过?ODX?和精简配置存储功能可以降低物理硬件部署的成本。注意:该功能仅在具有 SPC4 和 SBC3 规范实现的存储设备上起作用。功能详细信息Windows?ODX 功能嵌入在 Windows 操作系统的复制引擎中;在存储枚举期间,Windows 将查询存储设备的 ODX 功能复制源存储设备和复制目标存储设备都应该在同一复制管理器下进行管理才能获得复制卸载支持如果复制卸载操作失败,存储设备的复制管理器必须返回相应的其他敏感数据以便应用进行错误处理如果复制卸载操作失败,Windows 复制引擎将回滚到传统的复制操作使用 ODX调用 ODX?API 例程之前,数据传输应用必须确保复制源 LUN 和复制目标 LUN 都支持 ODX在?Windows?资源管理器中,用户可以使用“拖放”或“复制黏贴”来执行复制卸载当文件系统中装载了源 LUN 和目标 LUN 时,应用必须仅调用 FSCTL_Offload_Read 和 FSCTL_Offload_Write 来执行从源 LUN 到目标 LUN 的数据传输如果复制卸载操作失败,存储设备的复制管理器必须返回相应的其他敏感数据以便应用进行错误处理当文件系统中未装载源 LUN 或目标 LUN 时,应用必须对DeviceDsmAction_OffloadRead 或 DeviceDsmAction_OffloadWrite 操作调用 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 来执行复制卸载当源和目标 LUN 在任何文件系统中都未装载且被锁定时,存储管理应用可以使用 SCSI_PASS_THROUGH API 来执行卸载数据传输测试 为了确保强大的用户体验,请验证存储阵列的 Windows ODX 认证存储设备只有符合 Windows 卸载数据传输认证(过去是徽标)要求才能支持 ODX 功能使用 Windows 卸载数据传输硬件认证工具包来验证存储设备是否支持 ODX 功能资源T10 XCOPY Lite 规范 (11-059r8) Windows 卸载数据传输徽标要求 SCSI_PASS_THROUGH 结构(VS.85).aspx 桌面窗口管理器始终启用平台客户端 — Windows?8 服务器 — Windows Server 2012 描述在 Windows?8 中,桌面窗口管理器 (DWM) 始终处于“启用”状态,最终用户和应用都无法禁用。与 Windows?7 中一样,DWM 用来组成桌面。除了 Windows?7 中支持的体验之外,现在 DWM 桌面合成还能够对 Windows 应用商店应用体验的所有主题进行桌面合成、支持立体 3D 以及对体验进行管理、分隔和保护。所有主题的桌面合成在 Windows?Vista 和 Windows?7 中,只有 AERO 毛玻璃效果主题能够进行桌面合成。因此,Windows?经典和高对比度主题的用户无法使用桌面合成支持的体验,如 Windows 翻转、为实现高分辨率自动缩放 (DPI) 缩放、缩略图预览以及全屏放大镜。此外,在这些早期版本的?Windows?中,应用开发人员必须编写和保留多个代码路径 — 一个启用桌面合成,另一个禁用桌面合成。对于 Windows?8,为所有主题启用了桌面合成。Windows 经典和高对比度主题的用户可以使用桌面合成支持的体验,如?Windows?翻转、为实现高分辨率自动缩放 (DPI) 缩放、缩略图预览以及全屏放大镜。此外,开发人员无需编写和保留多个代码路径,因此简化了开发。对立体 3D 的支持DWM 桌面合成支持窗口化以及全屏立体 3D 应用内容的呈现和演示。Windows 应用商店应用体验的管理、分隔和保护DWM 桌面合成能够通过对 Windows 应用商店应用窗口中的桌面应用窗口进行管理和分隔来对新的?Windows 应用商店应用窗口中的桌面应用窗口进行分隔和保护。由于桌面合成负责管理所有应用窗口,因此禁用桌面合成可能会导致异常行为。此外,桌面合成还负责合成新的“开始”菜单以及其他窗口动化,这些形成了新?Windows?操作系统的核心个性化内容。控制桌面合成在?Windows?Vista?和?Windows?7?中,在很多方案中都禁用了桌面合成。在 Windows?8 中,DWM 桌面合成是操作系统的核心组件,因此无法禁用。有一些例外情况,桌面合成始终处于启用状态;它在用户登录前启动,在会话期间保持活动状态。本部分介绍了 Windows?8 如何处理 Windows?7 中禁用桌面合成的方案。服务器 SKU 和某些客户端 SKU在 Windows?8 中,所有服务器和客户端 SKU 都已启用桌面合成。这样可确保服务器管理员和用户可受益于桌面合成支持的体验。桌面合成的基本要求Windows?8?通过?WDDM?驱动程序支持和系统颜色深度来确保满足图形适配器和系统颜色深度要求。WDDM 驱动程序支持如果系统中不具备符合 WDDM 的图形驱动程序,则 Windows?8 将使用 Microsoft 基本显示适配器作为默认适配器。由于 DWM 始终运行于默认适配器上,因此在系统上无法获得符合?WDDM?的图形驱动程序(不管是未安装还是已禁用)时,它将选择 Microsoft 基本显示适配器来合成桌面。Microsoft 基本显示适配器是一个软件光栅器,它使用 CPU 而不是 GPU 来执行所有的绘图工作。请注意,Microsoft 基本显示适配器上的桌面合成性能(尤其是动画)可能不会像在 GPU 上运行桌面合成一样顺畅。系统颜色深度除非将颜色深度设置为每像素 32?位,否则无法运行桌面合成。在 Windows?7 中,可以在以下这些情况下更改系统的颜色深度:最终用户使用 Windows 显示控制面板或第三方控制面板来更改系统颜色最终用户运行通过公共 API 更改系统颜色深度的应用与 Windows?7 不同,Windows?8 不支持非每像素 32?位的颜色深度。用户不再能够使用控制面板来更改系统的颜色深度。另外,应用开发人员将无法使用 API 来更改系统的颜色深度。Windows?8 将检测尝试将系统的颜色深度更改为低于每像素 32?位的应用,然后通知用户必须使用应用兼容性填充程序才能运行应用。在用户确认后,将使用应用兼容性填充程序,然后该填充程序会将低颜色模式虚拟化到应用,同时保持系统以每像素 32 位运行。WinSAT 在?Windows?8?中,桌面合成不取决于?WinSAT?分数。而且,WinSAT?不再包括?DWM 评估。应用兼容性和用户操作在 Windows?8 中:已删除用于禁用 Window?7 中存在的桌面合成的所有选项桌面合成负责合成所有主题应用无法使用?DwmEnableComposition?禁用桌面合成。为了保持向后兼容性,调用此 API 将返回成功;但是,不会禁用桌面合成已删除“禁用桌面合成”填充程序已删除“应用程序属性”对话框的兼容性选项卡中“禁用桌面合成”的选项应用使用镜像驱动程序进行远程处理在 Windows?8 中:对远程方案不支持镜像驱动程序;虽然大多数使用镜像驱动程序的现有应用都应该能够继续运行,但由于在 Windows?8 中使用 DWM ON 支持现有镜像驱动程序要求进行基础结构更改,因此使用镜像驱动程序的某些功能或应用可能无法正常工作对将镜像驱动程序用于远程方案的应用开发人员不支持桌面复制 API。不支持现有的辅助功能镜像驱动程序必须更新现有的镜像驱动程序才能确保它们与 Windows?8 兼容 远程桌面连接在 Windows?8 中,始终为远程桌面连接启用桌面合成。连接到 Windows?8 远程计算机的客户端计算机将始终为远程桌面会话启用桌面合成,无论?Windows?客户端的版本如何。针对客户端计算机上的多台监视器及针对远程应用会话支持桌面合成。另外,当连接到 Windows?8 远程计算机时,远程桌面连接客户端中的这些设置不会生效:颜色深度 “启用合成”复选框连接的颜色深度始终设置为每像素 32 位,并且始终启用桌面合成。Direct2D 呈现不支持呈现到 Internet?Explorer?9 中的“富”元文件平台客户端 — Windows Vista | Windows 7 | Windows?8 服务器 — Windows Server 2008 | Windows Server 2008 R2 | Windows Server 2012 描述 由于?Internet?Explorer?9?中的内部呈现更改,IHTMLElementRender::DrawToDC 和 IViewObject::Draw API 现在将创建一个包含单个位图(表示 Web 内容)的元文件,而不是包含文本和向量信息的富元文件。此更改是由于从?GDI?呈现转为硬件加速的 Direct2D (D2D) 呈现。此更改将影响使用这些 API 及依赖元文件中的文本或向量的应用。表现根据受此更改影响的应用,用户可能会在其应用中看到被中断或不正确的行为。缓解操作仅需要从 Web 文档提取文本信息(无需定位信息)的应用可以使用 innerText 属性来提取文本。如果文档模式符合以下条件,使用 IViewObject::Draw 的应用可以使用 FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI 功能控制键还原为 GDI 呈现:小于或等于 8FCK 授权该主机使用 GDI并且将元文件 DC 传递到 API资源IHTMLElementRender::DrawToDC (v=vs.85).aspx IViewObject::Draw(v=vs.85).aspx IHTMLElement::innerText Property (VS.85).aspx Internet Feature Controls (I..L)(v=vs.85).aspxDX9 过时硬件支持的变更平台客户端 — Windows?8 描述Intel 和 AMD/ATI 不再支持其 DX9 图形部分,并且将不在 Windows?8 中为这些设备更新驱动程序。而且,这些设备也不会内置到 Windows?8 中。这些设备最后的驱动程序位于 WU 和 OEM/IHV 的网站上;来自 Vista 的许多日期,以及许多最终版本的驱动程序都在 Windows?8 上出现问题。另外,nVidia 最近声明他们将不为 Win8 支持其 DX9(Vista 和更早版本)移动(笔记本)零件。他们将继续支持其桌面 DX9 零件。所有这些驱动程序/部分组合都位于?Internet?Explorer 9?软件回退列表中。这意味着,由于性能或稳定性的原因,Internet Explorer 9 将在这些设备上使用软件呈现。这很好地表明,在这些驱动程序和零件上对 Windows 应用商店应用的体验将不会令人满意。表现由于不存在对这些设备的内置支持,因此具有这些零件的很多用户最后都将在 Microsoft?基本显示驱动程序上运行。这是一个基于?WARP?的?WDDM?1.2?软件 GPU,它实际上比此类中的某些零件更快,例如 Intel GMA500 系列。它支持水晶玻璃和 DWM,并且可以运行 Windows 应用商店应用。但是,它有一些重要限制:它不支持多监视器或投影它不支持睡眠,尽管确实支持休眠它通常不允许更改屏幕分辨率缓解操作如果在测试以后,你发现用户体验无法接受,你可以选择为其产品设置硬件要求,从而排除这些较早期的 DX9?Intel 和 AMD 零件。你也可以选择提醒用户,他们使用这些零件所获得的体验可能会无法接受。测试评估在这些设备上的性能和体验:比如在最终可用的驱动程序版本中可获得什么样的性能?比如在 MSBDD 上可获得什么样的性能?MSAA 不可用于 Windows 应用商店应用 平台客户端 — Windows?8 描述Windows?8 不支持 MSAA (Microsoft Active Accessibility) 从 Windows 应用商店应用读取或自动执行可访问的数据。应转而使用自 Windows?7 开始提供的 UI 自动化 (UIA) API。由于不存在任何现有的?Metro?风格功能,因此没有任何现有的实现受此更改的影响。这样只会影响为?Windows 应用商店编写的新应用和功能。开发人员仍然可以使用 MSAA 展示其辅助功能数据。如果 MSAA 数据由 Windows 应用商店的应用提供商提供,则 UIA 客户端将仍然能够读取和自动执行数据。为了对 Windows 应用商店应用简化此 API,我们已决定仅作为这些应用的客户端支持 UI 自动化。UIA 客户端可以在本机读取 UIA 提供程序,无需进行任何转换。UIA 客户端可以读取通过 UIA-to-MSAA 代理转换的 MSAA 提供程序。这样将减少 Windows 应用商店应用开发人员的测试负担。去除对?MSAA?提供程序的支持将进一步减少测试矩阵,但是有一些重要应用仍然基于 MSAA,我们不希望在呈现它们时无法访问。表现Windows 应用商店的应用开发人员将无法在应用模型中访问 MSAA 的详细信息。解决方案不应针对 Windows 应用商店应用的功能以 MSAA 编写任何新的自动化案例。如果它们需要与 Windows 应用商店应用交互,请将使用 MSAA 的任何现有的内置工具切换为 UIA。Windows 应用商店的应用开发人员应使用 UI 自动化 API。资源UI 自动化基础(v=vs.85).aspx 已经对 NDIS 6.30 驱动程序弃用端口 3 平台客户端 — Windows?8 服务器 — Windows Server 2012 描述Windows?8?去除了对?NDIS?微型端口?WLAN?驱动程序的平台支持,以便创建或启动 IHV?扩展端口(也称为第?3?端口)。此功能是在?Wi-Fi?联盟?(WFA)?开发 Wi-Fi?Direct?规范时在?Windows?7?中作为权宜之计引入的。该规范现已完成,使用 Wi-Fi Direct 的产品将被认证,Windows?8 引入了一个本机 Wi-Fi Direct 堆栈。表现没什么表现,因为第?3?端口是在?WLAN?微型端口驱动程序需要此功能时启动的一项功能。解决方案我们将为不报告 NDIS 6.30 的现有驱动程序保持该扩展端口的功能可用,以便维护设备的兼容性。但是,报告 NDIS 6.30 的新 WLAN 驱动程序将无法启动此端口;相反,这些驱动程序的开发人员应使用 Wi-Fi Direct。新功能和增强功能本文档部分介绍可同时改善用户和开发人员体验的增强功能和新功能。但是,有些功能含有开发人员需要对其现有产品和新产品注意的影响。下面是按功能分组的新功能和增强功能列表:安全 提前启动反恶意软件 内核模式驱动程序的安全启动功能签名要求测量的启动性能启动应用自动维护可用性第三方输入法编辑器 存储和文件系统新 API 允许应用将“TRIM 和取消映射”提示发送到存储介质多路径 I/O 现在支持扩展存储请求块弹性文件系统 文件服务器 API 支持新的文件历史记录功能操作系统现在控制光盘驱动器的电量USB支持 USB 3.0提前启动反恶意软件平台客户端 — Windows 8 服务器 — Windows Server 2012 描述 虽然反恶意软件?(AM)?在检测运行时恶意软件方面变得越来越好,但是攻击者在创建可躲避检测的?Rootkit?方面也变得越好。检测在启动周期提前启动的恶意软件是大多数 AM 供应商都在努力解决的一个挑战。通常,他们会创建主机操作系统不支持,并且实际上会将计算机置于不稳定状态的系统黑客。到目前为止,Windows 尚未对 AM 检测和解决这些早期启动威胁提供一个好方法。Windows?8?引入了一个称为“安全启动”的新功能,它会保护?Windows?启动配置和组件,并加载一个提前启动反恶意软件?(ELAM)?驱动程序。此驱动程序在其他引导启动驱动程序之前启动,启用对这些驱动程序的评估,并帮助?Windows 内核决定是否应初始化这些驱动程序。表现通过由内核首先启动,可确保在任何第三方软件之前启动?ELAM,并因此让它能够检测启动过程中的恶意软件并阻止它的初始化。缓解操作根据初始化策略,将根据 ELAM 驱动程序返回的分类初始化启动驱动程序。默认情况下,该策略会初始化已知良好和未知的驱动程序,但是不会初始化已知有害的驱动程序。系统管理员可以通过组策略指定以下自定义策略:可阻止未知驱动程序初始化,或者可启用对启动过程关键但已被篡改的驱动程序启动时被初始化。解决方案ELAM 驱动程序必须注册内核回调,以便在它初始化时获取有关每个引导启动驱动程序的信息。然后,ELAM 驱动程序可以为每个驱动程序返回一个分类。需要以下这些函数:IoRegisterBootDriverCallback() 和 IoUnRegisterBootDriverCallback()ELAM?驱动程序也可以注册注册表回调。这样做让?ELAM?驱动程序可以检查每个引导启动驱动程序所使用的配置数据。然后,ELAM 驱动程序可以在此数据被引导启动驱动程序使用之前对其进行阻止或修改(如有必要)。需要以下这些函数:CmRegisterCallbackEx() 和 CmUnRegisterCallback()有关 ELAM 驱动程序要求和 API 使用的更多详细描述在 MSDN 上称为“提前启动反恶意软件”的一个白皮书中进行介绍。测试ELAM 驱动程序必须由 Microsoft 专门签名,以确保 Windows 内核在启动过程早期启动这些驱动程序。若要获取签名,ELAM?驱动程序必须通过一组认证测试,以验证性能和其他行为。这些测试包含在 Windows?硬件认证工具包中。资源提前启动反恶意软件白皮书 CmRegisterCallbackEx()(v=vs.85).aspx CmUnRegisterCallback()(v=vs.85).aspx IoRegisterBootDriverCallback()(v=VS.85) IoUnRegisterBootDriverCallback()(v=VS.85).aspx 使用 Windows 硬件认证工具包认证硬件 Build 会议演示文稿 Windows 开发人员预览工具包和工具 内核模式驱动程序的安全启动功能签名要求 平台客户端 — Windows?8 服务器 — Windows Server 2012 描述在 Windows?8 和 Windows?Server?2012 中,包括 WinPE,内核已被锁定,以防止启动或 root kit?引入的恶意软件绕开?Windows?操作系统对签名驱动程序的安全要求。这一更改影响支持统一可扩展固件接口 (UEFI) 安全启动的设备的所有内核模式驱动程序;UEFI?安全启动对于客户端计算机的?Windows?8?认证是必需的,而对于服务期则是可选的。它不会影响用户模式的驱动程序。内核模式驱动程序的标准开发涉及到使用内核模式调试或引导配置数据?(BCD) <testsigning> 设置。在启用安全启动时,将禁用这两种方法。表现如果内核模式驱动程序未由受信任的证书颁发机构?(CA)?正确签名,这些驱动程序将不会运行。操作系统将不允许不受信任的驱动程序运行,并且不允许像内核调试和测试签名这样的标准机制。缓解操作若要测试驱动程序,你必须在?BIOS?中禁用安全启动,并满足其他测试签名要求(请参阅下面的信息)。在更广泛的范围内分发驱动程序时,它们必须由受信任的 CA 正确签名。资源签名驱动程序 测量的启动平台客户端 — Windows 8 服务器 — Windows Server 2012 描述虽然反恶意软件?(AM)?在检测运行时恶意软件方面变得越来越好,但是攻击者在创建可躲避检测的?Rootkit?方面也变得越好。检测在启动周期提前启动的恶意软件是大多数 AM 供应商都在努力解决的一个挑战。通常,他们会创建主机操作系统不支持,并且实际上会将计算机置于不稳定状态的系统黑客。到目前为止,Windows 尚未对 AM 检测和解决这些早期启动威胁提供一个好方法。Windows 8 引入了一个称为“测量的启动”的新功能,它可以从固件开始到整个引导启动驱动程序期间测量每个组件,将这些测量结果存储在计算机上受信任的平台模块?(TPM),然后提供一个可远程测试的日志,以验证客户端的启动状态。表现“测量的启动”功能向 AM 软件提供一个在 AM 软件之前启动的所有启动组件的受信任(防欺骗和篡改)的日志。AM 软件可以使用日志来确定在它之前运行的组件是否值得信任,或者它们是否已受到恶意软件的感染。本地计算机上的?AM 软件可以将该日志发送到远程服务器进行评估。远程服务器可通过与客户端上的软件交互或者通过带外机制来启动修正操作。缓解操作在企业方案中,系统管理员控制如何使用“测量的启动”信息。在最终用户方案(例如网上银行)中,消费者必须选择加入才能为特定服务使用“测量的启动”。解决方案现在正准备白皮书,其中详细介绍了各种 API 及必须为各种“测量的启动”方案进行的函数调用。启动应用平台客户端 — Windows?8 描述Windows?的一个大赌注是能够适用于各种机型,从传统的台式机和便携式计算机到低能耗平板电脑。为了确保我们共同的客户在他们选择安装?Windows?的任何机型上都有出色的体验,需要解决的两个关键成功指标是延长的电池寿命和出色的电脑响应速度。为了实现这些指标,已经在?Windows?的多个方面做出了改进,包括进程生命周期、睡眠状态和启动应用(在计算机启动后自动启动的应用)。本主题重点介绍启动应用在?Windows?设备上所具有的一些影响,并且向开发人员?(ISV/IHV)?和?OEM?提供了重新考虑启动应用使用模式的指南,以便为我们共同的客户延长电池寿命并提高响应速度。本主题也介绍了?Windows?中让用户可以控制确定实际执行哪些启动应用的更改。Windows 应用商店应用设计为遵守新的电池消耗和响应度标准,并且?Windows?通过挂起和/或终止它们来管理其生命周期。但是,为以前的?Windows?版本设计的桌面应用不一定设计为保持电池使用寿命或者敏感地处理用户活动,并且可能会影响系统响应(例如,当应用定期发送?1?秒的检测信号来检查更新时,或者之前预分配内存,以防稍后需要)。如果用户购买的?Windows?平板电脑具有较长的电池寿命预期和数周的待机时间,但是用户发现平板电脑的电池寿命未实现这些目标,这样会造成糟糕的用户体验。同时,由于启动应用在后台运行,因此在系统上运行的应用数可能会显著超过用户所知道的应用数,并且会影响系统响应。启动应用被分类为包括利用这些机制的那些应用,以便启动:Run 注册表项(包括 HKLM、HKCU、wow64 节点)RunOnce 注册表项针对每用户和公共位置的开始菜单下的启动文件夹Windows?中已添加新功能,以确保最终用户始终可以控制在其系统上运行的应用。任务管理器中的“启动”选项卡显示一个启动应用列表,以及允许用户禁用启动应用的控件。为了帮助用户确定禁用哪些应用,任务管理器将显示每个启动应用的影响程度。根据应用在启动时的?CPU?和磁盘使用情况来评估影响。通过应用以下这些条件来确定影响值:高度影响 — 应用启动时使用大于 1 秒的 CPU 时间或大于 3?MB 的磁盘 I/O中度影响 — 应用使用 300?毫秒 — 1000?毫秒的 CPU 时间或 300 KB — 3?MB 的磁盘 I/O低度影响 — 应用使用小于 300 毫秒的 CPU 时间和小于 300?KB 的磁盘 I/OMicrosoft 提供工具来帮助应用开发人员评估、分析并采取措施来降低其启动影响并改善用户体验。评估和部署工具包提供了功能来运行启动性能评估及测量在启动时所运行应用的影响。评估结果包含?Windows?启动时最有影响的组件的详细分析和修补信息(如果适用)。使用?Windows?性能分析器,应用开发人员可以执行深层分析,以查找影响性能的根本原因并改善 Windows 启动性能。从此处安装 Windows ADK。指南启动应用跨下表中描述的多个类别。针对开发人员的一组建议已映射到启动应用类别,以便与上述 Windows 功能更改保持一致。启动应用类别描述建议更新监视并通知用户在线更新 维护任务 注意:所有更新都应该是维护任务,没有任何 UI 交互要求。应用只应安静地更新自身,并在更新失败时回滚。硬件协助备用访问点提供对可通过 Windows 中的其他访问点访问的?Windows 功能和应用的访问权限删除注意:关键是为了减少 Windows 中存在的重复功能通知程序向用户提供通知,不管其设备如何删除 注意:Windows 向用户提供有关其设备的 Windows?8 风格通知预启动程序在用户登录期间,应用所需的某些初步活动会卸载到启动应用删除 注意:Windows?8 已优化为可获得快速的应用启动体验实用工具电脑同步跨多个系统提供同步功能启动(Beta 中的潜在更新)备份和恢复用于保存和还原文件、设置或整个系统状态的入口点Windows 应用商店用于和用户交互的应用遥测收集并发送有关用户体验和环境的信息维护任务电脑监视提供未经请求的系统状态监视和通知,复制现有的内置功能删除 注意:关键是为了减少 Windows 中存在的重复功能安全家长控制和筛选器强制执行为?Internet?访问和使用建立的规则和限制启动配置和管理允许用户控制系统安全监视的诊断和修补选项通知用户发现的情况和安全操作Windows 应用商店用于和用户交互的应用通信和 Internet(IM 和 VoIP)发送和接收消息和呼叫Windows 应用商店应用音乐和 MP3播放、存储和管理音乐Windows 应用商店应用照片和视频删除、录制、呈现、存储和管理照片和视频Windows 应用商店应用电脑游戏跨各个域启动游戏Windows 应用商店应用追加销售和广告吸引对可购买商品和服务的注意力 删除注意:辅助功能应用指南通过与 ISV 的单独直接接触来介绍。有关详细信息,请参阅《轻松访问编程》:。Windows 应用商店应用Windows 应用商店通过引入具有新坐标的?Windows?空间来增强用户体验:一个新的应用模型、一个新的用户界面以及一个?Windows?应用商店。这些语言和呈现框架选项可用于开发 Windows 应用商店应用:HTML/JavaScript/CSSXAML/C#XAML/C++可以在 Windows 开发人员中心获得用于开发 Windows 应用商店应用的汇总信息: 和 示例:开发 Windows 应用商店游戏:开发使用媒体的 Windows 应用商店应用:自动维护任务定期后台活动应设计为自动维护任务。这些活动被安排在系统空闲时间,以便提高 Windows 电脑的响应和能效。桌面应用可以在安装时使用桌面 SDK 创建和配置维护任务。有关详细信息,请参阅随后的“自动维护”主题。资源辅助功能指南 ADK Windows 开发人员中心自动维护平台客户端 — Windows?8 服务器 — Windows Server 2012 描述Windows?依赖于执行内置和第三方维护活动来实现其许多增值服务,包括 Windows?更新和自动磁盘碎片整理,以及防病毒更新和扫描。另外,企业经常使用诸如网络访问保护?(NAP)?扫描等维护活动来帮助在所有企业工作站上实施安全标准。Windows?中的维护活动设计为在后台运行,具有有限的用户交互,并且对性能和能效的影响最小。但在?Windows?7?和早期版本中,由于?Windows?中不确定和广泛安排的多个维护活动,仍然会影响性能和能效。如果在用户活跃使用计算机时运行维护任务,则会降低对用户的响应速度。应用也会经常要求用户更新其软件并运行后台维护,引导用户使用多个体验,包括操作中心、控制面板、Windows?更新、任务计划程序?MMC?管理单元和第三方控件。自动维护的目标是在?Windows?中结合所有的后台维护活动,并帮助第三方开发人员向?Windows?添加其维护活动,而不会对性能和能效产生负面影响。另外,自动维护让用户及企业可以控制维护活动的计划和配置。关键问题自动维护设计为使用 Windows 中的维护活动解决以下这些问题:截止日期计划资源使用冲突能效用户透明度功能自动维护可以利用空闲的效率,并允许所有活动以优先顺序及时运行。它也有助于统一查看和控制维护活动,并允许第三方开发人员向?Windows?添加其维护活动,而不会对性能和能效产生负面影响。为此,它提供了完全自动模式、用户启动模式、自动停止、截止时间和通知及企业控制。下面将介绍每一项。完全自动模式此默认模式支持在电脑空闲期间和在计划时间智能调度,此时会执行和自动暂停维护活动,无需任何用户干预。用户可以设置每周或每日计划。所有维护活动均为非交互式,安静执行。当系统不可能处于使用状态时,将从睡眠状态自动恢复计算机,从而遵守电源管理策略,对于便携式计算机,则默认为仅当接通交流电源时允许唤醒。将使用处于高功率状态下的整个系统资源尽快完成维护活动。如果从睡眠状态恢复系统进行自动维护,则要求返回睡眠状态。与这些活动(例如配置)相关的任何必要用户交互均在执行自动维护时间以外执行。用户启动模式如果用户需要准备出行,预计会使用电池电源较长时间,或者希望优化性能和响应,他们可以选择按需启动自动维护。用户可以配置自动维护属性,包括自动运行计划。他们可以查看当前的自动维护执行状态,并且他们可以根据需要停止自动维护。自动停止如果用户开始与计算机交互,自动维护将自动停止当前运行的维护活动。当系统返回到空闲状态时,维护活动将恢复。注意:自动维护中的所有活动必须支持在?2?秒或更短时间内停止。系统应通知用户活动已停止。截止时间和通知关键维护活动必须在预定义的时段内执行。如果关键任务尚不能够在指定的时间内运行,自动维护将在下一个可用的系统空闲机会自动开始执行。但是,如果任务状态保持超出截止时间,自动维护将通知用户该活动,并提供手动运行自动维护的选项。安排的所有维护任务都将运行,但是最紧迫的任务优先运行。此活动可能会影响系统响应和性能;因此,自动维护将通知用户正在执行关键维护活动。企业控制企业 IT 专业人员应该能够确定何时在其 Windows 系统上执行自动维护,通过标准化的管理界面强制执行该计划,并检索有关自动维护执行尝试的状态的事件数据。另外,IT?专业人员应该能够通过标准管理界面,远程调用特定的自动维护活动。每次执行自动维护时,都会运行状态报告,包括在由于用户已手动暂停活动而无法执行自动维护时发出通知。IT?专业人员应考虑将登录脚本移动到自动维护,以便有助于让用户的登录体验更快。创建自动维护任务本节详细介绍开发人员如何使用 XML 或 C 语言中的任务定义创建任务。请记住,维护活动不应启动需要用户交互的任何用户界面,因为自动维护完全是在用户不在时安静运行的。实际上,如果用户在自动维护期间与计算机交互,则处理的任何任务都将结束,直到下一个空闲期。使用 XML任务计划程序包含一个内置的命令行工具 schtasks.exe,它可以导入 XML 格式的任务定义。任务定义的架构记录在 (v=VS.85).aspx。下面是以 XML 定义的一个自动维护任务示例。<?xml version="1.0" encoding="UTF-16"?><Task version="1.4" xmlns=""> <RegistrationInfo> <Date>2011-07-01T11:34:31</Date> <Author>IT Deptartment</Author> </RegistrationInfo> <Principals> <Principal id="Author"> <RunLevel>LeastPrivilege</RunLevel> <GroupId>NT AUTHORITY\SYSTEM</GroupId> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <MaintenanceSettings> <Period>P2D</Period> <Deadline>P14D</Deadline> </MaintenanceSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>cmd</Command> <Arguments>/c timeout -t 60</Arguments> </Exec> </Actions></Task> 若要将该任务保存在?Windows?计算机上,请将以上?XML?另存为文本文件并使用以下命令行:Schtasks.exe /create /tn <task name> /xml <text file name>使用 C也可以使用?C?代码创建自动维护任务。下面是可用于配置任务的自动维护设置的一个代码示例:/********************************************************************This sample creates a maintenance task to start cmd window during maintenance opportunities with periodicity of 2 days and deadline 0f 14 days.********************************************************************/#define _WIN32_DCOM#include <windows.h>#include <iostream>#include <stdio.h>#include <comdef.h>#include <wincred.h>// Include the task header file.#include <taskschd.h>//#pragma comment(lib, "taskschd.lib")//#pragma comment(lib, "comsupp.lib")int __cdecl MainteanceTask( ){ // ------------------------------------------------------ // Initialize COM. HRESULT hr; // ------------------------------------------------------ // Create a name for the task. LPCWSTR wszTaskName = L"MaintenanceTask"; ITaskService *pService = NULL; ITaskFolder *pRootFolder = NULL; ITaskDefinition *pTask = NULL; ITaskSettings *pSettings = NULL; IRegistrationInfo *pRegInfo= NULL; IPrincipal *pPrincipal = NULL; ITaskSettings3 *pSettings3 = NULL; IMaintenanceSettings* pMaintenanceSettings = NULL; IActionCollection *pActionCollection = NULL; IAction *pAction = NULL; IExecAction *pExecAction = NULL; IRegisteredTask *pRegisteredTask = NULL; wprintf(L"\nCreate Maintenance Task %ws", wszTaskName ); hr = CoInitializeEx( NULL, COINIT_MULTITHREADED); if( FAILED(hr) ) { wprintf(L"\nCoInitializeEx failed: %x", hr ); return 1; } // Set general COM security levels. hr = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0, NULL); if( FAILED(hr) ) { wprintf(L"\nCoInitializeSecurity failed: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Create an instance of the Task Service. hr = CoCreateInstance( CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService ); if (FAILED(hr)) { wprintf(L"\nFailed to create an instance of ITaskService: %x", hr); goto CleanUp; } // Connect to the task service. hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t()); if( FAILED(hr) ) { wprintf(L"\nITaskService::Connect failed: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Get the pointer to the root task folder. This folder will hold the // new task that is registered. hr = pService->GetFolder( _bstr_t( L"\\") , &pRootFolder ); if( FAILED(hr) ) { wprintf(L"\nCannot get Root folder pointer: %x", hr ); goto CleanUp; } // If the same task exists, remove it. ( void ) pRootFolder->DeleteTask( _bstr_t(wszTaskName), 0 ); // Create the task definition object to create the task. hr = pService->NewTask( 0, &pTask ); if (FAILED(hr)) { wprintf(L"\nFailed to CoCreate an instance of the TaskService class: %x", hr); goto CleanUp; } // ------------------------------------------------------ // Get the registration info for setting the identification. hr = pTask->get_RegistrationInfo( &pRegInfo ); if( FAILED(hr) ) { wprintf(L"\nCannot get identification pointer: %x", hr ); goto CleanUp; } hr = pRegInfo->put_Author( _bstr_t(L"Author Name") ); if( FAILED(hr) ) { wprintf(L"\nCannot put identification info: %x", hr ); goto CleanUp; } // The task needs to grant explicit FRFX to LOCAL SERVICE (A;;FRFX;;;LS) hr = pRegInfo->put_SecurityDescriptor( _variant_t(L"D:P(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)") ); if( FAILED(hr) ) { wprintf(L"\nCannot put security descriptor: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Create the principal for the task - these credentials // are overwritten with the credentials passed to RegisterTaskDefinition hr = pTask->get_Principal( &pPrincipal ); if( FAILED(hr) ) { wprintf(L"\nCannot get principal pointer: %x", hr ); goto CleanUp; } // Set up principal logon type to interactive logon hr = pPrincipal->put_LogonType( TASK_LOGON_INTERACTIVE_TOKEN ); if( FAILED(hr) ) { wprintf(L"\nCannot put principal info: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Create the settings for the task hr = pTask->get_Settings( &pSettings ); if( FAILED(hr) ) { wprintf(L"\nCannot get settings pointer: %x", hr ); goto CleanUp; } hr = pSettings->QueryInterface( __uuidof(ITaskSettings3), (void**) &pSettings3 ); if( FAILED(hr) ) { wprintf(L"\nCannot query ITaskSettings3 interface: %x", hr ); goto CleanUp; } hr = pSettings3->put_UseUnifiedSchedulingEngine( VARIANT_TRUE ); if( FAILED(hr) ) { wprintf(L"\nCannot put_UseUnifiedSchedulingEngine: %x", hr ); goto CleanUp; } hr = pSettings3->CreateMaintenanceSettings( &pMaintenanceSettings ); if( FAILED(hr) ) { wprintf(L"\nCannot CreateMaintenanceSettings: %x", hr ); goto CleanUp; } hr = pMaintenanceSettings->put_Period ( _bstr_t(L"P2D") ); if( FAILED(hr) ) { wprintf(L"\nCannot put_Period: %x", hr ); goto CleanUp; } hr = pMaintenanceSettings->put_Deadline ( _bstr_t(L"P14D") ); if( FAILED(hr) ) { wprintf(L"\nCannot put_Period: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Add an action to the task. This task will execute notepad.exe. // Get the task action collection pointer. hr = pTask->get_Actions( &pActionCollection ); if( FAILED(hr) ) { wprintf(L"\nCannot get Task collection pointer: %x", hr ); goto CleanUp; } // Create the action, specifying that it is an executable action. hr = pActionCollection->Create( TASK_ACTION_EXEC, &pAction ); if( FAILED(hr) ) { wprintf(L"\nCannot create the action: %x", hr ); goto CleanUp; } // QI for the executable task pointer. hr = pAction->QueryInterface( IID_IExecAction, (void**) &pExecAction ); if( FAILED(hr) ) { wprintf(L"\nQueryInterface call failed for IExecAction: %x", hr ); goto CleanUp; } // Set the path of the executable to notepad.exe. hr = pExecAction->put_Path( _bstr_t(L"cmd") ); if( FAILED(hr) ) { wprintf(L"\nCannot put action path: %x", hr ); goto CleanUp; } // ------------------------------------------------------ // Save the task in the root folder. hr = pRootFolder->RegisterTaskDefinition( _bstr_t(wszTaskName), pTask, TASK_CREATE_OR_UPDATE, _variant_t(), _variant_t(), TASK_LOGON_INTERACTIVE_TOKEN, _variant_t(L""), &pRegisteredTask); if( FAILED(hr) ) { wprintf(L"\nError saving the Task : %x", hr ); goto CleanUp; } wprintf(L"\nSuccess!\n----------------------------------" );CleanUp: if ( pService != NULL ) pService->Release(); if ( pRootFolder != NULL ) pRootFolder->Release(); if ( pTask != NULL ) pTask->Release(); if ( pSettings != NULL ) pSettings->Release(); if ( pRegInfo != NULL ) pRegInfo->Release(); if ( pPrincipal != NULL ) pPrincipal->Release(); if ( pSettings3 != NULL ) pSettings3->Release(); if ( pMaintenanceSettings != NULL ) pMaintenanceSettings->Release(); if ( pActionCollection != NULL ) pActionCollection->Release(); if ( pAction != NULL ) pAction->Release(); if ( pExecAction != NULL ) pExecAction->Release(); if ( pRegisteredTask != NULL ) pRegisteredTask->Release(); CoUninitialize(); return SUCCEEDED ( hr ) ? 0 : 1;}验证任务验证已成功创建任务并作为维护任务的一部分运行。验证任务创建使用以下命令行可将任务定义导出到文件,并确保任务定义为预期定义:Schtasks.exe /Query /tn<task name> /xml <text file name>验证任务执行运行以下命令行可启动任务并验证任务计划程序?UI?(taskschd.msc)?是否显示该任务已运行:Schtasks.exe /Run /tn<task name>资源任务计划 第三方输入法编辑器平台客户端 — Windows 8 服务器 — Windows Server 2012 描述输入法编辑器 (IME) 是允许用户键入文本的软件组件,使用它可以键入比键盘所表示字符具有更多字符的语言。(这种情况很常见,但不限于东亚语言。)用户键入的不是单个键上显示的每个单个字符,而是键入由?IME?解释的键组合。IME 生成与一组键击匹配的字符,有时会向用户显示供其选择的可能字符列表,然后将字符插入用户应用的编辑控件窗口。过去,Windows 允许第三方 IME 在 Windows 系统中运行,在 Windows?8 中继续具有此功能。用户可以安装并使用第三方 IME。另外,我们强化了系统和进程,以阻止恶意 IME,提高安全性并增强用户体验。在 Windows 8 中,你会发现:第三方 IME 同时支持硬件键盘和触摸键盘第三方 IME 供应商必须按照 Microsoft 指南为 Windows?8 开发其 IME第三方 IME 必须进行数字签名第三方 IME 必须感知文本服务框架 (TSF),并且必须设置适当的 IME 标志才能在 Windows?8 中正确运行旧的第三方?IME?将能够在桌面应用中运行,但在?Windows?应用商店应用中将被阻止第三方?IME?可以使用?Windows?提供的触摸键盘布局链接他们的?IME,以便用户可以通过触摸键盘使用其?IME。但是,第三方?IME?将无法使用内置 IME 的某些触摸键盘功能Windows Defender 将从 Windows 系统中删除恶意 IME表现 输入语言和输入法切换更改 不会显示所有的 IME 模式图标及 IME 品牌图标,而是仅显示一个 IME 模式图标及 IME 品牌图标。如果你单击 IME 品牌图标,你可以切换输入法。如果你单击 IME 模式图标,你可以切换 IME 模式。Windows 8 输入弹出窗口和 IME 弹出窗口,显示日语 IME 作为当前的输入法如果某种 IME 在 Windows?7 中依靠语言栏来显示其模式图标,则必须更改此 IME,以便在 Windows?8 的输入指示中显示其品牌图标和模式图标。注意:有关?IME?如何在桌面任务栏的系统托盘中显示其品牌图标和模式图标的详细信息将在 Windows?8 IME 指南中公开介绍和发布。新 Windows 环境Windows?8 中的环境更改了 IME 的外貌。Windows 应用商店应用、本地上下文应用容器和有关 IME 的 API 限制概念并未出现在 Windows?7 中。某些现有的 Windows?7 IME 在 Windows 应用商店应用内运行时将停止响应,因此不允许旧 IME 在 Windows 应用商店应用内运行。另外,请确保验证新版本的 IME,以保证它们与新 UI 环境兼容,然后再在 Windows 应用商店应用内运行。缓解操作你可以在系统上使用与桌面兼容的 IME。如果你主要使用桌面应用,并且你希望继续使用首选的旧?IME?进行输入,则这可能是你的最佳选择。我们建议你使用 Windows?8?IME,停止使用旧的/未认证的?IME。语言?CPL?和输入切换都会提供通知,以警告你使用桌面兼容?IME 的影响。如果某个桌面 IME 无法在你的系统中运行,你将看到以下任一行为:语言?CPL?UI?标记与桌面兼容的?IME,并显示消息表明与桌面兼容的?IME?仅可在桌面应用中运行。当用户在 Windows 应用商店应用内时,输入弹出窗口将灰显与桌面兼容的 IME。这表示?IME?将不会在此应用中运行。(在桌面中,将不灰显与桌面兼容的 IME)。如果你使用与桌面兼容的 IME 切换到 Windows 应用商店应用并意识到该 IME 已关闭,请使用输入指示更改为与 Windows 应用商店应用兼容的 IME。旧的或与桌面兼容的 IME 在以下条件下将受到限制:正在从 Windows 7 升级到 Windows 8,有第三方 IME 在系统上供应商尚未发布与?Windows?8?兼容的版本,并且用户在此期间尝试使用现有 Windows 7 版本解决方案 常规使用现有的文本服务框架?(TSF)?基础结构为你的?UI?实现?IME?逻辑和?Windows 应用商店应用的常用控件。创建附属窗口托管你的 UI。即将添加新的搜索 API,以便在 UI 中改进搜索预测并提供更明确的搜索体验。同时也将添加相关?API,以便在调用触摸键盘时通知第三方?IME?保护?UI?不会被触摸键盘所覆盖。将为第三方?IME?自动加载默认的传统触摸键盘布局。不需要执行任何其他工作即可与此传统触摸键盘相集成。但是,第三方?IME?将能够请求其他触摸布局。请熟悉 Windows 8 IME 指南,以便你可以在 IME 中发扬关键 Windows 应用商店用户体验原则。遵循这些指南的 IME 必须设置标志指示 IME 与 Microsoft 设计相兼容。Windows?8 将阻止所有 IME 在 Windows 应用商店应用中运行。除了 Windows Defender 吊销外,数字签名将阻止恶意 IME 安装到 Windows?8 系统上。在身份验证后,第三方 IME 的 .dll 将被数字签名。仅仅具有此数字签名的 IME 在安装到系统时才不会向用户显示关键警告消息。用户可以报告恶意 IME。在确定恶意 IME 后,Windows Defender 会将其从 Windows 系统中删除。文本服务框架IME 必须感知 TSF 才能在 Windows?8 中运行。Windows?8 将阻止无法感知 TSF 的 IME 在 Windows 应用商店应用中运行。在启动应用时,TSF 将为用户选择到应用进程的 IME 加载 IME .dll。注意:为了在?Windows 应用商店应用和桌面应用之间提供不同的功能或?UI,TSF?加载的?.dll?可以检查正在加载的应用类型。IME 调用 ITfThreadMgrEx::GetActiveFlags 方法并检查 TF_TMF_IMMERSIVEMODE 标志,并且可以根据结果触发不同的应用逻辑。当 IME 加载到 Windows 应用商店应用中时,它受应用容器约束,就像受应用本身约束一样。该行为确保 IME 不能违反 Windows 应用商店安全合约,但拥有访问桌面 SDK 的权限(因为它们未由?Windows?应用商店分发或认证)。IME?在应用容器内当前执行的某些功能受到影响。这些功能包括:字典文件Internet 更新动态学习进程间的共享信息有关详细信息,请参阅 Windows 8 IME 指南。旧 IME 在 Windows 应用商店应用中无法工作,目的是为了避免可能获得较差的用户体验,包括系统停止。与?Windows?应用商店应用兼容的?IME?必须通过设置指示该兼容性的标志进行自我声明。该标志由 TF_INPUTPROCESSORPROFILE 结构中的 TSF 提供。将在 Windows?8?IME?指南中论述并公开发布有关如何使用该标志将第三方?IME?声明为与 Windows 应用商店兼容的详细信息。允许在桌面应用或 Windows 应用商店应用中运行与 Windows 应用商店应用兼容的 IME。不兼容的 IME 只能在桌面进程中运行。用户界面尽管第三方 IME 可以访问桌面窗口 API,但它们必须遵循与它们在应用中运行时相同的窗口?API?限制。例如,当在桌面应用中处于活动状态时,IME?不能在 Windows 应用商店应用顶部绘制。API 限制的目的是防止出现以下情况:桌面应用从 Windows 应用商店应用中获取焦点桌面应用在 Windows 应用商店应用中绘制桌面应用干涉 Windows 应用商店应用触摸键盘支持尽管触摸键盘 (TKB) 支持仍然可用于第三方 IME 供应商,但 Windows?8 中未提供可完全自定义且集成的触摸键盘体验。但是,第三方?IME?可以使用针对触摸进行优化的键盘布局映射它们的?IME。默认情况下,Windows?软输入面板?(SIP)?为第三方?IME?提供了一个经典的键盘布局。由于经典的键盘生成类似于硬件键盘的关键事件,因此,目前第三方?IME?使用触摸键盘没有特殊实现要求。硬件关键事件的输入处理还将处理经典触摸布局中的关键事件。注意:如果?TKB?支持扩展为也包含优化的键盘布局,那么?IME?可能需要首先处理 Unicode 输入事件。第三方?IME?可以选择对其?IME?使用优化的键盘布局。有关详细信息,请参阅第三方?IME?指南。确保你的候选窗格的?UI(以及其他?UI?元素)未在触摸键盘下面绘制。在大多数情况下,应用应调整其窗口大小以显示触摸键盘。但是,如果应用未执行该操作,则?IME?仍然可以使用?InputPaneFramework?API?来了解触摸键盘的位置。第三方?IME?在绘制候选(或其他)UI?之前可以使用此?API?获取触摸键盘使用的屏幕空间,并重排其 UI 以避免在触摸键盘下面绘制。搜索在 Windows?8 中,Windows 应用商店应用通过实现搜索合约并与“搜索”窗格集成为用户提供了方便的搜索功能。“搜索”窗格是用户跨所有应用执行搜索的中心位置。Windows 帮助使用“搜索”窗格的应用尽快获取用户要访问的位置。特别是对于 IME 用户来说,它提供了一种让兼容的 IME 与 Windows?8 集成的独特搜索体验,以提供更高的效率和可用性。如果满足以下条件,IME 可与集成的搜索体验兼容:与 Windows 应用商店应用环境兼容实现 TFS UILess 模式 API实现 TFS 搜索集成 API:ItfSearchCandidateProvider ItfSearchHardwareKeyboardBehaviors在“搜索”窗格中激活之后,兼容的?IME?将处于?UILess?模式且不能显示其?UI。它将转换候选项发送给 Windows,然后将其显示在内联候选列表控件中。IME 还发送应用来运行当前搜索的 Windows 候选项 — 这些候选项可能会与转换候选项相同,或者可能针对搜索进行了适当设置。良好的搜索候选项满足以下条件:无前缀重叠无预测候选项(只有完整候选项)不符合条件且与搜索不兼容的?IME?使用与其他?Windows 应用商店应用控件相同的方式显示,但不能利用 UI 集成和搜索候选项。(应用仅在用户完成编写后才接收查询。)当支持搜索合约的应用收到查询时,查询事件将包含“queryTextAlternatives”阵列,其中包含所有已知候选项,它们按最相关(可能)到最不相关(不可能)排序。提供候选项时,应用应该将每个候选项视为查询,并且返回与所有候选项匹配的所有结果(就好像用户同时发出了多个查询),从本质上说这是向提供结果的服务发出一个“or”查询。为了提高性能,应用通常将匹配限制在 10?个最相关的候选项。IME 数字签名所有第三方 IME 必须进行数字签名才能作为 IME 安装到 Windows?8 系统上。使用 SmartScreen,用户在从网络下载未签名的 IME 时可以看到警告消息。若要获取证书并对文件进行签名,请执行以下操作:使用 Authenticode 签名对程序进行数字签名从 Windows 提供的其中一个证书颁发机构中获取有效的 Authenticode 代码签名证书在分发之前,使用开发工具(如 signtool.exe)对应用进行签名有关详细信息以及代码签名过程的分步描述,请参阅你需要了解的有关 Authenticode 代码签名的所有内容日志确保下载未检测为恶意软件经过检测并确认为恶意软件的下载程序会影响此下载的声誉以及用来对该文件进行签名的数字证书的声誉申请 Windows 认证访问 MSDN 上的 Windows 应用认证页面有关详细信息,请参阅以下有关数字签名和代码签名的文章:Authenticode 概述 确保完整性和真实性 代码签名的最佳实践 什么是数字证书? 如果某个 IME 未签名,则当用户尝试下载该 IME 时会收到此警告消息: 如果 IME 已签名,则用户看到此消息: 根据这些通知,用户可以选择是删除该文件还是忽略此警告并运行下载的程序。IME 吊销可以使用 Windows Defender 将恶意或不符合 Windows 8 IME 指南的 IME 从系统中删除。有关恶意 IME 的详细信息,请参阅 Windows 8 中的第三方 IME。资源ITfThreadMgrEx::Get Active Flags 方法 你需要了解的有关 Authenticode 代码签名的所有内容 应用合约和扩展 8 桌面应用的认证要求 应用的认证要求 使用 Windows 应用认证包 Authenticode 概述 确保完整性和真实性 代码签名的最佳实践 什么是数字证书? 新 API 允许应用向存储介质发送“TRIM 和 Unmap”提示平台客户端 — Windows?8 服务器 — Windows Server 2012 描述TRIM?提示通知驱动器,应用不再需要以前分配的某些扇区,因此可以清除。这通常用于当应用通过文件进行较大的空间分配,然后对该文件(例如,虚拟硬盘文件)的分配进行自我管理时。什么是 TRIM? 固态硬盘 (SSD) 通常是基于闪存的块擦除设备;这意味着当向 SSD 中写入数据时,不能就地重写,必须在其他位置写入,直到可以对该块进行垃圾收集。因此?SSD 没有内部机制用于确定删除那些特定块、需要那些其他块。SSD?只能在重写时将某个扇区标记为“脏”。其他情况下,如删除文件时,SSD?会保留这些扇区,因为删除只是作为主文件表?(MFT)?更改进行的,并未作为对文件的所有扇区的操作进行。在 Windows?7 中,我们引入了一个与 SSD 通信(声明有关不再需要的扇区)的标准方法。该命令是在 T13 规范() 中作为 TRIM 命令定义的;NTFS 为某些正常的内联操作(如 “deletefile”)发送 TRIM 命令。存储世界中 TRIM 的其他用法与 SSD 一样,存储区域网络 (SAN) 和新的 Windows?8 功能“软件空间”实现利用 TRIM?命令提示在精简配置的环境中管理它们的空间。SAN?和“软件空间”采用大于分区或群集的大小(1MB 到 1GB 之内都可以)分配存储区域。当它们收到其分配大小(或大于分配大小)的 TRIM 提示时,SAN/SSD 可以取消区域分配来为其他文件释放空间。通常它们会经过所有?TRIM?提示到达基础介质(SSD?或 HDD),以便可以在适当的时候使用释放的空间。它们通常不会来回移动数据来取消区域分配,也不会跟踪 TRIM 区域来取消区域分配(当区域为空时)。精简配置的?SAN?使用传递给它们的 TRIM 提示来帮助减少总体物理存储占用,从而降低成本。SCSI(T10:)规范定义“Unmap”命令(与 TRIM 命令类似);此处该命令适用于各种存储,包括 HDD、SSD 等。UnMap 命令帮助从 SAN 的分配中删除物理块。如何使用该新 API#define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)Where typedef struct _EXTENT_PAIR { ULONGLONG Offset; ULONGLONG Length;} EXTENT_PAIR, *PEXTENT_PAIR;typedef struct _FILE_LEVEL_TRIM { // // A count of how many Offset:Length pairs are given // DWORD PairCount; // // All the pairs. // EXTENT_PAIR Pairs[1];} FILE_LEVEL_TRIM, *PFILE_LEVEL_TRIM;File TRIM 尽可能通过缓冲区传递或者异步(无缓冲)传递到设备 IOCTL DSM 命令 TRIM。对于?ATA?设备,它映射到?TRIM?命令;对于?SCSI?设备,它映射到?UnMap 命令。文件 TRIM?代码按照上述范围的指定逐个发送区域。文件?TRIM?不等待从设备返回内容,因为?TRIM?和?Unmap?命令都定义为对基础存储介质的提示,因此不会有返回代码。端到端工作流:调用 File Trim文件 TRIM 检查输入是否有错误文件 TRIM 将区域划分为 LCN 区域文件?TRIM?对传递到?TRIM?中的未对齐区域进行向上舍入和向下舍入文件 TRIM 清除缓存中与 TRIM 区域有关的条目文件 TRIM 按每个区域传递 IOCTL_DSM (Trim)文件 TRIM 返回或发生错误对输入的有效性进行错误检查如果只有一些区域有效,则为完整的 API 调用返回一个错误用例客户虚拟硬盘 (VHD) 装载在 SSD 上:VHD 最初装载在“全新”的未用介质上。使用 VHD 时,VHD 使用部分存储介质来容纳文件等。当它在存储介质中删除文件时,这些文件不会从 SSD 中删除,因为完整的 VHD 是作为 SSD 上的一个文件存储的。当在 VHD 环境中删除文件时,Hyper-V 环境对删除的所有区域调用文件 TRIM。File_TRIM 被转换成 SSD 以便可以优化 SSD 性能。客户 VHD 装载在精简配置的 SAN 上: VHD 最初装载在精简配置环境的一个最小碎片上。由于文件存储在 VHD 中,因此很多碎片中的?VHD?存储占用会增加。删除?VHD?中的文件时,Hyper-V?对基础的精简配置的 SAN 调用 File_TRIM。如果 TRIM 大于碎片粒度,那么 SAN 现在可以删除一个碎片,因此减少了该 SAN 上的 VHD 占用。如果 VHD 位于基于 Windows?8 的服务器上,则存储优化程序还会发送 TRIM 来减少已装载的 VHD 中 VHD 的 SLAB 占用。测试在以前的操作系统版本中,没有能与之相比的?API。应该对实际的?API?本身的性能没有影响,但存储介质(如果正确实现)可能会显示更好的写入性能。使用此 API 时应小心谨慎;只有不再需要的区域才应该向下传递,因为这些区域将从存储介质中永久删除。资源T13 规范 SCSI 规范多路径 I/O 现在支持扩展存储请求块 平台服务器 — Windows Server 2012 描述在 Windows Server 2012 中,一个新的结构 STORAGE_REQUEST_BLOCK(扩展的 SRB)取代了核心存储堆栈中的 SCSI_REQUEST_BLOCK(旧的 SRB)。扩展的 SRB 不仅复制了旧的 SRB 的功能,而且还可以扩展和伸缩。多路径 I/O (MPIO) 支持扩展的 SRB,而且还允许设备特定模块 (DSM) 指定扩展的 SRB?支持。但是,为了使多路径设备的存储堆栈能够使用扩展的?SRB,该堆栈中的所有组件必须支持扩展的?SRB,包括?DSM。请注意,Microsoft?内置的?DSM(即 MSDSM)不支持扩展的 SRB。SCSI_PASS_THROUGH_EX?结构不是扩展的?MPIO?传递结构的一部分,因为扩展的?SCSI?传递具有可变的大小,具体情况取决于命令行调试程序?(CDB)。扩展的?MPIO?传递具有一个字段,该字段描述了从扩展的?MPIO?传递结构的开始到 SCSI_PASS_THROUGH_EX?结构的偏移。调用方必须确保它们分配了适当大小的缓冲区,并且正确设置了?SCSI?传递偏移。只要调用方遵循扩展的?SCSI?传递的规则,那么它们使用扩展的 MPIO 传递就应该不是什么额外的工作。注意:如果 DSM 不支持扩展的 SRB,那么 MPIO 将无法完成设置了 MPIO_IOCTL_FLAG_INVOLVE_DSM 标志的扩展的 MPIO 传递请求。表现如果设备存储堆栈的任何部分(包括?DSM)不支持扩展的?SRB,那么存储堆栈将还原为使用旧的 SRB。解决方案要使 DSM 支持 STORAGE_REQUEST_BLOCKS,只有两个 MPIO 要求:DSM 必须将其类型报告为 DsmType6DSM 必须提供 DSM_ADDRESS_TYPE_SUPPORTED 函数如果 DSM 未报告 DsmType6 或者它报告了 DsmType6 但未提供 DSM_ADDRESS_TYPE_SUPPORTED 函数,那么 MPIO 将假定 DSM 不支持扩展的 SRB。DSM_ADDRESS_TYPE_SUPPORTED?函数接受两个参数,其中一个参数是地址类型。该地址类型必须是在?srb.h?中定义的?STORAGE_ADDRESS_TYPE_*?值。如果?DSM?支持给定的地址类型,则 DSM 必须返回 TRUE;如果不支持,则返回 FALSE。到底支持还是不支持最终由 DSM 决定。MPIO 使用此函数来确保当传递具有给定类型的 STOR_ADDRESS 结构的扩展的 SRB 时,DSM 不会行为不当。同样,MPIO 通常会在枚举多路径设备时调用此函数,但可以随时调用此函数。如果?DSM?从未接触过扩展的?SRB?的?STOR_ADDRESS,那么它可以对任何有效的 STORAGE_ADDRESS_TYPE_* 值返回 TRUE。请查看 WDK 中的示例 DSM。其他重要说明支持扩展的?SRB?的?DSM?必须能够处理?SCSI_REQUEST_BLOCK?结构和 STORAGE_REQUEST_BLOCK?结构。只是因为一个?DSM?报告说它支持扩展的?SRB?并不意味着它将采用独占方式接收扩展的?SRB。除了扩展的?SRB 之外,它可能仍然会收到任意数量的旧?SRB,因此必须能够处理这两者。我们在 WDK 中提供了一个名为 srbhelper.h 的头文件,该文件包含的内联函数可为必须处理扩展的 SRB 和旧 SRB 的驱动程序提供帮助。我们的示例 DSM 使用此头,因此你可以使用它作为如何使用这些函数的示例。不支持扩展的 SRB 的 DSM 从来不必处理扩展的 SRB。如果 DSM 不支持给定的 STORAGE_ADDRESS_TYPE_*(但支持扩展的 SRB),那么 MPIO 可能会导致存储堆栈在旧 SRB 上回调。“BTL8” 是当前唯一为 Windows 2012 定义的 STORAGE_ADDRESS_TYPE_*。弹性文件系统平台服务器 — Windows Server 2012 描述弹性文件系统?(ReFS)?是一个新的本地文件系统。尽管在历史记录上可能会发生导致数据丢失或停机的错误,但它能够最大程度提高数据的可用性。数据完整性确保业务关键数据受到保护,防止出现错误,并且在需要时可用。它的体系结构设计为在数据集大小以及动态工作负荷不断增长的时代提供可伸缩性和性能。ReFS 的主要功能包括:完整性:ReFS?存储数据以便保护数据免遭许多会导致数据丢失的常见错误的影响。文件系统元数据始终受到保护。可以在每个卷、每个目录或每个文件的基础上选择可以保护的用户数据。如果出现损坏,ReFS?可以检测,并且当配置有“存储空间”时,会自动纠正该损坏。如果出现系统错误,ReFS 设计为快速从该错误恢复,且不会丢失用户数据。可用性:ReFS 设计为优先考虑数据的可用性。使用 ReFS,如果出现损坏并且系统无法自动修复,那么会将联机抢救过程局限于损坏区域,从而不需要停止卷。总之,如果出现损坏,ReFS 将保持联机。可伸缩性:ReFS 是针对当今的数据集大小和今后的数据集大小设计的;它针对高伸缩性进行了优化。应用兼容性:为了使 AppCompat 最大化,ReFS 支持 NTFS 功能子集以及广泛采用的 Win32 API。主动错误发现:定期扫描卷的数据完整性扫描仪(“清理器”)利用 ReFS 的完整性功能,尝试发现隐藏的损坏,然后主动触发对该损坏数据的修复。资源构建 Windows 8 日志 — 为 Windows 构建下一代文件系统:ReFS 应用程序兼容性和 ReFS 文件服务器 API 支持平台服务器 — Windows Server 2012 描述将在下面列出的资源为开发人员提供有关服务器消息块 2.2 (SMB 2.2) 协议和弹性/群集共享卷 (ReFS/CSVFS) 文件系统所支持的 API 的文档。该文档分为以下类别:文件管理功能目录管理功能卷管理功能安全功能文件和目录支持代码卷控制代码内存映射文件用法在 Windows Server 2012 中,某些 API 并非在所有协议或在所有方案中都受支持,而某些其他?API?已弃用。查看所支持的?API?列表,以确保为你的应用继续提供支持。资源API 支持和兼容性矩阵新的文件历史记录功能平台客户端 — Windows?8 描述新的“文件历史记录”功能取代了现有的“备份和还原”功能,并且为存储在用户库中的用户文件提供保护。提供了一组?API,这些?API?允许开发人员通过编程方式启用“文件历史记录”并选择特定的存储目标。可以在?MSDN?上找到这些 API 的文档。该功能可能会影响与数据保护有关的工作流以及依赖?Windows“备份和还原”功能的文档。我们建议你不要同时使用这两个功能。“文件历史记录”检查是否存在“备份”计划以及是否处于活动状态,如果找到一个“备份”计划,它将不允许用户启用该计划。这种情况下,希望使用“文件历史记录”的用户必须删除?Windows 备份计划。表现工作流可能中断,并且采用以前的方法访问?Windows“备份和还原”功能的文档需要进行更新来反映这些更改。解决方案修改包含受到新的“文件历史记录”功能不利影响的工作流的应用,以删除任何冲突并利用新的 API 组。测试该 API 允许开发人员确定“文件历史记录”是否处于启用状态。操作系统现在控制光盘驱动器的电源平台客户端 — Windows?8 服务器 — Windows Server 2012 描述在以前版本的?Windows?中,当未使用光驱时不对光驱的电源进行管理。现在,如果光盘驱动器 (ODD) 中没有介质,那么操作系统会关闭光驱的电源。该功能称为零耗电 ODD (ZPODD)。该功能仅适用于使用?Slimline?SATA(Serial?Advanced Technology Attachment,串行高级技术附加)连接器的光驱。表现我们尚未从这个新的行为中发现任何不利影响;但是,你应该注意一下,因为它可能会导致介质写入软件的行为异常。缓解操作若要还原到始终启用状态,请在注册表中禁用该功能。该注册表值的绝对路径如下: HKLM\SYSTEM\CurrentControlSet\Services\cdrom\Parameters\ZeroPowerODDEnabled它的类型为?DWORD(32?位),如果它的值为?0,则禁用?ZPODD;如果为其他任何值,则启用 ZPODD。测试测试你的介质写入软件,看是否存在由于这个新功能引发的任何异常。如果你发现了这个新功能的任何问题,请通知 Microsoft (mailto:OptIssue@)。支持 USB 3.0平台客户端 — Windows?8 服务器 — Windows Server 2012 描述在 Windows?8 和 Windows Server 2012 中,我们添加了对 USB 3.0 的支持。我们实现该操作的方法是,添加一个新的软件堆栈来为?USB?3.0?主机控制器(称为 eXtensible?主机控制器?(XHC))提供电源。我们保留了接口奇偶校验、IRQL?级别、调用方上下文、重试频率等。当与通过 USB?2.0 和 USB?3.0 连接的设备交互时,对你来说应该没有任何差别。但是,如果你为新的?USB?3.0?设备编写驱动程序时,一定会选择新的 USB? 3.0 功能。表现总体来说,设备传输速度更快并且?USB?设备使用的电脑电量更少。当连接到?USB?3.0?端口时,现有 USB 设备可能无法正常工作。不应该发生这种情况,这不是预期行为,但是由于为 USB?3.0 供电的软件是新软件,因此可能有这种风险。工具、最佳做法和指南本部分中的内容可帮助你确认现有应用的连续兼容性,或者确保你正在设计的新应用的质量和兼容性最佳。本部分包含对这些工具的描述、最佳做法和指南Windows 评估工具包Windows 应用认证包Windows Server 应用认证工具包Windows 硬件认证工具包Windows 评估工具包平台客户端 — Windows 7 | Windows 8 描述 Windows 评估工具包和 Windows 性能工具包组成了 Windows 评估和部署工具包?(ADK)。这两个工具包合起来为评估总体计算机性能以及将 Windows 操作系统自动部署到新计算机提供一个完整的解决方案。此主题重点介绍评估工具包。评估结果用来诊断潜在的问题,以便你开发的硬件和软件反应迅速并且对电池寿命、启动性能以及停机时间的影响最小。OEM?合作伙伴、ISV/IHV?合作伙伴、狂热者以及其他社区成员可以使用这些评估建立一个常用的框架,用于度量、比较和查看质量的各个方面。通过使用?Windows?评估工具,你可以度量各种方案的不同性能方面,从启动时间到电池寿命性能到高清晰度视频流。评估可以确定潜在的问题、不一致的行为并且可以突出要调查的区域。在以前版本的?Windows?中,可以使用多个工具来度量质量,这些工具包括速率测试套件?(VTS/VOS)、基本质量工具套件?(FQTS)?以及系统电源和性能工具套件 (SPPTS)。评估工具包将这些性能诊断工具的功能组合到一个完整的工具集中,该工具集便于使用并且提供范围更宽、更有意义的结果。Windows 评估工具包通过以下方式最大程度提高客户满意度:帮助评估 Window、增值软件和驱动程序以及硬件配置的总体体验提供详细的系统数据,这些数据可以帮助确定质量问题的根本原因通过在开发期间及早暴露问题来降低成本通过从多个结果集中创建比较图像来生成一段时间内不同计算机或相同计算机组的结果比较生成标准格式的反馈,你可以使用这些反馈来提高你的产品的质量可以使用评估工具包实现重要的商业目标:度量和比较 — 你可以使用该数据将组件(软件、驱动程序或两者)与其他类似组件相比较,以便于进行决策、提出建议以及进行标杆对比提高质量 — 你可以单独工作,也可以与涉及的合作伙伴一起工作,根据预先定义的质量标准构建组件(软件、驱动程序或两者) 跟踪质量 — 你可以创建一个进程以便有效地跟踪组件版本的质量并且检测每次迭代后的回归用法和最佳做法评估是一种?XML?和二进制文件的组合,它们可在计算机上产生一组特定状态,用于测量和记录活动,并保留记录的结果。作业是在一台计算机上一次运行的一个或多个评估及其设置的集合。评估平台提供用于一致运行和显示作业、评估以及结果的基础结构。这些结果通常包括诊断和补救信息,可帮助你确定需要其他调查和纠正操作的区域。你可以:针对单台计算机或具有 Windows 评估控制台 (Windows AC) 的一小组计算机运行评估该方案适用于要查看一台或多台不同计算机配置的性能特性的用户。Windows?AC 是一个图形用户界面?(GUI),它用于组合评估、创建作业、封装作业、运行作业以及管理作业结果。这些结果通常包含推荐的操作。针对在具有 Windows 评估服务 (Windows AS) 的实验室环境中的多台计算机运行评估该方案主要适用于要针对开发环境中的一组完整的台式计算机、便携式计算机或平板电脑运行定性评估。评估工具包提供以下功能: 一个简单的图形用户界面 (GUI) 和评估,可以用来评估计算机,而无需掌握系统的任何深入的技术知识在控制台或 UI 中查看的评估结果,通常包括可帮助你改进系统的建议能够通过一次单击即可运行预先配置的作业每个预先配置的作业中的预定义评估设置,以便你可以在多台计算机上运行作业并且确信这些结果是可以比较的可以对作业进行自定义,以包含你要使用的评估以及你要使用的设置用于脚本和自动执行作业的评估平台命令行语法能够运行作业、查看结果、采取纠正步骤来改进系统,然后再次运行作业并将新结果与旧结果并排比较,以查看系统如何得到了改进评估工具包通常用于以下这些方案:方案描述“黑匣子”运行预定义作业,检查结果,查看与驱动器、内存使用或评估涉及的其他领域相关的问题的任何异常值或指示。比较结果使用推荐设置在运行所支持的操作系统的任何计算机上运行一项评估。使用 Windows AC 封装作业以在其他计算机上运行。将结果保存到共享,以便你可以比较结果。将任何 Windows 计算机的结果与任何其他受支持操作系统的计算机结果进行比较,以查出其间的区别。 全新计算机在只包含操作系统的全新计算机上运行评估,以建立基准系统结果。添加了硬件或软件组件的计算机向全新计算机系统中添加新的硬件或软件,然后重新运行评估,以便将这些结果与全新计算机结果进行比较。创建评估使用公用?API?开发或扩展评估,或者将评估与你的工具和基础结构集成。这些评估可以用于以下方面:方案描述驱动程序认证预验证驱动程序认证预验证评估用于验证运行的?Windows?操作系统上的驱动程序是否符合?Windows?认证计划的条件。结果包括可帮助你解决评估所发现的问题(如未签名的驱动程序或到期的签名)的一些建议。驱动程序验证驱动程序验证评估用于验证脱机 Windows 映像或运行的 Windows 操作系统是否包含正确的驱动程序集。评估结果包括帮助解决在评估中发现的任何问题的相关建议。这些问题可能包括缺少驱动程序、驱动程序重复、版本太旧或存在不必要的驱动程序。文件处理文件处理评估提供了一种自动进行常规文件操作和捕获指标的方法。这些指标度量持续时间和吞吐量,可帮助你了解计算机在最终用户文件处理方案中运行状态如何。“文件处理”评估使用一组工作负荷来模拟在客户端系统上对文件和文件夹进行复制、移动、压缩、解压缩和删除的用户。照片处理照片处理评估通过模拟查看和处理照片的最终用户来度量计算机性能和电池寿命。Internet Explorer 启动/选项卡创建Internet Explorer 启动性能评估有助于识别可能影响 Internet Explorer 启动所需时间的组件。该评估度量完全呈现一个空白页面的时间,包括 IExplore.exe 进程的加载时间以及帧创建以及选项卡创建间隔。它还度量对已安装在系统上的所有扩展、加载项和工具栏的影响。它不度量任何网络或浏览性能。打开/关闭 打开/关闭切换评估度量?Windows?8?启动、待机以及休眠性能方案的性能。Internet Explorer 浏览性能 Internet Explorer 浏览性能评估度量 Internet Explorer 中浏览体验的质量,并且评估 CPU 和图形硬件功能。提供了三个不同的浏览工作负荷,以采用各种方法对计算机施加负荷。媒体转码性能转码视频评估度量将视频文件转换为另一格式或比特率的过程。该评估会运行一系列具有常见输入和输出文件格式与分辨率的转码操作。Windows UI 性能Windows UI?性能评估用于评估?Windows?Metro?风格用户界面中的一些基本体验的性能。该评估度量施加模拟用户活动(如使用搜索以及从?Windows 应用商店应用转换到经典桌面)的工作负荷时的响应能力和呈现质量。响应结果以毫秒为单位进行度量。数量越低意味着计算机运行速度越快,响应能力越强。对于呈现问题,结果显示帧速率以及发生闪烁的次数。内存占用你可以使用内存占用评估将基准操作系统映像与其他操作系统映像进行定量比较。然后你可以识别影响物理系统内存占用的特定组件。这些组件可能包括驱动程序、加载项应用、预加载的软件包和防病毒程序。首次启动性能首次引导性能评估识别影响计算机首次启动时?Windows?启动并显示“开始”屏幕所用时间的问题。相关结果可帮助?OEM?诊断导致延迟的因素并提供一些可改善体验的建议。媒体流流媒体性能评估可帮助你评估通过?Internet Explorer?使用流媒体时计算机配置的性能。你可通过这些评估结果了解、比较和改进流媒体体验。WinSAT 综合指标Windows 系统评估?(WinSAT)?用于评价和改进多个系统组件(包括 CPU、内存、磁盘和图形)的计算机性能。“WinSAT?综合指标”评估结果用数字表示计算机硬件配置的能力。相比分数较低的计算机而言,分数较高的计算机的性能更佳,速度更快。能效能效作业为你提供了一种自动评估计算机电池寿命的方法。使用工作负荷,“能效”作业还执行诊断,评估系统组件在空闲时是否使用电能。微筛选器诊断设置微筛选器诊断选项在“Internet?Explorer?启动性能”评估、“文件处理”评估以及“启动性能 (Windows 8)”评估中运行。在提供微筛选器诊断选项的评估中选择该选项会生成一些指标,这些指标可帮助你评估微筛选器操作对各种评估方案的影响。Windows 媒体播放器性能和质量Windows 媒体播放器性能和质量评估启动 WMP 并一个接一个播放多媒体剪辑,以捕获与媒体播放相关的性能和质量指标。ADK?中还包含其他工具,如?Windows?性能工具包。这些工具提供了详细的信息,使你能够分析和跟踪系统及应用性能。有关详细信息,请参阅下面的“资源”部分。资源 视频:Channel9 – BUILD ADK 视频 MSDN 文档:评估和部署工具包(始终指 ADK 中的 ADK_TechnicalReference.chm 文件。它是文档的主要来源。) 评估执行引擎(v=VS.85).aspx 开发中心:Windows 性能分析 Windows 应用认证包平台客户端 — Windows 7 | Windows 8 描述Windows 应用认证工具包 (ACK) 用于验证是否符合认证要求,并且取代用于在 Windows 7 软件徽标计划中验证的 Windows 软件徽标工具包 (WSLK)。可以验证桌面、桌面设备以及 Windows 应用商店应用;但不能验证插件、ActiveX 以及其他?Web?应用。Windows?ACK?包含在?Windows?软件开发工具包?(SDK)?和用于 Windows 应用商店的 Windows SDK 中。尽管强烈建议进行认证,但这并不是在?Windows?8?下运行桌面应用的要求,这样做的目的是为了列出?Windows?应用商店中的桌面应用。Windows?7?和 Windows 8 应用必须使用新的?Windows?应用认证工具包才能得到认证并且有资格在 Windows 应用商店中销售。认证嵌入在 Windows 应用商店上架过程中。要求桌面认证有 12 项要求,Windows 应用商店应用认证有 9 项要求。桌面应用的联机自我测试和结果提交需要不到 45 分钟,对于 Windows 应用商店应用需要不到 20 分钟。桌面应用 [图例: ? = 包含 ? = 增强 -- = 不适用时跳过]要求Win7Win8应用设备应用要点全新的可逆安装???必须在 ARP 中包含版本和发布者卸载时没有残留安装到正确位置???对文件和驱动程序进行数字签名???必须对主 MSI 和主 EXE 进行签名 除了设备应用(计时)之外,驱动程序必须拥有 HW 认证x64 支持???OS 版本检查???UAC 合规性??--主 EXE 必须标记 asInvoker 这些 requireAdministrator 清单必须使用 Authenticode 进行签名重新启动管理器??--在安全模式下加载??--多用户支持??--简化的工具包用户体验应用可靠性??在测试期间没有崩溃或挂起无应用兼容性模式避免使用 AppInit_DLLs 加载任意二进制文件支持 Windows 安全功能??BinScope Binary Analyzer 测试不禁用 Windows 安全功能??Attack Surface Analyzer 测试Windows 应用商店应用要求Windows应用商店应用要点Windows 应用商店应用测试?磁贴数每程序包的应用数应用类型未列出 ResourceIDOSVersionHighestTested仅使用支持的 API?测试应用是否仅使用允许的 API性能?测试应用启动和挂起的速度应用程序包资源?检查清单中声明的语言,以确保应用具有针对这些语言的资源安全?测试安全漏洞崩溃和挂起?在整个测试运行期间监视应用,以检测应用是否崩溃和挂起用法 若要认证应用,请执行以下操作:安装最新的 Windows 8 内部版本。查看认证要求。在全新的系统上,运行 Windows SDK 中包含的 Windows 应用认证工具包并按照屏幕上的说明执行操作。查看认证报告并修复问题。完成此过程:如果是桌面应用,则在合作伙伴门户提交报告。如果是 Windows 应用商店应用,则启动 Windows 应用商店上架过程。在 (取代 WinQual)上报告通过合作伙伴反馈工具在 Windows 应用认证工具包中发现的任何缺陷。资源Windows 8 桌面应用的认证要求 应用的认证要求使用 Windows 应用认证包 Windows Server 应用认证工具包平台服务器 — Windows?Server 2012描述Windows Server 应用认证工具包 (SCK) 用于验证 Windows Server 2012 应用程序是否符合认证要求。主要设计为在 Windows 服务器操作系统上运行的服务器应用能够参与该计划。托管应用/服务、浏览器插件、ActiveX 控件、加载项、压缩的可执行文件以及宏都不能参与该计划。要求SCK 包含对以下内容的自动测试: Windows 安装程序设置和主要功能驱动程序和安全最佳做法大多数服务器应用的自我测试和结果提交应用需要?2?个小时;更复杂的应用可能需要?4?个小时左右。所有驱动程序都必须单独通过?Windows?硬件认证测试,并且当驱动程序签名计划可用时必须由 Microsoft 针对 Windows Server 2012 进行签名。用法 若要测试应用,请执行以下操作:根据需要为你的应用安装最新的?Windows?Server?2012?最低配置(完全服务器 GUI、MinShell 或服务器核心)。查看认证要求。在全新的系统上,在完全 UI 模式或命令行模式下运行 SCK。完成自动导向的测试过程。查看结果并根据需要修复你的应用。注意:稍后会公布有关如何提交应用结果的详细信息。通过向 WSLogoFB@ 发送反馈报告在 SCK 中发现的任何缺陷。资源Windows Server 应用认证计划要求 Server 应用认证工具包 (SCK)服务器应用程序的 Windows 认证计划 Server 认证反馈WSLogoFB@Windows 硬件认证工具包平台客户端 — Windows 7 | Windows 8 服务器 — Windows Server 2008 R2 | Windows Server 2012 服务器/控制器 — Windows Server 2008 R2描述Windows 硬件认证工具包 (Windows HCK) 使开发人员、ISV、IHV 和 OEM 能够针对最新的 Windows 操作系统对硬件设备、系统以及筛选器驱动程序进行认证。它包含针对以下操作系统对硬件和筛选器驱动程序进行认证所需的全部工具和文档:Windows?8 Windows Server 2012 Windows?7Windows Server 2008 R2Windows HCK 取代了 Windows 徽标工具包并且成为 Windows 认证计划的一部分。用法或最佳做法 测试任何硬件或筛选器驱动程序之前,你必须基于要认证的硬件或筛选器驱动程序设置正确的测试环境。这包括控制器、客户端以及潜在的其他硬件(例如,多功能设备)或软件。在设置完环境之后,便可以使用新的 HCK 的 Studio 工具测试硬件。这些步骤概述了认证测试过程。设置测试环境。创建项目。创建一个或多个计算机池。选择要验证的功能。进行选择并针对这些功能运行测试。查看测试结果。提交程序包。资源Windows 硬件开发 硬件认证计划 硬件开发下载开始为 Windows 开发硬件 ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download