Reactos
at master 397 lines 11 kB view raw
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#pragma once 24 25#ifdef __cplusplus 26extern "C" { 27#endif 28 29/* Battery device GUIDs */ 30 31DEFINE_GUID(GUID_DEVICE_BATTERY, 32 0x72631e54L, 0x78A4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a); 33 34#if (NTDDI_VERSION >= NTDDI_WINXP) 35DEFINE_GUID(BATTERY_STATUS_WMI_GUID, 36 0xfc4670d1, 0xebbf, 0x416e, 0x87, 0xce, 0x37, 0x4a, 0x4e, 0xbc, 0x11, 0x1a); 37DEFINE_GUID(BATTERY_RUNTIME_WMI_GUID, 38 0x535a3767, 0x1ac2, 0x49bc, 0xa0, 0x77, 0x3f, 0x7a, 0x02, 0xe4, 0x0a, 0xec); 39DEFINE_GUID(BATTERY_TEMPERATURE_WMI_GUID, 40 0x1a52a14d, 0xadce, 0x4a44, 0x9a, 0x3e, 0xc8, 0xd8, 0xf1, 0x5f, 0xf2, 0xc2); 41DEFINE_GUID(BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID, 42 0x40b40565, 0x96f7, 0x4435, 0x86, 0x94, 0x97, 0xe0, 0xe4, 0x39, 0x59, 0x05); 43DEFINE_GUID(BATTERY_CYCLE_COUNT_WMI_GUID, 44 0xef98db24, 0x0014, 0x4c25, 0xa5, 0x0b, 0xc7, 0x24, 0xae, 0x5c, 0xd3, 0x71); 45DEFINE_GUID(BATTERY_STATIC_DATA_WMI_GUID, 46 0x05e1e463, 0xe4e2, 0x4ea9, 0x80, 0xcb, 0x9b, 0xd4, 0xb3, 0xca, 0x06, 0x55); 47DEFINE_GUID(BATTERY_STATUS_CHANGE_WMI_GUID, 48 0xcddfa0c3, 0x7c5b, 0x4e43, 0xa0, 0x34, 0x05, 0x9f, 0xa5, 0xb8, 0x43, 0x64); 49DEFINE_GUID(BATTERY_TAG_CHANGE_WMI_GUID, 50 0x5e1f6e19, 0x8786, 0x4d23, 0x94, 0xfc, 0x9e, 0x74, 0x6b, 0xd5, 0xd8, 0x88); 51#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 52 53#ifndef _BATCLASS_ 54#define _BATCLASS_ 55 56/* BATTERY_INFORMATION.Capabilities constants */ 57#define BATTERY_SET_CHARGE_SUPPORTED 0x00000001 58#define BATTERY_SET_DISCHARGE_SUPPORTED 0x00000002 59#define BATTERY_SET_RESUME_SUPPORTED 0x00000004 60#define BATTERY_IS_SHORT_TERM 0x20000000 61#define BATTERY_CAPACITY_RELATIVE 0x40000000 62#define BATTERY_SYSTEM_BATTERY 0x80000000 63 64/* BATTERY_INFORMATION.Capacity constants */ 65#define BATTERY_UNKNOWN_CAPACITY 0xFFFFFFFF 66 67/* BatteryEstimatedTime constant */ 68#define BATTERY_UNKNOWN_TIME 0xFFFFFFFF 69 70#define MAX_BATTERY_STRING_SIZE 128 71 72/* BATTERY_STATUS.PowerState flags */ 73#define BATTERY_POWER_ON_LINE 0x00000001 74#define BATTERY_DISCHARGING 0x00000002 75#define BATTERY_CHARGING 0x00000004 76#define BATTERY_CRITICAL 0x00000008 77 78/* BATTERY_STATUS.Voltage constant */ 79#define BATTERY_UNKNOWN_VOLTAGE 0xFFFFFFFF 80 81/* BATTERY_STATUS.Rate constant */ 82#define BATTERY_UNKNOWN_RATE 0x80000000 83 84#define IOCTL_BATTERY_QUERY_TAG \ 85 CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS) 86#define IOCTL_BATTERY_QUERY_INFORMATION \ 87 CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS) 88#define IOCTL_BATTERY_SET_INFORMATION \ 89 CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS) 90#define IOCTL_BATTERY_QUERY_STATUS \ 91 CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS) 92 93/* NTSTATUS possibly returned by BCLASS_QUERY_STATUS */ 94#define BATTERY_TAG_INVALID 0 95 96typedef enum _BATTERY_QUERY_INFORMATION_LEVEL { 97 BatteryInformation = 0, 98 BatteryGranularityInformation, 99 BatteryTemperature, 100 BatteryEstimatedTime, 101 BatteryDeviceName, 102 BatteryManufactureDate, 103 BatteryManufactureName, 104 BatteryUniqueID, 105 BatterySerialNumber 106} BATTERY_QUERY_INFORMATION_LEVEL; 107 108typedef struct _BATTERY_QUERY_INFORMATION { 109 ULONG BatteryTag; 110 BATTERY_QUERY_INFORMATION_LEVEL InformationLevel; 111 LONG AtRate; 112} BATTERY_QUERY_INFORMATION, *PBATTERY_QUERY_INFORMATION; 113 114typedef struct _BATTERY_INFORMATION { 115 ULONG Capabilities; 116 UCHAR Technology; 117 UCHAR Reserved[3]; 118 UCHAR Chemistry[4]; 119 ULONG DesignedCapacity; 120 ULONG FullChargedCapacity; 121 ULONG DefaultAlert1; 122 ULONG DefaultAlert2; 123 ULONG CriticalBias; 124 ULONG CycleCount; 125} BATTERY_INFORMATION, *PBATTERY_INFORMATION; 126 127typedef struct _BATTERY_MANUFACTURE_DATE { 128 UCHAR Day; 129 UCHAR Month; 130 USHORT Year; 131} BATTERY_MANUFACTURE_DATE, *PBATTERY_MANUFACTURE_DATE; 132 133typedef enum _BATTERY_SET_INFORMATION_LEVEL { 134 BatteryCriticalBias = 0, 135 BatteryCharge, 136 BatteryDischarge 137} BATTERY_SET_INFORMATION_LEVEL; 138 139typedef struct _BATTERY_SET_INFORMATION { 140 ULONG BatteryTag; 141 BATTERY_SET_INFORMATION_LEVEL InformationLevel; 142 UCHAR Buffer[1]; 143} BATTERY_SET_INFORMATION, *PBATTERY_SET_INFORMATION; 144 145typedef struct _BATTERY_WAIT_STATUS { 146 ULONG BatteryTag; 147 ULONG Timeout; 148 ULONG PowerState; 149 ULONG LowCapacity; 150 ULONG HighCapacity; 151} BATTERY_WAIT_STATUS, *PBATTERY_WAIT_STATUS; 152 153typedef struct _BATTERY_STATUS { 154 ULONG PowerState; 155 ULONG Capacity; 156 ULONG Voltage; 157 LONG Rate; 158} BATTERY_STATUS, *PBATTERY_STATUS; 159 160#ifndef _WINDOWS_H 161 162/* BATTERY_MINIPORT_INFO.XxxVersion */ 163#define BATTERY_CLASS_MAJOR_VERSION 0x0001 164#define BATTERY_CLASS_MINOR_VERSION 0x0000 165 166_Function_class_(BCLASS_QUERY_TAG_CALLBACK) 167_IRQL_requires_same_ 168_IRQL_requires_max_(PASSIVE_LEVEL) 169_Check_return_ 170typedef NTSTATUS 171(NTAPI BCLASS_QUERY_TAG_CALLBACK)( 172 _In_ PVOID Context, 173 _Out_ PULONG BatteryTag); 174typedef BCLASS_QUERY_TAG_CALLBACK *PBCLASS_QUERY_TAG_CALLBACK; 175 176_Function_class_(BCLASS_QUERY_INFORMATION_CALLBACK) 177_IRQL_requires_same_ 178_IRQL_requires_max_(PASSIVE_LEVEL) 179_Check_return_ 180typedef NTSTATUS 181(NTAPI BCLASS_QUERY_INFORMATION_CALLBACK)( 182 _In_ PVOID Context, 183 _In_ ULONG BatteryTag, 184 _In_ BATTERY_QUERY_INFORMATION_LEVEL Level, 185 _In_ LONG AtRate, 186 _Out_writes_bytes_to_(BufferLength, *ReturnedLength) PVOID Buffer, 187 _In_ ULONG BufferLength, 188 _Out_ PULONG ReturnedLength); 189typedef BCLASS_QUERY_INFORMATION_CALLBACK *PBCLASS_QUERY_INFORMATION_CALLBACK; 190 191_Function_class_(BCLASS_QUERY_STATUS_CALLBACK) 192_IRQL_requires_same_ 193_IRQL_requires_max_(PASSIVE_LEVEL) 194_Check_return_ 195typedef NTSTATUS 196(NTAPI BCLASS_QUERY_STATUS_CALLBACK)( 197 _In_ PVOID Context, 198 _In_ ULONG BatteryTag, 199 _Out_ PBATTERY_STATUS BatteryStatus); 200typedef BCLASS_QUERY_STATUS_CALLBACK *PBCLASS_QUERY_STATUS_CALLBACK; 201 202typedef struct _BATTERY_NOTIFY { 203 ULONG PowerState; 204 ULONG LowCapacity; 205 ULONG HighCapacity; 206} BATTERY_NOTIFY, *PBATTERY_NOTIFY; 207 208_Function_class_(BCLASS_SET_STATUS_NOTIFY_CALLBACK) 209_IRQL_requires_same_ 210_IRQL_requires_max_(PASSIVE_LEVEL) 211_Check_return_ 212typedef NTSTATUS 213(NTAPI BCLASS_SET_STATUS_NOTIFY_CALLBACK)( 214 _In_ PVOID Context, 215 _In_ ULONG BatteryTag, 216 _In_ PBATTERY_NOTIFY BatteryNotify); 217typedef BCLASS_SET_STATUS_NOTIFY_CALLBACK *PBCLASS_SET_STATUS_NOTIFY_CALLBACK; 218 219_Function_class_(BCLASS_SET_INFORMATION_CALLBACK) 220_IRQL_requires_same_ 221_IRQL_requires_max_(PASSIVE_LEVEL) 222_Check_return_ 223typedef NTSTATUS 224(NTAPI BCLASS_SET_INFORMATION_CALLBACK)( 225 _In_ PVOID Context, 226 _In_ ULONG BatteryTag, 227 _In_ BATTERY_SET_INFORMATION_LEVEL Level, 228 _In_opt_ PVOID Buffer); 229typedef BCLASS_SET_INFORMATION_CALLBACK *PBCLASS_SET_INFORMATION_CALLBACK; 230 231_Function_class_(BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK) 232_IRQL_requires_same_ 233_IRQL_requires_max_(PASSIVE_LEVEL) 234_Check_return_ 235typedef NTSTATUS 236(NTAPI BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK)( 237 _In_ PVOID Context); 238typedef BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK *PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK; 239 240typedef PBCLASS_QUERY_TAG_CALLBACK BCLASS_QUERY_TAG; 241typedef PBCLASS_QUERY_INFORMATION_CALLBACK BCLASS_QUERY_INFORMATION; 242typedef PBCLASS_QUERY_STATUS_CALLBACK BCLASS_QUERY_STATUS; 243typedef PBCLASS_SET_STATUS_NOTIFY_CALLBACK BCLASS_SET_STATUS_NOTIFY; 244typedef PBCLASS_SET_INFORMATION_CALLBACK BCLASS_SET_INFORMATION; 245typedef PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK BCLASS_DISABLE_STATUS_NOTIFY; 246 247typedef struct _BATTERY_MINIPORT_INFO { 248 USHORT MajorVersion; 249 USHORT MinorVersion; 250 PVOID Context; 251 BCLASS_QUERY_TAG QueryTag; 252 BCLASS_QUERY_INFORMATION QueryInformation; 253 BCLASS_SET_INFORMATION SetInformation; 254 BCLASS_QUERY_STATUS QueryStatus; 255 BCLASS_SET_STATUS_NOTIFY SetStatusNotify; 256 BCLASS_DISABLE_STATUS_NOTIFY DisableStatusNotify; 257 PDEVICE_OBJECT Pdo; 258 PUNICODE_STRING DeviceName; 259} BATTERY_MINIPORT_INFO, *PBATTERY_MINIPORT_INFO; 260 261#if (NTDDI_VERSION >= NTDDI_WINXP) 262 263typedef struct _BATTERY_WMI_STATUS { 264 ULONG Tag; 265 ULONG RemainingCapacity; 266 LONG ChargeRate; 267 LONG DischargeRate; 268 ULONG Voltage; 269 BOOLEAN PowerOnline; 270 BOOLEAN Charging; 271 BOOLEAN Discharging; 272 BOOLEAN Critical; 273} BATTERY_WMI_STATUS, *PBATTERY_WMI_STATUS; 274 275typedef struct _BATTERY_WMI_RUNTIME { 276 ULONG Tag; 277 ULONG EstimatedRuntime; 278} BATTERY_WMI_RUNTIME, *PBATTERY_WMI_RUNTIME; 279 280typedef struct _BATTERY_WMI_TEMPERATURE { 281 ULONG Tag; 282 ULONG Temperature; 283} BATTERY_WMI_TEMPERATURE, *PBATTERY_WMI_TEMPERATURE; 284 285typedef struct _BATTERY_WMI_FULL_CHARGED_CAPACITY { 286 ULONG Tag; 287 ULONG FullChargedCapacity; 288} BATTERY_WMI_FULL_CHARGED_CAPACITY, *PBATTERY_WMI_FULL_CHARGED_CAPACITY; 289 290typedef struct _BATTERY_WMI_CYCLE_COUNT { 291 ULONG Tag; 292 ULONG CycleCount; 293} BATTERY_WMI_CYCLE_COUNT, *PBATTERY_WMI_CYCLE_COUNT; 294 295typedef struct _BATTERY_WMI_STATIC_DATA { 296 ULONG Tag; 297 WCHAR ManufactureDate[25]; 298 BATTERY_REPORTING_SCALE Granularity [4]; 299 ULONG Capabilities; 300 UCHAR Technology; 301 ULONG Chemistry; 302 ULONG DesignedCapacity; 303 ULONG DefaultAlert1; 304 ULONG DefaultAlert2; 305 ULONG CriticalBias; 306 WCHAR Strings[1]; 307} BATTERY_WMI_STATIC_DATA, *PBATTERY_WMI_STATIC_DATA; 308 309typedef struct _BATTERY_WMI_STATUS_CHANGE { 310 ULONG Tag; 311 BOOLEAN PowerOnline; 312 BOOLEAN Charging; 313 BOOLEAN Discharging; 314 BOOLEAN Critical; 315} BATTERY_WMI_STATUS_CHANGE, *PBATTERY_WMI_STATUS_CHANGE; 316 317typedef struct _BATTERY_TAG_CHANGE { 318 ULONG Tag; 319} BATTERY_TAG_CHANGE, *PBATTERY_TAG_CHANGE; 320 321#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 322 323#if defined(_BATTERYCLASS_) 324#define BCLASSAPI 325#else 326#define BCLASSAPI DECLSPEC_IMPORT 327#endif 328 329_IRQL_requires_max_(PASSIVE_LEVEL) 330_Check_return_ 331BCLASSAPI 332NTSTATUS 333NTAPI 334BatteryClassInitializeDevice( 335 _In_ PBATTERY_MINIPORT_INFO MiniportInfo, 336 _Out_ PVOID *ClassData); 337 338_IRQL_requires_max_(PASSIVE_LEVEL) 339_Check_return_ 340BCLASSAPI 341NTSTATUS 342NTAPI 343BatteryClassIoctl( 344 _In_ PVOID ClassData, 345 _Inout_ PIRP Irp); 346 347_IRQL_requires_max_(DISPATCH_LEVEL) 348BCLASSAPI 349NTSTATUS 350NTAPI 351BatteryClassStatusNotify( 352 _In_ PVOID ClassData); 353 354#if (NTDDI_VERSION >= NTDDI_WINXP) 355 356_IRQL_requires_max_(PASSIVE_LEVEL) 357_Check_return_ 358BCLASSAPI 359NTSTATUS 360NTAPI 361BatteryClassQueryWmiDataBlock( 362 _In_ PVOID ClassData, 363 _Inout_ PDEVICE_OBJECT DeviceObject, 364 _Inout_ PIRP Irp, 365 _In_ ULONG GuidIndex, 366 _Out_writes_(1) PULONG InstanceLengthArray, 367 _In_ ULONG OutBufferSize, 368 _Out_writes_bytes_opt_(OutBufferSize) PUCHAR Buffer); 369 370_IRQL_requires_max_(PASSIVE_LEVEL) 371_Check_return_ 372BCLASSAPI 373NTSTATUS 374NTAPI 375BatteryClassSystemControl( 376 _In_ PVOID ClassData, 377 _In_ PVOID WmiLibContext, /* PWMILIB_CONTEXT */ 378 _In_ PDEVICE_OBJECT DeviceObject, 379 _Inout_ PIRP Irp, 380 _Out_ PVOID Disposition); /* PSYSCTL_IRP_DISPOSITION */ 381 382#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 383 384_IRQL_requires_max_(PASSIVE_LEVEL) 385BCLASSAPI 386NTSTATUS 387NTAPI 388BatteryClassUnload( 389 _In_ PVOID ClassData); 390 391#endif /* _WINDOWS_H */ 392 393#endif /* _BATCLASS_ */ 394 395#ifdef __cplusplus 396} 397#endif