Модератор активности на рабочем столе

Платформа

Клиенты — Windows 8

Примечание

DAM присутствует только на Windows 8 клиентских компьютерах, поддерживающих режим ожидания с подключением. Dam отсутствует в номерах SKU сервера.

 

Примечание

Приложения Магазина Windows, созданные для Windows 8, не затрагиваются dam.

 

Описание

Наши клиенты переходят на более легкие, меньшие и мобильные платформы для удовлетворения своих вычислительных потребностей. В рамках перехода на мобильные устройства пользователи стали все больше беспокоиться о времени работы батареи своих устройств. Desktop Activity Moderator (DAM) — это одна из нескольких новых функций в Windows 8, предназначенных для обеспечения постоянного и длительного времени работы батареи для устройств, поддерживающих режим ожидания с подключением.

Режим ожидания с подключением возникает, когда устройство включено, но экран отключен. В этом состоянии работоспособности система всегда "включена" (для поддержки ключевых сценариев, таких как почта, VoIP, социальные сети и обмен мгновенными сообщениями с приложениями Магазина Windows). Это аналогично состоянию, в которое находится смартфон, когда пользователь нажимает кнопку питания.

Таким образом, программное обеспечение (включая приложения и программное обеспечение операционной системы) должно работать правильно во время ожидания подключения. Dam был создан для подавления выполнения классических приложений таким образом, как состояние спящего режима (S3 на устройствах ACPI). Это делается путем приостановки или регулирования процессов настольного программного обеспечения в системе при входе в режим ожидания подключения. Это позволяет системам, поддерживающим режим ожидания с подключением, свести к минимуму потребление ресурсов и обеспечить длительное и стабильное время работы батареи, а приложения Магазина Windows — предоставлять возможности, которые они обещают.

Сведения

DAM — это драйвер режима ядра, который загружается и инициализируется при загрузке системы, если система поддерживает подключенный режим ожидания. (Это определяется путем оценки того, задано ли для поля AOAC в структуре SYSTEM_POWER_CAPABILITIES, возвращаемой CallNtPowerInformation, значение TRUE.

Если dam включена и ваш рабочий процесс создан, DAM добавляет ваш процесс в объекты заданий, управляемые системой:

  • Если процесс был создан в сеансе 0, DAM добавляет этот процесс в объект задания, подлежащий регулированию.
  • Если процесс был создан в интерактивном сеансе (сеансе 1 или выше), DAM добавляет процесс в объект задания, подлежащий приостановке.

Примечание

Для Windows 8 объекты заданий могут быть вложенными. Это означает, что использование dam объектов заданий не влияет на существующее использование приложений объектов заданий.

 

Когда экран включен, dam отключается и не влияет на какие-либо процессы в системе. Когда система находится в режиме ожидания подключения, в зависимости от активности в системе, DAM может регулировать или приостанавливать процессы.

  • Процессы, подлежащие приостановке, приостанавливают все свои потоки (не разрешено выполнять ни при каких обстоятельствах); состояние приложения (память процесса) поддерживается
  • Процессы, на которые распространяется цикл регулирования между приостановленными и независающими (большая часть времени тратится в приостановленном состоянии)
    • Имейте в виду, что Windows также может обнаружить, что выполняются критические действия, и может отменить регулирование служб в течение более длительных периодов времени во время этого действия.
    • Кроме того, обратите внимание, что в режиме ожидания с подключением датчики и сети могут быть недоступны, поэтому регулируемые процессы должны быть устойчивы к плохим сетевым условиям (для большинства процессов это не требует каких-либо изменений).

Если приостановка DAM включена или отключена, DAM активирует доставку WM_POWERBROADCAST сообщения тем процессам, которые могут быть приостановлены, которые согласились на доставку сообщений (через вызов API или оболочку совместимости, описанные далее). Через несколько секунд dam приостанавливает процесс.

Уведомления о задействовании или отключении регулирования DAM отсутствуют. Процессы не должны нуждаться в изменении; процессы продолжают функционировать, хотя и медленнее.

Проявление

Процессы часто приостанавливаются или регулируются во время подключенного резервного состояния. Для большинства приостановленных приложений это должно быть очень похоже на приостановку/ возобновление работы S3 или переход в режим гибернации или возобновления S4. Проявления могут включать, помимо прочего, несогласованность времени безотказной работы, времени выполнения и времени настенных часов, несоответствия в поведении таймера или значительные изменения в состоянии операционной системы до и после завершения приостановки.

Приостановка и регулирование происходят как единое целое (все приостановленные процессы приостанавливаются и отменяются в едином порядке, а все процессы, которые могут быть отрегулированы, регулируются и отменяются в унисон), поэтому взаимодействие между двумя приостановленными процессами или двумя регулируемыми процессами не создает проблем.

Программное обеспечение, использующее межпроцессное взаимодействие, может потребовать особого внимания:

  • Обмен данными между процессами в сеансе 0 (с регулированием) и сеансе 1+ (приостановлено) — примерами являются значки в области уведомлений или компоненты пользовательского интерфейса, представляющие текущее состояние службы.
  • Обмен данными между компонентами в пользовательском режиме (сеанс 0 или 1) и драйверами (которые не регулируются и не приостановлены) — примеры включают службы, которые работают от имени драйвера.

В таких случаях при неправильном взаимодействии между процессами приложения могут отображаться как завислые, так и не отвечающие на запросы (хотя пользователь может не заметить это влияние напрямую, так как экран будет отключен при подключении в режиме ожидания). В большинстве случаев, однако, службы и драйверы уже должны быть разработаны, чтобы обеспечить надежную защиту от проблем обмена данными между процессами.

Поставщики, создающие программное обеспечение для Интернета или зависящие от нее, должны подумать о том, как приостановка процесса влияет на время существования подключения и подтверждения. Кроме того, так как сетевое подключение может быть недоступно в режиме ожидания с подключением, разработчики процессов, созданных в сеансе 0, должны быть особенно осведомлены о том, как периодические сетевые подключения влияют на процесс.

Решение

На приложения Магазина Windows не влияет dam. Если на классическое приложение влияет DAM, вы можете запросить уведомления перед приостановкой (например, для сохранения состояния или закрытия сетевых подключений) одним из следующих способов:

  • Если приложение имеет окно (HWND) и вы хотите обрабатывать эти уведомления с помощью процедуры окна, вызовите RegisterSuspendResumeNotification , чтобы зарегистрировать эти сообщения (или UnregisterSuspendResumeNotification , чтобы отменить регистрацию). Можно использовать DEVICE_NOTIFY_WINDOW_HANDLE в параметре Flags и передать HWND окна в качестве параметра Recipient. Полученное сообщение является WM_POWERBROADCAST сообщением.
  • Если в приложении нет окна (HWND) или требуется прямой обратный вызов, вызовите PowerRegisterSuspendResumeNotification , чтобы зарегистрировать эти сообщения (или PowerUnregisterSuspendResumeNotification , чтобы отменить регистрацию). Необходимо использовать DEVICE_NOTIFY_CALLBACK в параметре Flags и передать значение типа PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS в параметре Recipient.
  • Если приложение не может быть перекомпилировано, вы можете согласиться на получение этих WM_POWERBROADCAST сообщений с помощью набора средств AppCompat (с помощью оболочки PromoteDAM).

Сообщение о приостановке WM_POWERBROADCAST с wParam=PBT_APMSUSPEND; это сообщение передается одновременно всем процессам, которые были настроены в системе. Приложение должно быстро и эффективно выполнять любые действия по пути приостановки. Время ожидания после широковещательного уведомления является глобальным, а не для каждого процесса, поэтому ваш процесс может бороться за системные ресурсы, если работа, необходимая для этого пути, обширна.

Сообщение о возобновлении WM_POWERBROADCAST с wParam=PBT_APMRESUME; это сообщение передается одновременно всем процессам, которые согласились на участие в процессе после возобновления. Относительное время доставки для выхода системы из подключенного резерва не гарантируется.

Для приложений, связанных с камерой, при переходе состояния питания во время уведомления о приостановке приложения должны освобождать все ссылки на камеру (все объекты конвейера захвата должны быть выключены и удалены). Чтобы избежать возможного разряда заряда батареи, в системах Windows 10 RS3+ Камера Windows frame server закроет все сеансы записи, если приложение не обрабатывает уведомление о приостановке должным образом. Побочный эффект этого заключается в том, что когда система выходит из режима ожидания или S3/S4, конвейер отслеживания приложения больше не находится в рабочем состоянии.

Тесты

Тестирование программного обеспечения при переходе в режиме ожидания с подключением.

Ресурсы