Функция WdfDeviceGetSystemPowerAction (wdfdevice.h)
[Относится к KMDF и UMDF]
Метод WdfDeviceGetSystemPowerAction возвращает действие питания системы, если таковое имеется, которое выполняется в данный момент для компьютера.
Синтаксис
POWER_ACTION WdfDeviceGetSystemPowerAction(
[in] WDFDEVICE Device
);
Параметры
[in] Device
Дескриптор объекта устройства платформы.
Возвращаемое значение
WdfDeviceGetSystemPowerAction возвращает POWER_ACTION типизированное значение перечислителя. Значение указывает на действие питания системы , которое в настоящее время выполняется для компьютера. Дополнительные сведения см. в разделе "Примечания". Перечисление POWER_ACTION определено в wdm.h.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Начиная с WDF версии 1.31/2.31 (называемой "v31"), WdfDeviceGetSystemPowerAction был обновлен для более точного отчета о действиях системы управления питанием, когда устройство является владельцем политики управления питанием. Чтобы получить следующее новое поведение, необходимо перекомпилировать драйверы с помощью версии 31 или более поздней версии:
Если устройство входит в D0 или выходит из нее из-за S0 Idle (см. раздел WdfDeviceAssignS0IdleSettings) во время несвязанного перехода питания системы, WdfDeviceGetSystemPowerAction может вернуть PowerActionSleep. Это исправлено в версии 31 и теперь возвращает PowerActionNone.
Когда система выходит из гибридного спящего режима (спящего режима с файлом гибернации), до версии 31 WdfDeviceGetSystemPowerAction всегда возвращала PowerActionHibernate. Это исправлено в версии 31 и теперь возвращается:
- PowerActionSleep , если он выходит из спящего режима без потери питания, что означает, что система остается в S3
- PowerActionHibernate , если он выходит из спящего режима после потери питания, что означает возобновление работы системы из файла гибернации
Метод WdfDeviceGetSystemPowerAction позволяет драйверу определить, происходит ли переход питания устройства из-за простоя (или пробуждения) или из-за того, что весь компьютер переходит (или покидает) состояние с низким энергопотреблением.
Драйвер должен вызывать WdfDeviceGetSystemPowerAction только из функций обратного вызова событий, вызываемых платформой, когда устройство входит в состояние с низким энергопотреблением или возвращается в рабочее состояние.
Значение, возвращаемое WdfDeviceGetSystemPowerAction , зависит от следующих ситуаций:
- Если компьютер находится в состоянии низкого энергопотребления, когда драйвер вызывает WdfDeviceGetSystemPowerAction, метод возвращает причину, по которой компьютер входит в состояние с низким энергопотреблением. Например, метод возвращает PowerActionSleep , если компьютер входит в состояние с низким энергопотреблением S1, S2 или S3.
- Если компьютер возвращается в рабочее состояние (S0) из состояния с низким энергопотреблением, когда драйвер вызывает WdfDeviceSystemPowerAction, метод возвращает причину, по которой компьютер перешел в состояние с низким энергопотреблением. Например, метод возвращает PowerActionSleep , если компьютер покидает состояние S1, S2 или S3 с низким энергопотреблением.
- Если компьютер включается (после выключения), когда драйвер вызывает WdfDeviceGetSystemPowerAction, метод возвращает PowerActionNone.
- Если устройство входит в состояние простоя с низким энергопотреблением или возвращается в рабочее (D0) состояние, когда драйвер вызывает WdfDeviceGetSystemPowerAction, в то время как остальная часть системы остается в рабочем состоянии (S0), метод возвращает PowerActionNone.
- Если компьютер и устройство находятся в рабочем состоянии, когда драйвер вызывает WdfDeviceGetSystemPowerAction, метод возвращает PowerActionNone.
Примеры
В следующем примере кода показано, как получить действие перехода на питание, которое в настоящее время выполняется для компьютера.
POWER_ACTION SysPowerAction;
SysPowerAction = WdfDeviceGetSystemPowerAction(device);
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,9 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfdevice.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |