home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / batclass.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  7.7 KB  |  309 lines

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