1008{
1011 ULONG QueryLength = 0;
1012 ULONG RemainingTime = 0;
1015 WCHAR InfoBuffer[256];
1016 WCHAR TempBuffer[256];
1018 ULONG RemainingCapacity;
1023 DbgPrint(
"CmBattQueryInformation - Tag (%d) Device %d, Informationlevel %d\n",
1026 InfoLevel);
1027
1028
1031
1032
1033 switch (InfoLevel)
1034 {
1036
1039 break;
1040
1042
1043
1048 QueryData = BatteryReportingScale;
1050 break;
1051
1053
1054
1056 {
1057
1059
1060
1063
1064
1066
1067
1069
1070
1073 {
1074
1077 DbgPrint(
"CmBattQueryInformation: Can't calculate EstimatedTime.\n");
1078
1079
1082 {
1083
1086 DbgPrint(
"---------------------- PresentRate = BATTERY_UNKNOWN_RATE\n");
1087 }
1088
1089
1091 {
1092
1095 DbgPrint(
"---------------------- RemainingCapacity = BATTERY_UNKNOWN_CAPACITY\n");
1096 }
1097 }
1098 else
1099 {
1100
1101 if (RemainingCapacity > 0x123456)
1102 {
1103
1105 DbgPrint(
"CmBattQueryInformation: Data Overflow in calculating Remaining Capacity.\n");
1106 }
1107 else
1108 {
1109
1110 RemainingTime = (RemainingCapacity * 3600) / -Rate;
1111 }
1112 }
1113 }
1114
1115
1116 QueryData = &RemainingTime;
1117 QueryLength =
sizeof(
ULONG);
1118 break;
1119
1121
1122
1124
1125
1126 InfoString.
Buffer = InfoBuffer;
1129
1130
1131 QueryData = InfoString.
Buffer;
1132 QueryLength = InfoString.
Length;
1133 break;
1134
1137
1138
1140 break;
1141
1143
1144
1146
1147
1148 InfoString.
Buffer = InfoBuffer;
1151
1152
1153 QueryData = InfoString.
Buffer;
1154 QueryLength = InfoString.
Length;
1155 break;
1156
1158
1159
1161
1162
1163 InfoString.
Buffer = InfoBuffer;
1166
1167
1168 TempString2.
Buffer = TempBuffer;
1170
1171
1173 {
1174
1176
1177
1180 }
1181
1182
1184
1185
1188
1189
1190 QueryData = InfoString.
Buffer;
1191 QueryLength = InfoString.
Length;
1192 break;
1193
1194 default:
1195
1196
1198 break;
1199 }
1200
1201
1204
1205
1207
1208
1210}
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG AtRate
struct _BATTERY_INFORMATION BATTERY_INFORMATION
@ BatteryGranularityInformation
#define BATTERY_UNKNOWN_RATE
NTSTATUS NTAPI CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, IN ULONG Tag)
NTSTATUS NTAPI CmBattVerifyStaticInfo(PCMBATT_DEVICE_EXTENSION DeviceExtension, ULONG BatteryTag)
#define CMBATT_GENERIC_INFO
#define ACPI_BATT_STAT_DISCHARG
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define KeQueryInterruptTime()
#define STATUS_BUFFER_TOO_SMALL
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength