桌面活动审查器

平台

客户端 - Windows 8

注意

DAM 仅存在于支持连接待机的客户端计算机上Windows 8。 服务器 SKU 上不存在 DAM。

 

注意

Windows Microsoft Store为Windows 8生成的应用不受 DAM 的影响。

 

说明

我们的客户正转向更轻、更小、更移动的平台,以满足其计算需求。 作为移动设备转变的一部分,用户越来越关注其设备的电池电量。 桌面活动审查器 (DAM) 是Windows 8的多项新功能之一,旨在确保支持连接待机的设备一致、较长的电池电量。

当设备处于开机状态,但屏幕处于关闭状态时,会发生连接待机状态。 在此电源状态中,系统在技术上始终处于“打开” (,以支持Windows Microsoft Store应用) 的关键方案,如邮件、VoIP、社交网络和即时消息。 与用户按下电源按钮时智能手机处于的状态类似。

因此,软件 (包括应用和操作系统软件) 在连接待机期间必须表现良好。 已创建 DAM 以类似于 ACPI 设备上的睡眠状态 (S3 的方式取消桌面应用执行) 。 它通过暂停或限制整个系统的桌面软件进程,以连接待机条目。 这样,支持连接待机的系统可以提供最小化的资源使用率和长时间、一致的电池使用时间,同时使Windows Microsoft Store应用能够交付他们承诺的连接体验。

详细信息

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 创建软件的供应商应考虑进程挂起如何影响连接生存期和握手。 此外,由于网络连接在连接待机模式下可能不可用,因此会话 0 中创建的进程开发人员应特别了解间歇性网络连接如何影响进程。

解决方案

Windows Microsoft Store应用不受 DAM 影响。 如果桌面应用受 DAM 影响,则可以在暂停之前请求通知 (,例如,使用下列方法之一保存状态或关闭网络连接) :

  • 如果应用具有窗口 (HWND) 并且想要通过窗口过程处理这些通知,请调用 RegisterSuspendResumeNotification 注册这些消息, (或 UnregisterSuspendResumeNotification 以取消注册) 。 可以在 Flags 参数中使用DEVICE_NOTIFY_WINDOW_HANDLE,并将窗口的 HWND 作为 Recipient 参数传递。 收到的消息是WM_POWERBROADCAST消息。
  • 如果你的应用没有窗口 (HWND) 或你想要直接回调,请调用 PowerRegisterSuspendResumeNotification 注册这些消息, (或 PowerUnregisterSuspendResumeNotification 以取消注册) 。 必须在 Flags 参数中使用DEVICE_NOTIFY_CALLBACK,并在 Recipient 参数中传递类型为PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS的值。
  • 如果无法重新编译应用,可以选择使用 PromoteDAM 填充) 码 (通过 AppCompat 工具包 接收这些WM_POWERBROADCAST消息。

使用 wParam=PBT_APMSUSPEND; WM_POWERBROADCAST挂起消息;此消息同时广播到系统上所有选择的进程。 应用必须在暂停路径上快速高效地执行任何工作。 广播通知后的超时是全局的,而不是每个进程,因此,如果此路径中所需的工作很广泛,则进程可能会争用系统资源。

恢复消息WM_POWERBROADCAST wParam=PBT_APMRESUME;此消息在恢复后同时广播给所有选择加入的进程。 无法保证传送到系统退出连接待机的相对时间。

对于相机相关应用程序,当电源状态转换发生时,在挂起通知期间,应用程序必须释放对相机的所有引用, (所有捕获管道对象都必须关闭并释放) 。 为了避免可能的电池耗尽,Windows 10 RS3+ 系统上Windows 相机帧服务器服务会在应用程序未正确处理挂起通知时关闭所有捕获会话。 其副作用是,当系统退出备用状态或 S3/S4 状态时,应用程序的捕获管道不再处于工作状态。

测试

跨连接的备用转换测试软件。

资源