| 1 | /*
 | 
|---|
| 2 |  * batclass.h
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  * Battery class driver interface
 | 
|---|
| 5 |  *
 | 
|---|
| 6 |  * This file is part of the w32api package.
 | 
|---|
| 7 |  *
 | 
|---|
| 8 |  * Contributors:
 | 
|---|
| 9 |  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 | 
|---|
| 10 |  *
 | 
|---|
| 11 |  * THIS SOFTWARE IS NOT COPYRIGHTED
 | 
|---|
| 12 |  *
 | 
|---|
| 13 |  * This source code is offered for use in the public domain. You may
 | 
|---|
| 14 |  * use, modify or distribute it freely.
 | 
|---|
| 15 |  *
 | 
|---|
| 16 |  * This code is distributed in the hope that it will be useful but
 | 
|---|
| 17 |  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 | 
|---|
| 18 |  * DISCLAIMED. This includes but is not limited to warranties of
 | 
|---|
| 19 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
|---|
| 20 |  *
 | 
|---|
| 21 |  */
 | 
|---|
| 22 | 
 | 
|---|
| 23 | #ifndef __BATCLASS_H
 | 
|---|
| 24 | #define __BATCLASS_H
 | 
|---|
| 25 | 
 | 
|---|
| 26 | #if __GNUC__ >=3
 | 
|---|
| 27 | #pragma GCC system_header
 | 
|---|
| 28 | #endif
 | 
|---|
| 29 | 
 | 
|---|
| 30 | #ifdef __cplusplus
 | 
|---|
| 31 | extern "C" {
 | 
|---|
| 32 | #endif
 | 
|---|
| 33 | 
 | 
|---|
| 34 | #include "ntddk.h"
 | 
|---|
| 35 | 
 | 
|---|
| 36 | #if defined(_BATTERYCLASS_)
 | 
|---|
| 37 |   #define BCLASSAPI DECLSPEC_EXPORT
 | 
|---|
| 38 | #else
 | 
|---|
| 39 |   #define BCLASSAPI DECLSPEC_IMPORT
 | 
|---|
| 40 | #endif
 | 
|---|
| 41 | 
 | 
|---|
| 42 | 
 | 
|---|
| 43 | /* Battery device GUIDs */
 | 
|---|
| 44 | 
 | 
|---|
| 45 | DEFINE_GUID(GUID_DEVICE_BATTERY,
 | 
|---|
| 46 |   0x72631e54L, 0x78A4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a);
 | 
|---|
| 47 | 
 | 
|---|
| 48 | DEFINE_GUID(BATTERY_STATUS_WMI_GUID,
 | 
|---|
| 49 |   0xfc4670d1, 0xebbf, 0x416e, 0x87, 0xce, 0x37, 0x4a, 0x4e, 0xbc, 0x11, 0x1a);
 | 
|---|
| 50 | 
 | 
|---|
| 51 | DEFINE_GUID(BATTERY_RUNTIME_WMI_GUID,
 | 
|---|
| 52 |   0x535a3767, 0x1ac2, 0x49bc, 0xa0, 0x77, 0x3f, 0x7a, 0x02, 0xe4, 0x0a, 0xec);
 | 
|---|
| 53 | 
 | 
|---|
| 54 | DEFINE_GUID(BATTERY_TEMPERATURE_WMI_GUID,
 | 
|---|
| 55 |   0x1a52a14d, 0xadce, 0x4a44, 0x9a, 0x3e, 0xc8, 0xd8, 0xf1, 0x5f, 0xf2, 0xc2);
 | 
|---|
| 56 | 
 | 
|---|
| 57 | DEFINE_GUID(BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID,
 | 
|---|
| 58 |   0x40b40565, 0x96f7, 0x4435, 0x86, 0x94, 0x97, 0xe0, 0xe4, 0x39, 0x59, 0x05);
 | 
|---|
| 59 | 
 | 
|---|
| 60 | DEFINE_GUID(BATTERY_CYCLE_COUNT_WMI_GUID,
 | 
|---|
| 61 |   0xef98db24, 0x0014, 0x4c25, 0xa5, 0x0b, 0xc7, 0x24, 0xae, 0x5c, 0xd3, 0x71);
 | 
|---|
| 62 | 
 | 
|---|
| 63 | DEFINE_GUID(BATTERY_STATIC_DATA_WMI_GUID,
 | 
|---|
| 64 |   0x05e1e463, 0xe4e2, 0x4ea9, 0x80, 0xcb, 0x9b, 0xd4, 0xb3, 0xca, 0x06, 0x55);
 | 
|---|
| 65 | 
 | 
|---|
| 66 | DEFINE_GUID(BATTERY_STATUS_CHANGE_WMI_GUID,
 | 
|---|
| 67 |   0xcddfa0c3, 0x7c5b, 0x4e43, 0xa0, 0x34, 0x05, 0x9f, 0xa5, 0xb8, 0x43, 0x64);
 | 
|---|
| 68 | 
 | 
|---|
| 69 | DEFINE_GUID(BATTERY_TAG_CHANGE_WMI_GUID,
 | 
|---|
| 70 |   0x5e1f6e19, 0x8786, 0x4d23, 0x94, 0xfc, 0x9e, 0x74, 0x6b, 0xd5, 0xd8, 0x88);
 | 
|---|
| 71 | 
 | 
|---|
| 72 | 
 | 
|---|
| 73 | /* BATTERY_INFORMATION.Capabilities constants */
 | 
|---|
| 74 | #define BATTERY_SET_CHARGE_SUPPORTED      0x00000001
 | 
|---|
| 75 | #define BATTERY_SET_DISCHARGE_SUPPORTED   0x00000002
 | 
|---|
| 76 | #define BATTERY_SET_RESUME_SUPPORTED      0x00000004
 | 
|---|
| 77 | #define BATTERY_IS_SHORT_TERM             0x20000000
 | 
|---|
| 78 | #define BATTERY_CAPACITY_RELATIVE         0x40000000
 | 
|---|
| 79 | #define BATTERY_SYSTEM_BATTERY            0x80000000
 | 
|---|
| 80 | 
 | 
|---|
| 81 | typedef struct _BATTERY_INFORMATION {
 | 
|---|
| 82 |   ULONG  Capabilities;
 | 
|---|
| 83 |   UCHAR  Technology;
 | 
|---|
| 84 |   UCHAR  Reserved[3];
 | 
|---|
| 85 |   UCHAR  Chemistry[4];
 | 
|---|
| 86 |   ULONG  DesignedCapacity;
 | 
|---|
| 87 |   ULONG  FullChargedCapacity;
 | 
|---|
| 88 |   ULONG  DefaultAlert1;
 | 
|---|
| 89 |   ULONG  DefaultAlert2;
 | 
|---|
| 90 |   ULONG  CriticalBias;
 | 
|---|
| 91 |   ULONG  CycleCount;
 | 
|---|
| 92 | } BATTERY_INFORMATION, *PBATTERY_INFORMATION;
 | 
|---|
| 93 | 
 | 
|---|
| 94 | typedef struct _BATTERY_MANUFACTURE_DATE {
 | 
|---|
| 95 |   UCHAR  Day;
 | 
|---|
| 96 |   UCHAR  Month;
 | 
|---|
| 97 |   USHORT  Year;
 | 
|---|
| 98 | } BATTERY_MANUFACTURE_DATE, *PBATTERY_MANUFACTURE_DATE;
 | 
|---|
| 99 | 
 | 
|---|
| 100 | typedef struct _BATTERY_NOTIFY {
 | 
|---|
| 101 |         ULONG  PowerState;
 | 
|---|
| 102 |         ULONG  LowCapacity;
 | 
|---|
| 103 |         ULONG  HighCapacity;
 | 
|---|
| 104 | } BATTERY_NOTIFY, *PBATTERY_NOTIFY;
 | 
|---|
| 105 | 
 | 
|---|
| 106 | /* BATTERY_STATUS.PowerState flags */
 | 
|---|
| 107 | #define BATTERY_POWER_ON_LINE             0x00000001
 | 
|---|
| 108 | #define BATTERY_DISCHARGING               0x00000002
 | 
|---|
| 109 | #define BATTERY_CHARGING                  0x00000004
 | 
|---|
| 110 | #define BATTERY_CRITICAL                  0x00000008
 | 
|---|
| 111 | 
 | 
|---|
| 112 | /* BATTERY_STATUS.Voltage constant */
 | 
|---|
| 113 | #define BATTERY_UNKNOWN_VOLTAGE           0xFFFFFFFF
 | 
|---|
| 114 | 
 | 
|---|
| 115 | /* BATTERY_STATUS.Rate constant */
 | 
|---|
| 116 | #define BATTERY_UNKNOWN_RATE              0x80000000
 | 
|---|
| 117 | 
 | 
|---|
| 118 | typedef struct _BATTERY_STATUS {
 | 
|---|
| 119 |   ULONG  PowerState;
 | 
|---|
| 120 |   ULONG  Capacity;
 | 
|---|
| 121 |   ULONG  Voltage;
 | 
|---|
| 122 |   LONG  Rate;
 | 
|---|
| 123 | } BATTERY_STATUS, *PBATTERY_STATUS;
 | 
|---|
| 124 | 
 | 
|---|
| 125 | /* BATTERY_INFORMATION.Capacity constants */
 | 
|---|
| 126 | #define BATTERY_UNKNOWN_CAPACITY          0xFFFFFFFF
 | 
|---|
| 127 | 
 | 
|---|
| 128 | typedef enum _BATTERY_QUERY_INFORMATION_LEVEL {
 | 
|---|
| 129 |   BatteryInformation = 0,
 | 
|---|
| 130 |   BatteryGranularityInformation,
 | 
|---|
| 131 |   BatteryTemperature,
 | 
|---|
| 132 |   BatteryEstimatedTime,
 | 
|---|
| 133 |   BatteryDeviceName,
 | 
|---|
| 134 |   BatteryManufactureDate,
 | 
|---|
| 135 |   BatteryManufactureName,
 | 
|---|
| 136 |   BatteryUniqueID,
 | 
|---|
| 137 |   BatterySerialNumber
 | 
|---|
| 138 | } BATTERY_QUERY_INFORMATION_LEVEL;
 | 
|---|
| 139 | 
 | 
|---|
| 140 | /* BatteryEstimatedTime constant */
 | 
|---|
| 141 | #define BATTERY_UNKNOWN_TIME              0x80000000
 | 
|---|
| 142 | 
 | 
|---|
| 143 | /* NTSTATUS possibly returned by BCLASS_QUERY_STATUS */
 | 
|---|
| 144 | #define BATTERY_TAG_INVALID 0
 | 
|---|
| 145 | 
 | 
|---|
| 146 | typedef struct _BATTERY_QUERY_INFORMATION {
 | 
|---|
| 147 |   ULONG  BatteryTag;
 | 
|---|
| 148 |   BATTERY_QUERY_INFORMATION_LEVEL  InformationLevel;
 | 
|---|
| 149 |   LONG  AtRate;
 | 
|---|
| 150 | } BATTERY_QUERY_INFORMATION, *PBATTERY_QUERY_INFORMATION;
 | 
|---|
| 151 | 
 | 
|---|
| 152 | typedef enum _BATTERY_SET_INFORMATION_LEVEL {
 | 
|---|
| 153 |   BatteryCriticalBias = 0,
 | 
|---|
| 154 |   BatteryCharge,
 | 
|---|
| 155 |   BatteryDischarge
 | 
|---|
| 156 | } BATTERY_SET_INFORMATION_LEVEL;
 | 
|---|
| 157 | 
 | 
|---|
| 158 | #define MAX_BATTERY_STRING_SIZE           128
 | 
|---|
| 159 | 
 | 
|---|
| 160 | typedef struct _BATTERY_SET_INFORMATION {
 | 
|---|
| 161 |         ULONG  BatteryTag;
 | 
|---|
| 162 |         BATTERY_SET_INFORMATION_LEVEL  InformationLevel;
 | 
|---|
| 163 |         UCHAR  Buffer[1];
 | 
|---|
| 164 | } BATTERY_SET_INFORMATION, *PBATTERY_SET_INFORMATION;
 | 
|---|
| 165 | 
 | 
|---|
| 166 | typedef struct _BATTERY_WAIT_STATUS {
 | 
|---|
| 167 |         ULONG  BatteryTag;
 | 
|---|
| 168 |         ULONG  Timeout;
 | 
|---|
| 169 |         ULONG  PowerState;
 | 
|---|
| 170 |         ULONG  LowCapacity;
 | 
|---|
| 171 |         ULONG  HighCapacity;
 | 
|---|
| 172 | } BATTERY_WAIT_STATUS, *PBATTERY_WAIT_STATUS;
 | 
|---|
| 173 | 
 | 
|---|
| 174 | 
 | 
|---|
| 175 | #define IOCTL_BATTERY_QUERY_TAG \
 | 
|---|
| 176 |   CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 177 | 
 | 
|---|
| 178 | #define IOCTL_BATTERY_QUERY_INFORMATION \
 | 
|---|
| 179 |   CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 180 | 
 | 
|---|
| 181 | #define IOCTL_BATTERY_SET_INFORMATION \
 | 
|---|
| 182 |   CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
 | 
|---|
| 183 | 
 | 
|---|
| 184 | #define IOCTL_BATTERY_QUERY_STATUS \
 | 
|---|
| 185 |   CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
 | 
|---|
| 186 | 
 | 
|---|
| 187 | 
 | 
|---|
| 188 | typedef NTSTATUS DDKAPI
 | 
|---|
| 189 | (*BCLASS_DISABLE_STATUS_NOTIFY)(
 | 
|---|
| 190 |   IN PVOID  Context);
 | 
|---|
| 191 | 
 | 
|---|
| 192 | typedef NTSTATUS DDKAPI
 | 
|---|
| 193 | (*BCLASS_QUERY_INFORMATION)(
 | 
|---|
| 194 |   IN PVOID  Context,
 | 
|---|
| 195 |   IN ULONG  BatteryTag,
 | 
|---|
| 196 |   IN BATTERY_QUERY_INFORMATION_LEVEL  Level,
 | 
|---|
| 197 |   IN LONG  AtRate  OPTIONAL,
 | 
|---|
| 198 |   OUT PVOID  Buffer,
 | 
|---|
| 199 |   IN ULONG  BufferLength,
 | 
|---|
| 200 |   OUT PULONG  ReturnedLength);
 | 
|---|
| 201 | 
 | 
|---|
| 202 | typedef NTSTATUS DDKAPI
 | 
|---|
| 203 | (*BCLASS_QUERY_STATUS)(
 | 
|---|
| 204 |   IN PVOID  Context,
 | 
|---|
| 205 |   IN ULONG  BatteryTag,
 | 
|---|
| 206 |   OUT PBATTERY_STATUS  BatteryStatus);
 | 
|---|
| 207 | 
 | 
|---|
| 208 | typedef NTSTATUS DDKAPI
 | 
|---|
| 209 | (*BCLASS_QUERY_TAG)(
 | 
|---|
| 210 |   IN PVOID  Context,
 | 
|---|
| 211 |   OUT PULONG  BatteryTag);
 | 
|---|
| 212 | 
 | 
|---|
| 213 | typedef NTSTATUS DDKAPI
 | 
|---|
| 214 | (*BCLASS_SET_INFORMATION)(
 | 
|---|
| 215 |   IN PVOID  Context,
 | 
|---|
| 216 |   IN ULONG  BatteryTag,
 | 
|---|
| 217 |   IN BATTERY_SET_INFORMATION_LEVEL  Level,
 | 
|---|
| 218 |   IN PVOID  Buffer  OPTIONAL);
 | 
|---|
| 219 | 
 | 
|---|
| 220 | typedef NTSTATUS DDKAPI
 | 
|---|
| 221 | (*BCLASS_SET_STATUS_NOTIFY)(
 | 
|---|
| 222 |   IN PVOID  Context,
 | 
|---|
| 223 |   IN ULONG  BatteryTag,
 | 
|---|
| 224 |   IN PBATTERY_NOTIFY  BatteryNotify);
 | 
|---|
| 225 | 
 | 
|---|
| 226 | 
 | 
|---|
| 227 | typedef struct _BATTERY_MINIPORT_INFO {
 | 
|---|
| 228 |   USHORT  MajorVersion;
 | 
|---|
| 229 |   USHORT  MinorVersion;
 | 
|---|
| 230 |   PVOID  Context;
 | 
|---|
| 231 |   BCLASS_QUERY_TAG  QueryTag;
 | 
|---|
| 232 |   BCLASS_QUERY_INFORMATION  QueryInformation;
 | 
|---|
| 233 |   BCLASS_SET_INFORMATION  SetInformation;
 | 
|---|
| 234 |   BCLASS_QUERY_STATUS  QueryStatus;
 | 
|---|
| 235 |   BCLASS_SET_STATUS_NOTIFY  SetStatusNotify;
 | 
|---|
| 236 |   BCLASS_DISABLE_STATUS_NOTIFY  DisableStatusNotify;
 | 
|---|
| 237 |   PDEVICE_OBJECT  Pdo;
 | 
|---|
| 238 |   PUNICODE_STRING  DeviceName;
 | 
|---|
| 239 | } BATTERY_MINIPORT_INFO, *PBATTERY_MINIPORT_INFO;
 | 
|---|
| 240 | 
 | 
|---|
| 241 | /* BATTERY_MINIPORT_INFO.XxxVersion */
 | 
|---|
| 242 | #define BATTERY_CLASS_MAJOR_VERSION       0x0001
 | 
|---|
| 243 | #define BATTERY_CLASS_MINOR_VERSION       0x0000
 | 
|---|
| 244 | 
 | 
|---|
| 245 | 
 | 
|---|
| 246 | BCLASSAPI
 | 
|---|
| 247 | NTSTATUS
 | 
|---|
| 248 | DDKAPI
 | 
|---|
| 249 | BatteryClassInitializeDevice(
 | 
|---|
| 250 |   IN PBATTERY_MINIPORT_INFO  MiniportInfo,
 | 
|---|
| 251 |   IN PVOID  *ClassData);
 | 
|---|
| 252 | 
 | 
|---|
| 253 | BCLASSAPI
 | 
|---|
| 254 | NTSTATUS
 | 
|---|
| 255 | DDKAPI
 | 
|---|
| 256 | BatteryClassIoctl(
 | 
|---|
| 257 |   IN PVOID  ClassData,
 | 
|---|
| 258 |   IN PIRP  Irp);
 | 
|---|
| 259 | 
 | 
|---|
| 260 | BCLASSAPI
 | 
|---|
| 261 | NTSTATUS
 | 
|---|
| 262 | DDKAPI
 | 
|---|
| 263 | BatteryClassQueryWmiDataBlock(
 | 
|---|
| 264 |   IN PVOID  ClassData,
 | 
|---|
| 265 |   IN PDEVICE_OBJECT  DeviceObject,
 | 
|---|
| 266 |   IN PIRP  Irp,
 | 
|---|
| 267 |   IN ULONG  GuidIndex,
 | 
|---|
| 268 |   IN OUT PULONG  InstanceLengthArray,
 | 
|---|
| 269 |   IN ULONG  OutBufferSize,
 | 
|---|
| 270 |   OUT PUCHAR  Buffer);
 | 
|---|
| 271 | 
 | 
|---|
| 272 | BCLASSAPI
 | 
|---|
| 273 | NTSTATUS
 | 
|---|
| 274 | DDKAPI
 | 
|---|
| 275 | BatteryClassStatusNotify(
 | 
|---|
| 276 |   IN PVOID  ClassData);
 | 
|---|
| 277 | 
 | 
|---|
| 278 | BCLASSAPI
 | 
|---|
| 279 | NTSTATUS
 | 
|---|
| 280 | DDKAPI
 | 
|---|
| 281 | BatteryClassSystemControl(
 | 
|---|
| 282 |   IN  PVOID  ClassData,
 | 
|---|
| 283 |   IN  PWMILIB_CONTEXT  WmiLibContext,
 | 
|---|
| 284 |   IN  PDEVICE_OBJECT  DeviceObject,
 | 
|---|
| 285 |   IN  PIRP  Irp,
 | 
|---|
| 286 |   OUT PSYSCTL_IRP_DISPOSITION  Disposition);
 | 
|---|
| 287 | 
 | 
|---|
| 288 | BCLASSAPI
 | 
|---|
| 289 | NTSTATUS
 | 
|---|
| 290 | DDKAPI
 | 
|---|
| 291 | BatteryClassUnload(
 | 
|---|
| 292 |   IN PVOID  ClassData);
 | 
|---|
| 293 | 
 | 
|---|
| 294 | #ifdef __cplusplus
 | 
|---|
| 295 | }
 | 
|---|
| 296 | #endif
 | 
|---|
| 297 | 
 | 
|---|
| 298 | #endif /* __BATCLASS_H */
 | 
|---|