Поделиться через


Сведения о батарее

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

Обратите внимание, что в этом обзоре предполагается, что вы знакомы с управления устройствами.

Чтобы получить сведения о состоянии батареи, используйте функцию GetSystemPowerStatus, которая возвращает общие сведения обо всех источниках питания в системе. По возможности следует использовать GetSystemPowerStatus.

Однако в некоторых случаях требуется подробная информация о каждой отдельной батарее. Для этого каждое устройство батареи предоставляет интерфейс IOCTL. Следующие операции IOCTL выполняются с помощью функции DeviceIoControl:

IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION

Чтобы использовать этот интерфейс, приложение должно выполнить несколько действий. Во-первых, он должен использовать подпрограммы установки для перечисления всех устройств с интерфейсом класса батареи. Обратите внимание, что эти устройства представляют порты батареи, а не фактические батареи, присутствующих в системе. Затем приложение должно открыть дескриптор для каждого устройства, чтобы использовать функциюDeviceIoControlдля отправки запросов на устройство, а затем получить теги для всех батарей, вставленных. После выполнения этих действий приложение может отправлять запросы на каждое устройство батареи.

Теги батареи

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

Изменение тега батареи не обязательно означает, что батарея была удалена и восстановлена или заменена. Новый тег можно создать, если в любом из данных, которые обычно будут статическими, могут быть изменены. Например, когда заряд батареи выполняется, то последняя полностью зарядная емкость может измениться. Тег также может измениться, если связь с батареей была временно потеряна или если произошло неправильное уведомление от BIOS. В некоторых системах тег батареи может обновляться при изменении состояния AC. Это поведение обусловлено характеристикой батареи и не является распространенным.

При обновлении тега батареи батарея должна обрабатываться так, как если бы она была новой батареей, и все кэшированные данные должны быть повторно считываются. Если приложение должно знать, присутствует ли тот же физический аккумулятор, он должен проверить значение BatteryUniqueID в выходном буфере IOCTL_BATTERY_QUERY_INFORMATION при вызове с уровнем сведений BatteryUniqueID.

о управления питанием

перечисление устройств батареи