Informações da bateria

As baterias podem fornecer energia para computadores portáteis e computadores em execução em um UPS (fonte de alimentação ininterrupta). Nesses computadores, o sistema operacional fornece informações sobre o estado da bateria para que os aplicativos possam fornecer funções úteis para o usuário. (Não há suporte para alguns sistemas de bateria e UPSs não padrão mais antigos.)

Observe que essa visão geral pressupõe que você esteja familiarizado com o gerenciamento de dispositivos.

Para obter informações sobre a bateria status, use a função GetSystemPowerStatus, que retorna informações gerais sobre todas as fontes de energia no sistema. Você deve usar GetSystemPowerStatus sempre que possível.

Em alguns casos, no entanto, são necessárias informações detalhadas sobre cada bateria individual. Para essa finalidade, cada dispositivo de bateria expõe uma interface IOCTL. As seguintes operações IOCTL são executadas usando a função DeviceIoControl :

IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION

Para usar essa interface, um aplicativo deve seguir várias etapas. Primeiro, ele deve usar rotinas de instalação para enumerar todos os dispositivos que têm uma interface de classe de bateria. Observe que esses dispositivos representam as portas da bateria, não as baterias reais presentes no sistema. Em seguida, o aplicativo deve abrir um identificador para cada dispositivo para que ele possa usar a função DeviceIoControl para enviar solicitações para o dispositivo e, em seguida, adquirir marcas para todas as baterias inseridas. Depois de concluir essas etapas, o aplicativo pode enviar consultas para cada dispositivo de bateria.

Marcas de bateria

Como cada dispositivo de bateria representa um slot no qual uma bateria pode ser inserida, deve haver uma maneira de determinar quando a bateria é removida e reinserida, substituída ou alterada de qualquer outra maneira. Para fazer isso, cada bateria em um slot específico recebe uma marca. Essa marca deve ser usada para todas as consultas para obter informações. Se a marca fornecida pelo aplicativo não corresponder à bateria, a consulta falhará, indicando ao aplicativo que a bateria foi alterada de alguma forma. Para concluir a consulta com êxito, uma nova marca de bateria é necessária. Adquira a marca usando a operação IOCTL_BATTERY_QUERY_TAG . Se uma bateria estiver presente nesse slot, a marca retornada poderá ser passada para qualquer uma das outras IOCTLs de bateria para executar outras funções. Em um sistema de várias baterias, cada dispositivo de bateria (slot) emite marcas de bateria de forma independente, de modo que a marca de dois dispositivos separados poderia, às vezes, ser idêntica.

Uma alteração na marca da bateria não significa necessariamente que a bateria foi removida e reinserida ou substituída. Uma nova marca poderá ser gerada se houver uma alteração em qualquer um dos dados que normalmente seriam estáticos. Por exemplo, quando uma bateria é carregada, a última capacidade totalmente carregada pode ter sido alterada. A marca também pode ser alterada se a comunicação da bateria foi temporariamente perdida ou se houve uma notificação inadequada do BIOS. Em alguns sistemas, a marca de bateria pode ser atualizada sempre que a status AC for alterada. Esse comportamento ocorre devido a uma característica do sistema de bateria e não é comum.

Sempre que a marca da bateria for atualizada, a bateria deverá ser tratada como se fosse uma nova bateria e todos os dados armazenados em cache devem ser lidos novamente. Se um aplicativo precisar saber se a mesma bateria física está presente, ele deve marcar o valor de BatteryUniqueID no buffer de saída de IOCTL_BATTERY_QUERY_INFORMATION quando chamado com o nível de informações BatteryUniqueID.

Sobre o Gerenciamento de Energia

Enumerando dispositivos de bateria